授與自我管理許可 - AWS CloudFormation

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

授與自我管理許可

本主題提供有關如何建立 IAM 服務角色, StackSets 以便跨帳戶部署和 AWS 區域 具有自我管理許可的指示。需要這些角色,才能在您用來管理堆疊集的帳戶與堆疊執行個體部署目的地帳戶之間建立信任關係。使用此許可模型, StackSets 可以部署到您有權建立 IAM 角色的任何 AWS 帳戶 權限。

若要使用服務管理的權限,啟用使用 AWS Organizations進行受信任存取。請參閱。

自我管理權限概觀

建立具有自我管理許可的堆疊集之前,您必須先在每個帳戶中建立 IAM 服務角色。

基本步驟為:

  1. 確定哪個 AWS 帳戶是管理員帳戶

    堆疊集合是在此管理員帳戶中建立。您在目標帳戶中建立屬於堆疊集的個別堆疊。

  2. 決定您要如何建構堆疊集的許可。

    最簡單 (也是最寬鬆) 的許可組態,是賦予管理員帳戶中所有使用者和群組建立和更新由該帳戶管理之所有堆疊集的能力。如果您需要更精確的控制,可以設定許可來指定:

    • 哪些使用者和群組可以在哪些目標帳戶中執行堆疊集操作。

    • 哪些資源使用者和群組可以包含在他們的堆疊集中。

    • 哪些特定堆疊集操作的使用者和群組可以執行。

  3. 在您的管理員和目標帳戶中建立必要的 IAM 服務角色以定義您要的許可。

    具體而言,兩個必要的角色是:

    • AWSCloudFormationStackSetAdministrationRole— 此角色已部署至系統管理員帳戶。

    • AWSCloudFormationStackSetExecutionRole— 此角色會部署至您建立堆疊執行個體的所有帳戶。

授與管理員帳戶的所有使用者管理所有目標帳戶中堆疊的權限

本節說明如何設定權限,以允許管理員帳戶的所有使用者和群組在所有目標帳戶中執行堆疊集作業。它會引導您在管理員和目標帳戶中建立必要的 IAM 服務角色。管理員帳戶中的任何人都可以建立、更新或刪除任何目標帳戶中的任何堆疊。

藉由以這種方式結構化權限,使用者不會在建立或更新堆疊集時傳遞系統管理角色。

設定管理員帳戶與目標帳戶之間的信任關係。管理員帳戶中的任何使用者即可建立任何堆疊集。
Administrator account

在管理員帳戶中,建立名為的 IAM 角色AWSCloudFormationStackSetAdministrationRole

您可以通過從可用的 CloudFormation 模板中創建一個堆棧來做到這一cloudformation-stackset-sample-templates點。AWSCloudFormationStackSetAdministrationRole https://s3.amazonaws.com/

範例 權限原則範例

上述範本所建立的管理角色包含下列權限原則。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sts:AssumeRole" ], "Resource": [ "arn:aws:iam::*:role/AWSCloudFormationStackSetExecutionRole" ], "Effect": "Allow" } ] }
範例 信任原則範例 1

上述範本也包含下列信任原則,這些信任原則會授與服務權限,以使用管理角色以及附加至角色的權限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudformation.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
範例 信任原則範例 2

若要將堆疊執行個體部署到位於預設停用之區域中的目標帳戶,您還必須加入該區域的地區服務主體。每個預設停用的區域都會有自己的區域服務主體。

下列範例信任政策授予服務權限,可在亞太區域 (香港) 區域 () 區域 (ap-east-1) 中使用管理角色,此區域預設為停用。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "cloudformation.amazonaws.com", "cloudformation.ap-east-1.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

如需詳細資訊,請參閱 執行涉及默認禁用區域的堆棧集操作。如需區域代碼的清單,請參閱《AWS 一般參考指南》中的「區域端點」。

Target accounts

在每個目標帳戶中,建立一個名為AWSCloudFormationStackSetExecutionRole信任管理員帳戶的服務角色。此角色必須具有此確切名稱。您可以通過從可用的 CloudFormation 模板中創建一個堆棧來做到這一cloudformation-stackset-sample-templates點。AWSCloudFormationStackSetExecutionRole https://s3.amazonaws.com/ 使用此範本時,系統會提示您提供目標帳戶必須具有信任關係之管理員帳戶的帳戶 ID。

重要

