10

我正在尝试使用 IAM 角色通过 ansible 创建 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": "*"
    }
  ]
}

请有任何建议。

4

1 回答 1

15

这里的问题不在于Amazon EC2本身的 IAM 角色,而是您(即您自己使用的 AWS 凭证)似乎缺乏iam:PassRole在启动时将该角色“传递”到请求的 EC2 实例所需的权限,请参阅在授予在 Amazon EC2 实例上运行的应用程序访问 AWS 资源的权限中将角色与 Amazon EC2 一起使用所需的权限部分以了解详细信息:

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

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

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

{
  "Version": "2012-10-17",   
  "Statement": [{
    "Effect": "Allow",
    "Action": [
      "iam:PassRole",
      "iam:ListInstanceProfiles",
      "ec2:*"
    ],
    "Resource": "*"
  }]
}

要求通过权限进行此间接的原因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 Permission)的精彩文章,该文章从 AWS 的角度解释了主题。

于 2014-06-25T12:09:47.163 回答