Je souhaite créer des instances Amazon Elastic Compute Cloud (Amazon EC2) via AWS CloudFormation. Mais ma politique AWS de gestion des identités et des accès (IAM) pour RunInstances comporte des restrictions basées sur des balises.
Brève description
Vous pouvez utiliser un modèle de lancement pour créer des instances EC2 via CloudFormation.
La propriété des balises de la ressource AWS::EC2::Instance ne s'étend pas aux volumes qui sont créés via CloudFormation. Si la politique IAM associée à l'utilisateur ou au rôle comporte des restrictions sur les balises de volume, le message d'erreur suivant s'affiche :
« Vous n'avez pas l'autorisation nécessaire pour effectuer cette opération »
Pour transmettre les balises à ec2:CreateVolume, via CloudFormation, vous devez définir vos balises dans la ressource AWS::EC2::LaunchTemplate dans votre modèle CloudFormation.
Solution
1. Définissez un modèle de lancement dans la pile avec les balises requises par la politique IAM. Par exemple :
RequiredTagsLaunchTemplate:
Type: 'AWS::EC2::LaunchTemplate'
Properties:
LaunchTemplateData:
TagSpecifications:
- ResourceType: volume
Tags:
- Key: Env
Value: Dev
2. Attachez votre modèle de lancement à votre ressource d'instance EC2. Par exemple :
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
3. Vérifiez que votre modèle de lancement possède toutes les balises nécessaires.
Important : vous devez confirmer que le rôle ou l'utilisateur qui crée la pile dispose des autorisations nécessaires pour créer et utiliser un modèle de lancement sans restriction de balisage. Vous pouvez utiliser la clé de condition aws:CalledVia pour créer une nouvelle instruction qui exempte les appels CloudFormation API des exigences de balisage.