IAM ポリシー作成時に「すべてのリソース を選択する必要があります」という警告が出た場合の対処方法

IAM ポリシーの作成時に「ポリシーのアクションはリソースレベルのアクセス許可をサポートしておらず、 すべてのリソース を選択する必要があります」というエラーメッセージが表示された場合の、解決方法をご案内いたします。
2020.05.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

IAM ポリシーの作成時に「ポリシーのアクションはリソースレベルのアクセス許可をサポートしておらず、 すべてのリソース を選択する必要があります」というエラーメッセージが表示されています。解決方法を教えてください。

前提となる知識

IAM アクションには、リソースレベルのアクセス許可がサポートされているものと、されていないものがあります。

リソースレベルのアクセス許可がサポートされている場合

Resource 句に当該の IAM アクションが影響するリソースの範囲を指定することができます。

また、Resource 句にアスタリスク(*)を指定することで、すべてのリソースの範囲を指定することもできます。

一部のリソースを指定する場合の IAM ポリシー例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "IAMPolicyStartStop",
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "arn:aws:ec2:<リージョン名>:<AWSアカウントID>:instance/<インスタンスID>"
        }
    ]
}

すべてのリソース範囲を指定する場合の IAM ポリシー例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "IAMPolicyStartStop",
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "*"
        }
    ]
}

リソースレベルのアクセス許可がサポートされていない場合

Resource 句に当該の IAM アクションが影響するリソースの範囲を指定することはできません。

すべてのリソースを対象とするのみとなり、Resource 句にアスタリスク(*)を指定する必要があります。

IAM ポリシー例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "IAMPolicyDescribe",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        }
    ]
}

どう対応すればいいの?

今回は以下の IAM ポリシーにて当該のエラーメッセージが出る状態からの解決方法をご案内します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "IAMPolicy",
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances",
                "ec2:DescribeInstances"
            ],
            "Resource": "arn:aws:ec2:<リージョン名>:<AWSアカウントID>:instance/<インスタンスID>"
        }
    ]
}

エラーメッセージのスクリーンショット

IAM アクションの中で、リソースレベルのアクセス許可がサポートされていないアクションを抜き出します。 Amazon EC2 のアクション、リソース、および条件キー - AWS Identity and Access Management

「ec2:StartInstances」と「ec2:StopInstances」はリソースタイプに instance の指定が可能です。

「ec2:DescribeInstances」はリソースタイプの指定をすることができません。

リソースレベルのアクセス許可がサポートされていないアクションを別のステートメント(Statement)へ移し、Resource句にアスタリスク(*)を指定します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "IAMPolicyStartStop",
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "arn:aws:ec2:<リージョン名>:<AWSアカウントID>:instance/<インスタンスID>"
        },
        {
            "Sid": "IAMPolicyDescribe",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        }
    ]
}

エラーメッセージがなくなったことを確認しました。

参考情報

IAM と連携する AWS のサービス - AWS Identity and Access Management

Amazon EC2 のアクション、リソース、および条件キー - AWS Identity and Access Management