継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

『PowerUserAccess』を使わず EC2 や Lambda の IAM を制御するポリシーサンプル

タダです.

開発期間中に開発者の権限としてAWS 管理ポリシー「PowerUserAccess」を設定することがあると思います.ただ,「PowerUserAccess」の詳細を確認すると IAM の操作がNotActionで不許可にされています.

PowerUserAccess」の詳細

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "NotAction": [
                "iam:*",
                "organizations:*",
                "account:*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateServiceLinkedRole",
                "iam:DeleteServiceLinkedRole",
                "iam:ListRoles",
                "organizations:DescribeOrganization",
                "account:ListRegions"
            ],
            "Resource": "*"
        }
    ]
}

EC2 や Lambda などのサービスでは IAM ロールを作り他のサービスと連携しますが,「PowerUserAccess」を設定すると IAM ロールや ポリシーの作成や付与ができません.AWS の管理者としては開発スピードを落とさず,IAM は必要最低限の権限を付与させたいです.今回は,EC2 と Lambda の IAM ロール・ポリシーを作成,付与する場合の IAM ポリシーを検証したので設定例を紹介します.

EC2 の IAM ポリシー例

EC2 の IAM ロール・ポリシー作成,付与のための IAM ポリシー例が以下になります.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateRole",
                "iam:CreatePolicy",
                "iam:PutRolePolicy",
                "iam:AttachRolePolicy",
                "iam:PassRole",
                "iam:List*",
                "iam:Get*",
                "iam:CreateInstanceProfile",
                "iam:AddRoleToInstanceProfile"
            ],
            "Resource": "*"
        }
    ]
}

肝となるのが iam:CreateInstanceProfileiam:AddRoleToInstanceProfile になります.EC2 の IAM ロールには インスタンスプロファイルを使用しますので,インスタンスプロファイルを作り(iam:CreateInstanceProfile)IAM ロールにインスタンスプロファイルを追加する( iam:AddRoleToInstanceProfile ) が必要です.

Lambda の IAM ポリシー例

次に, Lambda の IAM ロール・ポリシー作成,付与のための IAM ポリシー例が以下になります.カスタムポリシー,AWS 管理ポリシーどちらも Lambda の IAM ロールに適用可能なポリシーとなっています.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateRole",
                "iam:CreatePolicy",
                "iam:PutRolePolicy",
                "iam:AttachRolePolicy",
                "iam:PassRole",
                "iam:List*",
                "iam:Get*"
            ],
            "Resource": "*"
        }
    ]
}

Lambda 関数に綿密なアクセス権の解説ドキュメント

なお,Lambda の IAM ポリシーはドキュメントでも詳しく解説されている部分が少なかったのですが,下記の記事でケースごとにポリシー例が紹介されているので細かな制御を検討する時に参考にするとよいでしょう. aws.amazon.com

まとめ

EC2 と Lambda の IAM ロールやポリシーを作成・付与するための IAM ポリシー例を紹介しました.ユーザーの権限制御が AWS をセキュアに使うために必要な要素の1つです.IAM ポリシーの作成にあたっては実際に操作してみないと意図通りに設定されてるかがわかりにくいと思いますので,こう言ったナレッジは記事化して同じ悩みを持つ方の参考になれば嬉しいです!