訪問由第三方 AWS 帳戶 擁有 - AWS Identity and Access Management

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

訪問由第三方 AWS 帳戶 擁有

當第三方需要您組織 AWS 資源的存取權時,您可以使用角色將存取權委派給他們。例如,第三方可能提供一種用於管理您的 AWS 資源之服務。使用IAM角色時,您可以授予這些第三方存取您的 AWS 資源,而無需共用您的 AWS 安全登入資料。相反地,第三方 AWS 可以透過假設您在 AWS 帳戶. 若要瞭解您信任區域之外的帳戶中的主體 (受信任的組織或帳戶) 是否有權承擔您的角色,請參閱什麼是 IAM Access Analyzer? 。

為了建立他們可以代入的角色,第三方必須為您提供以下資訊:

  • 第三方的 AWS 帳戶 識別碼。為角色定義信任政策時,可將其 AWS 帳戶 ID 指定為主體。

  • 唯一與角色關聯的外部 ID。外部 ID 可以是只有您和第三方知道的任何識別碼。例如,您可以使用您與該第三方之間的發票 ID,但不要使用能被猜到的內容,例如第三方的電話號碼。為角色定義信任政策時,必須指定該 ID。第三方在代入角色時必須提供該 ID。

  • 協力廠商使用您的 AWS 資源所需的權限。定義角色的許可政策時,必須指定這些許可。這個政策定義了他們可以執行哪些操作以及可以存取哪些資源。

建立角色後,您必須向第三方提供角色的 Amazon 資源名稱 (ARN)。他們需要您的ARN角色才能擔任該角色。

重要

當您授與第三方存取您的 AWS 資源時,他們可以存取您在策略中指定的任何資源。他們使用的資源費用將由您支付。請確保適當地限制他們對資源的使用。

第三IDs方存取的外部

外部 ID 允許假定角色的用戶聲明他們正在操作的情況。它還為帳戶擁有者提供一種方法來允許僅在特定情況下擔任該角色。外部 ID 的主要功能是解決並防止 混淆代理人問題

重要

AWS 不會將外部 ID 視為密碼。在中建立密碼 (例如存取 key pair 或密碼) 之後 AWS,您將無法再次檢視它們。有權查看角色的任何人都可以看到該角色的外部 ID。

我何時應使用外部 ID?

在以下情況下使用外部 ID:

  • 您是 AWS 帳戶 擁有者,並且已為第三方設定角色,該第三方除了可存取您的其他人 AWS 帳戶 之外的角色。您應要求第三方提供其在擔任您的角色時包含的外部 ID。然後,在您角色的信任政策中檢查該外部 ID。這樣做可確保外部方僅在代表您執行操作時才能擔任您的角色。

  • 在前述情況下,您代表不同客戶 (如 Example Corp) 擔任角色。您應該為每個客戶分配一個唯一的外部 ID 並指導他們將該外部 ID 加入到其角色的信任政策。然後,您必須確保在代入角色的請求中始終包含正確的外部 ID。

    您可能已為您的每個客戶提供一個獨有識別碼,而且此獨有 ID 足以用作外部 ID。該外部 ID 不是您要明確建立或分別追蹤所需的特殊值 (僅用於此目的)。

    您應始終在AssumeRoleAPI呼叫中指定外部 ID。此外,當客戶為您提供角色時ARN,請測試您是否可以在具有和不具有正確外部 ID 的情況下擔任該角色。如果您可以假設角色沒有正確的外部 ID,請不要將客戶的角色儲存ARN在您的系統中。等待該客戶將角色信任政策更新為要求提供正確的外部 ID。這樣一來,您協助您的客戶執行了正確的操作,並幫助您和客戶避免了混淆代理人問題。

使用外部 ID 的範例案例

例如,假設您決定聘請名為 Example Corp 的第三方公司來監控您的 AWS 帳戶 並幫助優化成本。為了追蹤您的每日支出,Example Corp 需要存取您的 AWS 資源。Example Corp 也可監控其他客戶的許多其他 AWS 帳戶。

