我有一个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"
}
]
}
}
答案 0 :(得分:9)
这是正确的,Roles in an instance profile仅限于1.你无法解决这个问题。
如果您创建随后应用于给定实例角色的离散策略,我发现这不是一个限制。
例如,我有一个ApplicationServer的实例角色。然后,我可以创建以下策略并将其附加到该角色: CodeDeployInstance (允许该实例接受代码部署), DomainJoinInstance (允许实例加入域的权限)和 AppCredentialsInstance (允许实例通过安全的S3存储桶访问应用凭据)。您可以通过这种方式将最多10个策略附加到角色。
您可以在CF模板之外创建这些策略,并在需要时将它们应用于实例角色/实例配置文件。
我以这种方式定义所有实例:一个特定的角色名称,然后根据需要对任何角色添加/减去/组合我自己的预定义策略。
正在运行的实例会立即识别这些更改,需要重新启动或重新启动。
我希望有所帮助。