AWS CloudFormation を使用して Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを作成したいと考えています。RunInstances で使用している AWS Identity and Access Management (IAM) ポリシーには、タグベースの制限があります。
解決策
AWS::EC2::Instance リソースの Tags プロパティは、CloudFormation 経由で作成されたボリュームに対しては拡張されません。ユーザーまたはロールに関連付けられている IAM ポリシーでボリュームタグが制限されている場合、次のエラーが表示されます。 「この操作の実行は許可されていません」
タグを CloudFormation 経由で ec2:CreateVolume に渡すには、CloudFormation テンプレートの AWS::EC2::LaunchTemplate リソースでタグを定義する必要があります。
この構成を作成するには、次の手順を実行します。
-
IAM ポリシーに必要なタグおよび、volume に設定した 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 コールをタグ付け要件から除外する新しいステートメントを作成できます。