AWS MFA (多要素認証) 必須化設定手順 (IAMポリシー設定手順)

AWS MFA - IAM Policy

AWS (Amazon Web Services) コンソールにIAMユーザーでログインする際、通常のデフォルト状態だとユーザー名とパスワードのみでログイン出来る。しかし、ITにおいてセキュリティが非常に重要となる昨今、それだけでは不安な利用シーンも数多く存在する。

そこで、本ナレッジではAWSコンソールへのログイン時MFA (多要素認証) を必須化することで、ITセキュリティを向上させる手順を説明する。
その方法としては、IAM (Identity and Access Management) ポリシーを設定しそれをIAMユーザに付与することにより、設定、実装する。

Sponsored Links

MFA強制用IAMポリシー作成

AWSコンソールへのログイン時MFAを必須化するため、最初にMFA強制用のIAMポリシーを作成する。
このIAMポリシーはMFAを設定していない状態で、ユーザ名とパスワードのみでAWSコンソールにログインした場合、MFA設定以外のAWS上リソースの操作や閲覧を禁止するIAMポリシーとなる。

  • AWSコンソールにルートユーザーかIAMポリシーを作成できる権限を持つIAMユーザにてログイン
  • 画面上部の検索欄にて「IAM」を検索およびクリックし、IAMダッシュボードにアクセス
  • 画面右上部のリージョン欄を確認し、「グローバル」リージョンであることを確認
  • 画面左部メニューの「ポリシー」をクリック
  • 「ポリシーの作成」をクリック

AWS MFA - IAM Policy

出典 : AWS Console – Amazon.com

 

  • 「ポリシーの作成」画面が表示されるのを確認
  • 「アクセス許可を指定」画面が表示されるので、「ポリシーエディタ」の「JSON」をクリック

AWS MFA - IAM Policy

出典 : AWS Console – Amazon.com

 

  • ポリシーエディタにて、既存の内容を削除し、下記JSONコードをコピーして記載

{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowViewAccountInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetAccountPasswordPolicy",
                "iam:ListVirtualMFADevices"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowManageOwnPasswords",
            "Effect": "Allow",
            "Action": [
                "iam:ChangePassword",
                "iam:GetUser"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "AllowManageOwnAccessKeys",
            "Effect": "Allow",
            "Action": [
                "iam:CreateAccessKey",
                "iam:DeleteAccessKey",
                "iam:ListAccessKeys",
                "iam:UpdateAccessKey",
                "iam:GetAccessKeyLastUsed"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "AllowManageOwnSigningCertificates",
            "Effect": "Allow",
            "Action": [
                "iam:DeleteSigningCertificate",
                "iam:ListSigningCertificates",
                "iam:UpdateSigningCertificate",
                "iam:UploadSigningCertificate"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "AllowManageOwnSSHPublicKeys",
            "Effect": "Allow",
            "Action": [
                "iam:DeleteSSHPublicKey",
                "iam:GetSSHPublicKey",
                "iam:ListSSHPublicKeys",
                "iam:UpdateSSHPublicKey",
                "iam:UploadSSHPublicKey"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "AllowManageOwnGitCredentials",
            "Effect": "Allow",
            "Action": [
                "iam:CreateServiceSpecificCredential",
                "iam:DeleteServiceSpecificCredential",
                "iam:ListServiceSpecificCredentials",
                "iam:ResetServiceSpecificCredential",
                "iam:UpdateServiceSpecificCredential"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "AllowManageOwnVirtualMFADevice",
            "Effect": "Allow",
            "Action": [
                "iam:CreateVirtualMFADevice"
            ],
            "Resource": "arn:aws:iam::*:mfa/*"
        },
        {
            "Sid": "AllowManageOwnUserMFA",
            "Effect": "Allow",
            "Action": [
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:ListMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "DenyAllExceptListedIfNoMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:CreateVirtualMFADevice",
                "iam:EnableMFADevice",
                "iam:GetUser",
                "iam:GetMFADevice",
                "iam:ListMFADevices",
                "iam:ListVirtualMFADevices",
                "iam:ResyncMFADevice",
                "iam:ChangePassword",
                "iam:GetAccountPasswordPolicy",
                "sts:GetSessionToken"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}

AWS MFA - IAM Policy

出典 : AWS Console – Amazon.com

 

  • 画面右下部の「次へ」をクリック
  • 「確認して作成」画面が表示されるので、下記を入力
    • ポリシーの詳細
      • ポリシー名
        • 任意のポリシー名 (例: Force_MFA)
      • 説明
        • 任意の説明 (例: 空欄)
    • このポリシーで定義されている許可 (本設定は既に設定内容が入っており、確認のみ)
      • 明示的拒否
        • 後述の「許可」以外のすべて
      • 許可
        • サービス – IAM、 アクセスレベル – 制限あり: 読み取り, リスト, 書き込み、 リソース – Multiple、 リクエストの条件 – None
    • タグを追加 – オプション
      • 任意のタグ (例: 空欄)
  • 画面右下部の「ポリシーの作成」をクリック

AWS MFA - IAM Policy

出典 : AWS Console – Amazon.com

 

  • IAMポリシー画面となり、画面上部にIAMポリシーが作成された旨のメッセージが表示される、そして、ポリシーの検索窓で作成したポリシーを検索すると対象のポリシーがあることが確認できる

 

上記のJSONコードは、下記のAWS公式ページに存在するサンプルJSONコードと少し差異がある。
公式ページのサンプルJSONコードでは、新規ユーザ作成の際、仮パスワード発行して初回ログイン時パスワード変更を必須とした運用とすると、パスワード変更が出来ずログインできなくなってしまう。

そのため、MFA未使用でもパスワードは変更可とするよう本手順では下記「// add」部分の2行を追加している。
ただし、これではMFAを実施していなくてもパスワードが変更可となってしまうため、セキュリティと利便性のトレードオフとなっている。運用シーンに応じて適宜適切なJSONコードを設定する。


        {
            "Sid": "DenyAllExceptListedIfNoMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:CreateVirtualMFADevice",
                "iam:EnableMFADevice",
                "iam:GetUser",
                "iam:GetMFADevice",
                "iam:ListMFADevices",
                "iam:ListVirtualMFADevices",
                "iam:ResyncMFADevice",
                "iam:ChangePassword",              // add
                "iam:GetAccountPasswordPolicy",    // add
                "sts:GetSessionToken"
            ],

 

IAMユーザへのMFA強制用IAMポリシー付与

その後、作成したMFA強制用IAMポリシーをIAMユーザーに付与することで、AWSコンソールログイン時、MFA設定以外のAWS上リソースの操作や閲覧等が出来なくすることが出来る。

IAMポリシー付与は、IAMユーザー作成時に「許可を設定」画面にて、「ポリシーを直接アタッチする」で付与することが可能である。

AWS MFA - IAM Policy

出典 : AWS Console – Amazon.com

 

また、IAMユーザーグループに「許可ポリシーを添付」でIAMポリシーを付与した後、IAMユーザーをそのIAMユーザーグループに所属させることでも実現出来る。

AWS MFA - IAM Policy

出典 : AWS Console – Amazon.com

 

以上がIAMポリシーによる、AWS MFA (多要素認証) 必須化設定手順 となる。

また、実際にIAMユーザーでログインしMFAを設定する手順については別ナレッジにて記載する。

Sponsored Links