我试图通过IAM角色创建EC2实例,但我在启动新实例时得到错误
failed: [localhost] => (item= IAMRole-1) => {"failed": true, "item": " IAMRole-1"}
msg: Instance creation failed => UnauthorizedOperation: You are not authorized to perform
this operation. Encoded authorization failure message: Ckcjt2GD81D5dlF6XakTSDypnwrgeQb0k
ouRMKh3Ol1jue553EZ7OXPt6fk1Q1-4HM-tLNPCkiX7ZgJWXYGSjHg2xP1A9LR7KBiXYeCtFKEQIC
W9cot3KAKPVcNXkHLrhREMfiT5KYEtrsA2A-xFCdvqwM2hNTNf7Y6VGe0Z48EDIyO5p5DxdNFsaSChUcb
iRUhSyRXIGWr_ZKkGM9GoyoVWCBk3Ni2Td7zkZ1EfAIeRJobiOnYXKE6Q
而iam角色具有完整的ec2访问权限,使用以下策略
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "ec2:*",
"Effect": "Allow",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "elasticloadbalancing:*",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "cloudwatch:*",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "autoscaling:*",
"Resource": "*"
}
]
}
有什么建议吗?
这里的问题不在于Amazon EC2本身的IAM角色,而在于您(即您自己使用的AWS凭据)似乎缺乏在启动时将该角色"传递"给所请求的EC2实例所需的iam:PassRole
权限,请参阅在授予在Amazon EC2实例上运行的应用程序访问AWS资源中使用Amazon EC2角色所需的权限部分详细信息:
要使用角色启动实例,开发人员必须具有权限启动Amazon EC2实例和通过IAM角色的权限。
下面的示例策略允许用户使用AWS Management控制台以启动具有角色的实例。该策略允许用户执行以下操作传递任何角色并执行所有Amazon EC2操作星号(*)。ListInstanceProfiles动作允许用户查看所有在AWS帐户上可用的角色。
Example授予用户启动实例权限的策略通过使用Amazon EC2控制台
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "iam:PassRole", "iam:ListInstanceProfiles", "ec2:*" ], "Resource": "*" }] }
要求通过PassRole
权限间接执行此操作的原因是,当用户启动实例:
这有助于防止用户运行的应用程序拥有比用户被授予的权限更多的权限——也就是说,从能够获得更高的特权。例如,想象一下用户Alice只有启动Amazon EC2实例的权限处理Amazon S3桶,但她将角色传递给Amazon EC2实例具有使用IAM和DynamoDB的权限。在这种情况下,爱丽丝也许可以启动实例,登录进去,获得临时的安全凭证,然后执行IAM或DynamoDB操作她没有被授权。
你可能想读我的回答如何指定IAM角色为一个亚马逊EC2实例通过AWS CLI启动?查看更详细的解释,还可以链接到Mike Pope关于使用IAM角色(PassRole权限)授予启动EC2实例的权限的好文章,该文章从AWS的角度解释了这个主题。