Amazon:允许经过 MFA 身份验证的 IAM 用户在“My Security Credentials”(我的安全凭证)页面上管理自己的凭证
此示例显示您可以创建基于身份的策略,允许通过多重身份验证(MFA)进行身份验证的 IAM 用户在 My Security Credentials(我的安全凭证)页面上管理他们自己的凭证。此 Amazon Web Services Management Console 页面显示账户信息,例如账户 ID 和规范用户 ID。用户还可以查看和编辑自己的密码、访问密钥、MFA 设备、X.509 证书、SSH 密钥和 Git 凭证。此示例策略包括查看和编辑页面上所有信息所需的权限。它还要求用户在执行 Amazon 中的任何其他操作之前使用 MFA 进行设置和身份验证。要允许用户在不使用 MFA 的情况下管理自己的凭证,请参阅Amazon:允许 IAM 用户在“My Security Credentials”(我的安全凭证)页面上管理其凭证。
要了解用户如何访问 My Security Credentials(我的安全凭证)页面,请参阅 IAM 用户如何更改自己的密码(控制台)。
注意
-
此示例策略不允许用户在首次登录 Amazon Web Services Management Console 的同时重置密码。我们建议您在新用户登录之前不要向他们授予权限。有关更多信息,请参阅如何安全地创建 IAM 用户?。这还可以防止密码过期的用户在登录期间重置其密码。您可以通过向语句
DenyAllExceptListedIfNoMFA
中添加iam:ChangePassword
和iam:GetAccountPasswordPolicy
来允许此操作。但是,我们不建议您这样做,因为允许用户在未进行 MFA 验证的情况下更改密码可能存在安全风险。 -
如果您打算将此策略用于编程访问,则必须调用
GetSessionToken
以使用 MFA 进行身份验证。有关更多信息,请参阅配置受 MFA 保护的 API 访问。
此策略有何作用?
-
AllowViewAccountInfo
语句允许用户查看账户级信息。这些权限必须位于自己的语句中,因为它们不支持或不需要指定资源 ARN。相反,权限指定"Resource" : "*"
。此语句包括允许用户查看特定信息的以下操作:-
GetAccountPasswordPolicy
– 查看账户密码要求,同时更改他们自己的 IAM 用户密码。 -
ListVirtualMFADevices
- 查看有关为用户启用的虚拟 MFA 设备的详细信息。
-
-
AllowManageOwnPasswords
语句还允许用户更改他们自己的密码。此语句还包括GetUser
操作,查看 My Security Credentials(我的安全凭证)页面上的大多数信息都需要此操作。 -
AllowManageOwnAccessKeys
语句允许用户创建、更新和删除他们自己的访问密钥。用户还可以检索有关上次使用指定访问密钥的时间信息。 -
AllowManageOwnSigningCertificates
语句允许用户上传、更新和删除他们自己的签名证书。 -
AllowManageOwnSSHPublicKeys
语句允许用户上传、更新和删除他们自己的 CodeCommit 的 SSH 公有密钥。 -
AllowManageOwnGitCredentials
语句允许用户创建、更新和删除他们自己的 CodeCommit 的 Git 凭证。 -
AllowManageOwnVirtualMFADevice
语句允许用户创建他们自己的虚拟 MFA 设备。此语句中的资源 ARN 允许用户创建任何名称的 MFA 设备,但策略中的其他语句仅允许用户将设备连接到当前登录的用户。 -
AllowManageOwnUserMFA
语句允许用户查看或管理他们自己用户的虚拟、U2F 或硬件 MFA 设备。此语句中的资源 ARN 仅允许访问用户自己的 IAM 用户。用户无法查看或管理其他用户的 MFA 设备。 -
DenyAllExceptListedIfNoMFA
语句拒绝访问所有 Amazon 服务中的每个操作(除了一些列出的操作),但前提是用户未使用 MFA 登录。该语句使用"Deny"
和"NotAction"
的组合来显式拒绝对未列出的每个操作的访问。此语句不会拒绝或允许列出的项目。但是,策略中的其他语句允许这些操作。有关此语句的逻辑的更多信息,请参阅 NotAction 以及 Deny。如果用户已使用 MFA 登录,则Condition
测试将失败,并且此语句不会拒绝任何操作。在这种情况下,用户的其他策略或语句确定用户的权限。此语句确保当用户未使用 MFA 登录时,他们只能执行列出的操作。此外,只有在另一个语句或策略允许访问这些操作时,它们才能执行列出的操作。这不允许用户在登录时创建密码,因为如果没有 MFA 授权,则不允许
iam:ChangePassword
操作。...IfExists
运算符的Bool
版本可确保:如果aws:MultiFactorAuthPresent
键缺失,条件将返回 true。这意味着使用长期凭证(例如访问密钥)访问 API 的用户被拒绝访问非 IAM API 操作。
此策略不允许用户在 IAM 控制台中查看 Users(用户)页面,或使用该页面访问自己的用户信息。要允许此操作,请将 iam:ListUsers
操作添加到 AllowViewAccountInfo
和 DenyAllExceptListedIfNoMFA
语句。它也不允许用户在自己的用户页面上更改密码。要允许此操作,请将 iam:GetLoginProfile
和 iam:UpdateLoginProfile
操作添加到 AllowManageOwnPasswords
语句。要允许用户在不使用 MFA 登录的情况下从自己的用户页面更改密码,请将 iam:UpdateLoginProfile
操作添加到 DenyAllExceptListedIfNoMFA
语句。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowViewAccountInfo", "Effect": "Allow", "Action": [ "iam:GetAccountPasswordPolicy", "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", "iam:GetAccessKeyLastUsed" ], "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" ], "Resource": "arn:aws:iam::*:mfa/*" }, { "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:GetMFADevice", "iam:ListMFADevices", "iam:ListVirtualMFADevices", "iam:ResyncMFADevice", "sts:GetSessionToken" ], "Resource": "*", "Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "false" } } } ] }