如何解决在 CloudFormation 中创建 AWS::EC2::Instance 资源时遇到的“没有在 AWS::EC2::Instance 资源上处理标签的 IAM 权限”错误?

上次更新日期:2021 年 4 月 21 日

当我尝试在 AWS CloudFormation 中创建 AWS::EC2::Instance 资源时,收到“没有在 AWS::EC2::Instance 资源上处理标签的 IAM 权限”错误。

简短描述

当您创建 AWS::EC2::Instance 资源且满足以下条件时,将会收到此错误:

  • 您可以在 CloudFormation 模板中指定 Tags 属性的值。
  • AWS Identity and Access Management (IAM) 用户、IAM 角色或 CloudFormation 服务角色没有所需的 ec2:CreateTags 权限。

发生此错误时,使用 Tags 属性指定的自定义标签不会应用到 EC2 实例,即便资源已标记为 CREATE_COMPLETE

注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时遇到错误,请确保您使用的是最新版的 AWS CLI

解决方法

1.    确认创建 CloudFormation 堆栈的 IAM 用户、IAM 角色或 CloudFormation 服务角色拥有在受影响的 EC2 实例上执行 ec2:CreateTagsec2:DeleteTags权限

2.    使用 CloudFormation 控制台或 AWS CLI 在受影响的 CloudFormation 模板中对 AWS::EC2::Instance 资源的 Tags 属性添加注释。然后,更新堆栈。

使用 CloudFormation 控制台:

在 CloudFormation 模板中,对 Tags 属性添加注释,然后更新堆栈。例如:

Resources:
  MyEC2Instance: 
    Type: AWS::EC2::Instance
    Properties: 
#      Tags: 
#      - Key: key1
#        Value: value1
#      - Key: key2
#        Value: value2

使用 AWS CLI:

运行 update-stack 命令:

aws cloudformation update-stack --region YOUR_REGION --template-body file://YOUR_TEMPLATE_FILE_TAGS_COMMENTED —stack-name YOUR_STACK_NAME

注意:请将 YOUR_REGIONYOUR_TEMPLATE_FILE_TAGS_COMMENTEDYOUR_STACK_NAME 替换为您的值。

3.    使用 CloudFormation 控制台或 AWS CLI 在受影响的 CloudFormation 模板中取消对 AWS::EC2::Instance 资源的 Tags 属性的注释。然后,再次更新您的堆栈。

使用 CloudFormation 控制台:

在 CloudFormation 模板中,删除 Tags 属性的注释,然后更新您的堆栈。例如:

Resources:
  MyEC2Instance: 
    Type: AWS::EC2::Instance
    Properties: 
      Tags: 
      - Key: key1
        Value: value1
      - Key: key2
        Value: value2

使用 AWS CLI:

运行 update-stack 命令:

aws cloudformation update-stack --region YOUR_REGION --template-body file://YOUR_TEMPLATE_FILE_TAGS_UNCOMMENTED —stack-name YOUR_STACK_NAME

注意:请将 YOUR_REGIONYOUR_TEMPLATE_FILE_TAGS_UNCOMMENTEDYOUR_STACK_NAME 替换为您的值。

4.    使用 EC2 控制台或 AWS CLI 检查您的标签是否已正确应用到 Amazon Elastic Compute Cloud (Amazon EC2) 实例。

使用 Amazon EC2 控制台:

1.    打开 Amazon EC2 控制台

2.    从导航窗格的 Instances(实例)部分,选择 Instances(实例)。

3.    选择通过 CloudFormation 创建的实例。

4.    选择 Tags(标签)选项卡,然后检查在 CloudFormation 模板中指定的自定义标签是否已填充到表中。

使用 AWS CLI:

运行 describe-tags 命令:

aws ec2 describe-tags —filters "Name=resource-id,Values=YOUR_INSTANCE_ID"

注意:请将 YOUR_INSTANCE_ID 替换为堆栈中的 EC2 实例的实例 ID。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?