18

定義済みのマシン イメージを実行するための最小限のポリシーを絞り込もうとしています。イメージは 2 つのスナップショットに基づいており、「m1.medium」インスタンス タイプのみを起動したいと考えています。

それに基づいて、このページこの記事の助けを借りて、次のポリシーを作成しました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1385026304010",
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:InstanceType": "m1.medium"
                }
            },
            "Resource": [
                "arn:aws:ec2:us-east-1::instance/*",
                "arn:aws:ec2:us-east-1::image/ami-f1c3e498",
                "arn:aws:ec2:us-east-1::snapshot/snap-e2f51ffa",
                "arn:aws:ec2:us-east-1::snapshot/snap-18ca2000",
                "arn:aws:ec2:us-east-1::key-pair/shenton",
                "arn:aws:ec2:us-east-1::security-group/sg-6af56d02",
                "arn:aws:ec2:us-east-1::volume/*"
            ]
        }
    ]
}

ポリシーは、特定のインスタンスとボリュームを開いたままにして、正確なイメージ、スナップショット、セキュリティ グループ、およびキー ペアを絞り込みます。

here で説明されているように、次のように CLI ツールを使用しています。

aws ec2 run-instances --dry-run \
    --image-id ami-f1c3e498 \
    --key-name shenton \
    --security-group-ids sg-6af56d02 \
    --instance-type m1.medium

は次の~/.aws/configとおりです。

[default]
output = json
region = us-east-1
aws_access_key_id = ...
aws_secret_access_key = ...

このコマンドの結果は一般的なYou are not authorized to perform this operationメッセージになり、エンコードされた認証失敗メッセージは、私のステートメントがどれも一致しなかったことを示しているため、アクションを拒否します。

に変更すると"Resource": "*"明らかに問題は解決しますが、上記が機能しない理由についてもっと理解を深めたいと思います。これにはある程度の当て推量が含まれることを十分に理解しているので、どんなアイデアでも歓迎します。

4

1 に答える 1

30

Amazon Web Services の Jeff Barr から連絡があり、問題の原因を突き止める手助けをしてくれました。

最初に、次のステートメントを使用して認証失敗メッセージをデコードする必要があります。

$ aws sts decode-authorization-message --encoded-message 6gO3mM3p....IkgLj8ekf

IAM ユーザー / ロールにsts:DecodeAuthorizationMessageアクションのアクセス許可があることを確認してください。

応答には、DecodedMessageJSON でエンコードされた別の本文で構成されるキーが含まれています。

{
    "allowed": false,
    "explicitDeny": false,
    "matchedStatements": {
        "items": []
    },
    "failures": {
        "items": []
    },
    "context": {
        "principal": {
            "id": "accesskey",
            "name": "testuser",
            "arn": "arn:aws:iam::account:user/testuser"
        },
        "action": "ec2:RunInstances",
        "resource": "arn:aws:ec2:us-east-1:account:instance/*",
        "conditions": { ... }
    }
}

その下context => resourceには、ポリシーと照合しようとしていたリソースが表示されます。ご覧のとおり、アカウント番号が必要です。したがって、 arn のドキュメントは次のように読む必要があります。

特に指定がない限り、リージョンとアカウントは必須です。

アカウント番号を追加するか*、影響を受ける ARN に問題を修正しました。

"Resource": [
    "arn:aws:ec2:us-east-1:*:instance/*",
    "arn:aws:ec2:us-east-1:*:image/ami-f1c3e498",
    "arn:aws:ec2:us-east-1:*:snapshot/snap-e2f51ffa",
    "arn:aws:ec2:us-east-1:*:snapshot/snap-18ca2000",
    "arn:aws:ec2:us-east-1:*:key-pair/shenton",
    "arn:aws:ec2:us-east-1:*:security-group/sg-6af56d02",
    "arn:aws:ec2:us-east-1:*:volume/*"
]
于 2013-11-21T18:46:32.587 に答える