【新機能】AWS IAMにポリシー検証用のAPIが追加されました

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

超おはようございます、城内です。

最近はずっと雨ばかりだと思っていたら、急に涼しくなりましたね。とはいえ、まだ9月中旬で暑い日もあり、寒暖差で体調が狂ってしまっている人もいるのではないでしょうか。
くれぐれも風邪などにはお気をつけください。

ということで、今回はIAMの新機能紹介です。

新機能

先週の発表でしたが、IAMのAPIに、新たに検証用のAPIが2つ追加されました。
iam:SimulatePrincipalPolicyiam:SimulateCustomPolicyです。

どんなことをしてくれるかというと、IAMのポリシー設定に対し、特定のアクションが許可されるか、されないかを検証してくれます。
これはとても便利ですね!
マネージメントコンソールから操作してみたり、APIをキックしてみたりして検証する手間を省いてくれます。

試してみる

では、さっそく試してみたいと思います。
今回は、AWS CLIの対応するコマンドと標準の「PowerUserAccess」ポリシーを使って動作確認をしてみます。

まず、IAMユーザを作成し、「PowerUserAccess」ポリシーをアタッチします。

$ aws iam create-user --user-name "test-user"
{
    "User": {
        "UserName": "test-user",
        "Path": "/",
        "CreateDate": "2015-09-13T16:42:57.672Z",
        "UserId": "XXXXXXXXXXXXXXXXXX",
        "Arn": "arn:aws:iam::123456789012:user/test-user"
    }
}
$ aws iam attach-user-policy --user-name "test-user" --policy-arn "arn:aws:iam::aws:policy/PowerUserAccess"

次に、simulate-principal-policyを使用して、IAMのアクションiam:ListUsersとEC2のアクションec2:DescribeInstancesを検証してみます。

$ aws iam simulate-principal-policy --policy-source-arn "arn:aws:iam::123456789012:user/test-user" --action-names "iam:ListUsers" "ec2:DescribeInstances"
{
    "EvaluationResults": [
        {
            "EvalDecision": "implicitDeny",
            "MissingContextValues": [],
            "EvalActionName": "iam:ListUsers",
            "MatchedStatements": [],
            "EvalResourceName": "*"
        },
        {
            "EvalDecision": "allowed",
            "MissingContextValues": [],
            "EvalActionName": "ec2:DescribeInstances",
            "MatchedStatements": [
                {
                    "SourcePolicyId": "PowerUserAccess",
                    "StartPosition": {
                        "Column": 17,
                        "Line": 3
                    },
                    "EndPosition": {
                        "Column": 6,
                        "Line": 8
                    }
                }
            ],
            "EvalResourceName": "*"
        }
    ],
    "IsTruncated": false
}

IAMのアクションは拒否され、EC2のアクションは許可されました。
想定通りの結果がでましたね。
さらに、条件にマッチした場合には、ポリシードキュメントの何行目に該当したかも分かるようになっていて、とても親切です!

で、simulate-custom-policyですが、こちらは、コマンドラインに直接ポリシードキュメントを打ち込みます。
以下の感じです。

$ aws iam simulate-custom-policy --policy-input-list '{
>   "Version": "2012-10-17",
>   "Statement": [
>     {
>       "Effect": "Allow",
>       "NotAction": "iam:*",
>       "Resource": "*"
>     }
>   ]
> }' --action-names "iam:ListUsers" "ec2:DescribeInstances"
{
    "EvaluationResults": [
        {
            "EvalDecision": "implicitDeny",
            "MissingContextValues": [],
            "EvalActionName": "iam:ListUsers",
            "MatchedStatements": [],
            "EvalResourceName": "*"
        },
        {
            "EvalDecision": "allowed",
            "MissingContextValues": [],
            "EvalActionName": "ec2:DescribeInstances",
            "MatchedStatements": [
                {
                    "SourcePolicyId": "PolicyInputList.1",
                    "StartPosition": {
                        "Column": 17,
                        "Line": 3
                    },
                    "EndPosition": {
                        "Column": 6,
                        "Line": 8
                    }
                }
            ],
            "EvalResourceName": "*"
        }
    ],
    "IsTruncated": false
}

こちらは、細かいポリシー設定を作り込むときに役に立ちそうですね。

以上

という感じで、さらっと新機能を試してみましたが、IAMポリシーを作り込みたい時にはとても役に立ちそうですね!
皆さんも、AWS CLIをバージョンアップして、どんどん使ってみてください。
(まあ、あまり複雑なポリシーは作らない方がいいかと思いますがw)

参考情報