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

AWS: MFA で認証された IAM ユーザーが [My Security Credentials (セキュリティ認証情報)] ページで自分の認証情報を管理できるようにします。

次のようなポリシーを作成する方法を示します。この例では、 は、Multi-Factor Authentication (MFA) を使用して認証された IAM ユーザーが [My Security Credentials (セキュリティ認証情報)] ページで自分の認証情報を管理できるようにします。この AWS マネジメントコンソール ページには、アカウント ID や正規ユーザー ID などのアカウント情報が表示されます。ユーザーは、自分のパスワード、アクセスキー、MFA デバイス、X.509 証明書、SSH キー、および Git 認証情報を表示および編集することもできます。この例では、必要なアクセス許可がポリシーに含まれているページ上のすべての情報を表示および編集する手順について説明します。また、AWS で他のオペレーションを実行する前に、ユーザーに MFA を使用した設定と認証を要求します。ユーザーに MFA を使用せずに自らの認証情報を管理することを許可するには、「AWS: IAM ユーザーが [My Security Credentials (セキュリティ認証情報)] ページで自分の認証情報を管理できるようにします。」を参照してください。

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

注記

このポリシー例では、サインイン時のパスワードのリセットをユーザーに許可していません。新しいユーザーおよびパスワードの期限が切れているユーザーは、これを行う場合があります。これを許可するには、iam:ChangePassword をステートメント DenyAllExceptListedIfNoMFA に追加します。ただし、IAM ではこのようなアクセス許可をお勧めしません。ユーザーが MFA なしで自分のパスワードを変更できるようにすると、セキュリティ上のリスクが生じる可能性があります。

このポリシーで行うこと

  • この AllowViewAccountInfo ステートメントでは、ユーザーにアカウントレベルの情報を表示します。これらのアクセス許可は、リソース ARN をサポートしていないか、または指定する必要がないため、独自のステートメントに含まれている必要があります。代わりに "Resource" : "*" を指定するアクセス許可を使用します。このステートメントには、ユーザーが特定の情報を表示できるようにする以下のアクションが含まれています。

    • GetAccountSummary – アカウント ID とアカウントの表示 正規ユーザー ID

    • GetAccountPasswordPolicy – IAM ユーザーパスワードを変更しながら、アカウントのパスワード要件を確認します。

    • ListVirtualMFADevices – ユーザーに対して有効になっている仮想 MFA デバイスに関する詳細を表示します。

  • AllowManageOwnPasswords ステートメントを使用すると、ユーザーは自分のパスワードを変更できます。このステートメントにはGetUser アクションも含まれています。これは、[My Security Credentials (セキュリティ認証情報)] ページのほとんどの情報を表示するために必要です。

  • この AllowManageOwnAccessKeys ステートメントにより、ユーザーは自分のアクセスキーを作成、更新、削除できます。

  • この AllowManageOwnSigningCertificates ステートメントにより、ユーザーは自分のデジタル署名用証明書をアップロード、更新、削除できます。

  • AllowManageOwnSSHPublicKeys ステートメントにより、ユーザーは自分の CodeCommit の SSH パブリックキーをアップロード、更新、削除できます。

  • AllowManageOwnGitCredentials ステートメントにより、ユーザーは自分の CodeCommit の Git 認証情報をアップロード、更新、削除できます。

  • この AllowManageOwnVirtualMFADevice ステートメントにより、ユーザーは自分の仮想 MFA デバイスを作成、更新、削除できます。リソース ARN は、現在サインインしているユーザーと名前が一致する MFA デバイスにのみアクセスを許可することに注意してください。ユーザーは、各自の仮想 MFA デバイス以外の MFA デバイスを作成または削除することはできません。

  • この AllowManageOwnUserMFA ステートメントでは、ユーザーは自分のユーザーの仮想、U2F、またはハードウェア MFA デバイスを表示または管理できます。このステートメントのリソース ARN は、ユーザー自身の IAM ユーザーにのみアクセスを許可します。ユーザーは他のユーザーの MFA デバイスを表示または管理することはできません。

  • DenyAllExceptListedIfNoMFA ステートメントは、いくつかのリストされたアクションを除いて、すべての AWS のサービスのすべてのアクションへのアクセスを拒否しますが、ユーザーが MFA でサインインしていない場合のみ許可します。このステートメントでは、"Deny""NotAction" の組み合わせを使用して、表示されていないすべてのアクションへのアクセスを明示的に拒否しています。リストされている項目は、このステートメントによって拒否または許可されていません。ただし、アクションはポリシー内の他のステートメントによって許可されています。このステートメントのロジックの詳細については、「Deny での NotAction の使用」を参照してください。ユーザーが MFA でサインインしている場合、Condition テストは失敗し、このステートメントはアクションを拒否しません。この場合、ユーザーの他のポリシーまたは文によってユーザーのアクセス許可が決まります。

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

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

このポリシーでは、IAM コンソールで [ユーザー] ページを表示したり、そのページを使用して自分のユーザー情報にアクセスすることはできません。これを許可するには、 iam:ListUsers アクションを AllowViewAccountInfo ステートメントと DenyAllExceptListedIfNoMFA ステートメントに追加します。また、ユーザーが自分のユーザーページで自分のパスワードを変更することはできません。これを許可するには、iam:CreateLoginProfileiam:DeleteLoginProfileiam:GetLoginProfile、および iam:UpdateLoginProfile アクションを AllowManageOwnPasswords ステートメントに追加します。ユーザーが MFA を使用してサインインしなくても自分のユーザーページから自分のパスワードを変更できるようにするには、DenyAllExceptListedIfNoMFA ステートメントにiam:CreateLoginProfile アクションを追加します。

{ "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" } } } ] }