請注意,此範本會授予管理員存取。使用範本建立目標帳戶執行角色後,您必須將原則陳述式中的權限範圍限定為您使用建立的資源類型 StackSets。

目標帳戶服務角色需要執行 CloudFormation 範本中指定的任何作業的權限。例如,如果您的範本是建立 S3 儲存貯體,則您需要為 S3 建立新物件的許可。您的目標帳戶始終需要完整 CloudFormation權限,其中包括創建,更新,刪除和描述堆棧的權限。

範例 權限原則範例 1

此範本建立的角色可在目標帳戶中啟用以下政策。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" } ] }
範例 權限原則範例 2

下列範例顯示具有工作之最權限的 StackSets 原則陳述式。若要在使用服務以外之資源的目標帳戶中建立堆疊 CloudFormation,您必須將這些服務動作和資源新增至每個目標帳號的AWSCloudFormationStackSetExecutionRole策略陳述式。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:*" ], "Resource": "*" } ] }
範例 信任政策範例

以下信任關係是由範本所建立的。管理員帳戶的 ID 會顯示為 admin_account_id

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::admin_account_id:root" }, "Action": "sts:AssumeRole" } ] }

您可以設定現有目標帳戶執行角色的信任關係,以信任管理員帳戶中的特定角色。如果您刪除管理員帳戶中的該角色,並建立一個新角色來取代它,您必須設定您的目標帳戶與新管理員帳戶角色 (在前述範例中以 admin_account_id 表示) 的信任關係。

設定堆疊集操作的進階許可

如果您需要對使用者和群組透過單一系統管理員帳戶建立的堆疊集進行更精細的控制,您可以使用 IAM 角色來指定:

  • 哪些使用者和群組可以在哪些目標帳戶中執行堆疊集操作。

  • 哪些資源使用者和群組可以包含在他們的堆疊集中。

  • 哪些特定堆疊集操作的使用者和群組可以執行。

控制哪些使用者可以在特定目標帳戶中執行堆疊集作業

使用自訂的管理角色來控制哪些使用者和群組可以在其中執行目標帳戶的堆疊集作業。您可能會想要控制管理員帳戶的哪些使用者可執行哪些目標帳戶中的堆疊集操作。若要這麼做,您可以在每個目標帳戶和特定的自訂管理角色之間建立信任關係,而不是在系統管理員帳戶本身中建立AWSCloudFormationStackSetAdministrationRole服務角色。然後,您讓特定使用者和群組在執行特定目標帳戶中的堆疊集操作時,使用適當的自訂管理角色。

例如,您可以在管理員帳戶中建立角色 A 和角色 B。您可以提供角色 A 透過帳戶 8 以存取目標帳戶 1 的許可。您可以提供角色 B 透過帳戶 16 以存取目標帳戶 9 的許可。

設定自訂管理角色與目標帳戶之間的信任關係。然後,使用者在建立堆疊集時,將會傳遞該角色。

設定必要的權限包括定義自訂的管理角色、為目標帳戶建立服務角色,以及授與使用者在執行堆疊集作業時傳遞自訂管理角色的權限。

一般而言,在您擁有必要權限之後,它的運作方式如下:建立堆疊集時,使用者必須指定自訂的管理角色。使用者必須具有將角色傳遞給的權限 CloudFormation。此外,自訂管理角色必須與為堆疊集指定的目標帳戶具有信任關係。 CloudFormation 建立堆疊集,並將自訂的管理角色與其關聯。更新堆疊集時,使用者必須明確指定自訂的管理角色,即使它與先前設定的此堆疊所使用的相同自訂管理角色也一樣。 CloudFormation 根據上述要求,使用該角色更新堆疊。

Administrator account
範例 權限原則範例

針對每個堆疊集,建立具有承擔目標帳戶執行角色之權限的自訂管理角色。

每個目標帳戶中的目標帳戶執行角色名稱必須相同。如果角色名稱是 AWSCloudFormationStackSetExecutionRole,建立堆疊集時會自動 StackSets 使用它。如果您指定自訂角色名稱,使用者必須在建立堆疊集時提供執行角色名稱。

使用自訂名稱和下列許可政策建立 IAM 服務角色。在下列範例中,自訂執行角色是指目標帳戶中的執行角色

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sts:AssumeRole" ], "Resource": [ "arn:aws:iam::target_account_id:role/custom_execution_role" ], "Effect": "Allow" } ] }

若要在單一陳述式中指定多個帳戶,請以逗號分隔。

