跨帳號資源存取 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. 然後,客戶透過在角色的信任原則中提供合作夥伴的 AWS 帳戶 ID,指定該APNPartner角色可由APN合作夥伴的 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 資源名稱 (ARN) 提供給APN合作夥伴。ARN是角色的完整名稱。

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

    建議在多租戶情況下使用外部 ID。如需詳細資訊,請參閱 訪問由第三方 AWS 帳戶 擁有

  4. 當合APN作夥伴的軟體需要存取客戶的帳戶時,軟體會呼叫客戶帳戶中的角色。AssumeRoleAPI AWS Security Token Service ARNSTS返回一個臨時 AWS 憑據,允許軟件完成其工作。

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

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

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

您可以在以資源為基礎的策略中指定的主參與者包括帳號、IAM使用者、同盟使用者、IAM角色、假設的角色工作階段或服務。 AWS 如需詳細資訊,請參閱指定主體

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

下列清單包含一些支援以資源為基礎之政策的 AWS 服務。如需支援將權限原則附加至資源而非主參與者之 AWS 服務的完整清單,請參閱AWS 與之合作的服務 IAM並尋找 [以資源為基礎] 欄中具有 [] 的服務。

以資源為基礎的政策以委派權 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 中資源型政策所授予對任何其他資源的存取。

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

重要

只將存取權給予您信任的實體,並提供最低必要存取權。每當受信任的實體是另一個 AWS 帳戶時,都可以授與任何IAM主體對您資源的存取權。受信任的 AWS 帳戶只能在授予存取權限的範圍內委派存取權;它無法委派比帳戶本身所授予的更多存取權限。

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