Comment créer des instances Amazon EC2 via AWS CloudFormation lorsque la police IAM pour RunInstances présente des restrictions basées sur les balises ?

Date de la dernière mise à jour : 15/10/2020

Je souhaite créer des instances Amazon Elastic Compute Cloud (Amazon EC2) via AWS CloudFormation, mais ma politique AWS Identity and Access Management (IAM) pour RunInstances présente des restrictions basées sur les balises.

Brève description

Vous pouvez utiliser un modèle de lancement pour créer des instances EC2 via AWS CloudFormation.

Lorsque vous créez une instance EC2 avec AWS CloudFormation à l'aide de la ressource AWS::EC2::Instance, AWS CloudFormation effectue deux appels d'API : RunInstances et CreateTags. RunInstances crée l'instance et CreateTags applique les balises nécessaires une fois l'instance créée. La demande RunInstances effectuée par AWS CloudFormation ne prend pas en charge les balises, mais l'API les prend en charge. Étant donné que les balises ne sont pas incluses dans la demande RunInstances, la restriction basée sur les balises IAM n'est pas satisfaite et vous recevez donc un message d'erreur. Le message d'erreur est le suivant : « You are not authorized to perform this operation » (Vous n'êtes pas autorisé à effectuer cette opération).

Remarque : AWS CloudFormation ne prend pas en charge la création d'instances avec des balises dans une requête solitaire (c'est-à-dire pour un appel d'API RunInstances).

Pour transmettre les balises à ec2:RunInstances via AWS CloudFormation, vous devez définir vos balises dans la ressource AWS::EC2::LaunchTemplate dans votre modèle AWS CloudFormation. Évitez de définir vos balises dans la ressource AWS::EC2::Instance.

Résolution

1.    Définissez un modèle de lancement dans la pile avec les balises nécessaires conformément à la stratégie IAM. Par exemple :

  RequiredTagsLaunchTemplate:
    Type: 'AWS::EC2::LaunchTemplate'
    Properties:
      LaunchTemplateData:
        TagSpecifications:
          - ResourceType: instance
            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: instance
            Tags:
              - Key: Env
                Value: Dev

3.    Vérifiez que votre modèle de lancement possède toutes les balises requises par votre stratégie IAM.

Si votre stratégie IAM comporte des restrictions sur les balises de volume, incluez ces restrictions dans la section Type: AWS::EC2::LaunchTemplate de votre modèle de lancement. Ensuite, définissez ResourceType sur volume. Par exemple :

 TagSpecifications:
   - ResourceType: volume
     Tags:
       - Key: Env
         Value: Dev

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 d'API effectués par AWS CloudFormation des exigences de balisage.</p


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?