AWS Identity and Access Management
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS:允许经过 MFA 身份验证的 IAM 用户在“My Security Credentials (我的安全凭证)”页面上管理自己的凭证。

此示例显示您可以如何创建策略 允许使用多重验证 (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 用户如何更改自己的密码(控制台)

注意

本示例策略不允许用户在登录的同时重置密码。新用户和密码过期的用户可以执行此操作。您可以通过向语句 DenyAllExceptListedIfNoMFA 中添加 iam:ChangePassword 来允许此操作。但是,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 设备。

  • AllowManageOwnUserMFA 语句允许用户查看或管理他们自己用户的虚拟、U2F 或硬件 MFA 设备。此语句中的资源 ARN 仅允许访问用户自己的 IAM 用户。用户无法查看或管理其他用户的 MFA 设备。

  • DenyAllExceptListedIfNoMFA 语句拒绝访问所有 AWS 服务中的每个操作(除了一些列出的操作),但前提是用户未使用 MFA 登录。该语句使用 "Deny""NotAction" 的组合来显式拒绝对未列出的每个操作的访问。此语句不会拒绝或允许列出的项目。但是,策略中的其他语句允许这些操作。有关此语句的逻辑的更多信息,请参阅 NotAction 以及 Deny。如果用户已使用 MFA 登录,则 Condition 测试将失败,并且此语句不会拒绝任何操作。在这种情况下,用户的其他策略或语句确定用户的权限。

    此语句确保当用户未使用 MFA 登录时,他们只能执行列出的操作。此外,只有在另一个语句或策略允许访问这些操作时,它们才能执行列出的操作。这不允许用户在登录时创建密码,因为如果没有 MFA 授权,则不允许 iam:ChangePassword 操作。

    ...IfExists 运算符的 Bool 版本可确保:如果 aws:MultiFactorAuthPresent 键缺失,条件将返回 true。这意味着使用长期凭证(例如访问密钥)访问 API 的用户被拒绝访问非 IAM API 操作。

此策略不允许用户在 IAM 控制台中查看 Users (用户) 页面,或使用该页面访问自己的用户信息。要允许此操作,请将 iam:ListUsers 操作添加到 AllowViewAccountInfoDenyAllExceptListedIfNoMFA 语句。它也不允许用户在自己的用户页面上更改密码。要允许此操作,请将 iam:CreateLoginProfileiam:DeleteLoginProfileiam:GetLoginProfileiam:UpdateLoginProfile 操作添加到 AllowManageOwnPasswords 语句。要允许用户在不使用 MFA 登录的情况下从自己的用户页面更改密码,请将 iam:CreateLoginProfile 操作添加到 DenyAllExceptListedIfNoMFA 语句。

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