此示例演示了如何创建基于身份的策略,以允许通过多重身份验证(MFA)完成身份验证的 IAM 用户在安全凭证页面上管理自己的凭证。此 AWS Management Console 页面显示账户信息,例如账户 ID 和规范用户 ID。用户还可以查看和编辑自己的密码、访问密钥、MFA 设备、X.509 证书、SSH 密钥和 Git 凭证。此示例策略包括查看和编辑页面上所有信息所需的权限。它还要求用户在执行 AWS 中的任何其他操作之前使用 MFA 进行设置和身份验证。要允许用户在不使用 MFA 的情况下管理自己的凭证,请参阅AWS:允许 IAM 用户在“安全凭证”页面上管理自己的凭证。
要了解用户如何访问安全凭证页面,请参阅 IAM 用户如何更改自己的密码(控制台)。
注意
-
此示例策略不允许用户在首次登录 AWS 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
语句拒绝访问所有 AWS 服务中的每个操作(除了一些列出的操作),但前提是用户未使用 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"
}
}
}
]
}