存取第三方 AWS 帳戶 擁有的 - AWS Identity and Access Management

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

存取第三方 AWS 帳戶 擁有的

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

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

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

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

  • 第三方為使用您的 AWS 資源而請求獲得的許可。定義角色的許可政策時,必須指定這些許可。這個政策定義了他們可以執行哪些操作以及可以存取哪些資源。

建立完角色後,您必須向第三方提供該角色的 Amazon Resource Name (ARN)。他們需要使用您的角色的 ARN 來代入該角色。

重要

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

第三方存取的外部 ID

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

重要

AWS 不會將外部 ID 視為秘密。在您建立存取金鑰對或密碼等秘密之後 AWS,就無法再次檢視它們。有權查看角色的任何人都可以看到該角色的外部 ID。

我何時應使用外部 ID?

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

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

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

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

    您應始終在您的 AssumeRole API 呼叫中指定外部 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 AssumeRole API 來取得臨時安全登入資料。Example Corp 成員接著可以使用登入資料來存取您帳戶中 AWS 的資源。

注意

如需 AssumeRole 和其他您可以呼叫以取得臨時安全登入資料之 AWS API 操作的詳細資訊,請參閱 比較 AWS STS 憑證

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

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

    注意

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

  2. 您可以登入 AWS 並建立 IAM 角色,讓 Example Corp 存取您的 資源。與任何 IAM 角色類似,該角色具有兩個政策:許可政策和信任政策。角色的信任政策指定擔任該角色的對象。在我們的範例案例中,政策指定 Example Corp 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. 建立完角色後,為 Example Corp 提供該角色的 Amazon Resource Name (ARN) (ARN)。

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

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

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

外部 ID 的要點

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

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

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

  • ExternalId 值必須最少為 2 個字元,最多為 1,224 個字元。該值必須為英數字元,且不包含空格。也可以包含下列符號:加號 (+)、等號 (=)、逗號 (,)、句號 (.)、小老鼠 (@)、冒號 (:)、正斜線 (/) 和連字號 (-)。

其他資源

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