production.log

株式会社リブセンスでエンジニアをやっている星直史のブログです。

AWS IAM ユーザー各自のMFA設定ポリシーの登録

概要

AWS IAMでは、特定のグループにポリシー(権限)を設定し、そのグループにユーザーを追加することで、権限管理が容易になります。
設定できるポリシーは、AWSが用意しているポリシーと、独自に設定できるポリシーの2パターンあります。
今回は、AWS IAM ユーザー各自のMFA設定ポリシーの登録の方法について書いていきます。

背景

AWSのユーザー登録を行う場合、基本的にはIAMユーザーを作成し、操作を行うことになります。
この場合、権限が高ければ高いほど、コア機能の変更ができる権限を付与する設計になることが多いです。
また、開発組織が少なければ少ないほど、エンジニア一人あたりの権限の範囲が広くなりやすいです。
そのため、もし認証情報が漏れた場合の影響が計り知れないため、セキュリティ対策としてMFAを設定してもらうことになります。

先述の通り、AWS IAMのポリシーは、AWSが用意しているポリシーと、独自に設定できるポリシーがあるのですが、MFA設定に限定されたポリシーは、AWSが用意していないため独自に作成する必要があります。
Snapmart(およびPIXTA)の開発でも、このMFA設定を行うのですが、毎度毎度「あれ、どう書くんだっけ?」となってしまうため、備忘録として残しておきたいと思い、書きました。

設定

ポリシーの設定は下記の通りです。
下記JSONのうち、AWS_ACCOUNT_NOは、ご自分のAWSアカウントの番号をハイフンを除外した数値となります。(012345678901234みたいな数値)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:ListUsers"
            ],
            "Resource": [
                "arn:aws:iam::AWS_ACCOUNT_NO:user/"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:ListVirtualMFADevices"
            ],
            "Resource": [
                "arn:aws:iam::AWS_ACCOUNT_NO:mfa/"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:EnableMFADevice",
                "iam:DeactivateMFADevice",
                "iam:ResyncMFADevice",
                "iam:ListMFADevices"
            ],
            "Resource": [
                "arn:aws:iam::AWS_ACCOUNT_NO:user/${aws:username}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:DeleteVirtualMFADevice",
                "iam:CreateVirtualMFADevice"
            ],
            "Resource": [
                "arn:aws:iam::AWS_ACCOUNT_NO:mfa/${aws:username}"
            ]
        }
    ]
}