IAM 中的跨帳戶資源存取 - AWS Identity and Access Management

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

IAM 中的跨帳戶資源存取

對於某些 AWS 服務,您可以使用 IAM 授予跨帳戶存取資源的許可。若要執行此操作,您可將直接將資源政策連接到您要分享的資源,或將角色用作代理。

若要直接分享資源,您要分享的資源必須支援資源型政策。與角色的身分型政策不同,資源型政策指定誰 (主體) 可以存取該資源。

如果想要存取不支援資源型政策之其他帳戶中的資源,則請將角色用作代理。

如需有關這些政策類型之間差異的詳細資訊,請參閱 以身分為基礎和以資源為基礎的政策

注意

IAM 角色和資源型政策只會在單一分割內跨帳戶委派存取許可。例如,您在標準 aws 分割區的美國西部 (加利佛尼亞北部) 中有一個帳戶。您在 aws-cn 分割區的中國也有一個帳戶。您不能使用中國帳戶中的資源型政策來允許標準 AWS 帳戶中的使用者存取權。

使用角色進行跨帳戶存取

並非所有 AWS 服務都支援資源型政策。對於這些服務,在向多個服務提供跨帳户存取權時,可以使用跨帳戶 IAM 角色集中管理許可。跨帳戶 IAM 角色是包含信任政策的 IAM 角色,該政策允許其他 AWS 帳戶中的 IAM 主體承擔該角色。簡而言之,您可以在一個 AWS 帳戶中建立一個角色,將特定許可委派給另一個 AWS 帳戶。

如需有關將政策連接至 IAM 身分的資訊,請參閱 管理 IAM 政策

注意

當主體切換到某個角色以暫時使用角色的許可時,他們會放棄其原始許可,並接受指派給他們假設之角色的許可。

讓我們看一下整體流程,因為其適用於需要存取客戶帳戶的 APN 合作夥伴軟體。

  1. 客戶在自己的帳戶中使用政策建立 IAM 角色,以允許存取 APN 合作夥伴所需的 Amazon S3 資源。在此範例中,角色名稱為 APNPartner

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::bucket-name" ] } ] }
  2. 然後,客戶透過在 APNPartner 角色的信任政策中提供 APN 合作夥伴的 AWS 帳戶 ID,指定可由合作夥伴的 AWS 帳戶擔任的角色。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::APN-account-ID:role/APN-user-name" }, "Action": "sts:AssumeRole" } ] }
  3. 客戶將角色的 Amazon Resource Name (ARN) 提供給 APN 合作夥伴。ARN 是角色的完整名稱。

    arn:aws:iam::APN-ACCOUNT-ID:role/APNPartner
    注意

    建議在多租戶情況下使用外部 ID。如需詳細資訊,請參閱將 AWS 資源的存取權授予第三方時如何使用外部 ID。

  4. 當 APN 合作夥伴的軟體需要存取客戶的帳戶時,該軟體會使用客戶帳戶中角色的 ARN 呼叫 AWS Security Token Service 中的 AssumeRole API。STS 傳回一個暫時 AWS 憑證,允許軟體完成其工作。

如需使用角色授予跨帳户存取權的另一個範例,請參閱 在您擁有的另一個 AWS 帳戶 中提供 IAM 使用者存取權。您也可以參照 IAM 教學課程:使用 IAM 角色將存取許可委派給不同 AWS 帳戶

使用資源型政策的跨帳户存取權

帳戶使用資源型政策透過另一個帳戶存取資源時,主體仍可在受信任帳戶中運作,不需為了接受角色許可而放棄其許可。換言之,主體在存取信任帳戶中的資源時,仍可繼續存取受信任帳戶中的資源。這對於像複製資訊到其他帳戶中的共同資源,或從其複製而來的任務,非常受用。

在以資源為基礎的政策中,您可以指定的主體包括帳戶、IAM 使用者、聯合身分使用者、IAM 角色、擔任的角色工作階段或 AWS 服務。如需詳細資訊,請參閱指定主體

若要了解在您信任區域外帳戶 (信任組織或帳戶) 中的主體是否可擔任您的角色,請參閱識別與外部實體共用的資源

