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

教程:让您的用户能够配置他们自己的凭证和 MFA 设置

您可以允许您的用户自行管理其 Multi-factor Authentication (MFA) 设备和凭证。您可以使用 AWS 管理控制台为少量用户配置凭证 (访问密钥、密码、签名证书和 SSH 公有密钥) 和 MFA 设备。但随着用户数增加,这个任务很快会变得非常耗时。安全最佳实践指定用户应定期更改其密码并轮换其访问密钥。还应删除或停用不需要的凭证,并至少针对敏感操作使用 MFA。本教程旨在介绍如何实现这些最佳实践,而不给您的管理员带来负担。

本教程介绍如何授予用户访问 AWS 服务的权限,不过此操作限于用户使用 MFA 登录时。如果未使用 MFA 设备登录,则用户无法访问其他服务。

此工作流程具有三个基本步骤。

步骤 1:创建策略以实施 MFA 登录

创建一个客户托管策略,除了 允许更改凭证和管理 MFA 设备的几个 IAM API 以外,该策略禁止所有其他操作。

步骤 2:将策略附加到您的测试组

创建一个组,在使用 MFA 登录时,该组的成员具有所有 Amazon EC2 操作的完全访问权限。要创建此类组,请附加名为 AmazonEC2FullAccess 的 AWS 托管策略和在步骤 1 中创建的客户托管策略。

步骤 3:测试您的用户的访问权限

以测试用户身份登录,验证在该用户创建 MFA 设备然后使用该设备登录之前,对 Amazon EC2 的访问是否被阻止。

先决条件

要执行本教程中的步骤,您必须已具备以下内容:

  • 可使用 IAM 用户身份登录的具有管理权限的 AWS 账户。

  • 您在步骤 1 的策略中键入的账户 ID 号。

    要查找您的账户 ID 号,请在页面顶部的导航栏上,选择 Support,然后选择 Support Center。您可以在该页面的 Support 菜单下找到您的账户 ID。

  • 基于硬件的虚拟 (基于软件的) MFA 设备。

  • 一个作为组成员的测试 IAM 用户,如下所示:

创建用户账户 创建和配置组账户
用户名称 其他说明 组名 将用户添加为成员 其他说明
MFAUser 仅选择 AWS 管理控制台 access 的选项,然后分配密码。 EC2MFA MFAUser 请勿向此组附加任何策略或授予任何权限。

步骤 1:创建策略以实施 MFA 登录

