將 AWS 資源的存取權授予第三方時如何使用外部 ID。 - AWS Identity and Access Management

將 AWS 資源的存取權授予第三方時如何使用外部 ID。

有時,您需要向第三方提供對您的 AWS 資源的存取權 (提供存取權)。此方案的一個重要層面是外部 ID,外部 ID 是一條可選資訊,您可在 IAM 角色信任政策中使用該資訊來指定誰能擔任該角色。

重要

AWS 不會將該外部 ID 做為秘密資訊。您在 AWS 中建立存取金鑰對或密碼這類秘密資訊後,便無法再次查看它們。有權查看角色的任何人都可以看到該角色的外部 ID。

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

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

如果要在您取得角色時提供外部 ID,請使用 AWS CLI 或 AWS API 來取得該角色。如需詳細資訊,請參閱 STS AssumeRole API 操作,或是 STS assume-role CLI 操作。

例如,假設您決定聘請一家名為 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 AssumeRole API 以取得暫時安全憑證。接著,Example Corp 成員可以使用這些憑證來存取您的帳戶中的 AWS 資源。

注意

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

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

  1. 您聘請了 Example Corp,此公司將為您建立獨有的客戶識別碼。此公司提供您獨有的客戶 ID 及其 AWS 帳戶。您需要此資訊來在下一個步驟中建立 IAM 角色。

    注意

    Example Corp 可使用其想用於 ExternalId 的任何字串值,只要該值對於每個客戶來說都是獨有的。該值可以是客戶帳戶,甚至可以是一個隨機字串,只要沒有兩個客戶擁有相同的值即可。該值不是「機密」。Example Corp 必須為每個客戶提供 ExternalId 值。關鍵在於,該值必須由 Example Corp 而由其客戶產生。

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

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

  4. 建立完角色後,為 Example Corp 提供該角色的 Amazon 資源名稱 (ARN) (ARN)。

  5. 當 Example Corp 需要存取您的 AWS 資源時,該公司的某人可呼叫 AWS sts:AssumeRole API。此呼叫包括要擔任的角色的 ARN 和與其客戶 ID 對應的 ExternalId 參數。

如果發出請求的人使用的是 Example Corp 的 AWS 帳戶,並且角色 ARN 和外部 ID 是正確的,則請求成功。然後,該請求提供臨時安全性憑證,Example Corp 可使用這些憑證來存取您的角色允許存取的 AWS 資源。

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

為什麼要使用外部 ID?

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

我何時應使用外部 ID?

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

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

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

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

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