"Resource": [ "arn:aws:iam::target_account_id_1:role/custom_execution_role", "arn:aws:iam::target_account_id_2:role/custom_execution_role" ]

您可以使用萬用字元 (*) 而非帳號 ID 來指定所有目標帳戶。

"Resource": [ "arn:aws:iam::*:role/custom_execution_role" ]
範例 信任原則範例 1

您必須為服務角色提供信任政策,以定義哪些 IAM 主體可以擔任該角色。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudformation.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
範例 信任原則範例 2

若要將堆疊執行個體部署到位於預設停用之區域中的目標帳戶,您還必須加入該區域的地區服務主體。每個預設停用的區域都會有自己的區域服務主體。

下列範例信任政策授予服務權限,可在亞太區域 (香港) 區域 () 區域 (ap-east-1) 中使用管理角色,此區域預設為停用。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "cloudformation.amazonaws.com", "cloudformation.ap-east-1.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

如需詳細資訊,請參閱 執行涉及默認禁用區域的堆棧集操作。如需區域代碼的清單,請參閱《AWS 一般參考指南》中的「區域端點」。

範例 傳遞角色原則範例

您還需要 IAM 使用者的 IAM 許可政策,以允許使用者在執行堆疊集操作時傳遞自訂管理角色。如需詳細資訊,請參閱授予使用者將角色傳遞至 AWS 服務

在以下範例中,自訂的 _admin_role 是指使用者需要傳遞的管理角色。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::*:role/customized_admin_role" } ] }
Target accounts

在每個目標帳戶中,建立一個服務角色,該角色信任要用於此帳戶的自訂管理角色。

目標帳戶角色需要執行 CloudFormation 範本中指定的任何作業的權限。例如,如果您的範本是建立 S3 儲存貯體,則您需要在 S3 中建立新物件的許可。您的目標帳戶始終需要完整 CloudFormation 權限,其中包括創建,更新,刪除和描述堆棧的權限。

每個目標帳戶中的目標帳戶角色名稱必須相同。如果角色名稱是 AWSCloudFormationStackSetExecutionRole,建立堆疊集時會自動 StackSets 使用它。如果您指定自訂角色名稱,使用者必須在建立堆疊集時提供執行角色名稱。

範例 權限原則範例

下列範例顯示具有工作之最權限的 StackSets 原則陳述式。若要在使用服務以外之資源的目標帳戶中建立堆疊 CloudFormation,您必須將這些服務動作和資源新增至權限原則。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:*" ], "Resource": "*" } ] }
範例 信任政策範例

當您建立角色以定義信任關係時,您必須提供下列信任原則。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::admin_account_id:role/customized_admin_role" }, "Action": "sts:AssumeRole" } ] }

控制使用者可包含在特定堆疊集中的資源

使用自訂的執行角色來控制哪些資源堆疊使用者和群組可以包含在其堆疊集中。例如,您可能想要設定一個群組,只包含他們建立的堆疊集中與 Amazon S3 相關的資源,而另一個團隊只要包含 DynamoDB 資源。若要這麼做,您可以在每個群組的自訂管理角色與每組資源的自訂執行角色之間建立信任關係。自訂的執行角色定義了堆疊集中可以包含哪些堆疊資源。自訂的管理角色位於管理員帳戶中,而自訂執行角色則位於您要使用定義的資源建立堆疊集的每個目標帳戶中。然後,您啟用特定使用者和群組,以便在執行堆疊集操作時使用適當的自訂管理角色。

例如,您可以在管理員帳戶中建立自訂的管理角色 A、B 和 C。具有角色 A 使用許可的使用者和群組,可以建立包含自訂執行角色 X 中具體列出的堆疊資源的堆疊集,但不包含角色 Y 或 Z 的堆疊資源或任何執行角色不包含的資源。

在目標帳戶中,設定自訂管理角色與自訂執行角色之間的信任關係。然後,使用者在建立堆疊集時傳遞這些角色。

更新堆疊集時,使用者必須明確指定自訂的管理角色,即使它與先前設定的此堆疊所使用的相同自訂管理角色也一樣。 CloudFormation 只要使用者具有對該堆疊集執行作業的權限,就會使用指定的自訂管理角色執行更新。

同樣地,使用者也可以指定自訂的執行角色。如果他們指定了自訂的執行角色,則會根據上述需求, CloudFormation 使用該角色更新堆疊。如果使用者未指定自訂的執行角色,只要使用者具有 CloudFormation 對該堆疊集執行作業的權限,就會使用先前與堆疊集相關聯的自訂執行角色來執行更新。

