View a markdown version of this page

CloudFormation 的服務角色 - AWS 方案指引

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

CloudFormation 的服務角色

服務角色是 AWS Identity and Access Management (IAM) 角色, AWS CloudFormation 允許 建立、更新或刪除堆疊資源。如果您不提供服務角色,CloudFormation 會使用 IAM 主體的登入資料來執行堆疊操作。如果您為 CloudFormation 建立服務角色,並在堆疊建立期間指定服務角色,則 CloudFormation 會使用服務角色的登入資料來執行操作,而非 IAM 主體的登入資料。

使用服務角色時,連接至 IAM 主體的身分型政策不需要佈建 CloudFormation 範本中定義之所有 AWS 資源的許可。如果您尚未準備好透過開發管道 ( AWS 建議的最佳實務) 為關鍵業務操作佈建 AWS 資源,使用服務角色可以為資源管理新增額外的保護層 AWS。此方法的優點如下:

  • 組織中的 IAM 主體遵循最低權限模型,以防止他們手動在您的環境中建立或變更 AWS 資源。

  • 若要建立、更新或刪除 AWS 資源,IAM 主體必須使用 CloudFormation。這會將透過基礎設施的資源佈建標準化為程式碼。

例如,若要建立包含 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的堆疊,IAM 主體需要具有透過身分型政策建立 EC2 執行個體的許可。反之,CloudFormation 可以擔任服務角色,該角色具有代表委託人建立 EC2 執行個體的許可。透過這種方法,IAM 主體可以建立堆疊,而且您不需要為 IAM 主體提供過於廣泛的許可,讓他們不應定期存取的服務。

若要使用服務角色建立 CloudFormation 堆疊,IAM 主體必須具有將服務角色傳遞至 CloudFormation 的許可,且服務角色的信任政策必須允許 CloudFormation 擔任該角色。

實作 CloudFormation 服務角色的最低權限

在服務角色中,您可以定義許可政策,明確指定服務可執行的動作。這些動作可能與 IAM 主體可執行的動作不同。我們建議您從 CloudFormation 範本向後工作,以建立遵循最低權限原則的服務角色。

正確定義 IAM 主體的身分型政策,以僅傳遞特定服務角色,並限定服務角色的信任政策,以僅允許特定主體擔任該角色,有助於防止透過服務角色提升可能的權限。

設定服務角色

注意

服務角色是在 IAM 中設定。若要建立服務角色,您必須具有執行此作業的許可。具有建立角色和連接任何政策許可的 IAM 主體可以提升自己的許可。 AWS 建議 AWS 服務 為每個使用案例為每個 建立一個服務角色。為您的使用案例建立 CloudFormation 服務角色之後,您可以允許使用者僅將核准的服務角色傳遞給 CloudFormation。如需允許使用者建立服務角色的身分型政策範例,請參閱 IAM 文件中的服務角色許可

如需如何建立服務角色的指示,請參閱建立角色以將許可委派給 AWS 服務。指定 CloudFormation (cloudformation.amazonaws.com) 做為可擔任該角色的服務。這可防止 IAM 主體擔任角色本身或將其傳遞給其他 服務。當您設定服務角色時,需要 EffectActionResource元素。您也可以選擇性地定義Condition元素。

如需這些元素的詳細資訊,請參閱 IAM JSON 政策元素參考。如需動作、資源和條件索引鍵的完整清單,請參閱 Identity And Access Management 的動作、資源和條件索引鍵

授予 IAM 主體使用 CloudFormation 服務角色的許可

若要使用 CloudFormation 服務角色透過 CloudFormation 佈建資源,IAM 主體必須具有傳遞服務角色的許可。您可以在委託人的許可中指定角色的 ARN,將 IAM 委託人的許可限制為僅傳遞特定角色。如需詳細資訊,請參閱 IAM 文件中的授予使用者將角色傳遞至 的許可 AWS 服務

下列 IAM 身分型政策陳述式允許主體傳遞cfnroles路徑中的角色,包括服務角色。委託人無法傳遞位於不同路徑中的角色。

{ "Sid": "AllowPassingAppRoles", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::<account ID>:role/cfnroles/*" }

將主體限制為特定角色的另一種方法是使用 CloudFormation 服務角色名稱的字首。下列政策陳述式允許 IAM 主體僅傳遞具有CFN-字首的角色。

{ "Sid": "AllowPassingAppRoles", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::<account ID>:role/CFN-*" }

除了先前的政策陳述式之外,您還可以使用 cloudformation:RoleARN條件金鑰,在身分型政策中提供進一步的精細控制,以實現最低權限存取。下列政策陳述式僅允許 IAM 主體在傳遞特定 CloudFormation 服務角色時建立、更新和刪除堆疊。作為一種變化,您可以在條件索引鍵中定義多個 CloudFormation 服務角色的 ARNs。

{ "Sid": "RestrictCloudFormationAccess", "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:UpdateStack" ], "Resource": "arn:aws:iam::<account ID>:role/CFN-*", "Condition": { "StringEquals": { "cloudformation:RoleArn": [ "<ARN of the specific CloudFormation service role>" ] } } }

此外,您也可以使用 cloudformation:RoleARN條件金鑰來限制 IAM 主體傳遞高權限 CloudFormation 服務角色以進行堆疊操作。唯一需要的變更是在條件式運算子中,從 StringEqualsStringNotEquals

{ "Sid": "RestrictCloudFormationAccess", "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:UpdateStack" ], "Resource": "arn:aws:iam::<account ID>:role/CFN-*", "Condition": { "StringNotEquals": { "cloudformation:RoleArn": [ "<ARN of a privilege CloudFormation service role>" ] } } }

設定 CloudFormation 服務角色的信任政策

角色信任政策是連接到 IAM 角色的必要資源型政策。信任政策會定義哪些 IAM 主體可以擔任該角色。在信任政策中,您可以將使用者、角色、帳戶或服務指定為委託人。若要防止 IAM 主體將 CloudFormation 的服務角色傳遞給其他服務,您可以在角色的信任政策中將 CloudFormation 指定為主體。

下列信任政策僅允許 CloudFormation 服務擔任服務角色。

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

將服務角色與堆疊建立關聯

建立服務角色之後,您可以在建立堆疊時將其與堆疊建立關聯。如需詳細資訊,請參閱設定堆疊選項。指定服務角色之前,請確定 IAM 主體具有傳遞該角色的許可。如需詳細資訊,請參閱授予 IAM 主體使用 CloudFormation 服務角色的許可