

# AWS: MFA で認証された IAM ユーザーが [セキュリティ認証情報] ページで自分の MFA デバイスを管理できるようにします
<a name="reference_policies_examples_aws_my-sec-creds-self-manage-mfa-only"></a>

この例は、[多要素認証 (MFA)](id_credentials_mfa.md) によって認証された IAM ユーザーが **[セキュリティ認証情報]** ページで自分の MFA デバイスを管理できるようにする ID ベースポリシーを作成する方法を示しています。この AWS マネジメントコンソール ページにはアカウントとユーザー情報が表示されますが、ユーザーは自分の MFA デバイスを表示および編集することしかできません。ユーザーに MFA を使用して自らのすべての認証情報を管理することを許可するには、「[AWS: MFA で認証された IAM ユーザーが [セキュリティ認証情報] ページで自分の認証情報を管理できるようにします](reference_policies_examples_aws_my-sec-creds-self-manage.md)」を参照してください。

**注記**  
このポリシーを設定した IAM ユーザーが MFA 認証されていない場合、このポリシーは、MFA を使用した認証に必要なアクションを除いて、すべての AWS アクションへのアクセスを拒否します。AWS CLI および AWS API を使用するには、IAM ユーザーはまず AWS STS [GetSessionToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetSessionToken.html) オペレーションを使用して MFA トークンを取得し、次にそのトークンを使用して目的のオペレーションを認証する必要があります。リソースベースポリシーや他の ID ベースポリシーなどの他のポリシーを使用して、他のサービスでのアクションを許可できます。IAM ユーザーが MFA 認証されていない場合、同ポリシーはそのアクセスを拒否します。

ユーザーが **[セキュリティ認証情報]** ページにアクセスする方法については、「[IAM ユーザー自身によるパスワードの変更方法 (コンソール)](id_credentials_passwords_user-change-own.md#ManagingUserPwdSelf-Console)」を参照してください。

**このポリシーで行うこと**
+ この `AllowViewAccountInfo` ステートメントでは、ユーザーに対して有効になっている仮想 MFA デバイスに関する詳細を表示することを許可します。このアクセス許可は、リソース ARN の指定をサポートしていないため、独自のステートメント内になければなりません。または `"Resource" : "*"` を指定する必要があります。
+ この `AllowManageOwnVirtualMFADevice` ステートメントにより、ユーザーは自分の仮想 MFA デバイスを作成できます。このステートメントのリソース ARN によって、ユーザーが任意の名前の MFA デバイスを作成できますが、ポリシー内の他のステートメントでは、ユーザーはデバイスを現在サインインしているユーザーにしかアタッチできません。
+ この `AllowManageOwnUserMFA` ステートメントでは、ユーザーは自分のユーザーの仮想、U2F、またはハードウェア MFA デバイスを表示または管理できます。このステートメントのリソース ARN は、ユーザー自身の IAM ユーザーにのみアクセスを許可します。ユーザーは他のユーザーの MFA デバイスを表示または管理することはできません。
+ `DenyAllExceptListedIfNoMFA` ステートメントは、ユーザーが MFA でサインインしていない***場合のみ***、いくつかのリストされたアクションを除いて、すべての AWS のサービスのすべてのアクションへのアクセスを拒否します。このステートメントでは、`"Deny"` と `"NotAction"` の組み合わせを使用して、表示されていないすべてのアクションへのアクセスを明示的に拒否しています。リストされている項目は、このステートメントによって拒否または許可されていません。ただし、アクションはポリシー内の他のステートメントによって許可されています。このステートメントのロジックの詳細については、「[Deny での NotAction の使用](reference_policies_elements_notaction.md)」を参照してください。ユーザーが MFA でサインインしている場合、`Condition` テストは失敗し、このステートメントはアクションを拒否しません。この場合、ユーザーの他のポリシーまたは文によってユーザーのアクセス許可が決まります。

  このステートメントは、ユーザーが MFA にサインインしていないときに、リストされているアクションのみを実行できることを保証します。さらに、他のステートメントまたはポリシーがそれらのアクションへのアクセスを許可している場合にのみ、リストされているアクションを実行できます。

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

このポリシーでは、IAM コンソールで [**ユーザー**] ページを表示したり、そのページを使用して自分のユーザー情報にアクセスすることはできません。これを許可するには、 `iam:ListUsers` アクションを `AllowViewAccountInfo` ステートメントと `DenyAllExceptListedIfNoMFA` ステートメントに追加します。

**警告**  
MFA 認証なしで MFA デバイスを削除するためのアクセス許可を追加しないでください。このポリシーを持つユーザーは、仮想化 MFA デバイスを割り当てようとする場合に、`iam:DeleteVirtualMFADevice` を実行する権限がないというエラーが表示されることがあります。このような場合には、そのアクセス許可を `DenyAllExceptListedIfNoMFA` ステートメントに追加**しないようにします**。MFA を使用して認証されていないユーザーは、MFA デバイスを削除してはいけません。ユーザーが以前に自分のユーザーに仮想 MFA デバイスの割り当てを開始して処理をキャンセルした場合、このエラーが表示されることがあります。この問題を解決するには、ユーザーまたは他の管理者が AWS CLI または AWS API を使用してユーザーの既存の仮想化 MFA デバイスを削除する必要があります。詳細については、「[iam:DeleteVirtualMFADevice を実行することを認可されていません](troubleshoot.md#troubleshoot_general_access-denied-delete-mfa)」を参照してください。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowViewAccountInfo",
            "Effect": "Allow",
            "Action": "iam:ListVirtualMFADevices",
            "Resource": "*"
        },
        {
            "Sid": "AllowManageOwnVirtualMFADevice",
            "Effect": "Allow",
            "Action": [
                "iam:CreateVirtualMFADevice"
            ],
            "Resource": "arn:aws:iam::*:mfa/*"
        },
        {
            "Sid": "AllowManageOwnUserMFA",
            "Effect": "Allow",
            "Action": [
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:GetUser",
                "iam:GetMFADevice",
                "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"}
            }
        }
    ]
}
```

------