Administrator account

在您的管理員帳戶中建立自訂的管理角色,如中所述控制哪些使用者可以在特定目標帳戶中執行堆疊集作業。在自訂管理角色與您要使用的自訂執行角色之間包含信任關係。

範例 權限原則範例

下列範例是針對目標帳戶AWSCloudFormationStackSetExecutionRole定義的兩者的權限原則,以及自訂的執行角色。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1487980684000", "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": [ "arn:aws:iam::*:role/AWSCloudFormationStackSetExecutionRole", "arn:aws:iam::*:role/custom_execution_role" ] } ] }
Target accounts

在您要建立堆疊集的目標帳戶中,建立自訂執行角色,用來將許可授予您想讓使用者和群組可以包含在堆疊集中的服務和資源。

範例 權限原則範例

以下範例提供最低許可給堆疊集,以及建立 Amazon DynamoDB 資料表的許可。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "dynamoDb:createTable" ], "Resource": "*" } ] }
範例 信任政策範例

當您建立角色以定義信任關係時,您必須提供下列信任原則。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::admin_account_id:role/customized_admin_role" }, "Action": "sts:AssumeRole" } ] }

設定特定堆疊集操作的許可

此外,您可以設定許可來控制哪些使用者和群組可以執行特定堆疊集操作,例如建立、更新或刪除堆疊集或堆疊執行個體。如需詳細資訊,請參閱 IAM 使用者指南 CloudFormation中的動作、資源和條件金鑰

設定全域索引鍵以減輕混淆代理人問題

混淆代理人問題屬於安全性議題,其中沒有執行動作許可的實體可以強制具有更多許可的實體執行該動作。在中 AWS,跨服務模擬可能會導致混淆的副問題。在某個服務 (呼叫服務) 呼叫另一個服務 (被呼叫服務) 時,可能會發生跨服務模擬。可以操縱呼叫服務來使用其許可,以其不應有存取許可的方式對其他客戶的資源採取動作。為了防止這種情況發生, AWS 提供的工具可協助您透過已授予您帳戶中資源存取權的服務主體來保護所有服務的資料。

建議您在資源策略中使用aws:SourceArnaws:SourceAccount全域條件前後關聯索引鍵,以限制將其他服務 AWS CloudFormation StackSets 提供給資源的權限。如果同時使用全域條件內容索引鍵,則在相同政策陳述式中使用 aws:SourceAccount 值和 aws:SourceArn 值中的帳戶時,必須使用相同的帳戶 ID。

防範混淆代理人問題最有效的方法,是使用 aws:SourceArn 全域條件內容金鑰,以及資源的完整 ARN。如果不知道資源的完整 ARN,或者如果您指定了多個資源,請使用 aws:SourceArn 全域條件內容金鑰,同時使用萬用字元 (*) 表示 ARN 的未知部分。例如 arn:aws:cloudformation::123456789012:*。盡可能使用 aws:SourceArn,這更為具體。僅當您無法判斷正確的 ARN 或 ARN 模式時才使用 aws:SourceAccount

當您的管理員帳戶中 StackSets 擔任管理角色時,請 StackSets 填入管理員帳戶 ID 和 StackSets Amazon 資源名稱 (ARN)。因此,您可以定義信任關係中的全域索引鍵 aws:SourceAccountaws:SourceArn,以防止混淆代理人問題。下列範例顯示如何在中使用aws:SourceArnaws:SourceAccount全域條件前後關聯鍵字 StackSets 來避免混淆的副問題。

Administrator account
範例 aws:SourceAccountaws:SourceArn 全域索引鍵

使用時 StackSets,請aws:SourceArn在您的AWSCloudFormationStackSetAdministrationRole信任策略中定義全局密鑰aws:SourceAccount,以防止混淆的副問題。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudformation.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" }, "StringLike": { "aws:SourceArn": "arn:aws:cloudformation:*:111122223333:stackset/*" } } } ] }
範例 StackSets ARN

指定關聯的 StackSets ARN 以進行更精細的控制。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudformation.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333", "aws:SourceArn": [ "arn:aws:cloudformation:STACKSETS-REGION:111122223333:stackset/STACK-SET-ID-1", "arn:aws:cloudformation:STACKSETS-REGION:111122223333:stackset/STACK-SET-ID-2", ] } } } ] }