AWS Identity and Access Management
ユーザーガイド

チュートリアル: ユーザーが自分の認証情報および MFA を設定できるようにする

ユーザーが各自の多エレメント認証 (MFA) デバイスと認証情報を自己管理するようにできます。ユーザーが少数の場合は、AWS マネジメントコンソール を使用して、認証情報 (アクセスキー、パスワード、デジタル署名用証明書、SSH パブリックキー) および MFA デバイスを設定することができます。しかし、この作業には、ユーザーの数が増えるにつれて時間がかかります。セキュリティ上のベストプラクティスでは、ユーザーが定期的にパスワードを変更し、アクセスキーをローテーションするように指定しています。また、必要のない認証情報を削除または無効化し、機密性の高い操作のために MFA を使用する必要があります。このチュートリアルの目的は、このようなベストプラクティスを管理者に負担を与えずに実現する方法を示すことです。

このチュートリアルでは、AWS サービスへのアクセスをユーザーに許可する方法を示します。ただし、ユーザーが MFA を使用してサインインした場合に限ります。MFA デバイスでサインインしていない場合、ユーザーは他のサービスにアクセスできません。

このワークフローには 3 つの基本的なステップがあります。

ステップ 1: MFA サインインを強制するポリシーを作成する

認証情報の変更と MFA デバイスの管理を有効にする特定の IAM API オペレーションを除き、すべてのアクションを禁止するカスタマー管理ポリシーを作成します。MFA アクセス許可は、AWS がサポートするすべての MFA デバイスで同じです。

ステップ 2: テストグループにポリシーを関連付ける

メンバーが MFA でサインインすると、すべての Amazon EC2 アクションにフルアクセスできるグループを作成します。このようなグループを作成するには、AmazonEC2FullAccess という AWS 管理ポリシーと最初の手順で作成したカスタマー管理ポリシーの両方をアタッチします。

ステップ 3: ユーザーアクセスをテストする

テストユーザーとしてサインインし、MFA デバイスを作成してそのデバイスを使用してサインインするまで、Amazon EC2 へのアクセスがブロックされることを確認します。

前提条件

このチュートリアルのステップを実行するには、以下を持っている必要があります:

  • 管理者権限を持つ IAM ユーザーとしてサインインできる AWS アカウント。

  • アカウント ID 番号。ステップ 1 のポリシーに入力します。

    アカウント ID 番号を確認するには、ページ上部のナビゲーションバーで [サポート]、[サポートセンター] の順に選択します。アカウント ID 番号は、このページの [サポート] メニューの下で確認できます。

  • 仮想 (ソフトウェアベース) MFA デバイスU2F セキュリティキー、またはハードウェアベース MFA デバイス

  • グループのメンバーであるテスト IAM ユーザーは次のとおりです。

ユーザーアカウントを作成する グループアカウントを作成して設定する
ユーザー名 その他の手順 グループ名 メンバーとしてユーザーを追加する その他の手順
MFAUser [AWS マネジメントコンソール のアクセス] のオプションのみを選択し、パスワードを割り当てます。 EC2MFA MFAUser このグループへのポリシーのアタッチや、アクセス許可の付与は行わないでください。

ステップ 1: MFA サインインを強制するポリシーを作成する

まず、IAM ユーザー各自の認証情報と MFA デバイスの管理に必要なアクセス許可を除いて、すべてのアクセス許可を拒否する IAM カスタマー管理ポリシーを作成します。

  1. 管理者認証情報を使用してユーザーとして AWS マネジメントコンソールにサインインします。IAM のベストプラクティスに準拠し、AWS アカウントのルートユーザー 認証情報ではサインインしないでください。詳細については、「個々の IAM ユーザーの作成」を参照してください。

  2. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  3. ナビゲーションペインで、[ポリシー]、[ポリシーの作成] の順に選択します。

  4. [JSON] タブを選択し、以下の JSON ポリシードキュメントからテキストをコピーします。このテキストを [JSON] ボックスに貼り付けます。

    注記

    このポリシー例では、サインイン時のパスワードのリセットをユーザーに許可していません。新しいユーザーおよびパスワードの期限が切れているユーザーは、これを行う場合があります。この操作を許可するには、iam:ChangePasswordiam:CreateLoginProfile をステートメント BlockMostAccessUnlessSignedInWithMFA に追加します。ただし、IAM ではこのようなアクセス許可をお勧めしません。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAllUsersToListAccounts", "Effect": "Allow", "Action": [ "iam:ListAccountAliases", "iam:ListUsers", "iam:ListVirtualMFADevices", "iam:GetAccountPasswordPolicy", "iam:GetAccountSummary" ], "Resource": "*" }, { "Sid": "AllowIndividualUserToSeeAndManageOnlyTheirOwnAccountInformation", "Effect": "Allow", "Action": [ "iam:ChangePassword", "iam:CreateAccessKey", "iam:CreateLoginProfile", "iam:DeleteAccessKey", "iam:DeleteLoginProfile", "iam:GetLoginProfile", "iam:ListAccessKeys", "iam:UpdateAccessKey", "iam:UpdateLoginProfile", "iam:ListSigningCertificates", "iam:DeleteSigningCertificate", "iam:UpdateSigningCertificate", "iam:UploadSigningCertificate", "iam:ListSSHPublicKeys", "iam:GetSSHPublicKey", "iam:DeleteSSHPublicKey", "iam:UpdateSSHPublicKey", "iam:UploadSSHPublicKey" ], "Resource": "arn:aws:iam::*:user/${aws:username}" }, { "Sid": "AllowIndividualUserToListOnlyTheirOwnMFA", "Effect": "Allow", "Action": [ "iam:ListMFADevices" ], "Resource": [ "arn:aws:iam::*:mfa/*", "arn:aws:iam::*:user/${aws:username}" ] }, { "Sid": "AllowIndividualUserToManageTheirOwnMFA", "Effect": "Allow", "Action": [ "iam:CreateVirtualMFADevice", "iam:DeleteVirtualMFADevice", "iam:EnableMFADevice", "iam:ResyncMFADevice" ], "Resource": [ "arn:aws:iam::*:mfa/${aws:username}", "arn:aws:iam::*:user/${aws:username}" ] }, { "Sid": "AllowIndividualUserToDeactivateOnlyTheirOwnMFAOnlyWhenUsingMFA", "Effect": "Allow", "Action": [ "iam:DeactivateMFADevice" ], "Resource": [ "arn:aws:iam::*:mfa/${aws:username}", "arn:aws:iam::*:user/${aws:username}" ], "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } } }, { "Sid": "BlockMostAccessUnlessSignedInWithMFA", "Effect": "Deny", "NotAction": [ "iam:CreateVirtualMFADevice", "iam:ListVirtualMFADevices", "iam:EnableMFADevice", "iam:ResyncMFADevice", "iam:ListAccountAliases", "iam:ListUsers", "iam:ListSSHPublicKeys", "iam:ListAccessKeys", "iam:ListServiceSpecificCredentials", "iam:ListMFADevices", "iam:GetAccountSummary", "sts:GetSessionToken" ], "Resource": "*", "Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "false" } } } ] }

    このポリシーで行うこと

    • AllowAllUsersToListAccounts ステートメントにより、ユーザーはアカウントとそのユーザーに関する基本情報を IAM コンソールで表示できます。この 3 つのアクセス許可は独自のステートメントにある必要があります。これは、アクセス許可が特定のリソース ARN の指定をサポートせず、また指定する必要もなく、その代わりに "Resource" : "*" を指定するためです。

    • AllowIndividualUserToSeeAndManageOnlyTheirOwnAccountInformation ステートメントにより、ユーザーは自分のユーザー、パスワード、アクセスキー、署名証明書、SSH パブリックキー、および MFA 情報を IAM コンソールで管理できます。また、これにより、ユーザーは管理者から初回パスワードの設定を求められたときに初めてサインインを許可されます。リソース ARN は、これらのアクセス権限の使用をユーザー独自の IAM ユーザーエンティティにのみ制限します。

    • AllowIndividualUserToListOnlyTheirOwnMFA ステートメントでは、ユーザーは独自の MFA デバイスを一覧表示できます。リソース ARN は、これらのアクセス権限の使用をユーザー独自の IAM ユーザーエンティティにのみ制限します。ユーザーが、他のユーザーの MFA デバイスを一覧表示することはできません。

    • AllowIndividualUserToManageTheirOwnMFA ステートメントでは、ユーザーは独自の MFA デバイスを管理できます。このステートメントのリソース ARN は、現在サインインしているユーザーと正確に名前が一致するユーザーや MFA デバイスにのみアクセスを許可することに注意してください。ユーザーは、各自の MFA デバイス以外の MFA デバイスを作成または変更することはできません。

    • AllowIndividualUserToDeactivateOnlyTheirOwnMFAOnlyWhenUsingMFA ステートメントでは、MFA を使用してサインインした場合に限り、ユーザーは各自の MFA デバイスのみを無効化できます。これにより、他者がアクセスキー (MFA デバイスではなく) のみを使用して MFA デバイスを無効化したり、アカウントにアクセスしたりできなくなります。

    • BlockMostAccessUnlessSignedInWithMFA ステートメントでは、ユーザーが MFA でサインインしていない場合"Deny""NotAction" の組み合わせを使用して、IAM と他の AWS のサービスのすべてのアクション (数例を除く) へのアクセスを拒否します。このステートメントのロジックの詳細については、「Deny での NotAction の使用」を参照してください。ユーザーが MFA でサインインしている場合、"Condition" テストは失敗し、最後の "deny" ステートメントは無効になります。ユーザーのアクセス許可は、ユーザー用の他のポリシーやステートメントで決定されます。このステートメントにより、ユーザーが MFA でサインインしていない場合、ユーザーが実行できるのは表示されたアクションのみで、これらのアクションへのアクセスが別のステートメントやポリシーで許可されている場合に限られます。

      ...IfExists バージョンの Bool 演算子により、aws:MultiFactorAuthPresent キーが見つからない場合、条件は必ず true を返します。つまり、アクセスキーなどの長期認証情報を使用して API にアクセスするユーザーは IAM 以外の API オペレーションへのアクセスを拒否されます。

  5. 完了したら、[ポリシーの確認] を選択します。Policy Validator によって、構文エラーがある場合はレポートされます。

    注記

    いつでも [Visual editor (ビジュアルエディタ)] タブと [JSON] タブを切り替えることができます。ただし、上記のポリシーには NotAction 要素が含まれていますが、これはビジュアルエディタではサポートされていません。このポリシーについては、[Visual editor (ビジュアルエディタ)] タブに通知が表示されます。[JSON] タブに戻り、このポリシーの操作を続行します。

  6. [Review (確認)] ページで、ポリシー名として「Force_MFA」と入力します。ポリシーの詳細として、「This policy allows users to manage their own passwords and MFA devices but nothing else unless they authenticate with MFA.」と入力します。ポリシーの [Summary (概要)] で、ポリシーによって割り当てられたアクセス許可を確認し、[ポリシーの作成] を選択して作業を保存します。

    新しいポリシーが管理ポリシーの一覧に表示され、アタッチの準備ができます。

ステップ 2: テストグループにポリシーを関連付ける

次に、MFA で保護されたアクセス許可を付与するために使用されるテスト IAM グループに、2 つのポリシーをアタッチします。

  1. ナビゲーションペインで、[ Groups] を選択します。

  2. 検索ボックスに「EC2MFA」と入力し、リストのグループ名 (チェックボックスではありません) を選択します。

  3. [Permissions (アクセス許可)] タブで、[ポリシーのアタッチ] をクリックします。

  4. [ポリシーのアタッチ] ページで、検索ボックスに「EC2Full」と入力し、リストの [AmazonEC2FullAccess] の横にあるチェックボックスを選択します。変更はまだ保存しないでください。

  5. 検索ボックスに「Force」と入力し、リストの [Force_MFA] の横にあるチェックボックスをオンにします。

  6. [Attach Policy] を選択します。

ステップ 3: ユーザーアクセスをテストする

チュートリアルのこの部分では、テストユーザーとしてサインインし、ポリシーが意図したとおりに動作することを確認します。

  1. 前のセクションで割り当てたパスワードを使用し、MFAUser として AWS アカウントにサインインします。URL: https://<alias or account ID number>.signin.aws.amazon.com/console を使用します。

  2. [EC2] を選択して Amazon EC2 コンソールを開き、ユーザーには一切の操作を行うアクセス許可がないことを確認します。

  3. ナビゲーションバーで [サービス] を選択し、[IAM] を選択して IAM コンソールを開きます。

  4. ナビゲーションペインで、[ユーザー] を選択し、ユーザーとして (チェックボックスではなく) [MFAUser] を選択します。デフォルトで [グループ] タブが表示される場合は、グループメンバーシップを表示するアクセス許可がないことを意味します。

  5. ここで MFA デバイスを追加します。[Security credentials] タブを選択します。[Assigned MFA device (割り当て済み MFA デバイス)] の横で、[管理] を選択します。

  6. このチュートリアルでは、携帯電話で Google Authenticator アプリなどの仮想 (ソフトウェアベース) MFA デバイスを使用します。[仮想 MFA デバイス] を選択し、[次のステップ] をクリックします。

    IAM が QR コードを含む仮想 MFA デバイスの設定情報を生成して表示します。図は、QR コードに対応していないデバイスでの手動入力に利用できるシークレット設定キーを示しています。

  7. 仮想 MFA アプリを開きます。(仮想 MFA デバイスをホストするために使用できるアプリのリストについては、「仮想 MFA アプリケーション」を参照) 仮想 MFA アプリが複数のアカウント (複数の仮想 MFA デバイス) をサポートしている場合は、新しいアカウント (新しい仮想 MFA デバイス) を作成するオプションを選択します。

  8. MFA アプリが QR コードをサポートしているかどうかを確認してから、次のいずれかを実行します。

    • ウィザードから、[Show QR code (QR コードの表示)] を選択します。QR コードをスキャンするアプリを使用します。たとえば、カメラアイコンまたは [Scan code (スキャンコード)] に似たオプションを選択し、デバイスのカメラを使用してコードをスキャンします。

    • [MFA デバイスの管理] ウィザードで [手動設定のシークレットキーを表示] を選択し、MFA アプリにシークレット設定キーを入力します。

    これで仮想 MFA デバイスはワンタイムパスワードの生成を開始します。

  9. [MFA デバイスの管理] ウィザードの [MFA Code 1 (MFA コード 1)] ボックスに、現在仮想 MFA デバイスに表示されているワンタイムパスワードを入力します。デバイスが新しいワンタイムパススワードを生成するまで待ちます (最長 30 秒)。生成されたら [MFA Code 2 (MFA コード 2)] ボックスに 2 つ目のワンタイムパススワードを入力します。[Assign MFA (MFA の割り当て)] を選択します。

    重要

    コードを生成したら、即時にリクエストを送信します。コードを生成した後にリクエストを送信するまで時間がかかりすぎる場合、MFA デバイスはユーザーと正常に関連付けられます。ただし、MFA デバイスは同期しません。これは、時刻ベースのワンタイムパスワード (TOTP) の有効期間が短いために起こります。その場合は、デバイスの再同期ができます。

    これで仮想 MFA デバイスを AWS で使用できます。

  10. コンソールからサインアウトし、再度 MFAUser としてサインインします。今回は AWS により、携帯電話から MFA コードを取得するよう求められます。コードを取得したら、それをボックスに入力し、[Submit (送信)] を選択します。

  11. [EC2] を選択し、再度 Amazon EC2 コンソールを開きます。今回は、すべての情報を表示して、必要なアクションを実行することができます。このユーザーとしてその他のコンソールにアクセスすると、このチュートリアルのポリシーは Amazon EC2 へのアクセスのみ許可するため、"アクセス拒否" メッセージが表示されます。

IAM ユーザーガイド の関連情報については、以下の関連リソースを参照してください。