AWS EC2实例通过Ansible IAM角色创建instance_profile_name UnauthorizedOperation:错误

Fai*_*ani 9 amazon-ec2 amazon-iam ansible-playbook

我试图通过ansible使用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
Run Code Online (Sandbox Code Playgroud)

而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": "*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

请给我任何建议.

Ste*_*pel 12

此处的问题不在于Amazon EC2本身的IAM角色,而是您(即您自己使用的AWS凭据)似乎缺少iam:PassRole在启动时将该角色"传递"到请求的EC2实例所需的权限,请参阅部分在授予在Amazon EC2实例上运行的应用程序中使用Amazon EC2角色所需的权限访问AWS资源以获取详细信息:

要启动具有角色的实例,开发人员必须具有启动Amazon EC2实例的权限以及传递IAM角色的权限.

以下示例策略允许用户使用AWS管理控制台启动具有角色的实例.该策略允许用户通过指定星号(*)来传递任何角色并执行所有Amazon EC2操作.ListInstanceProfiles操作允许用户查看AWS账户上可用的所有角色.

示例策略,通过使用Amazon EC2控制台授予用户启动具有任何角色的实例的权限

{
  "Version": "2012-10-17",   
  "Statement": [{
    "Effect": "Allow",
    "Action": [
      "iam:PassRole",
      "iam:ListInstanceProfiles",
      "ec2:*"
    ],
    "Resource": "*"
  }]
}
Run Code Online (Sandbox Code Playgroud)

通过PassRole权限要求此间接的原因是能够限制用户在启动实例时可以将哪个角色传递给Amazon EC2实例:

这有助于防止用户运行具有比授予用户更多权限的应用程序 - 即,能够获得提升的权限.例如,假设用户Alice仅具有启动Amazon EC2实例和使用Amazon S3存储桶的权限,但她传递给Amazon EC2实例的角色具有使用IAM和DynamoDB的权限.在这种情况下,Alice可能能够启动实例,登录实例,获取临时安全凭证,然后执行未经授权的IAM或DynamoDB操作.

您可能想阅读我如何为通过AWS CLI启动的Amazon EC2实例指定IAM角色的答案有关更精细的解释,它还链接到Mike Pope关于授予使用IAM角色启动EC2实例的权限(PassRole权限)的好文章,该文章从AWS的角度解释了主题.