首先创建一个 IAM 客户托管策略,除 IAM 用户管理其自有凭证和 MFA 设备所需的权限外,该策略拒绝其他所有权限。

  1. 使用具有管理员凭证的用户身份登录 AWS 管理控制台。根据 IAM 最佳实践,请勿使用 AWS 账户根用户凭证登录。有关更多信息,请参阅创建单独的 IAM 用户

  2. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  3. 在导航窗格中选择 Policies,然后选择 Create policy

  4. 选择 JSON 选项卡,然后复制以下 JSON 策略文档中的文本。将该文本粘贴到 JSON 文本框中。

    注意

    本示例策略不允许用户在登录的同时更改密码。新用户和密码过期的用户可以执行此操作。要特意允许此操作,请将 iam:ChangePasswordiam:CreateLoginProfile 添加到 BlockMostAccessUnlessSignedInWithMFA 语句中。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAllUsersToListAccounts", "Effect": "Allow", "Action": [ "iam:ListAccountAliases", "iam:ListUsers", "iam:ListVirtualMFADevices", "iam:GetAccountPasswordPolicy", "iam:GetAccountSummary" ], "Resource": "*" }, { "Sid": "AllowIndividualUserToSeeAndManageOnlyTheirOwnAccountInformation", "Effect": "Allow", "Action": [ "iam:ChangePassword", "iam:CreateAccessKey", "iam:CreateLoginProfile", "iam:DeleteAccessKey", "iam:DeleteLoginProfile", "iam:GetLoginProfile", "iam:ListAccessKeys", "iam:UpdateAccessKey", "iam:UpdateLoginProfile", "iam:ListSigningCertificates", "iam:DeleteSigningCertificate", "iam:UpdateSigningCertificate", "iam:UploadSigningCertificate", "iam:ListSSHPublicKeys", "iam:GetSSHPublicKey", "iam:DeleteSSHPublicKey", "iam:UpdateSSHPublicKey", "iam:UploadSSHPublicKey" ], "Resource": "arn:aws:iam::*:user/${aws:username}" }, { "Sid": "AllowIndividualUserToListOnlyTheirOwnMFA", "Effect": "Allow", "Action": [ "iam:ListMFADevices" ], "Resource": [ "arn:aws:iam::*:mfa/*", "arn:aws:iam::*:user/${aws:username}" ] }, { "Sid": "AllowIndividualUserToManageTheirOwnMFA", "Effect": "Allow", "Action": [ "iam:CreateVirtualMFADevice", "iam:DeleteVirtualMFADevice", "iam:EnableMFADevice", "iam:ResyncMFADevice" ], "Resource": [ "arn:aws:iam::*:mfa/${aws:username}", "arn:aws:iam::*:user/${aws:username}" ] }, { "Sid": "AllowIndividualUserToDeactivateOnlyTheirOwnMFAOnlyWhenUsingMFA", "Effect": "Allow", "Action": [ "iam:DeactivateMFADevice" ], "Resource": [ "arn:aws:iam::*:mfa/${aws:username}", "arn:aws:iam::*:user/${aws:username}" ], "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } } }, { "Sid": "BlockMostAccessUnlessSignedInWithMFA", "Effect": "Deny", "NotAction": [ "iam:CreateVirtualMFADevice", "iam:DeleteVirtualMFADevice", "iam:ListVirtualMFADevices", "iam:EnableMFADevice", "iam:ResyncMFADevice", "iam:ListAccountAliases", "iam:ListUsers", "iam:ListSSHPublicKeys", "iam:ListAccessKeys", "iam:ListServiceSpecificCredentials", "iam:ListMFADevices", "iam:GetAccountSummary", "sts:GetSessionToken" ], "Resource": "*", "Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "false" } } } ] }

    此策略有何作用?

    • 用户可以通过第一条语句查看 IAM 控制台中账户及其用户的基本信息。这些权限必须位于自己的语句中,因为它们不支持或不需要指定特定的资源 ARN,而需要指定 "Resource" : "*"

    • 用户可以通过第二个语句在 IAM 控制台中管理自己的用户、密码、访问密钥、签名证书、SSH 公有密钥和 MFA 信息。资源 ARN 仅限在用户自己的 IAM 用户实体中使用这些权限。

    • 用户可以通过第三个语句查看与其 IAM 用户实体相关的 MFA 设备的信息。

    • 第四个语句允许用户预配置或管理其 MFA 设备。请注意,第四个语句中的资源 ARN 仅允许访问 MFA 设备,或者与当前登录用户完全同名的用户。用户不能创建或更改除自己设备外的任何 MFA 设备。

    • 用户可以通过第五个语句仅停用自己的 MFA 设备 (仅在用户使用 MFA 登录时)。这可防止仅具有访问密钥 (没有 MFA 设备) 的其他用户停用 MFA 设备,并将其替换为自己的设备。

    • 如果 用户未使用 MFA 登录,则第六个语句 (最后一个语句) 使用 "Deny""NotAction" 组合拒绝所有其他 AWS 服务的所有操作。如果用户使用 MFA 登录,则 "Condition" 测试失败,最后一个 "deny" 语句失效;用户已获得的其他权限可能生效。最后一个语句确保,在用户未使用 MFA 登录时,他们只能执行在前面的语句中允许的 IAM 操作。Bool 运算符的 ...IfExists 版本确保,如果 aws:MultiFactorAuthPresent 键丢失,条件将返回 true。这意味着,拒绝使用长期凭证 (如访问密钥) 访问 API 的用户访问非 IAM API 操作。

  5. 完成后,选择查看策略策略验证程序将报告任何语法错误。

    注意

    您可以随时在可视化编辑器JSON 选项卡之间切换。但是,以上策略包含 NotAction 元素,该元素在可视化编辑器中不受支持。对于此策略,您在 Visual editor 选项卡上将看到一个通知。返回 JSON 选项卡以继续处理此策略。

  6. 审核页上,键入 Force_MFA 以作为策略名称。对于策略说明,键入 This policy allows users to manage their own passwords and MFA devices but nothing else unless they authenticate with MFA。查看策略摘要以查看您的策略授予的权限,然后选择创建策略以保存您的工作。

    将在托管策略列表中显示新策略,并已准备好附加该策略。

步骤 2:将策略附加到您的测试组

接下来,您将两个策略附加到测试 IAM 组,将使用该组授予受 MFA 保护的权限。

  1. 在导航窗格中,选择 Groups

  2. 在搜索框中键入 EC2MFA,然后在列表中选择组名称 (而不是选中复选框)。

  3. Permissions 选项卡上,单击 Attach Policy

  4. Attach Policy 页上的搜索框中输入 EC2Full,然后选中列表中 AmazonEC2FullAccess 旁的复选框。暂不保存您的更改。

  5. 在搜索框中输入 Force,然后选中列表中 Force_MFA 旁的复选框。

  6. 选择 Attach Policy

步骤 3:测试您的用户的访问权限

在本教程的这一部分中,您以测试用户身份登录并验证策略是否正常工作。

  1. 使用上一部分中分配给您的密码,以 MFAUser 身份登录您的 AWS 账户。使用 URL:https://<alias or account ID number>.signin.aws.amazon.com/console

  2. 选择 EC2 打开 Amazon EC2 控制台,验证此用户没有执行任何操作的权限。

  3. 在导航栏上,选择 Services,然后选择 IAM 以打开 IAM 控制台。

  4. 在导航窗格中,选择 Users,然后选择用户(不是复选框)MFAUser。如果默认显示选项卡,请注意,这表示您无权查看您的组成员。

  5. 现在添加一个 MFA 设备。选择 Security Credentials 选项卡,然后选择 Assigned MFA device 旁的编辑图标 ( )。

  6. 对于本教程,我们使用一个虚拟 (基于软件的) MFA 设备,例如,手机上的 Google Authenticator 应用程序。选择虚拟 MFA 设备,然后单击下一步

    IAM 将生成并显示虚拟 MFA 设备的配置信息,包括 QR 代码图形。此图形是秘密配置密钥的表示形式,适用于不支持 QR 代码的设备上的手动输入。

  7. 打开您的虚拟 MFA 应用程序。(有关可以用作托管虚拟 MFA 设备的应用程序的列表,请参阅虚拟 MFA 应用程序。)如果虚拟 MFA 应用程序支持多个账户 (多个虚拟 MFA 设备),请选择相应的选项以创建新账户 (新的虚拟 MFA 设备)。

  8. 确定 MFA 应用程序是否支持 QR 代码,然后执行以下操作之一:

    • 使用此应用程序扫描 QR 代码。例如,您可选择摄像头图标或选择类似于 Scan code 的选项,然后使用设备的摄像头扫描此代码。

    • 管理 MFA 设备向导中,选择显示手动配置的私有密钥,然后在您的 MFA 应用程序中键入私有配置密钥。

    完成操作后,虚拟 MFA 设备会开始生成一次性密码。

  9. Manage MFA Device 向导的 Authentication Code 1 框中,键入虚拟 MFA 设备上当前显示的一次性密码。请等候 30 秒,以便设备生成新的一次性密码。然后将第二个一次性密码键入 Authentication Code 2 框中。选择 Active Virtual MFA

    重要

    生成代码之后立即提交您的请求。如果在生成代码后等待很长时间才提交请求,MFA 设备将成功与用户关联,但 MFA 设备不同步。这是因为基于时间的一次性密码 (TOTP) 很快会过期。这种情况下,您可以重新同步设备

    虚拟 MFA 设备现已准备好与 AWS 一起使用。

  10. 从控制台注销,然后重新以 MFAUser 身份登录。此时 AWS 会提示输入您手机中的 MFA 代码。收到该代码后,请将代码键入框中,然后选择 Submit

  11. 选择 EC2 以再次打开 Amazon EC2 控制台。请注意,这次您可以看到所有信息,并且可以执行所需的任何操作。如果以该用户身份访问任何其他控制台,将会看到“访问被拒绝”消息,因为本教程中的策略仅授予 Amazon EC2 访问权限。

有关 IAM 用户指南 中的相关信息,请参阅以下资源: