概要
- AWS IAMのドキュメントのチュートリアルでMFAのマスト化は(ベストプラクティス的にも)最低限行なっておいたほうが良いと感じたので、その手法をまとめました
- 対象読者はIAM管理、IAMのベストプラクティスにのっとったセキュリティ管理に興味のある方です
0. 事前準備
IAMのダッシュボードで、AWSマネジメントコンソールへのアクセスのみ許可されたテストユーザー(test_user)を作成し、ポリシーやアクセス許可が一切行われていないテストグループ(TestGroup)を作成してください
1. MFAサインインを強制するポリシーの作成
- 管理者権限のあるIAMでAWSマネジメントコンソールにサインインしてください。(ルートユーザでのサインインはベストプラクティス上非推奨です。)
- IAMコンソールを開きます
- 左側のナビゲーションメニューからポリシーを選択し、左上の青色のポリシーの作成を選択してください
- デフォルトではビジュアルエディタが選択されているので、JSONたぶに切り替え、jsonをコピペしください。
- 右下の青色のポリシーの確認を選択してください(構文エラーがある場合は報告されます)
- 確認ページでポリシー名として好きな名前(例えば
ForceMFA
など)を入力してください。 - ポリシーの詳細としては適当に(
This policy allows users to manage their own passwords and MFA devices but nothing else unless they authenticate with MFA.
など)入力してください。(英文のみ許可されています。)
json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowViewAccountInfo",
"Effect": "Allow",
"Action": [
"iam:GetAccountPasswordPolicy",
"iam:GetAccountSummary",
"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"
],
"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",
"iam:DeleteVirtualMFADevice"
],
"Resource": "arn:aws:iam::*:mfa/${aws:username}"
},
{
"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:ListMFADevices",
"iam:ListVirtualMFADevices",
"iam:ResyncMFADevice",
"sts:GetSessionToken"
],
"Resource": "*",
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "false"
}
}
}
]
}
2. テストグループにポリシーを関連づける
- IAMコンソールの左側のナビゲーションメニューでグループを選択します
- 検索ボックスに事前準備で作成したテストグループ(TestGroupなど)を入力し、選択してください
- デフォルトでアクセス許可のタブが選択されているので、その下の青色のポリシーのアタッチを選択してください
- 検索ボックスで先ほど作成したポリシー(ForceMFA)を入力し、チェックボックスをオンにします(まだ変更保存はしない)
- さらに、そのテストユーザーに認証を与えるポリシーにチェックを付けます(例えばEC2に対するフルアクセスを許可する場合は
AmazonEC2FullAccess
のチェックボックスをオンにします) - 右下の青色のポリシーのアタッチを選択してください
3. テストユーザーでアクセスをテストする
- 作成したテストユーザーでAWSアカウントにサインインしてください(URL:
https://<alias or account ID number>.signin.aws.amazon.com/console
) - Amazon EC2コンソールを開き、一切の捜査権限がないことを確認してください
- 右上のナビゲーションバーを選択し、マイセキュリティ資格情報を選択してください
- ここでMFA認証を有効にしてください
- コンソールからサインアウトし、もう一度テストユーザーとしてサインインしてください(このときMFAが有効になっているはずです)
- Amazon EC2コンソールを開き、全てのアクションを実行することができることを確認してください(ただし、EC2以外のコンソールに移動すると、アクセス拒否されていることが確認できます)