【问题标题】:Associating multiple IAM role with AWS::IAM::InstanceProfile in CloudFormation将多个 IAM 角色与 CloudFormation 中的 AWS::IAM::InstanceProfile 关联
【发布时间】:2016-04-13 15:46:05
【问题描述】:

我有一个 CloudFormation 模板,它提供了一个自动缩放组。它具有以下实例配置文件以及相关的角色和策略。有没有办法将现有的 IAM 角色也添加到 InstanceProfile? AWS 文档似乎拒绝了:

目前,一个实例配置文件最多可以分配一个角色。

基本上我想在模板中保留以下角色和策略创建,以便策略可以引用 SQS 资源(即 "Resource": [{ "Fn::GetAtt" : ["LifecycleSQS", "Arn "] }]) 由模板创建,同时还分配一个预先存在的角色,该角色将授予实例上的应用程序权限。我不想在 CloudFormation 模板中创建这些应用特定的权限。

"InstanceRole":{
     "Type":"AWS::IAM::Role",
     "Properties":{
        "AssumeRolePolicyDocument":{
           "Statement":[
              {
                 "Effect":"Allow",
                 "Principal":{
                    "Service":[
                       "autoscaling.amazonaws.com"
                    ]
                 },
                 "Action":[
                    "sts:AssumeRole"
                 ]
              }
           ]
        },
        "Path":"/"
     }
},
"RolePolicies":{
     "Type":"AWS::IAM::Policy",
     "Properties":{
        "PolicyName": "MyRolePolicy,
        "PolicyDocument":{
           "Statement":[
              {
                  "Effect": "Allow",
                  "Resource": [{ "Fn::GetAtt" : ["LifecycleSQS", "Arn"] }],
                  "Action": [
                        "sqs:SendMessage",
                        "sqs:GetQueueUrl",
                        "sns:Publish"
                  ]
              }
           ]
        },
        "Roles":[
           {
              "Ref":"InstanceRole"
           }
        ]
     }
},
"InstanceProfile":{
     "Type":"AWS::IAM::InstanceProfile",
     "Properties":{
        "Path":"/",
        "Roles":[
           {
              "Ref":"InstanceRole"
           }
        ]
     }
}

【问题讨论】:

    标签: amazon-web-services amazon-iam amazon-cloudformation


    【解决方案1】:

    没错,Roles in an instance profile 被限制为 1。你无法绕过这个。

    我发现,如果您创建离散策略然后将其应用于给定的实例角色,则限制较少。

    例如,我有一个 ApplicationServer 的实例角色。然后,我可以创建以下策略并将其附加到该角色:CodeDeployInstance(允许该实例接受代码部署)、DomainJoinInstance(允许该实例加入域的权限)和 AppCredentialsInstance(允许实例通过安全的 S3 存储桶访问应用凭证)。通过这种方式,您最多可以将 10 个策略附加到一个角色。

    您可以在 CF 模板之外创建这些策略,并在需要时将它们应用于实例角色/实例配置文件。

    我以这种方式定义我的所有实例:一个特定的角色名称,然后根据需要针对任何角色添加/减去/组合我自己的预定义策略。

    正在运行的实例会立即识别这些更改,需要重新启动或重新启动。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2017-06-18
      • 2013-12-18
      • 2017-06-17
      • 2019-10-14
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      • 2020-02-27
      • 2019-09-28
      相关资源
      最近更新 更多