我想要透過 AWS CloudFormation 建立 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。我的 RunInstances 的 AWS Identity and Access Management (IAM) 政策具有標籤型限制。
解決方法
AWS::EC2::Instance 資源的「標籤」屬性不會延伸至您透過 CloudFormation 建立的磁碟區。如果與使用者或角色相關聯的 IAM 政策具有對磁碟區標籤的限制,則您會收到下列錯誤: "You are not authorized to perform this operation."
若要將標籤透過 CloudFormation 傳遞至 ec2:CreateVolume,您必須在 CloudFormation 範本的 AWS::EC2::LaunchTemplate 資源中定義標籤。
若要設定此組態,請完成下列步驟:
-
在堆疊中定義啟動範本資源,並將 IAM 政策和 ResourceType 需要的標籤設定為磁碟區。
這是您可以使用的程式碼的其中一個範例:
RequiredTagsLaunchTemplate:
Type: 'AWS::EC2::LaunchTemplate'
Properties:
LaunchTemplateData:
TagSpecifications:
- ResourceType: volume
Tags:
- Key: Env
Value: Dev
-
將啟動範本連接至 EC2 執行個體資源。
這是您可以使用的程式碼的其中一個範例:
Instance:
Type: 'AWS::EC2::Instance'
Properties:
LaunchTemplate:
LaunchTemplateId: !Ref RequiredTagsLaunchTemplate
Version: 1
InstanceType: r4.xlarge
.
.
RequiredTagsLaunchTemplate:
Type: 'AWS::EC2::LaunchTemplate'
Properties:
LaunchTemplateData:
TagSpecifications:
- ResourceType: volume
Tags:
- Key: Env
Value: Dev
-
確認啟動範本是否具有所有必要的標籤,然後建立或更新您的堆疊。
**重要:**建立堆疊的角色或使用者,必須具有建立和使用啟動範本的權限,而且不受到標記限制。您可以使用 aws:CalledVia 條件金鑰來建立新的陳述式,以免除 CloudFormation API 呼叫的標記需求。