跨帳戶政策評估邏輯 - AWS Identity and Access Management

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

跨帳戶政策評估邏輯

您可以允許一個帳戶中的主體存取第二個帳戶中的資源。這稱為跨帳戶存取。當您允許跨帳戶存取時,主體所在的帳戶稱為受信任帳戶。資源所在的帳戶是信任帳戶。

若要允許跨帳戶存取,請將以資源為基礎的政策連接至您要共用的資源。您也必須將身分型政策連接至在請求中扮演主體的身分。信任帳戶中的資源型政策,必須指定具有資源存取權的受信任帳戶主體。您可以指定整個帳戶或其 IAM 使用者、聯合身分使用者、IAM 角色或擔任的角色工作階段。您也可以將 AWS 服務指定為主體。如需詳細資訊,請參閱 指定主體

主體的以身分為基礎的政策,必須允許要求存取信任服務中的資源。作法是指定資源的 ARN,或允許存取所有資源 (*)。

在 IAM 中,您可以將以資源為基礎的政策連接至 IAM 角色,以允許其他帳戶中的主體擔任該角色。角色的以資源為基礎的政策稱為角色信任政策。擔任該角色之後,允許的主體可以使用產生的臨時憑證,以存取您帳戶中的多個資源。此存取是在角色的以身分為基礎的許可政策中定義。若要了解使用角色允許跨帳戶存取,與使用其他以資源為基礎的政策允許跨帳戶存取有何不同,請參閱 IAM 中的跨帳戶資源存取

重要

其他服務會影響政策評估邏輯。例如, AWS Organizations 支援可套用至主體一或多個帳戶的服務控制原則。 AWS Resource Access Manager 支援政策片段,這些片段可控制允許主體對與其共用的資源執行哪些動作。

決定是否允許跨帳戶請求

對於跨帳戶請求,受信任 AccountA 中的請求者必須具有以身分為基礎的政策。該政策必須允許他們對信任 AccountB 中的資源提出請求。此外,AccountB 中以資源為基礎的政策,必須允許 AccountA 中的請求者存取資源。

當您提出跨帳戶請求時, AWS 會執行兩項評估。 AWS 評估信任帳戶和受信任帳戶中的請求。如需有關如何在單一帳戶內評估請求的詳細資訊,請參閱 決定是否允許或拒絕帳戶中的請求。只有當兩項評估都傳回 Allow 決定時,才允許此請求。

跨帳戶評估
  1. 當一個帳戶中的主體請求存取另一個帳戶中的資源時,就稱為跨帳戶請求。

  2. 提出請求的主體存在於受信任帳戶中 (AccountA)。 AWS 評估此帳戶時會檢查以身分為基礎的政策,以及可限制以身分為基礎的政策的任何政策。如需詳細資訊,請參閱 運用單一帳戶評估政策

  3. 所請求的資源存在於信任帳戶中 (AccountB)。 AWS 評估此帳戶時會檢查連接至所請求資源的以資源為基礎的政策,以及可限制以資源為基礎的政策的任何政策。如需詳細資訊,請參閱 運用單一帳戶評估政策

  4. AWS 只有在兩個帳號策略評估都允許要求時,才允許請求。

跨帳戶政策評估範例

下列範例示範一個帳戶中的使用者由第二個帳戶中以資源為基礎的政策授予許可的案例。

假設 Carlos 是開發人員,而且他在帳戶 111111111111 中是名為 carlossalazar 的 IAM 使用者。他想將檔案儲存至帳戶 222222222222 中的 Production-logs Amazon S3 儲存貯體。

另外,也假設以下政策已連接到 carlossalazar IAM 使用者。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowS3ListRead", "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "*" }, { "Sid": "AllowS3ProductionObjectActions", "Effect": "Allow", "Action": "s3:*Object*", "Resource": "arn:aws:s3:::Production/*" }, { "Sid": "DenyS3Logs", "Effect": "Deny", "Action": "s3:*", "Resource": [ "arn:aws:s3:::*log*", "arn:aws:s3:::*log*/*" ] } ] }

此政策中的 AllowS3ListRead 陳述式允許 Carlos 檢視 Amazon S3 中所有儲存貯體的清單。AllowS3ProductionObjectActions 陳述式允許 Carlos 完整存取 Production 儲存貯體中的物件。DenyS3Logs 陳述式拒絕 Carlos 存取名稱中包含 log 的任何 S3 儲存貯體。也拒絕存取這些儲存貯體中的所有物件。

此外,以下以資源為基礎的政策 (稱為儲存貯體政策) 已連接至帳戶 222222222222 中的 Production 儲存貯體。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:PutObject*", "s3:ReplicateObject", "s3:RestoreObject" ], "Principal": { "AWS": "arn:aws:iam::111111111111:user/carlossalazar" }, "Resource": "arn:aws:s3:::Production/*" } ] }

此政策允許 carlossalazar 使用者存取 Production 儲存貯體中的物件。其可建立與編輯,但不能刪除儲存貯體中的物件。其無法管理儲存貯體本身。

當 Carlos 提出請求將檔案儲存到 Production-logs 儲存貯體時, AWS 會決定套用至請求的政策。在此情況下,連接至 carlossalazar 使用者的以身分為基礎的政策,是帳戶 111111111111 中唯一套用的政策。在帳戶 222222222222 中,沒有任何以資源為基礎的政策連接至 Production-logs 儲存貯體。 AWS 評估帳戶 111111111111 時會傳回 Deny 的決定。這是因為以身分為基礎的政策中的 DenyS3Logs 陳述式,明確拒絕存取任何日誌儲存貯體。如需有關如何在單一帳戶內評估請求的詳細資訊,請參閱 決定是否允許或拒絕帳戶中的請求

因為其中一個帳戶內明確拒絕請求,所以最終決定是拒絕請求。

對 Production-logs 儲存貯體的請求

假設 Carlos 然後意識到他的錯誤,並嘗試將文件保存到存儲Production桶。 AWS 首先檢查帳戶,111111111111以確定是否允許請求。只有以身分為基礎的原則適用,而且允許要求。 AWS 然後檢查帳戶222222222222。只有連接至 Production 儲存貯體的以資源為基礎的政策才會套用,並允許請求。因為這兩個帳戶都允許請求,所以最終決定是允許請求。

對 Production 儲存貯體的請求