(malformmedpolicydocument)假设角色策略只能指定STS假设角色动作



这个问题在这里已经有了答案,但它并没有解决我的问题。

当我尝试调用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管理角色。