請勿將 Example Corp 存取權授予您 AWS 帳戶中的IAM使用者及其長期憑證。而是使用IAM角色及其臨時安全登入資料。IAM角色提供了一種機制,可讓第三方存取您的 AWS 資源,而不需要共用長期認證 (例如IAM使用者存取金鑰)。

您可以使用IAM角色在您 AWS 帳戶 和 Example Corp 帳戶之間建立信任關係。建立此關係之後,Example Corp 帳戶的成員可以呼叫以取 AWS Security Token Service AssumeRoleAPI得臨時安全登入資料。然後,Example Corp 成員可以使用認證來存取您帳戶中的 AWS 資源。

注意

如需有關可呼叫以取得暫時安全性登入資料之 AssumeRole 及其他 AWS API作業的詳細資訊,請參閱請求暫時性安全憑證

以下是此方案的更多詳細資訊:

  1. 您聘請了 Example Corp,此公司將為您建立獨有的客戶識別碼。他們為您提供了這個唯一的客戶 ID 和他們的 AWS 帳戶 號碼。您需要這些資訊,才能在下一個步驟中建立IAM角色。

    注意

    實施例公司可以使用他們想要的任何字符串值 ExternalId,只要它是唯一的每個客戶。該值可以是客戶帳戶,甚至可以是一個隨機字串,只要沒有兩個客戶擁有相同的值即可。該值不是「機密」。實施例公司必須提供 ExternalId 價值給每個客戶。關鍵在於,該值必須由 Example Corp 而由其客戶產生,以確保每個外部 ID 都是唯一的。

  2. 您可以登入 AWS 並建立一個IAM角色,讓範例公司存取您的資源。與任何IAM角色一樣,角色具有兩個原則:權限原則和信任原則。角色的信任政策指定擔任該角色的對象。在我們的範例案例中,原則會指定範例公司的 AWS 帳戶 數目Principal。這允許來自此帳戶的身分擔任該角色。此外,您新增 Condition 元素到信任政策。此 Condition 測試 ExternalId 內容索引鍵,以確保它與 Example Corp 的獨有客戶 ID 一致。例如:

    "Principal": {"AWS": "Example Corp's AWS 帳戶 ID"}, "Condition": {"StringEquals": {"sts:ExternalId": "Unique ID Assigned by Example Corp"}}
  3. 該角色的許可政策指定該角色允許某個人執行哪些操作。例如,您可以指定該角色只允許某人管理您的 Amazon EC2 和 Amazon RDS 資源,而不允許管理您的IAM使用者或群組。在我們的範例方案中,您使用許可政策為 Example Corp 授予帳戶中的所有資源的唯讀存取許可。

  4. 建立角色之後,您將角色的 Amazon 資源名稱 (ARN) 提供給範例公司

  5. 當 Example Corp 需要存取您的 AWS 資源時,公司的某人會呼叫 AWS sts:AssumeRoleAPI. 呼叫包括要承擔ARN的角色,以及與其客戶 ID 對應的 ExternalId 參數。

如果請求來自使用 Example Corp 的某個人 AWS 帳戶,並且角色ARN和外部 ID 是正確的,則請求成功。然後,它會提供 Example Corp 可用來存取角色允許的 AWS 資源的臨時安全登入資料。

換言之,當角色政策包括外部 ID 時,任何需要擔任該角色的人都必須是該角色中的主體,還必須包括正確的外部 ID。

外部的關鍵點 IDs

  • 在您支援具有不同 AWS 帳戶的多重租用戶環境中,我們建議您每 AWS 帳戶個使用一個外部 ID。此 ID 應該是由第三方產生的隨機字串。

  • 如要請求第三方在取得角色時提供外部 ID,請使用您選擇的外部 ID 來更新角色的信任政策。

  • 若要在您擔任角色時提供外部 ID,請使用 AWS CLI 或 AWS API來承擔該角色。如需詳細資訊,請參閱STSAssumeRoleAPI作業或STS假設角色作CLI業。

其他資源

下列資源可協助您進一步瞭解如何提供第三方 AWS 帳戶 擁有的存取權。