这个问题在这里已经有了答案,但它并没有解决我的问题。
当我尝试调用aws iam create-role --role-name AutoscalingRole-Name --assume-role-policy-document file://./IAM_Trust_Policy.json
时,我得到了An error occurred (MalformedPolicyDocument) when calling the CreateRole operation: AssumeRole policy may only specify STS AssumeRole actions
如果我的IAM_Trust_Policy.json
只包含这个代码:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {
"Service": [
"ec2.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
}
效果很好。但我需要更多的东西,我正在创建一个自动伸缩角色,我有一个策略,有这些要求:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {
"Service": [
"ec2.amazonaws.com",
"autoscaling.amazonaws.com"
]
},
"Action": [
"autoscaling:DescribeAutoScalingGroups",
"autoscaling:DescribeAutoScalingInstances",
"autoscaling:DescribeLaunchConfigurations",
"autoscaling:DescribeTags",
"autoscaling:SetDesiredCapacity",
"autoscaling:TerminateInstanceInAutoScalingGroup",
"ec2:DescribeLaunchTemplateVersions"
]
}
}
由于某种原因我得到了An error occurred (MalformedPolicyDocument) when calling the CreateRole operation: AssumeRole policy may only specify STS AssumeRole actions
有人能看出我错在哪里吗?由于
正如@luk2302所评论的那样,您混淆了两种策略类型。要使角色有用,这两个都是必需的:
信任策略:您允许的角色
- 这是您的第一份政策文件
Principal
是必需的-这是您允许的- 作为CreateRole中的
AssumeRolePolicyDocument
参数。
访问/权限策略:角色将拥有的权限
- 这是你的第二份政策文件
- 不允许
Principal
-在这里没有意义 有两种方法可以将这些权限附加到您的角色(也称为基于身份的策略): - 作为具有AttachRolePolicy 的独立管理策略
- 或者使用PutRolePolicy 作为嵌入角色中的内联策略
换句话说,从第二个策略文档中删除Principal
,并调用PutRolePolicy
将其嵌入到角色中。
角色策略不能与suppose -role-policy同时使用。我想你是想重新发现轮子。
AWS有一个角色可以自动扩展AWSServiceRoleForAutoScaling
管理角色。