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 ロールを指定する方法に対する私の回答を読みたいと思うかもしれません。より詳細な説明については、 IAM ロール (PassRole Permission) を使用して EC2 インスタンスを起動する権限を付与することに関する Mike Pope の素晴らしい記事にリンクしており、AWS の観点から主題を説明しています。

于 2014-06-25T12:09:47.163 に答える