Ich möchte Amazon Elastic Compute Cloud (Amazon EC2)-Instances über AWS CloudFormation erstellen. Meine AWS Identity and Access Management (IAM, Identitäts- und Zugriffsmanagement)-Richtlinie für RunInstances enthält tagbasierte Einschränkungen.
Lösung
Die Eigenschaft Tags der Ressource AWS::EC2::Instance erstreckt sich nicht auf die Volumes, die du über CloudFormation erstellst. Wenn die IAM-Richtlinie, die dem Benutzer oder der Rolle zugeordnet ist, Einschränkungen für Volume-Tags enthält, wird die folgende Fehlermeldung angezeigt: „You are not authorized to perform this operation."
Um die Tags über CloudFormation an ec2:CreateVolume zu übergeben, musst du deine Tags in der Ressource AWS::EC2::LaunchTemplate in deiner CloudFormation-Vorlage definieren.
Gehe wie folgt vor, um diese Konfiguration einzurichten:
-
Definiere eine Startvorlagenressource im Stack, wobei die erforderlichen Tags für die IAM-Richtlinie und ResourceType auf Volume gesetzt sind.
Dies ist ein Beispiel für den Code, den du verwenden kannst:
RequiredTagsLaunchTemplate:
Type: 'AWS::EC2::LaunchTemplate'
Properties:
LaunchTemplateData:
TagSpecifications:
- ResourceType: volume
Tags:
- Key: Env
Value: Dev
-
Hänge deine Startvorlage an deine EC2-Instance-Ressource an.
Dies ist ein Beispiel für den Code, den du verwenden kannst:
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
-
Vergewissere dich, dass deine Startvorlage alle erforderlichen Tags enthält, und erstelle oder aktualisiere dann den Stack.
Wichtig: Die Rolle oder der Benutzer, der den Stack erstellt, muss die Berechtigung haben, eine Startvorlage ohne Markierungs-Einschränkungen zu erstellen und zu verwenden. Du kannst den Bedingungsschlüssel aws:CalledVia verwenden, um eine neue Anweisung zu erstellen, die CloudFormation-API-Aufrufe von den Markierungs-Anforderungen ausnimmt.