下列清單包含的一些 AWS 服務支援以資源為基礎的政策。如需不斷增長的 AWS 服務 (支援連接許可政策至資源而非主體) 數量的完整清單,請參閱AWS 與 IAM 搭配使用的服務,並且尋找以資源為基礎欄中為的服務。

  • Amazon S3 儲存貯體 – 政策連接到儲存貯體,但政策控制項同時存取儲存貯體和其中的物件。如需詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南中的存取控制 。在某些情況下,最好使用角色以跨帳戶存取 Amazon S3。如需詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南中的範例演練

  • Amazon Simple Notification Service (Amazon SNS) 主題 – 如需詳細資訊,請前往《Amazon Simple Notification Service 開發人員指南》中的 Amazon SNS 存取控制的範例案例

  • Amazon Simple Queue Service (Amazon SQS) 佇列 – 如需詳細資訊,請前往《Amazon Simple Queue Service 開發人員指南》中的附錄:存取原則語言

在資源型政策中委派 AWS 許可

如果資源將許可授予您帳戶中的主體,您可以將這些許可委派給特定的 IAM 身分。身分是您帳戶中的使用者、使用者群組或角色。您可以將政策連接至身分以委派許可。您授予的許可上限為擁有資源的帳戶所允許的最大許可。

重要

在跨帳戶存取中,主體在身分型政策資源型政策中需要 Allow

假設以資源為基礎的政策允許您帳戶中的所有主體具有資源的完整管理存取權。然後,您可以將完整存取、唯讀存取或任何其他局部存取,委派給 AWS 帳戶中的主體。或者,如果以資源為基礎的政策只允許列出許可,則您只能委派列出存取權。如果您嘗試委派比您的帳戶還多的許可,則您的主體仍然只有列出存取權。

如需有關如何做出這些決策的詳細資訊,請參閱確定帳戶內是否允許或拒絕請求

注意

IAM 角色和資源型政策只會在單一分割內跨帳戶委派存取許可。例如,您無法在標準 aws 分割區的帳戶和 aws-cn 分割區的帳戶之間,新增跨帳戶存取權。

例如,假設您管理 AccountAAccountB。在 AccountA 中,您具有名為 BucketA 的 Amazon S3 儲存貯體。


                針對 Amazon S3 儲存貯體建立的資源型政策可為 AccountA 提供 AccountB 許可。
  1. 您可以將資源型政策連接至 BucketA,以允許 AccountB 中的所有主體完整存取儲存貯體中的物件。他們可以建立、讀取或刪除該儲存貯體中的任何物件。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "PrincipalAccess", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::AccountB:root"}, "Action": "s3:*", "Resource": "arn:aws:s3:::BucketA/*" } ] }

    透過將 AccountB 命名為資源型政策中的主體,AccountA 允許 AccountB 完整存取 BucketA。因此,AccountB 獲得授權可對 BucketA 執行任何動作,而 AccountB 管理員可以將存取權委派給它在 AccountB 的使用者。

    AccountB 根使用者具有授予給帳戶的所有許可。因此,根使用者具有 BucketA 的完整存取權。

  2. 在 AccountB 中,將政策連接至名為 User2 的 IAM 使用者。該政策允許使用者唯讀存取 BucketA 中的物件。這表示 User2 可以檢視物件,但無法建立、編輯或刪除物件。

    { "Version": "2012-10-17", "Statement": [ { "Effect" : "Allow", "Action" : [ "s3:Get*", "s3:List*" ], "Resource" : "arn:aws:s3:::BucketA/*" } ] }

    AccountB 可委派的最大存取層級是授予帳戶的存取層級。在此情況下,資源型政策將完整存取授予 AccountB,但只將唯讀存取授予 User2。

    AccountB 管理員不提供存取權給 User1。依預設,除了明確授予的許可外,使用者不具備任何許可,因此 User1 無權存取 BucketA。

IAM 會在主體提出請求時評估主體的許可。如果您使用萬用字元 (*) 來允許使用者完整存取您的資源,則主體可以存取您的 AWS 帳戶所能存取的任何資源。即使對於您在建立使用者政策後新增或取得存取權的資源,也是如此。

在上述範例中,如果 AccountB 已將政策連接至 User2,而此政策允許完整存取所有帳戶中的所有資源,則 User2 可自動存取 AccountB 能夠存取的任何資源。這包括 BucketA 存取,以及 AccountA 中資源型政策所授予對任何其他資源的存取。

如需有關角色的複雜使用詳細資訊,例如授予應用程式和服務存取權,請參閱 常見的角色方案:使用者、應用程式和服務

重要

只將存取權給予您信任的實體,並提供最低必要存取權。當受信任的實體是另一個 AWS 帳戶時,可准許任何 IAM 主體存取您的資源。信任的 AWS 帳戶只能委派存取權至已獲授權的範圍,它無法委派比帳戶本身被授予的更多存取權。

如需有關許可、政策以及用於撰寫政策的許可政策語言的詳細資訊,請參閱AWS 資源的存取管理