AWS Lambda に割り当てる IAM ポリシー

記事タイトルとURLをコピーする

はじめに

こんにちは、技術一課の山中です。 冬は好きではないですが、夏は嫌いです。秋と春は大好きです。

さて、 AWS Lambda に割り当てる IAM ポリシーですが、みなさんどのようにしていますでしょうか? まさか、「とりあえず全部 AdministratorAccess でええやん」でえいやってやっていませんか? 個人の検証アカウントでしたら百歩譲ってそれでよいかもしれませんが、できれば AWS のベストプラクティス に従い、最小権限を付与しましょう。

どのポリシーをつけるか

Lambda 関数を作成する場合、関数内で利用する API に対して必要なポリシーのみを割り当てていく、というのが基本のスタイルです。 例えば、関数内で describe_instances を利用して EC2 インスタンスの情報を取得する場合、以下のようなポリシーを付与します。

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

もし、 Action に記載する内容がわからないようであれば、 IAM ポリシーの作成画面でビジュアルエディタを利用するといいとおもいます。

また、 AWS Lambda では CloudWatch Logs にログを出力するために以下ポリシーが必要となります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:*:*:*"
            ]
        }
    ]
}

よって、 AWS Lambda でインスタンスの情報を取得したい (describe_instances を利用したい) ような場合は、以下ポリシーを割り当てるだけで十分です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:DescribeInstances",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:*:*:*"
            ]
        }
    ]
}

おわりに

今まで漠然と FullAccess を付けていた方もいらしたのではないでしょうか? もしかしたら、本番環境の AWS Lambda が AdministratorAccess で動いているケースもあるかもしれません。 上記のことを念頭に置き、できるだけ無駄な権限は与えないようにしましょう。