将现有IAM角色与CloudFormation中的EC2实例相关联

Bev*_*van 15 amazon-web-services aws-cloudformation

如何在EC2实例中使用现有的IAM角色,而不是在我的CloudFormation模板中创建新角色?

例如,我在AWS Console中创建了一个角色,只想使用它.

Ale*_*yak 25

您可以使用现有的InstanceProfile,而不是从堆栈中创建新的InstanceProfile.事实上,可能已经为您创建了一个 - 来自文档:

如果您使用AWS管理控制台为Amazon EC2创建角色,则控制台会自动创建实例配置文件并为其指定与该角色相同的名称.

这意味着您可能不必AWS::IAM::InstanceProfile在堆栈中创建资源.但请注意:

控制台不会为与Amazon EC2无关的角色创建实例配置文件.

在这种情况下,您可以使用以下两个命令从AWS CLI手动执行此操作:

aws iam create-instance-profile --instance-profile-name MyExistingRole
aws iam add-role-to-instance-profile --instance-profile-name MyExistingRole --role-name MyExistingRole
Run Code Online (Sandbox Code Playgroud)

然后,如果您已在命名的UI中定义了一个角色MyExistingRole,这就足够了:

"Resources" : {

  "Instance" : {
    "Type" : "AWS::EC2::Instance",
    ...
    "Properties" : {
      "IamInstanceProfile" : "MyExistingRole",
      ...
    }
  }
}
Run Code Online (Sandbox Code Playgroud)


Pet*_*SFT 24

您需要实例配置文件,角色和实例信息(或启动配置)本身.

您的实例配置文件如下所示:

"Resources" : {
  "InstanceProfile" : {
    "Type" : "AWS::IAM::InstanceProfile",
    "Properties" : {
      "Path" : "/",
      "Roles" : ["MyExistingRole"]
    }
  },

  "Instance" : {
    "Type" : "AWS::EC2::Instance",
    "Properties" : {
      "IamInstanceProfile" : {"Ref" : "InstanceProfile"}
      ...
    }
  }
Run Code Online (Sandbox Code Playgroud)

特别是 - 请注意,Instance配置文件中的引用是对现有RoleName的引用

另外 - 我写过关于使用实例配置文件和角色的bootstrapping实例,以确保我们不会保持安全性.

关键是使用{"Ref":RoleName}等来使用角色的实际名称.