

# IAM 用户
<a name="id_users"></a>

**重要**  
 IAM [最佳实践](best-practices.md)建议您您要求人类用户使用与身份提供商的联合身份验证才能使用临时凭证访问 AWS，而不是使用具有长期凭证的 IAM 用户。建议您仅在联合用户不支持的[特定用例](gs-identities-iam-users.md)中使用 IAM 用户。

*IAM 用户*是您在 AWS 账户 中创建的实体。IAM 用户表示使用 IAM 用户与 AWS 互动的人类用户或工作负载。IAM 用户包括名称和凭证。

具备管理员权限的 IAM 用户与 AWS 账户根用户 并不是一回事。有关根用户的更多信息，请参阅 [AWS 账户根用户](id_root-user.md)。

## AWS 如何标识 IAM 用户
<a name="id_users_create_aws-identifiers"></a>

当您创建 IAM 用户时，IAM 提供以下这些方法来识别该用户：
+ 该 IAM 用户的“易记名称”，这是您在创建 IAM 用户时指定的名称，如 `Richard` 或 `Anaya`。您将在 AWS 管理控制台中看到这些名称。由于 IAM 用户名出现在 Amazon 资源名称 (ARN) 中，因此不建议在 IAM 名称中包含个人识别信息。有关 IAM 名称的要求和限制，请参阅 [IAM 名称要求](reference_iam-quotas.md#reference_iam-quotas-names)。
+ IAM 用户的 Amazon 资源名称（ARN）。当您需要跨所有 AWS 唯一标识 IAM 用户时，可以使用 ARN。例如，您可以使用 ARN 在 Amazon S3 存储桶的 IAM policy 中将 IAM 用户指定为 `Principal`。IAM 用户的 ARN 可能类似于以下内容：

  `arn:aws:iam::account-ID-without-hyphens:user/Richard`
+ IAM 用户的唯一标识符。仅在您使用 API、Tools for Windows PowerShell 或 AWS CLI 创建 IAM 用户时返回此 ID；控制台中不会显示此 ID。

有关这些标识符的更多信息，请参阅[IAM 标识符](reference_identifiers.md)。

## IAM 用户和凭证
<a name="id_users_creds"></a>

您可以通过不同方式访问 AWS，具体取决于 IAM 用户凭证：
+ [**控制台密码**](id_credentials_passwords.md)：IAM 用户可键入该密码以登录交互式会话，例如 AWS 管理控制台。禁用 IAM 用户的密码（控制台访问）可防止用户使用其登录凭证登录 AWS 管理控制台。这不会更改他们的权限，也不会阻止他们使用担任的角色访问控制台。启用控制台访问权限的 IAM 用户也可以使用这些相同的凭证，通过 `aws login` AWS CLI 命令对 AWS CLI 和 SDK 访问进行身份验证。这些用户需要具有 [SignInLocalDevelopmentAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/SignInLocalDevelopmentAccess.html) 权限。有关更多详细信息，请参阅《AWS Command Line Interface 用户指南》**中的 [AWS CLI 身份验证和访问凭证](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-authentication.html)。
+ [访问密钥****](id_credentials_access-keys.md)：用于以编程方式调用 AWS。但是，在为 IAM 用户创建访问密钥之前，还需要考虑更安全的替代方法。有关更多信息，请参阅《AWS 一般参考》中的 [长期访问密钥的注意事项和替代方案](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#alternatives-to-long-term-access-keys)**。如果该 IAM 用户具有有效的访问密钥，它们将继续保持有效并允许通过 AWS CLI、Tools for Windows PowerShell、AWS API，或 AWS Console Mobile Application 进行访问。
+ [**与 CodeCommit 结合使用的 SSH 密钥**](id_credentials_ssh-keys.md)：可用于向 CodeCommit 进行身份验证的采用 OpenSSH 格式的 SSH 公有密钥。
+ [**服务器证书**](id_credentials_server-certs.md)：您可用于向某些 AWS 服务进行身份验证的 SSL/TLS 证书。我们建议您使用 AWS Certificate Manager (ACM) 来预置、管理和部署您的服务器证书。只有当您必须在 ACM 不支持的区域中支持 HTTPS 连接时，才应使用 IAM。要了解 ACM 支持的具体区域，请参阅《AWS 一般参考》中的 [AWS Certificate Manager 端点和限额](https://docs.aws.amazon.com/general/latest/gr/acm.html)**。

您可以选择最适合您的 IAM 用户的凭证。当您使用 AWS 管理控制台 来创建 IAM 用户时，必须选择至少包含一个控制台密码或访问密钥。默认情况下，使用 AWS CLI 或 AWS API 创建的全新 IAM 用户没有任何类型的凭证。您必须根据使用案例为 IAM 用户创建凭证类型。

您可以使用以下选项来管理密码、访问密钥和多重身份验证（MFA）设备：
+ **[管理 IAM 用户的密码](id_credentials_passwords.md)。**创建和更改允许访问 AWS 管理控制台的密码。设置密码策略以强制实施最小密码复杂性。允许 IAM 用户更改其密码。
+ **[管理 IAM 用户的访问密钥](id_credentials_access-keys.md)。**创建和更新用于通过编程方式访问账户中的资源的访问密钥。
+ **[为 IAM 用户启用多重身份验证（MFA）](id_credentials_mfa.md)。**作为[最佳实践](best-practices.md)，我们建议您要求账户中的所有 IAM 用户进行多重身份验证（MFA）。使用 MFA，IAM 用户必须提供两种形式的身份证明：首先，他们提供属于用户身份一部分的凭证（密码或访问密钥）。此外，他们还提供在硬件设备上或由智能手机或平板电脑上的应用程序生成的临时数字代码。
+ **[查找未使用的密码和访问密钥](id_credentials_finding-unused.md)。**拥有您账户或您账户中的 IAM 用户的密码或访问密钥的任何人都可以访问您的 AWS 资源。为保障安全，[最佳实践](https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html)是在 IAM 用户不再需要密码和访问密钥时将其删除。
+ **[下载您账户的凭证报告](id_credentials_getting-report.md)。**您可以生成和下载列出您账户中所有 IAM 用户及其各个凭证状态（包括密码、访问密钥和 MFA 设备）的凭证报告。对于密码和访问密钥，凭证报告将显示多久前使用了密码或访问密钥。

## IAM 用户和权限
<a name="id_users_perms"></a>

默认情况下，全新的 IAM 用户没有执行任何操作的[权限](access.md)。他们无权执行任何 AWS 操作或访问任何 AWS 资源。采用单独 IAM 用户的优势在于可单独向每个用户分配权限。您可以向几个用户分配管理权限，而这些用户随后可管理您的 AWS 资源，甚至创建和管理其他 IAM 用户。但在大多数情况下，您希望限制用户的权限，使其只能访问工作所需的任务（AWS 操作）和资源。

设想一个名为 Diego 的用户。当您创建 IAM 用户 `Diego` 时，您可以为其创建密码并附加权限，以使其能够启动特定 Amazon EC2 实例以及从 Amazon RDS 数据库中的表读取 (`GET`) 信息。有关如何创建 IAM 用户并向其授予初始凭证和权限的过程，请参阅[在 AWS 账户 中创建 IAM 用户](id_users_create.md)。有关如何更改现有用户的权限的过程，请参阅[更改 IAM 用户的权限](id_users_change-permissions.md)。有关如何更改用户的密码或访问密钥的过程，请参阅[AWS 中的用户密码](id_credentials_passwords.md)和[管理 IAM 用户的访问密钥。](id_credentials_access-keys.md)。

您还可以向您的 IAM 用户添加权限边界。权限边界是一项高级功能，可让您使用 AWS 托管策略来限制基于身份的策略可向 IAM 用户或角色授予的最大权限。有关策略类型和用法的更多信息，请参阅[AWS Identity and Access Management 中的策略和权限](access_policies.md)。

## IAM 用户和账户
<a name="id_users_accounts"></a>

每个 IAM 用户均与一个 AWS 账户（且仅一个）关联。由于 IAM 用户是在您的 AWS 账户 中定义的，因此不需要向 AWS 报备付款方式。IAM 用户在您的账户中执行的任何 AWS 活动产生的费用均计入您的账户。

AWS 账户中 IAM 资源的数量和大小是有限的。有关更多信息，请参阅 [IAM 和 AWS STS 配额](reference_iam-quotas.md)。

## 作为服务账户的 IAM 用户
<a name="id_users_service_accounts"></a>

IAM 用户是 IAM 中具有相关凭证和权限的资源。IAM 用户可以表示一个人或使用此人的凭证向 AWS 提出请求的应用程序。这通常被称为*服务账户*。如果您选择在应用程序中使用 IAM 用户的长期凭证，**请勿直接将访问密钥嵌入您的应用程序代码。**使用 AWS 开发工具包和 AWS Command Line Interface，可以在已知位置放置访问密钥，这样就不必将其保留在代码中。有关更多信息，请参阅《AWS 一般参考》中的 [正确管理 IAM 用户访问密钥](https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html#iam-user-access-keys)**。另外，作为最佳实践，您可以[使用临时安全凭证（IAM 角色）代替长期访问密钥](https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html#use-roles)。

# IAM 用户如何登录 AWS
<a name="id_users_sign-in"></a>

要以 IAM 用户的身份登录到 AWS 管理控制台，除了您的用户名和密码外，您还须提供您的账户 ID 或账户别名。当您的管理员在控制台中创建您的 IAM 用户时，他们应该已经向您发送了登录凭证，其中包括您的用户名和账户登录页面的 URL，内含您的账户 ID 或账户别名。

```
https://My_AWS_Account_ID.signin.aws.amazon.com/console/
```

**提示**  
要在 Web 浏览器中为您的账户登录页面创建书签，您应在标签条目中手动键入您的账户的登录 URL。不要使用 Web 浏览器的书签功能，因为重定向会掩盖登录 URL。

您也可以在以下常规登录端点登录，然后手动键入您的账户 ID 或账户别名：

```
[https://console.aws.amazon.com/](https://console.aws.amazon.com/)
```

为方便起见，AWS 登录页面使用浏览器 Cookie 记住 IAM 用户名和账户信息。下次用户转到 AWS 管理控制台 中的任何页面时，控制台会使用 cookie 将用户重定向到账户登录页面。

您只能访问您的管理员在附加到您的 IAM 用户身份的策略中指定的 AWS 资源。要在控制台开展工作，您必须有权限执行控制台执行的操作（例如列出和创建 AWS 资源）。有关更多信息，请参阅 [适用于 AWS 资源的 Access Management](access.md) 和 [IAM 基于身份的策略示例](access_policies_examples.md)。

**注意**  
如果贵企业现在有一个身份系统，您可能需要创建单点登录 (SSO) 选项。SSO 向用户提供对您账户 AWS 管理控制台 的访问权限，而不要求他们具有 IAM 用户身份。SSO 也无需用户单独登录您的组织的网站和 AWS。有关更多信息，请参阅 [使自定义身份凭证代理程序能够访问 AWS 控制台](id_roles_providers_enable-console-custom-url.md)。

**在 CloudTrail 中记录登录详细信息**  
如果您允许 CloudTrail 将登录事件记录到您的日志中，您需要了解 CloudTrail 如何选择在何处记录事件。
+ 如果您的用户直接登录到控制台，则系统会根据所选服务控制台是否支持区域，将他们重定向到全局或区域登录端点。例如，主控制台主页支持区域，因此，如果您登录以下 URL：

  ```
  https://alias.signin.aws.amazon.com/console
  ```

  您会被重定向到 `https://us-east-2.signin.aws.amazon.com` 这样的区域登录端点，使得该区域日志中产生一个区域 CloudTrail 日志条目：

  另一方面，Amazon S3 控制台不支持区域，因此，如果您登录到以下 URL

  ```
  https://alias.signin.aws.amazon.com/console/s3
  ```

  AWS 会将您重定向到全局登录端点 `https://signin.aws.amazon.com`，从而产生一个全局 CloudTrail 日志条目。
+ 您可以通过使用类似如下的 URL 语法登录到启用区域的主控制台主页，来手动请求特定区域网站端点：

  ```
  https://alias.signin.aws.amazon.com/console?region=ap-southeast-1
  ```

  AWS 将您重定向到 `ap-southeast-1` 区域登录端点并使该区域中产生一个 CloudTrail 日志事件。

有关 CloudTrail 和 IAM 的更多信息，请参阅[使用 CloudTrail 记录 IAM 事件](https://docs.aws.amazon.com/IAM/latest/UserGuide/cloudtrail-integration.html)。

如果用户需要编程式访问来使用您的账户，则可以为每位用户创建访问密钥对（访问密钥 ID 和秘密访问密钥）。但是，在为用户创建访问密钥之前，还需要考虑更安全的替代方法。有关更多信息，请参阅《AWS 一般参考》中的 [长期访问密钥的注意事项和替代方案](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#alternatives-to-long-term-access-keys)**。

## 其他资源
<a name="id_users_sign-in-additional-resources"></a>

以下资源可帮助您了解有关 AWS 登录的更多信息。
+ 《AWS 登录用户指南》[https://docs.aws.amazon.com/signin/latest/userguide/what-is-sign-in.html](https://docs.aws.amazon.com/signin/latest/userguide/what-is-sign-in.html)本指南可帮助您了解不同类型的用户登录 Amazon Web Services（AWS）的不同方式。
+ 在 AWS 管理控制台中的单个 Web 浏览器中，您最多可以同时登录五个不同的身份。有关详细信息，请参阅《AWS 管理控制台入门指南》**中的[登录多个账户](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/multisession.html)。

# 已启用 MFA 的登录
<a name="console_sign-in-mfa"></a>

配置了[多重身份验证（MFA）](id_credentials_mfa.md)设备的用户必须使用其 MFA 设备登录 AWS 管理控制台。在用户输入其登录凭证后，AWS 将检查用户的账户以查看该用户是否需要 MFA。

**重要**  
如果您通过 AWS STS [https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html) API 调用并使用访问密钥和私有密钥凭证直接访问 AWS 管理控制台，则不需要 MFA。有关更多信息，请参阅 [使用访问密钥和私有密钥凭证访问控制台](securing_access-keys.md#console-access-security-keys)。

以下主题介绍了用户在需要使用 MFA 时如何完成登录。

**Topics**
+ [多个已启用 MFA 的设备](#console_sign-in-multiple-mfa)
+ [FIDO 安全密钥](#console_sign-in-mfa-fido)
+ [虚拟 MFA 设备](#console_sign-in-mfa-virtual)
+ [硬件 TOTP 令牌](#console_sign-in-mfa-hardware)

## 多个已启用 MFA 的设备
<a name="console_sign-in-multiple-mfa"></a>

如果用户以 AWS 账户 根用户或 IAM 用户的身份登录 AWS 管理控制台，且为该账户启用了多个 MFA 设备，则他们只需要使用一台 MFA 设备即可登录。用户使用用户密码进行身份验证后，他们可以选择要使用哪种 MFA 设备类型来完成身份验证。然后，系统会提示用户使用他们选择的设备类型来进行身份验证。

## FIDO 安全密钥
<a name="console_sign-in-mfa-fido"></a>

如果 MFA 是用户必须使用的，则会显示另一个登录页面。用户需要点击 FIDO 安全密钥。

**注意**  
Google Chrome 用户不应选择弹出窗口中的任何要求 **Verify your identity with amazon.com**（通过 amazon.com 验证您的身份）的可用选项。您只需要点击安全密钥即可。

与其他 MFA 设备不同，FIDO 安全密钥不同步。如果 FIDO 安全密钥丢失或损坏，管理员可以停用它。有关更多信息，请参阅 [停用 MFA 设备（控制台）](id_credentials_mfa_disable.md#deactive-mfa-console)。

有关支持 AWS 所支持的 WebAuthn 和 FIDO 合规设备的浏览器的信息，请参阅 [使用密钥或安全密钥的受支持配置](id_credentials_mfa_fido_supported_configurations.md)。

## 虚拟 MFA 设备
<a name="console_sign-in-mfa-virtual"></a>

如果 MFA 是用户必须使用的，则会显示另一个登录页面。在 **MFA code (MFA 代码)** 框中，用户必须输入 MFA 应用程序提供的数字代码。

如果 MFA 代码正确，则用户可以访问 AWS 管理控制台。如果代码不正确，则用户可以使用其他代码重试。

虚拟 MFA 设备可能会不同步。如果用户尝试多次后都无法登录 AWS 管理控制台，系统将提示用户同步虚拟 MFA 设备。用户可以按照屏幕上的提示同步虚拟 MFA 设备。有关如何在您的 AWS 账户 中同步代表用户的设备的信息，请参阅 [重新同步虚拟和硬件 MFA 设备](id_credentials_mfa_sync.md)。

## 硬件 TOTP 令牌
<a name="console_sign-in-mfa-hardware"></a>

如果 MFA 是用户必须使用的，则会显示另一个登录页面。在 **MFA code**（MFA 代码）框中，用户必须输入硬件 TOTP 令牌提供的数字代码。

如果 MFA 代码正确，则用户可以访问 AWS 管理控制台。如果代码不正确，则用户可以使用其他代码重试。

硬件 TOTP 令牌可能会不同步。如果用户尝试多次后都无法登录 AWS 管理控制台，系统将提示用户同步 MFA 令牌设备。用户可以根据屏幕上的提示同步 MFA 令牌设备。有关如何在您的 AWS 账户 中同步代表用户的设备的信息，请参阅 [重新同步虚拟和硬件 MFA 设备](id_credentials_mfa_sync.md)。

# 在 AWS 账户 中创建 IAM 用户
<a name="id_users_create"></a>

**重要**  
 IAM [最佳实践](best-practices.md)建议您您要求人类用户使用与身份提供商的联合身份验证才能使用临时凭证访问 AWS，而不是使用具有长期凭证的 IAM 用户。我们建议您仅在联合用户不支持的[特定用例](gs-identities-iam-users.md)中使用 IAM 用户。

创建 IAM 用户并使该用户能够执行任务的过程包含以下步骤：

1. [在 AWS 管理控制台、AWS CLI、Tools for Windows PowerShell 中或使用 AWS API 操作创建用户](getting-started-workloads.md)。如果您在 AWS 管理控制台 中创建用户，则将根据您的选择自动处理步骤 1 到步骤 4。如果以编程方式创建 IAM 用户，则必须分别执行上述每个步骤。

1. 根据用户所需的访问类型为用户创建凭证：
   + **启用控制台访问 – *可选***：如果用户需要访问 AWS 管理控制台，[请为用户创建密码](id_credentials_passwords_admin-change-user.md)。禁用用户的控制台访问可防止用户使用其用户名和密码登录 AWS 管理控制台。这不会更改他们的权限，也不会阻止他们使用担任的角色访问控制台。
**提示**  
请仅创建用户需要的凭证。例如，对于仅需要通过 AWS 管理控制台进行访问的用户，请勿创建访问密钥。

1. 给予用户执行所需任务的权限。建议将 IAM 用户放入组内，通过附加到这些组的策略来管理权限。但是，您还可以通过将权限策略直接附加到用户来授予权限。如果使用控制台添加用户，则您可以将现有用户的权限复制到新用户。

   您还可以指定定义用户可以拥有的最大权限的策略，由此添加[权限边界](access_policies_boundaries.md)来限制用户的权限。权限边界不授予任何权限。

   有关创建用于授予权限或设置权限边界的自定义权限策略的说明，请参阅 [使用客户管理型策略定义自定义 IAM 权限](access_policies_create.md)。

1. （可选）通过附加标签来向用户添加元数据。有关在 IAM 中使用标签的更多信息，请参阅 [AWS Identity and Access Management 资源的标签](id_tags.md)。

1. 向用户提供必要的登录信息。信息包括密码以及用户在其中提供这些凭证的账户登录页面的控制台 URL。有关更多信息，请参阅 [IAM 用户如何登录 AWS](id_users_sign-in.md)。

1. (可选) 为用户配置[多重验证 (MFA)](id_credentials_mfa.md)。MFA 要求用户在每次登录 AWS 管理控制台时都提供一次性的代码。

1. （可选）向 IAM 用户授予管理自己安全凭证所需的权限。（默认状态下，IAM 用户没有权限管理自己的凭证。） 有关更多信息，请参阅 [允许 IAM 用户更改自己的密码](id_credentials_passwords_enable-user-change.md)。
**注意**  
如果您使用控制台创建用户并选择**用户必须在下次登录时创建新密码（推荐）**，则用户具有所需的权限。

有关创建用户时需要的权限的信息，请参阅[访问 IAM 资源所需的权限](access_permissions-required.md)。

有关为特定应用场景创建 IAM 用户的说明，请参阅以下主题：
+ [创建用于紧急访问的 IAM 用户](getting-started-emergency-iam-user.md)
+ [为无法使用 IAM 角色的工作负载创建 IAM 用户](getting-started-workloads.md)

# 查看 IAM 用户
<a name="id_users_list"></a>

您可以列出 AWS 账户 中或特定 IAM 组中的 IAM 用户，也可以列出用户所属的所有 IAM 组。有关为列出用户而需要的权限的信息，请参阅[访问 IAM 资源所需的权限](access_permissions-required.md)。

## 要列出账户中的所有 IAM 用户
<a name="id_users_manage_list-users"></a>

------
#### [ Console ]

1. 按照 *AWS 登录用户指南*中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)所述，根据用户类型选择相应的登录过程。

1. 在 **IAM 控制台主页**左侧的导航窗格中，在**搜索 IAM** 文本框中输入查询语句。

1. 在导航窗格中，选择 **Users**（用户）。

控制台会显示 AWS 账户 中的 IAM 用户。

------
#### [ AWS CLI ]

运行以下命令：
+ `[aws iam list-users](https://docs.aws.amazon.com/cli/latest/reference/iam/list-users.html)`

------
#### [ API ]

调用以下操作：
+ `[ListUsers](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUsers.html)` 

------

## 要列出 IAM 群组中的 IAM 用户
<a name="id_users_manage_list-users-group"></a>

------
#### [ Console ]

1. 按照 *AWS 登录用户指南*中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)所述，根据用户类型选择相应的登录过程。

1. 在 **IAM 控制台主页**左侧的导航窗格中，在**搜索 IAM** 文本框中输入查询语句。

1. 在导航窗格中，选择 **User groups**（用户组）。

1. 选择用户组的名称。

**Users**（用户）选项卡上列出了属于该群组的 IAM 用户。

------
#### [ AWS CLI ]

运行以下命令：
+ `[aws iam get-group](https://docs.aws.amazon.com/cli/latest/reference/iam/get-group.html)`

------
#### [ API ]

调用以下操作：
+ `[GetGroup](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetGroup.html)` 

------

## 列出用户所属的所有 IAM 组
<a name="id_users_manage_list-groups-users"></a>

------
#### [ Console ]

1. 按照 *AWS 登录用户指南*中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)所述，根据用户类型选择相应的登录过程。

1. 在 **IAM 控制台主页**左侧的导航窗格中，在**搜索 IAM** 文本框中输入查询语句。

1. 在导航窗格中，选择 **Users**（用户）。

1. 在 **Users**（用户）列表中，选择 IAM 用户的名称。

1. 选择 **Groups**（群组）选项卡，以显示包含当前用户的群组的列表。

------
#### [ AWS CLI ]

运行以下命令：
+ `[aws iam list-groups-for-user](https://docs.aws.amazon.com/cli/latest/reference/iam/list-groups-for-user.html)`

------
#### [ API ]

调用以下操作：
+ `[ListGroupsForUser](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListGroupsForUser.html)` 

------

## 后续步骤
<a name="id_users_list-next-steps"></a>

获得 IAM 用户列表后，可以按照以下步骤重命名、删除或停用 IAM 用户。
+ [重命名 IAM 用户](id_users_rename.md)
+ [移除或停用 IAM 用户](id_users_remove.md)

# 重命名 IAM 用户
<a name="id_users_rename"></a>

**注意**  
作为[最佳实践](best-practices.md)，我们建议您要求人类用户使用带有身份提供程序的联合身份验证才能使用临时凭证访问 AWS。如果您遵循最佳实践，则无法管理 IAM 用户和组。相反，您的用户和组是在 AWS 外部进行管理的，并且能够以联合身份**访问 AWS 资源。联合身份是来自企业用户目录、Web 身份提供程序、AWS Identity Service 的用户，或任何使用通过身份源提供的凭证来访问 AWS 服务的用户。联合身份使用其身份提供商定义的组。如果您使用的是 AWS IAM Identity Center，请参阅《AWS IAM Identity Center 用户指南》**中的[管理 IAM Identity Center 中的身份](https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-identity-source-sso.html)，了解有关在 IAM Identity Center 中创建用户和组的信息。

亚马逊云科技提供多种工具来管理 AWS 账户 中的 IAM 用户。您可以列出账户中或用户组中的 IAM 用户，也可以列出用户所属的所有 IAM 组。您可以重命名或更改 IAM 用户的路径。如果您使用的是联合身份而不是 IAM 用户，则可以从 AWS 账户中删除 IAM 用户，或停用该用户。

有关添加、更改或删除 IAM 用户的托管策略的更多信息，请参阅 [更改 IAM 用户的权限](id_users_change-permissions.md)。有关为 IAM 用户管理内联策略的信息，请参阅 [添加和删除 IAM 身份权限](access_policies_manage-attach-detach.md)、[编辑 IAM 策略](access_policies_manage-edit.md) 和 [删除 IAM 策略](access_policies_manage-delete.md)。作为最佳实践，请使用托管式策略而不是内联策略。AWS 托管式策略**可用于为很多常用案例提供权限。请记住，AWS 托管策略可能不会为您的特定使用场景授予最低权限许可，因为它们可供所有 AWS 客户使用。因此，我们建议通过定义特定于您的使用场景的[客户管理型策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)来减少许可。有关更多信息，请参阅 [AWS托管策略](access_policies_managed-vs-inline.md#aws-managed-policies)。有关专为特定任务函数制定的 AWS 托管策略的更多信息，请参阅 [工作职能的 AWS 托管策略](access_policies_job-functions.md)。

要了解有关验证 IAM policy 的更多信息，请参阅 [IAM 策略验证](access_policies_policy-validator.md)。

**提示**  
[IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html) 可以分析您的 IAM 角色使用的服务和操作，然后生成您可以使用的精细策略。测试每个生成的策略后，可以将该策略部署到生产环境中。这可确保您仅向工作负载授予所需的权限。有关策略生成的更多信息，请参阅 [IAM Access Analyzer 策略生成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-generation.html)。

有关管理 IAM 用户密码的信息，请参阅 [管理 IAM 用户的密码](id_credentials_passwords_admin-change-user.md)。

## 重命名 IAM 用户
<a name="id_users_renaming"></a>

要更改用户的名称或路径，必须使用 AWS CLI、Tools for Windows PowerShell 或 AWS API。控制台中没有用于重命名用户的选项。有关为将用户重命名而需要的权限的信息，请参阅[访问 IAM 资源所需的权限](access_permissions-required.md)。

当您更改用户名或路径时，发生以下情况：
+ 应用于用户的所有策略采用新用户名继续生效。
+ 采用新用户名的用户保留在原来的 IAM 组。
+ 用户的唯一 ID 保持不变。有关唯一 ID 的更多信息，请参阅 [唯一标识符](reference_identifiers.md#identifiers-unique-ids)。
+ 任何将该用户视为*主体*（向该用户授予访问权限）的资源或角色策略均自动更新以使用新用户名或路径。例如，Amazon SQS 中任何基于队列的策略或 Amazon S3 中任何基于资源的策略都会自动更新，以使用新名称和路径。

IAM 不自动更新将该用户*视为资源*的策略以使用新用户名或路径；必须由您手动更新。例如，假设向用户 `Richard` 附加了一个策略，该策略使该用户可管理其自己的安全凭证。如果管理员将 `Richard` 重命名为 `Rich`，则管理员还需要更新该策略以将资源从此：

```
arn:aws:iam::111122223333:user/division_abc/subdivision_xyz/Richard
```

改为此：

```
arn:aws:iam::111122223333:user/division_abc/subdivision_xyz/Rich
```

如果管理员更改路径，则也会发生这种情况；管理员需要更新策略以反映该用户使用新路径。

### 重命名用户
<a name="id_users_manage_list-users-rename"></a>
+ AWS CLI：[aws iam update-user](https://docs.aws.amazon.com/cli/latest/reference/iam/update-user.html)
+ AWS API：[UpdateUser](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateUser.html) 

# 移除或停用 IAM 用户
<a name="id_users_remove"></a>

[最佳实操](best-practices.md#remove-credentials)建议您从 AWS 账户 中移除未使用的 IAM 用户。如果您想保留 IAM 用户的凭证以供将来使用，可以停用用户的访问权限，而不是从账户中删除凭证。有关更多信息，请参阅 [停用 IAM 用户](#id_users_deactivating)。

**警告**  
IAM 用户及其访问密钥一经删除，便无法恢复。

## 先决条件 – 查看 IAM 用户访问权限
<a name="users-manage_prerequisites"></a>

在移除用户之前，请查看其最近的服务级活动。这有助于防止删除正在使用访问权限的主体（个人或应用程序）的访问权限。有关查看上次访问的信息的更多信息，请参阅 [使用上次访问的信息优化 AWS 中的权限](access_policies_last-accessed.md)。

## 移除 IAM 用户（控制台）
<a name="id_users_deleting_console"></a>

使用 AWS 管理控制台 来移除 IAM 用户时，IAM 将自动删除以下关联信息：
+ IAM 用户标识符
+ 任何群组成员资格 - 也就是说，该 IAM 用户将从其所属的任何 群组中移除
+ 任何与该 IAM 用户关联的密码 
+ 嵌入到该 IAM 用户中的所有内联策略（通过用户组权限应用于用户的策略不受影响） 
**注意**  
当您删除用户时，IAM 会移除附加到 IAM 用户的任何托管策略，但不会删除托管策略。
+ 任何关联的 MFA 设备

### 要移除 IAM 用户（控制台）
<a name="id_users_remove-section-1"></a>

------
#### [ Console ]

1. 按照 *AWS 登录用户指南*中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)所述，根据用户类型选择相应的登录过程。

1. 在 **IAM 控制台主页**左侧的导航窗格中，在**搜索 IAM** 文本框中输入查询语句。

1. 在导航窗格中，选择**用户**，然后选中要删除的 IAM 用户名旁边的复选框。

1. 在页面的顶部，选择 **Delete**（移除）。
**注意**  
如果任何用户有激活的访问密钥，则必须在删除用户之前停用访问密钥。有关更多信息，请参阅 [要停用 IAM 用户的访问密钥](access-keys-admin-managed.md#admin-deactivate-access-key)。

1. 在确认对话框的文本输入字段中输入用户名，以确认移除用户。选择 **Delete**（移除）。

控制台显示状态消息，通知 IAM 用户已被移除。

------

## 移除 IAM 用户 (AWS CLI)
<a name="id_users_deleting_cli"></a>

与 AWS 管理控制台 不同，在使用 AWS CLI 移除 IAM 用户时，您必须手动删除附加到该 IAM 用户的项目。此步骤演示了该过程。

**从您的 AWS 账户 (AWS CLI) 中移除 IAM 用户**

1. 删除用户的密码（如果用户有）。

   `[aws iam delete-login-profile](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-login-profile.html)`

1. 删除用户的访问密钥（如果用户有）。

   `[aws iam list-access-keys](https://docs.aws.amazon.com/cli/latest/reference/iam/list-access-keys.html)`（用于列出用户的访问密钥）和 `[aws iam delete-access-key](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-access-key.html)`

1. 删除用户的签名证书。注意，当您删除安全凭证时，凭证永远消失，无法恢复。

   `[aws iam list-signing-certificates](https://docs.aws.amazon.com/cli/latest/reference/iam/list-signing-certificates.html)`（用于列出用户的签名证书）和 `[aws iam delete-signing-certificate](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-signing-certificate.html)`

1. 请删除用户的 SSH 公有密钥（如果用户具有）。

   `[aws iam list-ssh-public-keys](https://docs.aws.amazon.com/cli/latest/reference/iam/list-ssh-public-keys.html)`（用于列出用户的 SSH 公有密钥）和 `[aws iam delete-ssh-public-key](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-ssh-public-key.html)`

1. 请删除用户的 Git 凭证。

   `[aws iam list-service-specific-credentials](https://docs.aws.amazon.com/cli/latest/reference/iam/list-service-specific-credentials.html)`（用于列出用户的 Git 凭证）和 `[aws iam delete-service-specific-credential](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-service-specific-credential.html)`

1. 停用用户的多重身份验证 (MFA) 设备（如果用户具有）。

   `[aws iam list-mfa-devices](https://docs.aws.amazon.com/cli/latest/reference/iam/list-mfa-devices.html)`（用于列出用户的 MFA 设备）、`[aws iam deactivate-mfa-device](https://docs.aws.amazon.com/cli/latest/reference/iam/deactivate-mfa-device.html)`（用于停用设备）和 `[aws iam delete-virtual-mfa-device](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-virtual-mfa-device.html)`（用于永久删除虚拟 MFA 设备） 

1. 请删除用户的内联策略。

   `[aws iam list-user-policies](https://docs.aws.amazon.com/cli/latest/reference/iam/list-user-policies.html)`（用于列出用户的内联策略）和 [https://docs.aws.amazon.com/cli/latest/reference/iam/delete-user-policy.html](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-user-policy.html)（用于删除策略） 

1. 分离附加到用户的任何托管策略。

   `[aws iam list-attached-user-policies](https://docs.aws.amazon.com/cli/latest/reference/iam/list-attached-user-policies.html)`（用于列出附加到用户的托管策略）和 [https://docs.aws.amazon.com/cli/latest/reference/iam/detach-user-policy.html](https://docs.aws.amazon.com/cli/latest/reference/iam/detach-user-policy.html)（用于分离策略） 

1. 从任何 IAM 组中删除用户。

   `[aws iam list-groups-for-user](https://docs.aws.amazon.com/cli/latest/reference/iam/list-groups-for-user.html)`（用于列出用户所属的 IAM 组）和 `[aws iam remove-user-from-group](https://docs.aws.amazon.com/cli/latest/reference/iam/remove-user-from-group.html)` 

1. 删除用户。

   `[aws iam delete-user](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-user.html)` 

## 停用 IAM 用户
<a name="id_users_deactivating"></a>

如果 IAM 用户暂时退出贵公司，您可能需要将其停用。您可以保留其 IAM 用户凭证，但仍然阻止其进行 AWS 访问。

要停用用户，请创建并附加策略以拒绝该用户访问 AWS。您可以稍后恢复该用户的访问权限。

以下是您可以附加到用户以拒绝其访问的拒绝策略的两个示例。

以下策略不包含时间限制。您必须删除该策略才能恢复用户的访问权限。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [ 
      {
        "Effect": "Deny",
        "Action": "*",
        "Resource": "*"
      } 
   ]
}
```

------

以下策略包含一个条件，即策略自 2024 年 12 月 24 日晚上 11:59（UTC）起生效，并于 2025 年 2 月 28 日晚上 11:59（UTC）终止。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
      {
        "Effect": "Deny",
        "Action": "*",
        "Resource": "*",
        "Condition": {
          "DateGreaterThan": {"aws:CurrentTime": "2024-12-24T23:59:59Z"},
          "DateLessThan": {"aws:CurrentTime": "2025-02-28T23:59:59Z"}
          }
       }
   ]
}
```

------

# 控制 IAM 用户对 AWS 管理控制台 的访问
<a name="console_controlling-access"></a>

具有权限的 IAM 用户通过 AWS 管理控制台 登录到 AWS 账户 可以访问您的 AWS 资源。以下列表显示了您可授权 IAM 用户通过 AWS 管理控制台 访问您的 AWS 账户 资源的几种方式。同时，还列出了 IAM 用户可通过 AWS 网站访问其他 AWS 账户功能的方式。

**注意**  
使用 IAM 不会产生任何费用。

**这些区域有：AWS 管理控制台**  
您为需要访问 AWS 管理控制台 的每位 IAM 用户创建一个密码。用户通过启用了 IAM 的 AWS 账户 登录页面访问该控制台。有关访问登录页面的更多信息，请参阅《AWS 登录 用户指南》**中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)。有关创建密码的信息，请参阅 [AWS 中的用户密码](id_credentials_passwords.md)。  
您可以通过删除 IAM 用户的密码来阻止其访问 AWS 管理控制台。这样可以阻止他们使用其登录凭证登录 AWS 管理控制台。这不会更改他们的权限，也不会阻止他们使用担任的角色访问控制台。如果该用户具有有效的访问密钥，它们将继续起作用并允许通过 AWS CLI、Tools for Windows PowerShell、AWS API，或 AWS Console Mobile Application 进行访问。

**您的 AWS 资源（例如 Amazon EC2 实例、Amazon S3 存储桶等）**  
即使您的 IAM 用户持有密码，也仍需拥有访问您的 AWS 资源的权限。当您创建 IAM 用户时，该用户默认没有任何权限。若要为 IAM 用户授予所需的权限，您需要为其附加策略。如果您有许多使用相同资源来执行相同任务的 IAM 用户，则可将这些 IAM 用户分配至一个组。然后将权限分配给该组。有关创建 IAM 用户和组的信息，请参阅 [IAM 身份](id.md)。有关使用策略来设置许可的信息，请参阅 [适用于 AWS 资源的 Access Management](access.md)。

**AWS 开发论坛**  
任何人均可阅读 [AWS 开发论坛](https://forums.aws.amazon.com/)上的帖子。希望在 AWS 开发论坛上发布问题或评论的用户可使用他们的用户名进行操作。当用户初次在 AWS 论坛上发帖时，将提示该用户输入昵称和电子邮件地址。只有该用户可以在 AWS 论坛中使用该昵称 

**您的 AWS 账户 账单和使用情况信息**  
您可授权用户访问您的 AWS 账户 账单和使用情况信息。有关更多信息，请参阅 [AWS Billing 用户指南](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/control-access-billing.html)中的*控制对账单信息的访问权限*。

**您的 AWS 账户 个人资料信息**  
用户无法访问您的 AWS 账户 个人资料信息。

**您的 AWS 账户 安全凭证**  
用户无法访问您的 AWS 账户 安全凭证。

**注意**  
IAM policy 控制访问不受接口限制。例如，您可以为用户提供密码以访问 AWS 管理控制台。该用户（或该用户所属的任何组）的策略将控制用户可在 AWS 管理控制台 中执行的操作。或者，您可以为用户提供 AWS 访问密钥以对 AWS 进行 API 调用。这些策略将控制用户可以通过使用这些访问密钥进行身份验证的数据库或客户端可以调用哪些操作。

# 更改 IAM 用户的权限
<a name="id_users_change-permissions"></a>

您可以更改您 AWS 账户 中的 IAM 用户的权限，方法是更改用户的组成员资格、复制现有用户的权限、直接为用户附加策略或设置[权限边界](access_policies_boundaries.md)。权限边界控制用户可以具有的最大权限。权限边界是一项高级 AWS 功能。

有关您修改用户的权限所需的权限的信息，请参阅[访问 IAM 资源所需的权限](access_permissions-required.md)。

**Topics**
+ [查看用户访问](#users-modify_prerequisites)
+ [基于用户的访问活动生成策略](#users_change_permissions-gen-policy)
+ [向用户添加权限（控制台）](#users_change_permissions-add-console)
+ [更改用户的权限（控制台）](#users_change_permissions-change-console)
+ [要从用户删除权限策略（控制台）](#users_change_permissions-remove-policy-console)
+ [要从用户删除权限边界（控制台）](#users_change_permissions-remove-boundary-console)
+ [添加和删除用户的权限（AWS CLI 或 AWS API）](#users_change_permissions-add-programmatic)

## 查看用户访问
<a name="users-modify_prerequisites"></a>

在更改用户的权限之前，您应查看其最近的服务级别活动。这非常重要，因为您不想删除使用它的主体（个人或应用程序）的访问权限。有关查看上次访问的信息的更多信息，请参阅 [使用上次访问的信息优化 AWS 中的权限](access_policies_last-accessed.md)。

## 基于用户的访问活动生成策略
<a name="users_change_permissions-gen-policy"></a>

有时，您可能会向 IAM 实体（用户或角色）授予超出其需要的权限。为帮助您优化授予的权限，您可以根据实体的访问活动生成 IAM policy。IAM 访问分析器会查看您的 AWS CloudTrail 日志并生成一个策略模板，其中包含实体在指定日期范围内使用的权限。您可以使用模板创建具有精细权限的托管策略，然后将其附加到 IAM 实体。这样，您仅需授予用户或角色与特定使用案例中的 AWS 资源进行交互所需的权限。要了解更多信息，请参阅 [IAM Acess Analyzer 策略生成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-generation.html)。

## 向用户添加权限（控制台）
<a name="users_change_permissions-add-console"></a>

IAM 提供了三种方法来向用户添加权限策略：
+ **将 IAM 用户添加到组** - 使用户成为一个组的成员。来自该组的策略将附加到用户。
+ **复制现有 IAM 用户的权限** - 复制所有组成员资格、附加的托管策略、内联策略以及源用户的任何现有权限边界。
+ **直接为 IAM 用户附加策略** - 直接为用户附加托管策略。为方便管理权限，请将策略附加到组，然后让 IAM 用户成为相应组的成员。

**重要**  
如果用户具有权限边界，则您为用户添加的权限不能超过权限边界所允许的权限。

### 要通过将 IAM 用户添加到组来添加权限
<a name="users_change_permissions-add-group-console"></a>

将 IAM 用户添加到 IAM 组后，该用户的权限会立即更新为该组所定义的权限。

------
#### [ Console ]

1. 按照 *AWS 登录用户指南*中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)所述，根据用户类型选择相应的登录过程。

1. 在 **IAM 控制台主页**左侧的导航窗格中，在**搜索 IAM** 文本框中输入查询语句。

1. 在导航窗格中，选择 **Users**（用户）。

1. 在 **Users**（用户）列表中，选择 IAM 用户的名称。

1. 选择 **Groups**（群组）选项卡，以显示包含当前用户的群组的列表。

1. 选择 **Add user to groups**（将用户添加到群组）。

1. 选中您希望用户加入的每个组对应的复选框。列表显示了每个组的名称以及用户在成为该组成员后获得的策略。

1. （可选）您可以选择 **Create group**（创建群组）来定义新的群组。如果您想将用户添加到与现有群组具有不同附加策略的群组中，这将非常有用：

   1. 在新选项卡中，对于 **User group name**（用户组名），键入您的新组名称。
**注意**  
AWS 账户中 IAM 资源的数量和大小是有限的。有关更多信息，请参阅 [IAM 和 AWS STS 配额](reference_iam-quotas.md)。组名称可以是最多由 128 个字母、数字和以下字符构成的组合：加号 (\$1)、等号 (=)、逗号 (,)、句点 (.)、at 符号 (@) 和连字符 (-)。账户中的名称必须唯一。名称不区分大小写。例如，您不能创建名为 *TESTGROUP* 和 *testgroup* 的两个组。

   1. 选中您要附加到组的托管式策略对应的一个或多个复选框。您还可以通过选择 **Create policy** 来创建新的托管策略。如果您这样做，请在创建新的策略之后返回到此浏览器选项卡或窗口；选择 **Refresh**，然后选择新策略以将其附加到您的组。有关更多信息，请参阅 [使用客户管理型策略定义自定义 IAM 权限](access_policies_create.md)。

   1. 选择**创建用户组**。

   1. 返回到原始选项卡，刷新您的组列表。然后选中您的新组对应的复选框。

1. 选择 **Add user to group(s)**（将用户添加到群组）。

控制台会显示一条状态消息，通知您用户已添加到您指定的群组中。

------

### 要通过从其他 IAM 用户复制来添加权限
<a name="users_change_permissions-add-copy-console"></a>

如果您选择通过复制权限来为 IAM 用户添加权限，那么 IAM 会复制指定用户的所有组成员资格、附加托管策略、内联策略和任何现有权限边界，并立即将其应用到当前选定的用户。

------
#### [ Console ]

1. 按照 *AWS 登录用户指南*中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)所述，根据用户类型选择相应的登录过程。

1. 在 **IAM 控制台主页**左侧的导航窗格中，在**搜索 IAM** 文本框中输入查询语句。

1. 在导航窗格中，选择 **Users**（用户）。

1. 在 **Users**（用户）列表中，选择 IAM 用户的名称。

1. 在 **Permissions**（权限）选项卡中，选择 **Add permissions**（添加权限）。

1. 在 **Add permissions**（添加权限）页面上，选择 **Copy permissions**（复制权限）。列表显示了可用 IAM 用户以及其组成员资格和附加的策略。

1. 选择您想要复制其权限的用户旁边的单选按钮。

1. 选择 **Next**（下一步），以查看要对用户所做的更改列表。然后选择 **Add permissions**（添加权限）。

控制台会显示一条状态消息，通知您权限已从您指定的 IAM 用户那里复制。

------

### 要通过直接将策略附加到 IAM 用户来添加权限
<a name="users_change_permissions-add-directly-console"></a>

您可以直接将托管策略附加到 IAM 用户。更新后的权限会立即应用。

------
#### [ Console ]

1. 按照 *AWS 登录用户指南*中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)所述，根据用户类型选择相应的登录过程。

1. 在 **IAM 控制台主页**左侧的导航窗格中，在**搜索 IAM** 文本框中输入查询语句。

1. 在导航窗格中，选择 **Users**（用户）。

1. 在 **Users**（用户）列表中，选择 IAM 用户的名称。

1. 在 **Permissions**（权限）选项卡中，选择 **Add permissions**（添加权限）。

1. 在 **Add permissions**（添加权限）页面上，选择 **Attach policies directly**（直接附加策略）。**Permissions policies**（权限策略）列表显示可用策略及其策略类型和附加实体。

1. 选择要附加的 **Policy name**（策略名称）旁边的单选按钮。

1. 选择 **Next**（下一步），以查看要对用户所做的更改列表。然后选择 **Add permissions**（添加权限）。

控制台会显示一条状态消息，通知您已将策略添加到指定的 IAM 用户。

------

### 要为 IAM 用户设置权限边界
<a name="users_change_permissions-set-boundary-console"></a>

权限边界是 AWS 中管理权限的高级功能，用于设置 IAM 用户可拥有的最大权限。设置权限边界会立即将 IAM 用户的权限限制在边界内，而与授予的其他权限无关。

------
#### [ Console ]

1. 按照 *AWS 登录用户指南*中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)所述，根据用户类型选择相应的登录过程。

1. 在 **IAM 控制台主页**左侧的导航窗格中，在**搜索 IAM** 文本框中输入查询语句。

1. 在导航窗格中，选择 **Users**（用户）。

1. 在 **Users**（用户）列表中，选择要更改其权限边界的 IAM 用户的名称。

1. 选择 **Permissions**（权限）选项卡。如有必要，打开 **Permissions boundary** （权限边界）部分，然后选择 **Set permissions boundary**（设置权限边界）。

1. 在 **Set permissions boundary**（设置权限边界）页面中的 **Permissions policies**（权限策略）下，选择您要用于权限边界的策略。

1. 选择 **Set boundary**（设置边界）。

控制台会显示一条状态消息，通知您权限边界已添加。

------

## 更改用户的权限（控制台）
<a name="users_change_permissions-change-console"></a>

IAM 允许您通过以下方式更改与用户关联的权限：
+ **编辑权限策略** - 编辑用户的内联策略、用户的组的内联策略，或编辑直接附加到用户或从组附加到用户的托管策略。如果用户具有权限边界，则您提供的权限不能超过用作用户的权限边界的策略所允许的权限。
+ **更改权限边界** - 更改用作用户的权限边界的策略。这可以扩大或限制用户可以具有的最大权限。

### 编辑附加到用户的权限策略
<a name="users_change_permissions-edit-policy-console"></a>

更改权限会立即更新用户的访问权限。

------
#### [ Console ]

1. 按照 *AWS 登录用户指南*中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)所述，根据用户类型选择相应的登录过程。

1. 在 **IAM 控制台主页**左侧的导航窗格中，在**搜索 IAM** 文本框中输入查询语句。

1. 在导航窗格中，选择 **Users**（用户）。

1. 在 **Users**（用户）列表中，选择要更改其权限边界的 IAM 用户的名称。

1. 选择 **Permissions**（权限）选项卡。如有必要，打开 **Permissions boundary**（权限边界）部分。

1. 请选择要编辑的策略的名称以查看有关该策略的详细信息。选择 **Entities attached**（附加的实体）选项卡，查看编辑策略后可能受影响的其他实体（IAM 用户、组和角色）。

1. 选择 **Permissions**（权限）选项卡并查看策略授予的权限。要更改权限，请选择 **Edit**（编辑）。

1. 编辑该策略并解决任何[策略验证](access_policies_policy-validator.md)建议。有关更多信息，请参阅 [编辑 IAM 策略](access_policies_manage-edit.md)。

1. 选择 **Next**（下一步），查看策略摘要，然后选择 **Save changes**（保存更改）。

控制台会显示一条状态消息，通知您策略已更新。

------

### 要为用户更改权限边界
<a name="users_change_permissions-change-boundary-console"></a>

更改权限边界会立即更新用户的访问权限。

------
#### [ Console ]

1. 按照 *AWS 登录用户指南*中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)所述，根据用户类型选择相应的登录过程。

1. 在 **IAM 控制台主页**左侧的导航窗格中，在**搜索 IAM** 文本框中输入查询语句。

1. 在导航窗格中，选择 **Users**（用户）。

1. 在 **Users**（用户）列表中，选择要更改其权限边界的 IAM 用户的名称。

1. 选择 **Permissions**（权限）选项卡。如有必要，打开 **Permissions boundary**（权限边界）部分，然后选择 **Change boundary**（更改边界）。

1. 选择要用于权限边界的策略。

1. 选择 **Set boundary**（设置边界）。

控制台会显示一条状态消息，通知您权限边界已更改。

------

## 要从用户删除权限策略（控制台）
<a name="users_change_permissions-remove-policy-console"></a>

删除权限策略会立即更新用户的访问权限。

------
#### [ Console ]

1. 按照 *AWS 登录用户指南*中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)所述，根据用户类型选择相应的登录过程。

1. 在 **IAM 控制台主页**左侧的导航窗格中，在**搜索 IAM** 文本框中输入查询语句。

1. 在导航窗格中，选择 **Users**（用户）。

1. 选择要删除其权限策略的用户的名称。

1. 选择**权限**选项卡。

1. 如果要通过移除现有策略来撤消权限，请查看 **Attached via**（附加方式）来了解用户如何获取该策略，然后再选择 **Remove**（删除）以删除策略：
   + 如果该策略因组成员资格而适用，则选择 **Remove**（删除），从组中删除该用户。请记住，可向单个组中附加多个策略。如果您从组中删除某个用户，该用户将失去对其通过组成员资格接收的*所有*策略的访问权限。
   + 如果该策略是直接附加到该用户的托管策略，则选择 **Remove**（删除），从该用户中分离该策略。这不会影响该策略本身或该策略可能附加到的任何其他实体。
   + 如果该策略是内联嵌入式策略，则选择 **Remove**（删除），从 IAM 中删除该策略。直接附加到用户的内联策略只能在该用户中存在。

如果策略是通过组成员资格授予用户的，则控制台会显示一条状态消息，通知您该 IAM 用户已从 IAM 组移除。如果策略是直接附加或内联的，则状态消息会通知您该策略已被删除。

------

## 要从用户删除权限边界（控制台）
<a name="users_change_permissions-remove-boundary-console"></a>

删除权限边界会立即更新用户的访问权限。

------
#### [ Console ]

1. 按照 *AWS 登录用户指南*中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)所述，根据用户类型选择相应的登录过程。

1. 在 **IAM 控制台主页**左侧的导航窗格中，在**搜索 IAM** 文本框中输入查询语句。

1. 在导航窗格中，选择 **Users**（用户）。

1. 在 **Users**（用户）列表中，选择要删除其权限边界的 IAM 用户的名称。

1. 选择**权限**选项卡。如有必要，打开 **Permissions boundary**（权限边界）部分。

1.  选择 **Change boundary**（更改边界）。要确认要删除权限边界，请在确认对话框中选择 **Remove boundary**（删除边界）。

控制台会显示一条状态消息，通知您权限边界已删除。

------

## 添加和删除用户的权限（AWS CLI 或 AWS API）
<a name="users_change_permissions-add-programmatic"></a>

要以编程方式添加或删除权限，您必须添加组成员资格、附加或分离托管策略或者添加或删除内联策略。有关更多信息，请参阅以下主题：
+ [编辑 IAM 组中的用户](id_groups_manage_add-remove-users.md)
+ [添加和删除 IAM 身份权限](access_policies_manage-attach-detach.md)

# AWS 中的用户密码
<a name="id_credentials_passwords"></a>

您可以在账户中管理 IAM 用户的密码。IAM 用户需要密码才能访问 AWS 管理控制台。利用 AWS CLI、Tools for Windows PowerShell、AWS SDK 或 API，用户无需密码即可以编程方式访问 AWS 资源。在这些环境下，您可以选择为 IAM 用户分配[访问密钥](id_credentials_access-keys.md)。但是，我们建议您首先考虑使用其他更安全的访问密钥替代方法。有关更多信息，请参阅 [AWS 安全凭证](security-creds.md)。

**注意**  
如果您的某个 IAM 用户丢失或忘记了密码，您*无法*从 IAM 中找回密码。根据您的设置，用户或管理员都必须创建新密码。

**Topics**
+ [为 IAM 用户设置账户密码策略](id_credentials_passwords_account-policy.md)
+ [管理 IAM 用户的密码](id_credentials_passwords_admin-change-user.md)
+ [允许 IAM 用户更改自己的密码](id_credentials_passwords_enable-user-change.md)
+ [IAM 用户如何更改自己的密码](id_credentials_passwords_user-change-own.md)

# 为 IAM 用户设置账户密码策略
<a name="id_credentials_passwords_account-policy"></a>

您可以在 AWS 账户 上设置自定义密码策略，以便指定您的 IAM 用户密码的复杂性要求和强制轮换期。如果未设置自定义密码策略，则 IAM 用户密码必须符合默认 AWS 密码策略。有关更多信息，请参阅 [自定义密码策略选项](#password-policy-details)。

**Topics**
+ [设置密码策略的规则](#password-policy-rules)
+ [设置密码策略时所需的权限](#default-policy-permissions-required)
+ [默认密码策略](#default-policy-details)
+ [自定义密码策略选项](#password-policy-details)
+ [要设置密码策略（控制台）](#IAMPasswordPolicy)
+ [更改密码策略（控制台）](#id_credentials_passwords_account-policy-section-1)
+ [删除自定义密码策略（控制台）](#id_credentials_passwords_account-policy-section-2)
+ [设置密码策略 (AWS CLI)](#PasswordPolicy_CLI)
+ [设置密码策略 (AWS API)](#PasswordPolicy_API)

## 设置密码策略的规则
<a name="password-policy-rules"></a>

IAM 密码策略不适用于 AWS 账户根用户 密码或 IAM 用户访问密钥。如果密码过期，IAM 用户将无法登录 AWS 管理控制台，但可以继续使用其访问密钥。

创建或更改密码策略时，大多数密码策略设置会在用户下次更改其密码时实施。但是，一些设置将立即实施。例如：
+ 在最小长度和字符类型要求变更后，系统会在您的用户下次更改其密码时强制实施该设置。不强制用户更改其现有密码，即使这些密码不符合更新后的密码策略。
+ 设置密码有效期时，有效期立即生效。例如，假定您将密码有效期设置为 90 天。在这种情况下，对于现有密码使用期限超过 90 天的所有 IAM 用户，其密码将过期。这些用户必须在下次登录时更改其密码。

在尝试指定的登录失败次数后，您将无法创建“锁定策略”来锁定账户用户。为了增强安全性，我们建议您将强密码策略与 Multi-Factor Authentication (MFA) 相结合。有关 MFA 的更多信息，请参阅 [IAM 中的 AWS 多重身份验证](id_credentials_mfa.md)。

## 设置密码策略时所需的权限
<a name="default-policy-permissions-required"></a>

您必须配置权限以允许 IAM 实体（用户或角色）查看或编辑其账户密码策略。您可以在 IAM policy 中包含以下密码策略操作：
+ `iam:GetAccountPasswordPolicy` - 允许实体查看其账户的密码策略
+ `iam:DeleteAccountPasswordPolicy` - 允许实体删除其账户的自定义密码策略并恢复到默认密码策略
+ `iam:UpdateAccountPasswordPolicy` - 允许实体为其账户创建或更改自定义密码策略

以下策略允许查看和编辑账户密码策略的完全访问权限。要了解如何使用该示例 JSON 策略文档创建 IAM policy，请参阅。[使用 JSON 编辑器创建策略](access_policies_create-console.md#access_policies_create-json-editor)

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "FullAccessPasswordPolicy",
            "Effect": "Allow",
            "Action": [
                "iam:GetAccountPasswordPolicy",
                "iam:DeleteAccountPasswordPolicy",
                "iam:UpdateAccountPasswordPolicy"
            ],
            "Resource": "*"
        }
    ]
}
```

------

有关 IAM 用户更改自己的密码所需权限的信息，请参阅 [允许 IAM 用户更改自己的密码](id_credentials_passwords_enable-user-change.md)。

## 默认密码策略
<a name="default-policy-details"></a>

如果管理员未设置自定义密码策略，则 IAM 用户密码必须符合默认 AWS 密码策略。

默认密码策略强制执行以下条件：
+ 密码长度最短为 8 个字符，最长为 128 个字符
+ 至少包含以下三种字符类型的组合：大写、小写、数字，以及非字母数字字符（`! @ # $ % ^ & * ( ) _ + - = [ ] { } | '`）
+ 与您的 AWS 账户 名称或电子邮件地址不同
+ 密码永不过期

## 自定义密码策略选项
<a name="password-policy-details"></a>

为账户配置自定义密码策略时，可以指定以下条件：
+ **密码最小长度** - 您可以指定最少 6 个字符和最多 128 个字符。
+ **密码强度** - 您可以选中以下任一复选框来定义 IAM 用户密码的强度：
  + 至少需要一个大写拉丁字母（A-Z）
  + 至少需要一个小写拉丁字母（a-z）
  + 至少需要一个数字
  + 至少需要一个非字母数字字符 `! @ # $ % ^ & * ( ) _ + - = [ ] { } | '` 
+ **Turn on password expiration**（打开密码过期）– 您可以选择并指定 IAM 用户密码设置后的有效期：至少 1 天和最多 1095 天。例如，如果您指定的过期时间为 90 天，则会立即影响所有用户。对于密码超过 90 天的用户，更改后登录控制台时，必须设置新密码。密码为 75-89 天的用户会收到有关密码过期的 AWS 管理控制台 警告。IAM 用户可以随时更改其密码（如有权限）。密码的有效期从用户设置新密码时起计算。IAM 用户同时只能有一个有效密码。
+ **Password expiration requires administrator reset**（密码过期需要管理员重置）– 选择此选项可防止 IAM 用户在密码过期后使用 AWS 管理控制台 更新自己的密码。选择此选项之前，请确认您的 AWS 账户 具有多个具备管理权限的用户，以重置 IAM 用户密码。具有 `iam:UpdateLoginProfile` 权限的管理员可重置 IAM 用户密码。具有 `iam:ChangePassword` 权限和活动访问密钥的 IAM 用户可以编程方式重置其 IAM 用户控制台密码。如果清除此复选框，则密码已过期的 IAM 用户仍必须先设置新密码，然后才能访问 AWS 管理控制台。
+ **Allow users to change their own password**（允许用户更改自己的密码）– 您可以允许账户中的所有 IAM 用户更改自己的密码。这样用户就可以仅访问其用户的 `iam:ChangePassword` 操作和 `iam:GetAccountPasswordPolicy` 操作。此选项不会将权限策略附加到每个用户。相反，IAM 为所有用户提供账户级别权限。或者，您可以只允许部分用户管理自己的密码。为此，请清除此复选框。有关使用策略来限制哪些人可以管理密码的更多信息，请参阅[允许 IAM 用户更改自己的密码](id_credentials_passwords_enable-user-change.md)。
+ **Prevent password reuse**（防止密码重复使用）- 您可以阻止 IAM 用户重复使用指定数量的前密码。您可以指定最少 1 个和最多 24 个不能重复的前密码。

## 要设置密码策略（控制台）
<a name="IAMPasswordPolicy"></a>

您可使用 AWS 管理控制台 创建、更改或删除自定义密码策略。密码策略的更改适用于在此策略更改后创建的新 IAM 用户，以及更改密码时的现有 IAM 用户。

------
#### [ Console ]

1. 按照 *AWS 登录用户指南*中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)所述，根据用户类型选择相应的登录过程。

1. 在 **IAM 控制台主页**左侧的导航窗格中，在**搜索 IAM** 文本框中输入查询语句。

1. 在导航窗格中，选择 **Account settings**（账户设置）。

1. 在 **Password policy**（密码策略）部分，选择 **Edit**（编辑）。

1. 选择 **Custom**（自定义）以使用自定义密码策略。

1. 选择您要应用于密码策略的选项，然后选择 **Save changes**（保存更改）。

1. 通过选择 **Set custom**（设置自定义）来确认您要设置自定义密码策略。

控制台会显示一条状态消息，通知您 IAM 用户的密码要求已更新。

------

## 更改密码策略（控制台）
<a name="id_credentials_passwords_account-policy-section-1"></a>

您可使用 AWS 管理控制台 创建、更改或删除自定义密码策略。密码策略的更改适用于在此策略更改后创建的新 IAM 用户，以及更改密码时的现有 IAM 用户。

------
#### [ Console ]

1. 按照 *AWS 登录用户指南*中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)所述，根据用户类型选择相应的登录过程。

1. 在 **IAM 控制台主页**左侧的导航窗格中，在**搜索 IAM** 文本框中输入查询语句。

1. 在导航窗格中，选择 **Account settings**（账户设置）。

1. 在 **Password policy**（密码策略）部分，选择 **Edit**（编辑）。

1. 选择您要应用于密码策略的选项，然后选择 **Save changes**（保存更改）。

1. 通过选择 **Set custom**（设置自定义）来确认您要设置自定义密码策略。

控制台会显示一条状态消息，通知您 IAM 用户的密码要求已更新。

------

## 删除自定义密码策略（控制台）
<a name="id_credentials_passwords_account-policy-section-2"></a>

您可使用 AWS 管理控制台 创建、更改或删除自定义密码策略。密码策略的更改适用于在此策略更改后创建的新 IAM 用户，以及更改密码时的现有 IAM 用户。

------
#### [ Console ]

1. 按照 *AWS 登录用户指南*中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)所述，根据用户类型选择相应的登录过程。

1. 在 **IAM 控制台主页**左侧的导航窗格中，在**搜索 IAM** 文本框中输入查询语句。

1. 在导航窗格中，选择 **Account settings**（账户设置）。

1. 在 **Password policy**（密码策略）部分，选择 **Edit**（编辑）。

1. 选择 **IAM default**（IAM 默认）以删除自定义密码策略，然后选择 **Save changes**（保存更改）。

1. 通过选择 **Set default**（设置默认值）来确认您要设置 IAM 默认密码策略。

控制台会显示一条状态消息，通知您密码策略已设置为 IAM 默认值。

------

## 设置密码策略 (AWS CLI)
<a name="PasswordPolicy_CLI"></a>

您可以使用 AWS Command Line Interface 设置密码策略。

**通过 AWS CLI 管理自定义账户密码策略**  
运行以下 命令：
+ 创建或更改自定义密码策略：[https://docs.aws.amazon.com/cli/latest/reference/iam/update-account-password-policy.html](https://docs.aws.amazon.com/cli/latest/reference/iam/update-account-password-policy.html)
+ 查看密码策略：[https://docs.aws.amazon.com/cli/latest/reference/iam/get-account-password-policy.html](https://docs.aws.amazon.com/cli/latest/reference/iam/get-account-password-policy.html)
+ 删除自定义密码策略：[https://docs.aws.amazon.com/cli/latest/reference/iam/delete-account-password-policy.html](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-account-password-policy.html)

## 设置密码策略 (AWS API)
<a name="PasswordPolicy_API"></a>

您可以使用 AWS API 操作来设置密码策略。

**通过 AWS API 管理自定义账户密码策略**  
调用以下操作：
+ 创建或更改自定义密码策略：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccountPasswordPolicy.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccountPasswordPolicy.html)
+ 查看密码策略：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountPasswordPolicy.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountPasswordPolicy.html)
+ 删除自定义密码策略：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteAccountPasswordPolicy.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteAccountPasswordPolicy.html)

# 管理 IAM 用户的密码
<a name="id_credentials_passwords_admin-change-user"></a>

通过 AWS 管理控制台 使用 AWS 资源的 IAM 用户必须具有密码才能登录。您可以创建、更改或删除您的 AWS 账户中 IAM 用户的密码。

向用户分配密码后，该用户可使用您的账户的登录 URL 登录 AWS 管理控制台，如下所示：

```
https://12-digit-AWS-account-ID or alias.signin.aws.amazon.com/console
```

有关 IAM 用户如何登录 AWS 管理控制台 的更多信息，请参阅《AWS 登录 用户指南》**中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)。

即使用户有自己的密码，还是需要权限才能访问您的 AWS 资源。默认情况下，用户没有权限。为授予用户所需的许可，您可向用户或用户所属的群组分配策略。有关创建用户和组的信息，请参阅 [IAM 身份](id.md)。有关使用策略来设置许可的信息，请参阅 [更改 IAM 用户的权限](id_users_change-permissions.md)。

可向用户授予相应的权限，用于更改其自身的密码。有关更多信息，请参阅 [允许 IAM 用户更改自己的密码](id_credentials_passwords_enable-user-change.md)。有关用户如何访问账户登录页面的信息，请参阅《AWS 登录 用户指南》**中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)。

**Topics**
+ [创建、更改或删除 IAM 用户密码（控制台）](#id_credentials_passwords_admin-change-user_console)

## 创建、更改或删除 IAM 用户密码（控制台）
<a name="id_credentials_passwords_admin-change-user_console"></a>

您可以使用 AWS 管理控制台 管理 IAM 用户的密码。

用户的访问需求可能会随着时间而变化。您可能需要让原本拥有 CLI 访问权限的用户开始访问控制台，因为用户收到了包含其凭证的电子邮件而更改其密码，或者在用户离开您的组织或不再需要 AWS 访问权限时删除其密码。

### 要创建 IAM 用户密码（控制台）
<a name="id_credentials_passwords_admin-change-user-section-1"></a>

使用此步骤创建与用户名相关联的密码，为用户提供控制台访问权限。

------
#### [ Console ]

1. 按照 *AWS 登录用户指南*中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)所述，根据用户类型选择相应的登录过程。

1. 在 **IAM 控制台主页**左侧的导航窗格中，在**搜索 IAM** 文本框中输入查询语句。

1. 在导航窗格中，选择 **Users**（用户）。

1. 请选择要为其创建密码的用户的名称。

1. 选择 **Security credentials**（安全凭证）选项卡，然后在 **Console sign-in**（控制台登录）下选择 **Enable console access**（启用控制台访问权限）。

1. 在 **Enable console access**（启用控制台访问权限）对话框中，选择 **Reset password**（重置密码），然后选择是让 IAM 生成密码还是创建自定义密码：
   + 要让 IAM 生成密码，请选择 **Autogenerated password**（自动生成的密码）。
   + 要创建自定义密码，请选择 **Custom password**（自定义密码），然后键入密码。
**注意**  
您创建的密码必须符合账户的[密码策略](id_credentials_passwords_account-policy.md)。

1. 若要求用户在登录时创建新密码，请选择 **Require password change at the next sign-in**（必须在下次登录时更改密码）。

1. 若要求用户立即使用新密码，请选择 **Revoke active console sessions**（撤消活动控制台会话）。这会向 IAM 用户附加一个内联策略，如果用户的凭证超过了策略指定的时间，则该策略就会拒绝用户访问资源。

1. 选择 **Reset password**（重置密码）。

1. **Console password**（控制台密码）对话框通知您已启用用户的新密码。要查看密码以便与用户共享它，请在 **Console password**（控制台密码）对话框中选择 **Show**（显示）。选择 **Download .csv file**（下载 .csv 文件），下载包含用户凭证的文件。
**重要**  
出于安全原因，在完成该步骤后您无法访问该密码，但您可以随时创建新密码。

控制台会显示一条状态消息，通知您控制台访问权限已启用。

------

### 要更改 IAM 用户的密码（控制台）
<a name="id_credentials_passwords_admin-change-user-section-2"></a>

使用此步骤更新与用户名关联的密码。

------
#### [ Console ]

1. 按照 *AWS 登录用户指南*中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)所述，根据用户类型选择相应的登录过程。

1. 在 **IAM 控制台主页**左侧的导航窗格中，在**搜索 IAM** 文本框中输入查询语句。

1. 在导航窗格中，选择 **Users**（用户）。

1. 请选择要更改其密码的用户的名称。

1. 选择 **Security credentials**（安全凭证）选项卡，然后在 **Console sign-in**（控制台登录）下选择 **Manage console access**（管理控制台访问权限）。

1. 在 **Manage console access**（管理控制台访问权限）对话框中，选择 **Reset password**（重置密码），然后选择是让 IAM 生成密码还是创建自定义密码：
   + 要让 IAM 生成密码，请选择 **Autogenerated password**（自动生成的密码）。
   + 要创建自定义密码，请选择 **Custom password**（自定义密码），然后键入密码。
**注意**  
您创建的密码必须符合账户的[密码策略](id_credentials_passwords_account-policy.md)。

1. 若要求用户在登录时创建新密码，请选择 **Require password change at the next sign-in**（必须在下次登录时更改密码）。

1. 若要求用户立即使用新密码，请选择 **Revoke active console sessions**（撤消活动控制台会话）。这会向 IAM 用户附加一个内联策略，如果用户的凭证超过了策略指定的时间，则该策略就会拒绝用户访问资源。

1. 选择 **Reset password**（重置密码）。

1. **Console password**（控制台密码）对话框通知您已启用用户的新密码。要查看密码以便与用户共享它，请在 **Console password**（控制台密码）对话框中选择 **Show**（显示）。选择 **Download .csv file**（下载 .csv 文件），下载包含用户凭证的文件。
**重要**  
出于安全原因，在完成该步骤后您无法访问该密码，但您可以随时创建新密码。

控制台会显示一条状态消息，通知您控制台访问权限已更新。

------

### 要删除（禁用）IAM 用户的密码（控制台）
<a name="id_credentials_passwords_admin-change-user-section-3"></a>

使用此步骤删除与用户名关联的密码，从而取消用户的控制台访问权限。

**重要**  
您可以通过删除 IAM 用户的密码来阻止其访问 AWS 管理控制台。这样可以阻止他们使用其登录凭证登录 AWS 管理控制台。这不会更改他们的权限，也不会阻止他们使用担任的角色访问控制台。如果该用户具有有效的访问密钥，它们将继续起作用并允许通过 AWS CLI、Tools for Windows PowerShell、AWS API，或 AWS Console Mobile Application 进行访问。

------
#### [ Console ]

1. 按照 *AWS 登录用户指南*中的[如何登录 AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)所述，根据用户类型选择相应的登录过程。

1. 在 **IAM 控制台主页**左侧的导航窗格中，在**搜索 IAM** 文本框中输入查询语句。

1. 在导航窗格中，选择 **Users**（用户）。

1. 请选择要删除其密码的用户的名称。

1. 选择**安全凭证**选项卡，然后在**控制台登录**下选择**管理控制台访问权限**。

1. 若要求用户立即停止使用控制台，请选择 **Revoke active console sessions**（撤消活动控制台会话）。这会向 IAM 用户附加一个内联策略，如果用户的凭证超过了策略指定的时间，则该策略就会拒绝用户访问资源。

1. 然后选择 **Disable access**（禁用访问）。

控制台会显示一条状态消息，通知您控制台访问已禁用。

------

### 创建、更改或删除 IAM 用户密码 (AWS CLI)
<a name="Using_ManagingPasswordsCLIAPI"></a>

您可以使用 AWS CLI API 管理 IAM 用户的密码。

**创建密码 (AWS CLI)**

1. （可选）要确定用户是否有密码，请运行此命令：[aws iam get-login-profile](https://docs.aws.amazon.com/cli/latest/reference/iam/get-login-profile.html)

1. 要创建密码，请运行此命令：[aws iam create-login-profile](https://docs.aws.amazon.com/cli/latest/reference/iam/create-login-profile.html)

**更改用户的密码 (AWS CLI)**

1. （可选）要确定用户是否有密码，请运行此命令：[aws iam get-login-profile](https://docs.aws.amazon.com/cli/latest/reference/iam/get-login-profile.html)

1. 要更改密码，请运行此命令：[aws iam update-login-profile](https://docs.aws.amazon.com/cli/latest/reference/iam/update-login-profile.html)

**删除（禁用）用户的密码 (AWS CLI)**

1. （可选）要确定用户是否有密码，请运行此命令：[aws iam get-login-profile](https://docs.aws.amazon.com/cli/latest/reference/iam/get-login-profile.html)

1. （可选）要确定上次使用密码的时间，请运行此命令：[aws iam get-user](https://docs.aws.amazon.com/cli/latest/reference/iam/get-user.html)

1. 要删除密码，请运行此命令：[aws iam delete-login-profile](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-login-profile.html)

**重要**  
在删除用户的密码后，用户无法再登录到 AWS 管理控制台。如果该用户具有有效的访问密钥，它们将继续起作用并允许通过 AWS CLI、Tools for Windows PowerShell 或 AWS API 函数调用进行访问。在使用 AWS CLI、Tools for Windows PowerShell 或 AWS API 从您的 AWS 账户 中删除用户时，您必须先使用此操作删除密码。有关更多信息，请参阅 [移除 IAM 用户 (AWS CLI)](id_users_remove.md#id_users_deleting_cli)。

**在指定时间之前撤销用户的活动控制台会话 (AWS CLI)**

1. 要嵌入在指定时间之前撤销 IAM 用户的活动控制台会话的内联策略，请使用以下内联策略并运行此命令：[aws iam put-user-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/put-user-policy.html)

   此内联策略拒绝所有权限并包含 `aws:TokenIssueTime` 条件键。它会在内联策略的 `Condition` 元素中的指定时间之前撤销用户的活动控制台会话。将 `aws:TokenIssueTime` 条件键值替换为您自己的值。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": {
       "Effect": "Deny",
       "Action": "*",
       "Resource": "*",
       "Condition": {
         "DateLessThan": {
           "aws:TokenIssueTime": "2014-05-07T23:47:00Z"
         }
       }
     }
   }
   ```

------

1. （可选）要列出 IAM 用户中嵌入的内联策略的名称，请运行此命令：[aws iam list-user-policies](https://docs.aws.amazon.com/cli/latest/reference/iam/list-user-policies.html)

1. （可选）要查看 IAM 用户中嵌入的命名内联策略，请运行此命令：[aws iam get-user-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/get-user-policy.html)

### 创建、更改或删除 IAM 用户密码 (AWS API)
<a name="Using_ManagingPasswordsAPI"></a>

您可以使用 AWS API 管理 IAM 用户的密码。

**创建密码 (AWS API)**

1. （可选）要确定用户是否有密码，请调用此操作：[GetLoginProfile](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetLoginProfile.html)

1. 要创建密码，请调用此操作：[CreateLoginProfile](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateLoginProfile.html)

**更改用户的密码 (AWS API)**

1. （可选）要确定用户是否有密码，请调用此操作：[GetLoginProfile](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetLoginProfile.html)

1. 要更改密码，请调用此操作：[UpdateLoginProfile](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateLoginProfile.html)

**删除（禁用）用户的密码 (AWS API)**

1. （可选）要确定用户是否有密码，请运行此命令：[GetLoginProfile](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetLoginProfile.html)

1. （可选）要确定上次使用密码的时间，请运行此命令：[GetUser](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetUser.html)

1. 要删除密码，请运行此命令：[DeleteLoginProfile](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteLoginProfile.html)

**重要**  
在删除用户的密码后，用户无法再登录到 AWS 管理控制台。如果该用户具有有效的访问密钥，它们将继续起作用并允许通过 AWS CLI、Tools for Windows PowerShell 或 AWS API 函数调用进行访问。在使用 AWS CLI、Tools for Windows PowerShell 或 AWS API 从您的 AWS 账户 中删除用户时，您必须先使用此操作删除密码。有关更多信息，请参阅 [移除 IAM 用户 (AWS CLI)](id_users_remove.md#id_users_deleting_cli)。

**在指定时间之前撤销用户的活动控制台会话 (AWS API)**

1. 要嵌入在指定时间之前撤销 IAM 用户的活动控制台会话的内联策略，请使用以下内联策略并运行此命令：[PutUserPolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_PutUserPolicy.html)

   此内联策略拒绝所有权限并包含 `aws:TokenIssueTime` 条件键。它会在内联策略的 `Condition` 元素中的指定时间之前撤销用户的活动控制台会话。将 `aws:TokenIssueTime` 条件键值替换为您自己的值。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": {
       "Effect": "Deny",
       "Action": "*",
       "Resource": "*",
       "Condition": {
         "DateLessThan": {
           "aws:TokenIssueTime": "2014-05-07T23:47:00Z"
         }
       }
     }
   }
   ```

------

1. （可选）要列出 IAM 用户中嵌入的内联策略的名称，请运行此命令：[ListUserPolicies](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUserPolicies.html)

1. （可选）要查看 IAM 用户中嵌入的命名内联策略，请运行此命令：[GetUserPolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetUserPolicy.html)

# 允许 IAM 用户更改自己的密码
<a name="id_credentials_passwords_enable-user-change"></a>

**注意**  
具有联合身份的用户将使用其身份提供商定义的流程来更改密码。作为[最佳实践](best-practices.md)，要求人类用户使用带有身份提供商的联合身份验证才能使用临时凭证访问 AWS。

您可以向 IAM 用户授予更改其用于登录 AWS 管理控制台 的密码的权限。您可以通过两种方式之一来执行此操作：
+ [允许账户中的所有 IAM 用户更改自己的密码](#proc_letalluserschangepassword)。
+ [仅允许选定的 IAM 用户更改自己的密码](#proc_letselectuserschangepassword)。在此情况下，您禁用可供所有用户用来更改其密码的选项，并使用 IAM policy 仅向某些用户授予权限。这种方法允许这些用户更改自己的密码和可选的其他凭证，例如他们自己的访问密钥。

**重要**  
我们建议您[设置自定义密码策略](id_credentials_passwords_account-policy.md)，要求 IAM 用户创建强密码。

## 允许所有 IAM 用户更改自己的密码
<a name="proc_letalluserschangepassword"></a>

------
#### [ Console ]

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，单击 **Account settings**（账户设置）。

1. 在 **Password policy**（密码策略）部分，选择 **Edit**（编辑）。

1. 选择 **Custom**（自定义）以使用自定义密码策略。

1. 选择 **Allow users to change their own password**（允许用户更改其密码），然后选择 **Save changes**（保存更改）。这样账户中的所有用户就可以仅访问其用户的 `iam:ChangePassword` 操作和 `iam:GetAccountPasswordPolicy` 操作。

1. 向用户提供有关更改密码的以下说明：[IAM 用户如何更改自己的密码](id_credentials_passwords_user-change-own.md)。

------
#### [ AWS CLI ]

运行以下命令：
+ `[aws iam update-account-password-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/update-account-password-policy.html)`

------
#### [ API ]

要为 AWS 管理控制台 登录页面 URL 创建别名，请调用以下操作：
+ `[UpdateAccountPasswordPolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccountPasswordPolicy.html)` 

------

## 允许选定的 IAM 用户更改自己的密码
<a name="proc_letselectuserschangepassword"></a>

------
#### [ Console ]

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，单击 **Account settings**（账户设置）。

1. 在 **Password policy**（密码策略）部分中，确保未选择 **Allow users to change their own password**（允许用户更改其密码）。如果已选中此复选框，则所有用户均可更改其密码。（请参阅上一个过程。） 

1. 创建允许更改其密码的用户（如果之前没有这样的用户）。有关更多信息，请参阅 [在 AWS 账户 中创建 IAM 用户](id_users_create.md)。

1. （可选）为可以更改自己密码的用户创建 IAM 组，然后将上一步骤中的用户添加到该组。有关更多信息，请参阅 [IAM 用户组](id_groups.md)。

1. 将下列策略分配到该组。有关更多信息，请参阅 [管理 IAM 策略](access_policies_manage.md)。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": "iam:GetAccountPasswordPolicy",
         "Resource": "*"
       },
       {
         "Effect": "Allow",
         "Action": "iam:ChangePassword",
         "Resource": "arn:aws:iam::*:user/${aws:username}"
       }
     ]
   }
   ```

------

   此策略授予对 [ChangePassword](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ChangePassword.html) 操作的访问权限，这让用户可从控制台、AWS CLI、Tools for Windows PowerShell 或 API 仅更改他们自己的密码。它还授予对 [GetAccountPasswordPolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountPasswordPolicy.html) 操作的访问权限，这可让用户查看当前的密码策略。用户需要此权限才能在 **Change password**（更改密码）页面上查看账户密码策略。用户必须能阅读当前密码策略以确保更改后的密码符合策略的要求。

1. 向用户提供有关更改密码的以下说明：[IAM 用户如何更改自己的密码](id_credentials_passwords_user-change-own.md)。

------

### 有关更多信息
<a name="HowToPwdIAMUser-moreinfo"></a>

有关管理凭证的更多信息，请参阅以下主题：
+ [允许 IAM 用户更改自己的密码](#id_credentials_passwords_enable-user-change) 
+ [AWS 中的用户密码](id_credentials_passwords.md)
+ [为 IAM 用户设置账户密码策略](id_credentials_passwords_account-policy.md)
+ [管理 IAM 策略](access_policies_manage.md)
+ [IAM 用户如何更改自己的密码](id_credentials_passwords_user-change-own.md)

# IAM 用户如何更改自己的密码
<a name="id_credentials_passwords_user-change-own"></a>

如果您已获得更改自己 IAM 用户密码的权限，则可以使用 AWS 管理控制台 中的特定页面完成此操作。您还可以使用 AWS CLI 或 AWS API。

**Topics**
+ [所需权限](#change-own-passwords-permissions-required)
+ [IAM 用户如何更改自己的密码（控制台）](#ManagingUserPwdSelf-Console)
+ [IAM 用户如何更改自己的密码（AWS CLI 或 AWS API）](#ManagingUserPwdSelf-CLIAPI)

## 所需权限
<a name="change-own-passwords-permissions-required"></a>

要为您自己的 IAM 用户更改密码，您必须具有以下策略中的权限：[AWS：允许 IAM 用户在的“安全凭证”页面上更改自己的控制台密码](reference_policies_examples_aws_my-sec-creds-self-manage-password-only.md)。

## IAM 用户如何更改自己的密码（控制台）
<a name="ManagingUserPwdSelf-Console"></a>

以下过程介绍了 IAM 用户如何使用 AWS 管理控制台 更改自己的密码。

**更改您自己的 IAM 用户密码（控制台）**

1. 使用 AWS 账户 ID 或账户别名、您的 IAM 用户名和密码登录到 [IAM 控制台](https://console.aws.amazon.com/iam)。
**注意**  
为方便起见，AWS登录页面使用浏览器 Cookie 记住您的 IAM 用户名和账户信息。如果您之前以其他用户身份登录，请选择页面底部的 **Sign-in to a different account**（登录到其他账户）以返回主登录页面。在此处，您可以输入要重新导向到您账户 IAM 用户登录页面的 AWS 账户 ID 或账户别名。

   要获取 AWS 账户 ID，请联系管理员。

1. 在右上角的导航栏中，选择您的用户名，然后选择 **Security credentials**（安全凭证）。  
![\[AWS 管理控制台安全凭证链接\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/security-credentials-user.shared.console.png)

1. 在 **AWS IAM 凭证**选项卡上，选择**更改密码**。

1. 对于 **Current password (当前密码)**，请键入您的当前密码。在 **New password (新密码)** 和 **Confirm new password (确认新密码)** 框中键入新密码。然后选择**更新密码**。
**注意**  
新密码必须符合账户密码策略的要求。有关更多信息，请参阅 [为 IAM 用户设置账户密码策略](id_credentials_passwords_account-policy.md)。

## IAM 用户如何更改自己的密码（AWS CLI 或 AWS API）
<a name="ManagingUserPwdSelf-CLIAPI"></a>

以下过程介绍了 IAM 用户如何使用 AWS CLI 或 AWS API 更改自己的密码。

**要更改自己的 IAM 密码，请使用以下命令：**
+ AWS CLI: [https://docs.aws.amazon.com/cli/latest/reference/iam/change-password.html](https://docs.aws.amazon.com/cli/latest/reference/iam/change-password.html)
+ AWS API：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_ChangePassword.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ChangePassword.html)

# 管理 IAM 用户的访问密钥。
<a name="id_credentials_access-keys"></a>

**重要**  
作为一项 [最佳实践](best-practices.md)，请使用临时安全凭证（例如 IAM 角色）而非创建访问密钥等长期凭证。在创建访问密钥之前，请认真阅读 [长期访问密钥的替代方法](security-creds-programmatic-access.md#security-creds-alternatives-to-long-term-access-keys)。

访问密钥是 IAM 用户或 AWS 账户根用户 的长期凭证。您可以使用访问密钥签署对 AWS CLI 或 AWS API 的编程请求（直接或使用 AWS 开发工具包）。有关更多信息，请参阅 [使用 AWS 安全凭证以编程方式进行访问](security-creds-programmatic-access.md)。

访问密钥包含两部分：访问密钥 ID（例如 `AKIAIOSFODNN7EXAMPLE`）和秘密访问密钥（例如 `wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY`）。您必须同时使用访问密钥 ID 和秘密访问密钥对请求执行身份验证。



当您创建访问密钥对时，将访问密钥 ID 和秘密访问密钥保存在一个安全位置。秘密访问密钥只能在创建密钥时检索到。如果您丢失了秘密访问密钥，则必须删除访问密钥并创建新的访问密钥。有关更多说明，请参阅 [更新访问密钥](id-credentials-access-keys-update.md)。

每个用户最多可有两个访问密钥。

**重要**  
拥有访问密钥的 IAM 用户存在账户安全风险。安全管理您的访问密钥。请不要向未经授权方提供访问密钥，即便是为了帮助[找到您的账户标识符](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html)也不行。如果您这样做，可能会向某人提供对您的账户的永久访问权限。  
下面是使用访问密钥时需要注意的概念：  
**请勿**使用账户的根凭证来创建访问密钥。
**请勿**在应用程序文件中放置访问密钥或凭证信息。
**请勿**在项目区域中放置包含访问密钥或凭证信息的文件。
在共享 AWS 凭证中存储的访问密钥或凭证信息以明文形式存储。

## 监控建议
<a name="monitor-access-keys"></a>

创建访问密钥后：
+ 使用 AWS CloudTrail 监控访问密钥的使用情况，并检测任何未经授权的访问尝试。有关更多信息，请参阅 [使用 AWS CloudTrail 记录 IAM 和 AWS STS API 调用](cloudtrail-integration.md)。
+ 设置 CloudWatch 警报，在访问尝试被拒绝时通知管理员，帮助检测恶意活动。有关更多信息，请参阅《[Amazon CloudWatch 用户指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/)》。
+ 根据需要定期检查、更新和删除访问密钥。

以下主题详细介绍了与访问密钥相关的管理任务。

**Topics**
+ [监控建议](#monitor-access-keys)
+ [通过将内联策略附加到 IAM 用户，从而控制访问密钥的使用](access-keys_inline-policy.md)
+ [管理访问密钥所需的权限](access-keys_required-permissions.md)
+ [IAM 用户如何管理自己的访问密钥](access-key-self-managed.md)
+ [IAM 管理员如何管理 IAM 用户访问密钥](access-keys-admin-managed.md)
+ [更新访问密钥](id-credentials-access-keys-update.md)
+ [保护访问密钥](securing_access-keys.md)

# 通过将内联策略附加到 IAM 用户，从而控制访问密钥的使用
<a name="access-keys_inline-policy"></a>

建议最好[让工作负载使用带有 IAM 角色的临时凭证](best-practices.md#bp-workloads-use-roles)来访问 AWS。应为拥有访问密钥的 IAM 用户分配最低访问权限，并启用[多重身份验证 (MFA)](id_credentials_mfa.md)。有关代入 IAM 角色的更多信息，请参阅[担任角色的方法](id_roles_manage-assume.md)。

但是，如果您正在为服务自动化或其他短期用例创建概念验证测试，并选择使用具有访问密钥的 IAM 用户来运行工作负载，建议[使用策略条件来进一步限制对其 IAM 用户凭证的访问权限](best-practices.md#use-policy-conditions)。

在此情况下，您可以创建有时限的策略，使凭证在指定时间后过期，或者如果您是从安全网络运行工作负载，可以使用 IP 限制策略。

对于这两个用例，可使用附加到拥有访问密钥的 IAM 用户的内联策略。

**为 IAM 用户配置有时限的策略**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**用户**，然后为短期用例选择用户。如果尚未创建用户，您可以立即[创建用户](getting-started-workloads.md)。

1. 在角色的**详细信息**页面上，选择**权限**选项卡。

1. 选择**添加权限**，然后选择**创建内联策略**。

1. 在**策略编辑器**部分，选择 **JSON** 显示 JSON 编辑器。

1. 在 JSON 编辑器中输入以下策略，将 `aws:CurrentTime` 时间戳的值替换为所需的到期日期和时间：

------
#### [ JSON ]

****  

   ```
   {
   "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Deny",
         "Action": "*",
         "Resource": "*",
         "Condition": {
         "DateGreaterThan": {
         "aws:CurrentTime": "2025-03-01T00:12:00Z"
           }
         }
       }
     ]
   }
   ```

------

   该策略使用 `Deny` 效果来限制在指定日期后对所有资源执行所有操作。`DateGreaterThan` 条件比较当前的时间与您设置的时间戳。

1. 选择**下一步**，进入**查看并创建**页面。在**策略**详细信息的**策略名称**下，输入策略的名称，然后选择**创建策略**。

创建策略后，策略将显示在用户的**权限**选项卡上。当前时间大于或等于该策略中指定的时间时，用户就无法再访问 AWS 资源。请务必让工作负载开发人员了解您为这些访问密钥指定的到期日期。

**为 IAM 用户配置 IP 限制策略**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**用户**，然后再选择将从安全网络运行工作负载的用户。如果尚未创建用户，您可以立即[创建用户](getting-started-workloads.md)。

1. 在角色的**详细信息**页面上，选择**权限**选项卡。

1. 选择**添加权限**，然后选择**创建内联策略**。

1. 在**策略编辑器**部分，选择 **JSON** 显示 JSON 编辑器。

1. 将以下 IAM 策略复制到 JSON 编辑器，并根据需要更改公有 IPv4 或 IPv6 地址或范围。可使用 [https://checkip.amazonaws.com](https://checkip.amazonaws.com/) 确定当前的公有 IP 地址。您可以使用斜杠标记指定单个 IP 地址或 IP 地址范围。有关更多信息，请参阅 [aws:SourceIp](reference_policies_condition-keys.md#condition-keys-sourceip)。
**注意**  
不得通过 VPN 或代理服务器对 IP 地址进行模糊处理。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid":"IpRestrictionIAMPolicyForIAMUser",
         "Effect": "Deny",
         "Action": "*",
         "Resource": "*",
         "Condition": {
           "NotIpAddress": {
             "aws:SourceIp": [
               "203.0.113.0/24",
               "2001:DB8:1234:5678::/64",
               "203.0.114.1"
             ]
           },
           "BoolIfExists": {
             "aws:ViaAWSService": "false"
           }
         }
       }
     ]
   }
   ```

------

   此策略示例拒绝使用应用该策略的 IAM 用户访问密钥，除非请求来自（以 CIDR 表示法指定的）网络“203.0.113.0/24”、“2001:DB8:1234:5678::/64”或特定 IP 地址“203.0.114.1” 

1. 选择**下一步**，进入**查看并创建**页面。在**策略**详细信息的**策略名称**下，输入策略的名称，然后选择**创建策略**。

创建策略后，策略将显示在用户的**权限**选项卡上。

您还可以将该策略作为服务控制策略 (SCP) 应用于 AWS Organizations 中的多个 AWS 账户，我们建议使用附加条件 `aws:PrincipalArn` 让该策略声明仅适用于受此 SCP 约束的 AWS 账户中的 IAM 用户。以下策略包括更新：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IpRestrictionServiceControlPolicyForIAMUsers",
      "Effect": "Deny",
      "Action": "*",
      "Resource": "*",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": [
            "203.0.113.0/24",
            "2001:DB8:1234:5678::/64",
            "203.0.114.1"
          ]
        },
        "BoolIfExists": {
          "aws:ViaAWSService": "false"
        },
        "ArnLike": {
          "aws:PrincipalArn": "arn:aws:iam::*:user/*"
        }
      }
    }
  ]
}
```

------

# 管理访问密钥所需的权限
<a name="access-keys_required-permissions"></a>

**注意**  
`iam:TagUser` 是用于添加和编辑访问密钥描述的可选权限。有关更多信息，请参阅 [标记 IAM 用户](id_tags_users.md)。

要为您自己的 IAM 用户创建访问密钥，您必须具有以下策略中的权限：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CreateOwnAccessKeys",
            "Effect": "Allow",
            "Action": [
                "iam:CreateAccessKey",
                "iam:GetUser",
                "iam:ListAccessKeys",
                "iam:TagUser"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        }
    ]
}
```

------

要为您自己的 IAM 用户更新访问密钥，您必须具有以下策略中的权限：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ManageOwnAccessKeys",
            "Effect": "Allow",
            "Action": [
                "iam:CreateAccessKey",
                "iam:DeleteAccessKey",
                "iam:GetAccessKeyLastUsed",
                "iam:GetUser",
                "iam:ListAccessKeys",
                "iam:UpdateAccessKey",
                "iam:TagUser"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        }
    ]
}
```

------

# IAM 用户如何管理自己的访问密钥
<a name="access-key-self-managed"></a>

IAM 管理员可以通过附加 [管理访问密钥所需的权限](access-keys_required-permissions.md) 中所属的策略，授予 IAM 用户自我管理访问密钥的权限。

有了这些权限，IAM 用户就可以通过以下步骤来创建、激活、停用和删除与其用户名相关联的访问密钥。

**Topics**
+ [为自己创建访问密钥（控制台）](#Using_CreateAccessKey)
+ [停用您的访问密钥（控制台）](#deactivate-access-key-seccreds)
+ [激活您的访问密钥（控制台）](#activate-access-key-seccreds)
+ [删除您的访问密钥（控制台）](#delete-access-key-seccreds)

## 为自己创建访问密钥（控制台）
<a name="Using_CreateAccessKey"></a>

如果您已获得相应的权限，则可以使用 AWS 管理控制台 为自己创建访问密钥。

**要为自己创建访问密钥（控制台）**

1. 使用 AWS 账户 ID 或账户别名、您的 IAM 用户名和密码登录到 [IAM 控制台](https://console.aws.amazon.com/iam)。
**注意**  
为方便起见，AWS登录页面使用浏览器 Cookie 记住您的 IAM 用户名和账户信息。如果您之前以其他用户身份登录，请选择页面底部的 **Sign-in to a different account**（登录到其他账户）以返回主登录页面。在此处，您可以输入要重新导向到您账户 IAM 用户登录页面的 AWS 账户 ID 或账户别名。

   要获取 AWS 账户 ID，请联系管理员。

1. 在右上角的导航栏中，选择您的用户名，然后选择 **Security credentials**（安全凭证）。  
![\[AWS 管理控制台安全凭证链接\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/security-credentials-user.shared.console.png)

1. 在**访问密钥**部分，选择**创建访问密钥**。如果您已经有两个访问密钥，则此按钮将被停用，您必须先删除一个访问密钥，然后才能创建新的访问密钥。

1. 在 **Access key best practices & alternatives**（访问密钥最佳实践和替代方法）页面上，请选择您的用例以了解可帮助您避免创建长期访问密钥的其他选项。如果您确定您的用例仍然需要访问密钥，请选择 **Other**（其他），然后选择 **Next**（下一步）。

1. （可选）为访问密钥设置描述标记值。这会为您的 IAM 用户添加标签键/值对。这有助于您以后标识和更新访问密钥。标签密钥设置为访问密钥 ID。标签值设置为您指定的访问密钥描述。完成后，选择 **Create access key**（创建访问密钥）。

1. 在 **Retrieve access keys**（检索访问密钥）页面上，选择 **Show**（显示）来显示用户的秘密访问密钥的值，或选择 **Download .csv file**（下载 .csv 文件）。这是您保存秘密访问密钥的唯一机会。将秘密访问密钥保存在安全位置后，请选择 **Done**（完成）。

## 停用您的访问密钥（控制台）
<a name="deactivate-access-key-seccreds"></a>

如果您已获得相应的权限，则可以使用 AWS 管理控制台 来停用您的访问密钥。

**停用访问密钥**

1. 使用 AWS 账户 ID 或账户别名、您的 IAM 用户名和密码登录到 [IAM 控制台](https://console.aws.amazon.com/iam)。
**注意**  
为方便起见，AWS登录页面使用浏览器 Cookie 记住您的 IAM 用户名和账户信息。如果您之前以其他用户身份登录，请选择页面底部的 **Sign-in to a different account**（登录到其他账户）以返回主登录页面。在此处，您可以输入要重新导向到您账户 IAM 用户登录页面的 AWS 账户 ID 或账户别名。

   要获取 AWS 账户 ID，请联系管理员。

1. 在右上角的导航栏中，选择您的用户名，然后选择 **Security credentials**（安全凭证）。  
![\[AWS 管理控制台安全凭证链接\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/security-credentials-user.shared.console.png)

1. 在 **Access keys**（访问密钥）部分中，找到要停用的密钥，选择 **Actions**（操作），然后选择 **Deactivate**（停用）。当系统提示您确认时，请选择 **Deactivate (停用）**。已停用的访问密钥仍会计入您的两个访问密钥限制。

## 激活您的访问密钥（控制台）
<a name="activate-access-key-seccreds"></a>

如果您已获得相应的权限，则可以使用 AWS 管理控制台 来激活您的访问密钥。

**激活访问密钥**

1. 使用 AWS 账户 ID 或账户别名、您的 IAM 用户名和密码登录到 [IAM 控制台](https://console.aws.amazon.com/iam)。
**注意**  
为方便起见，AWS登录页面使用浏览器 Cookie 记住您的 IAM 用户名和账户信息。如果您之前以其他用户身份登录，请选择页面底部的 **Sign-in to a different account**（登录到其他账户）以返回主登录页面。在此处，您可以输入要重新导向到您账户 IAM 用户登录页面的 AWS 账户 ID 或账户别名。

   要获取 AWS 账户 ID，请联系管理员。

1. 在右上角的导航栏中，选择您的用户名，然后选择 **Security credentials**（安全凭证）。  
![\[AWS 管理控制台安全凭证链接\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/security-credentials-user.shared.console.png)

1. 在 **Access keys**（访问密钥）部分中，找到要激活的密钥，选择 **Actions**（操作），然后选择 **Activate**（激活）。

## 删除您的访问密钥（控制台）
<a name="delete-access-key-seccreds"></a>

如果您已获得相应的权限，则可以使用 AWS 管理控制台 来删除您的访问密钥。

**删除不再需要的访问密钥**

1. 使用 AWS 账户 ID 或账户别名、您的 IAM 用户名和密码登录到 [IAM 控制台](https://console.aws.amazon.com/iam)。
**注意**  
为方便起见，AWS登录页面使用浏览器 Cookie 记住您的 IAM 用户名和账户信息。如果您之前以其他用户身份登录，请选择页面底部的 **Sign-in to a different account**（登录到其他账户）以返回主登录页面。在此处，您可以输入要重新导向到您账户 IAM 用户登录页面的 AWS 账户 ID 或账户别名。

   要获取 AWS 账户 ID，请联系管理员。

1. 在右上角的导航栏中，选择您的用户名，然后选择 **Security credentials**（安全凭证）。  
![\[AWS 管理控制台安全凭证链接\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/security-credentials-user.shared.console.png)

1. 在 **Access keys**（访问密钥）部分中，找到要删除的密钥，选择 **Actions**（操作），然后选择 **Delete**（删除）。按照对话框中的说明先 **Deactivate**（停用），然后确认删除。我们建议您在永久删除访问密钥之前验证该访问密钥是否已不再使用。

# IAM 管理员如何管理 IAM 用户访问密钥
<a name="access-keys-admin-managed"></a>

IAM 管理员可以创建、激活、停用和删除与单个 IAM 用户关联的访问密钥。他们还可以列出账户中拥有访问密钥的 IAM 用户，并找出拥有特定访问密钥的 IAM 用户。

**Topics**
+ [为 IAM 用户创建访问密钥](#admin-create-access-key)
+ [要停用 IAM 用户的访问密钥](#admin-deactivate-access-key)
+ [要激活 IAM 用户的访问密钥](#admin-activate-access-key)
+ [删除 IAM 用户的访问密钥](#admin-delete-access-key)
+ [要列出 IAM 用户的访问密钥](#admin-list-access-key)
+ [要列出 IAM 用户的访问密钥](#admin-list-access-key)
+ [要显示您账户中用户的所有访问密钥 ID](#admin-list-all-access-keys)
+ [要使用访问密钥 ID 查找用户](#admin-find-user-access-keys)
+ [要查找访问密钥 ID 的最新使用情况](#admin-find-most-recent-use-access-keys)

## 为 IAM 用户创建访问密钥
<a name="admin-create-access-key"></a>

------
#### [ Console ]

1. 登录 AWS 管理控制台，单击 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**用户**。

1. 选择用户名称转到用户详细信息页面。

1. 在 ‭**‬Security credentials‭**‬（安全凭证）选项卡的 **Access keys**（访问密钥）部分中，选择‭ **Create access key**‬（创建访问密钥）。

   如果按钮已停用，则必须先删除现有密钥中的一个，然后才能创建新密钥。

1. 在 **Access key best practices & alternatives**（访问密钥最佳实践和替代方法）页面上，查看最佳实践和替代方法。选择您的用例以了解可帮助您避免创建长期访问密钥的其他选项。

1. 如果您确定您的用例仍然需要访问密钥，请选择 **Other**（其他），然后选择 **Next**（下一步）。

1. **（可选）**在**设置描述标签**页面上，您可以向访问密钥添加描述标签，以帮助跟踪您的访问密钥。选择**创建访问密钥**。

1. 在 **Retrieve access keys**（检索访问密钥）页面上，选择 **Show**（显示）来显示用户的秘密访问密钥的值。

1. 要将访问密钥 ID 和秘密访问密钥以 `.csv` 文件形式保存计算机上的安全位置，请选择 **Download .csv file**（下载 .csv 文件）按钮。
**重要**  
这是您查看或下载新创建的访问密钥的唯一机会，您将无法恢复访问密钥。确保安全地维护您的访问密钥。

为用户创建访问密钥时，默认情况下，密钥对处于活动状态，并且您可以立即使用此密钥对。

------
#### [ AWS CLI ]

运行以下命令：
+ [https://docs.aws.amazon.com/cli/latest/reference/iam/create-access-key.html](https://docs.aws.amazon.com/cli/latest/reference/iam/create-access-key.html)

------
#### [ API ]

调用以下操作：
+ [https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateAccessKey.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateAccessKey.html) 

------

## 要停用 IAM 用户的访问密钥
<a name="admin-deactivate-access-key"></a>

------
#### [ Console ]

1. 登录 AWS 管理控制台，单击 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**用户**。

1. 选择用户名称转到用户详细信息页面。

1. 在 **Security credentials**（安全凭证）选项卡的 **Access keys**（访问密钥）部分，选择 **Actions**（操作）下拉菜单，然后选择 **Deactivate**（停用）。

1. 在 **Deactivate**（停用）对话框中，选择 **Deactivate**（停用），确认要停用访问密钥。

停用访问密钥后，API 调用将不再使用该密钥。如果需要，您可以再次激活它。

------
#### [ AWS CLI ]

运行以下命令：
+ [https://docs.aws.amazon.com/cli/latest/reference/iam/update-access-key.html](https://docs.aws.amazon.com/cli/latest/reference/iam/update-access-key.html)

------
#### [ API ]

调用以下操作：
+ [https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccessKey.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccessKey.html) 

------

## 要激活 IAM 用户的访问密钥
<a name="admin-activate-access-key"></a>

------
#### [ Console ]

1. 登录 AWS 管理控制台，单击 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**用户**。

1. 选择用户名称转到用户详细信息页面。

1. 在 **Security credentials**（安全凭证）选项卡的 **Access keys**（访问密钥）部分，选择 **Actions**（操作）下拉菜单，然后选择 **Activate**（激活）。

激活访问密钥后，API 调用可以使用该密钥。如果需要，您可以再次停用它。

------
#### [ AWS CLI ]

运行以下命令：
+ [https://docs.aws.amazon.com/cli/latest/reference/iam/update-access-key.html](https://docs.aws.amazon.com/cli/latest/reference/iam/update-access-key.html)

------
#### [ API ]

调用以下操作：
+ [https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccessKey.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccessKey.html) 

------

## 删除 IAM 用户的访问密钥
<a name="admin-delete-access-key"></a>

停用访问密钥后，如果不再需要它，请将其删除。

------
#### [ Console ]

1. 登录 AWS 管理控制台，单击 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**用户**。

1. 选择用户名称转到用户详细信息页面。

1. 在 **Security credentials**（安全凭证）选项卡的 **Access keys**（访问密钥）部分，选择非活动访问密钥的 **Actions**（操作）下拉菜单，然后选择 **Delete**（删除）。

1. 在 **Delete**（删除）对话框中，通过在文本输入字段中输入访问密钥 ID，然后选择 **Delete**（删除），确认要删除访问密钥。

访问密钥删除后，将无法恢复。

------
#### [ AWS CLI ]

运行以下命令：
+ [https://docs.aws.amazon.com/cli/latest/reference/iam/delete-access-key.html](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-access-key.html)

------
#### [ API ]

调用以下操作：
+ [https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteAccessKey.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteAccessKey.html) 

------

## 要列出 IAM 用户的访问密钥
<a name="admin-list-access-key"></a>

您可以查看与 IAM 用户关联的访问密钥 ID 的列表。

------
#### [ Console ]

1. 登录 AWS 管理控制台，单击 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**用户**。

1. 选择用户名称转到用户详细信息页面。

1. 在 **Security credentials**（安全凭证）选项卡中的 **Access keys**（访问密钥）部分列出了用户的访问密钥。

每个 IAM 用户最多可以拥有两个访问密钥。

------
#### [ AWS CLI ]

运行以下命令：
+ [https://docs.aws.amazon.com/cli/latest/reference/iam/list-access-keys.html](https://docs.aws.amazon.com/cli/latest/reference/iam/list-access-keys.html)

------
#### [ API ]

调用以下操作：
+ [https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAccessKeys.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAccessKeys.html) 

------

## 要列出 IAM 用户的访问密钥
<a name="admin-list-access-key"></a>

您可以查看与 IAM 用户关联的访问密钥 ID 的列表。

------
#### [ Console ]

1. 登录 AWS 管理控制台，单击 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**用户**。

1. 选择用户名称转到用户详细信息页面。

1. 在**安全凭证**选项卡中的**访问密钥**部分列出了用户的访问密钥 ID，包括显示的每个密钥的状态。
**注意**  
只有用户的访问密钥 ID 是可见的。秘密访问密钥只能在创建密钥时检索到。

每个 IAM 用户最多可以拥有两个访问密钥。

------
#### [ AWS CLI ]

运行以下命令：
+ [https://docs.aws.amazon.com/cli/latest/reference/iam/list-access-keys.html](https://docs.aws.amazon.com/cli/latest/reference/iam/list-access-keys.html)

------
#### [ API ]

调用以下操作：
+ [https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAccessKeys.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAccessKeys.html) 

------

## 要显示您账户中用户的所有访问密钥 ID
<a name="admin-list-all-access-keys"></a>

您可以查看 AWS 账户 中用户的访问密钥 ID 列表。

------
#### [ Console ]

1. 登录 AWS 管理控制台，单击 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**用户**。

1. 选择用户名称转到用户详细信息页面。

1. 如有必要，可通过完成以下步骤来将 **Access key ID** 列添加到用户表中：

   1. 在表格最右侧上方，选择 **Preferences**（首选项）图标 (![\[Preferences icon\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/console-settings-icon.console.png))。

   1. 在 **Preferences**（首选项）对话框的 **Select visible columns**（选择可见列）下，打开 **Access key ID**（访问密钥 ID）。

   1. 选择**确认**，返回到用户列表。更新列表以包含访问密钥 ID。

1. **Access key ID**（访问密钥 ID）列显示每个访问密钥的状态，后跟其 ID；例如，**`Active - AKIAIOSFODNN7EXAMPLE`** 或 **`Inactive - AKIAI44QH8DHBEXAMPLE`**。

   您可以利用该信息查看和复制具有一个或两个访问密钥的用户的访问密钥 ID。对于没有访问密钥的用户，该列显示 **`-`**。
**注意**  
秘密访问密钥只能在创建密钥时检索到。

每个 IAM 用户最多可以拥有两个访问密钥。

------

## 要使用访问密钥 ID 查找用户
<a name="admin-find-user-access-keys"></a>

您可以使用访问密钥 ID 来查找您 AWS 账户 中的用户。

------
#### [ Console ]

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格的搜索框中，输入**访问密钥 ID**，例如 AKIAI44QH8DHBEXAMPLE。

1. 与访问密钥 ID 关联的 IAM 用户将显示在导航窗格中。选择用户名称转到用户详细信息页面。

------

## 要查找访问密钥 ID 的最新使用情况
<a name="admin-find-most-recent-use-access-keys"></a>

访问密钥的最新使用情况会显示在用户详情页面中 IAM 用户页面的用户列表中，并且是凭证报告的一部分。

------
#### [ Console ]

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在用户列表中，参阅 **Access key last used**（上次使用的访问密钥）列。

   如果未显示该列，请选择 **Preferences**（首选项）图标 (![\[Preferences icon\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/console-settings-icon.console.png))，然后在 **Select visible columns** （选择可见列）下打开 **Access key last used**（上次使用的访问密钥），以显示列。

1. （可选）在导航窗格的 **Access reports**（访问报告）下，选择 **Credential report**（凭证报告）以下载一份报告，其中包含您账户中所有 IAM 用户的访问密钥的上次使用信息。

1. (可选）选择 IAM 用户以查看用户详细信息。**Summary**（摘要）部分包括访问密钥 ID、其状态以及上次使用时间。

------
#### [ AWS CLI ]

运行以下命令：
+ [https://docs.aws.amazon.com/cli/latest/reference/iam/get-access-key-last-used.html](https://docs.aws.amazon.com/cli/latest/reference/iam/get-access-key-last-used.html)

------
#### [ API ]

调用以下操作：
+ [https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccessKeyLastUsed.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccessKeyLastUsed.html) 

------

# 更新访问密钥
<a name="id-credentials-access-keys-update"></a>

作为一项安全[最佳实践](best-practices.md#update-access-keys)，建议您在需要时更新 IAM 用户访问密钥，例如员工从公司离职时。已获得必要权限的 IAM 用户可以更新自己的访问密钥。

有关如何向 IAM 用户授予自行更新访问密钥的详细信息，请参阅 [AWS：允许 IAM 用户在“安全凭证”页面上管理自己的密码、访问密钥和 SSH 公有密钥](reference_policies_examples_aws_my-sec-creds-self-manage-pass-accesskeys-ssh.md)。您还可以将密码策略应用于您的账户，以要求所有 IAM 用户定期更新其密码，并规定必须执行这一操作的频率。有关更多信息，请参阅 [为 IAM 用户设置账户密码策略](id_credentials_passwords_account-policy.md)。

**注意**  
如果您丢失了秘密访问密钥，则必须删除访问密钥并创建新的访问密钥。秘密访问密钥只能在创建密钥时检索到。使用此过程停用所有丢失的访问密钥，然后用新的凭证替换任何丢失的访问密钥。

**Topics**
+ [更新 IAM 用户访问密钥（控制台）](#rotating_access_keys_console)
+ [更新访问密钥（AWS CLI）](#rotating_access_keys_cli)
+ [更新访问密钥（AWS API）](#rotating_access_keys_api)

## 更新 IAM 用户访问密钥（控制台）
<a name="rotating_access_keys_console"></a>

您可以通过 AWS 管理控制台更新访问密钥。

**在不中断应用程序的情况下更新 IAM 用户的访问密钥（控制台）**

1. 当第一个访问密钥仍处于活动状态时，创建第二个访问密钥。

   1. 登录 AWS 管理控制台，单击 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

   1. 在导航窗格中，选择**用户**。

   1. 选择预期用户的名称，然后选择**安全凭证**选项卡。

   1. 在**访问密钥**部分，选择**创建访问密钥**。在 **Access key best practices & alternatives**（访问密钥最佳实践和替代方法）页面上，选择 **Other**（其他），然后选择 **Next**（下一步）。

   1. （可选）设置访问密钥的描述标签值，以向 IAM 用户添加标签键/值对。这有助于您以后标识和更新访问密钥。标签密钥设置为访问密钥 ID。标签值设置为您指定的访问密钥描述。完成后，选择 **Create access key**（创建访问密钥）。

   1. 在 **Retrieve access keys**（检索访问密钥）页面上，选择 **Show**（显示）来显示用户的秘密访问密钥的值，或选择 **Download .csv file**（下载 .csv 文件）。这是您保存秘密访问密钥的唯一机会。将秘密访问密钥保存在安全位置后，请选择 **Done**（完成）。

      为用户创建访问密钥时，默认情况下，密钥对处于活动状态，并且您可以立即使用此密钥对。此时，用户拥有两个访问密钥。

1. 更新所有应用程序和工具以使用新的访问密钥。

1. <a name="id_credentials_access-keys-key-still-in-use"></a>通过查看最早的访问密钥的 **Last used**（上次使用）信息来确定第一个访问密钥是否仍在使用。一种方法是等待几天，然后检查旧访问密钥是否被使用，然后再继续。

1. 即使 **Last used**（上次使用）信息指示旧密钥从未使用过，我们还是建议您不要立即删除第一个访问密钥。相反，选择 **Actions**（操作），然后选择 **Deactivate**（停用）以停用第一个访问密钥。

1. 仅使用新的访问密钥，以确认您的应用程序可以正常工作。此时，任何仍在使用初始访问密钥的应用程序和工具将停止工作，因为它们不再具有对 AWS 资源的访问权限。如果您发现此类应用程序或工具，可以选择重新激活第一个访问密钥。然后返回到 [Step 3](#id_credentials_access-keys-key-still-in-use) 并更新此应用程序以使用新的密钥。

1. 在等待一段时间以确保所有应用程序和工具均已更新后，可以删除第一个访问密钥：

   1. 登录 AWS 管理控制台，单击 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

   1. 在导航窗格中，选择**用户**。

   1. 选择预期用户的名称，然后选择**安全凭证**选项卡。

   1. 在要删除的访问密钥的 **Access keys**（访问密钥）部分中，选择 **Actions**（操作），然后选择 **Delete**（删除）。按照对话框中的说明先 **Deactivate**（停用），然后确认删除。

**确定需要更新或删除的访问密钥（控制台）**

1. 登录 AWS 管理控制台，单击 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**用户**。

1. 如有必要，可通过完成以下步骤来将 **Access key age** 列添加到用户表中：

   1. 在最右侧的表上方，选择设置图标 (![\[Settings icon\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/console-settings-icon.console.png))。

   1. 在 **Manage columns (管理列)** 中，选择 **Access key age (访问密钥使用期限)**。

   1. 选择 **Close** 返回到用户列表。

1. **Access key age** 列显示最早的活动访问密钥自创建至今经过的天数。您可以利用此信息来确定可能需要更新或删除访问密钥的用户。对于没有访问密钥的用户，该列显示 **None**。

## 更新访问密钥（AWS CLI）
<a name="rotating_access_keys_cli"></a>

您可以通过 AWS Command Line Interface 更新访问密钥。

**在不中断应用程序的情况下更新访问密钥（AWS CLI）**

1. 当第一个访问密钥仍处于活动状态时，创建第二个访问密钥，后者在默认情况下将处于活动状态。运行如下命令：
   + [https://docs.aws.amazon.com/cli/latest/reference/iam/create-access-key.html](https://docs.aws.amazon.com/cli/latest/reference/iam/create-access-key.html)

     此时，用户拥有两个访问密钥。

1. <a name="step-update-apps"></a>更新所有应用程序和工具以使用新的访问密钥。

1. <a name="step-determine-use"></a>通过使用以下命令，确定第一个访问密钥是否仍在使用：
   +  [https://docs.aws.amazon.com/cli/latest/reference/iam/get-access-key-last-used.html](https://docs.aws.amazon.com/cli/latest/reference/iam/get-access-key-last-used.html)

   一种方法是等待几天，然后检查旧访问密钥是否被使用，然后再继续。

1. 即使步骤 [Step 3](#step-determine-use) 指示旧密钥未被使用，我们也建议您不要立即删除第一个访问密钥。而是通过以下命令，将第一个访问密钥的状态更改为 `Inactive`：
   +  [https://docs.aws.amazon.com/cli/latest/reference/iam/update-access-key.html](https://docs.aws.amazon.com/cli/latest/reference/iam/update-access-key.html)

1. 仅使用新的访问密钥，以确认您的应用程序可以正常工作。此时，任何仍在使用初始访问密钥的应用程序和工具将停止工作，因为它们不再具有对 AWS 资源的访问权限。如果您发现此类应用程序或工具，可将其状态切换回 `Active` 以重新激活第一个访问密钥。然后返回到步骤 [Step 2](#step-update-apps) 并更新此应用程序以使用新的密钥。

1. 在等待一段时间以确保所有应用程序和工具均已更新后，您可以通过以下命令删除第一个访问密钥：
   + [https://docs.aws.amazon.com/cli/latest/reference/iam/delete-access-key.html](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-access-key.html)

## 更新访问密钥（AWS API）
<a name="rotating_access_keys_api"></a>

您可以使用 AWS API 来更新访问密钥。

**在不中断应用程序的情况下更新访问密钥（AWS API）**

1. 当第一个访问密钥仍处于活动状态时，创建第二个访问密钥，后者在默认情况下将处于活动状态。调用以下操作：
   + [https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateAccessKey.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateAccessKey.html)

     此时，用户拥有两个访问密钥。

1. <a name="step-update-apps-2"></a>更新所有应用程序和工具以使用新的访问密钥。

1. <a name="step-determine-use-2"></a>通过调用以下操作，确定第一个访问密钥是否仍在使用：
   + [https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccessKeyLastUsed.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccessKeyLastUsed.html)

   一种方法是等待几天，然后检查旧访问密钥是否被使用，然后再继续。

1. 即使步骤 [Step 3](#step-determine-use-2) 指示旧密钥未被使用，我们也建议您不要立即删除第一个访问密钥。而是调用以下操作，将第一个访问密钥的状态更改为 `Inactive`：
   + [https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccessKey.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccessKey.html)

1. 仅使用新的访问密钥，以确认您的应用程序可以正常工作。此时，任何仍在使用初始访问密钥的应用程序和工具将停止工作，因为它们不再具有对 AWS 资源的访问权限。如果您发现此类应用程序或工具，可将其状态切换回 `Active` 以重新激活第一个访问密钥。然后返回到步骤 [Step 2](#step-update-apps-2) 并更新此应用程序以使用新的密钥。

1. 在等待一段时间以确保所有应用程序和工具均已更新后，您可以通过调用以下操作，删除第一个访问密钥：
   + [https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteAccessKey.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteAccessKey.html)

# 保护访问密钥
<a name="securing_access-keys"></a>

拥有您的访问密钥的任何人将与您拥有相同的 AWS 资源访问权限级别。因此，AWS 全力保护您的访问密钥并确保符合我们的[分担责任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)，您也应当如此。

展开以下各节以获取有助于您保护访问密钥的指导。

**注意**  
贵组织的安全要求和策略可能与本主题中介绍的有所不同。此处提供的建议旨在用作一般准则。

## 移除（或不生成）AWS 账户根用户访问密钥
<a name="root-password"></a>

**保护账户的最佳方法之一是不为 AWS 账户根用户设置访问密钥。**除非必须具有根用户访问密钥（这种情况很少见），否则建议不要生成根用户访问密钥。而应在 AWS IAM Identity Center 中创建一个管理用户来执行日常管理任务。有关如何在 IAM Identity Center 中创建管理用户的信息，请参阅《IAM Identity Center 用户指南》中的 [Getting started](https://docs.aws.amazon.com//singlesignon/latest/userguide/getting-started.html)**。

如果您已经拥有账户的根用户访问密钥，建议您执行以下操作：找到您当前在应用程序中使用访问密钥的位置（如果有），然后使用 IAM 用户访问密钥替换根用户访问密钥。之后再禁用并移除根用户访问密钥。有关如何更新访问密钥的更多信息，请参阅 [更新访问密钥](id-credentials-access-keys-update.md)



## 使用临时安全凭证（IAM 角色）代替长期访问密钥
<a name="use-roles"></a>

在许多情况下，您并不需要永不过期的长期访问密钥（如 IAM 用户访问密钥）。相反，您可以创建 IAM 角色并生成临时安全凭证。临时安全证书包括访问密钥 ID 和秘密访问密钥，以及一个指示证书何时到期的安全令牌。

长期访问密钥在被手动撤销之前将持续有效，例如与 IAM 用户和根用户相关的访问密钥。但是，通过 IAM 角色获取的临时安全凭证和 AWS Security Token Service 的其他功能将在短时间内过期。凭证意外泄漏时，使用临时安全凭证可帮助降低您的风险。

在以下这些情况下使用 IAM 角色和临时安全凭证：
+ **您在 Amazon EC2 实例上运行一个应用程序或 AWS CLI 脚本。**请勿直接在应用程序中使用访问密钥。请勿采取以下做法：将访问密钥传递给应用程序、将访问密钥嵌入到应用程序中、让应用程序从任何源读取密钥。相反，请定义一个对您的应用程序具有适当权限的 IAM 角色，并使用 [EC2 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html)启动 Amazon Elastic Compute Cloud (Amazon EC2) 实例。执行此操作会将 IAM 角色与 Amazon EC2 实例相关联。利用这种做法，还可让应用程序获取临时安全凭证，然后再使用临时凭证以编程方式调用 AWS。AWS 软件开发工具包和 AWS Command Line Interface (AWS CLI) 可以自动获得角色的临时证书。
+ **您需要授予跨账户访问权限。**使用 IAM 角色建立账户之间的信任，然后向用户授予有限的账户权限来访问可信账户。有关更多信息，请参阅 [IAM 教程：使用 IAM 角色委托跨 AWS 账户的访问权限](tutorial_cross-account-with-roles.md)。
+ **您拥有一个移动应用程序。**请勿将访问密钥嵌入应用程序，即使是嵌入加密存储也不允许。而应使用 [Amazon Cognito](https://aws.amazon.com/cognito/) 管理应用程序中的用户身份。此服务让您可以使用 Login with Amazon、Facebook、Google 或任何与 OpenID Connect（OIDC）兼容的身份提供商进行用户身份验证。然后，您可以使用 Amazon Cognito 凭证提供程序来管理应用程序用于向 AWS 发出请求的凭证。
+ **您希望向 AWS 进行联合身份验证且贵组织支持 SAML 2.0。**如果您所在的组织具有支持 SAML 2.0 的身份提供程序，请将提供程序配置为使用 SAML。您可以使用 SAML 与 AWS 交换身份验证信息，并获得一组临时安全证书。有关更多信息，请参阅 [SAML 2.0 联合身份验证](id_roles_providers_saml.md)。
+ **您希望向 AWS 进行联合身份验证且贵组织拥有本地身份存储。**如果用户可以在组织内部进行身份验证，您可以编写一个可向他们颁发用于访问 AWS 资源的临时安全凭证的应用程序。有关更多信息，请参阅 [使自定义身份凭证代理程序能够访问 AWS 控制台](id_roles_providers_enable-console-custom-url.md)。
+ **使用 IAM 策略中的条件仅允许来自预期网络的访问。**您可以通过实施[具有条件的 IAM 策略](reference_policies_elements_condition_operators.md)来限制访问密钥的使用位置和方式，这些条件指定并仅允许预期的网络，例如您的公有 IP 地址或虚拟私有云（VPC）。这样，您就知道访问密钥只能在预期和可接受的网络中使用。

**注意**  
您是否在将 Amazon EC2 实例与需要以编程方式访问 AWS 资源的应用程序结合使用？ 如果是，请使用 [EC2 的 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html)。

## 正确管理 IAM 用户访问密钥
<a name="iam-user-access-keys"></a>

如果您必须创建访问密钥才能以编程方式访问 AWS，则应创建 IAM 用户的访问密钥，并仅向用户授予需要的权限。

请遵循以下预防措施来帮助保护 IAM 用户访问密钥：
+ **请勿直接将访问密钥嵌入到代码。**利用 [AWS SDK ](https://aws.amazon.com/tools/#sdk)和 [AWS 命令行工具](https://aws.amazon.com/tools/#cli)，您可以将访问密钥放在已知位置，从而不必将其保留在代码中。

  在以下任一位置中放置访问密钥：
  + **AWS 凭证文件。**AWS 开发工具包和 AWS CLI 自动使用您存储在 AWS 凭证文件中的凭证。

    有关使用 AWS 证书文件的信息，请参阅软件开发工具包文档。示例包括：*适用于 Java 的 AWS SDK 开发人员指南*中的[设置 AWS 凭证和区域](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup-credentials.html)以及 *AWS Command Line Interface 用户指南*中的[配置和凭证文件](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)。

    要存储适用于 适用于 .NET 的 AWS SDK 和 AWS Tools for Windows PowerShell 的凭证，建议您使用 SDK Store。有关更多信息，请参阅《适用于 .NET 的 AWS SDK 开发人员指南》**中的[使用 SDK 存储](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/sdk-store.html)。
  + **环境变量。**在多租户系统上，选择用户环境变量，而不是系统环境变量。

    有关使用环境变量存储凭证的更多信息，请参阅《AWS Command Line Interface 用户指南》**中的[环境变量](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html)。
+ **对不同应用程序使用不同的访问密钥。**这样可以在访问密钥泄露时隔离权限并撤销单个应用程序的访问密钥。为不同的应用程序设置不同的访问密钥也会在 [AWS CloudTrail](https://aws.amazon.com/cloudtrail/) 日志文件中生成不同的条目。通过此配置，您可以更轻松地确定哪个应用程序执行了特定的操作。
+ **在需要时更新访问密钥。**如果存在访问密钥泄露的风险，请更新访问密钥并删除之前的访问密钥。有关详细信息，请参阅 [更新访问密钥](id-credentials-access-keys-update.md) 
+ **删除未使用的访问密钥。**如果某个用户离开了贵组织，请删除相应的 IAM 用户，以使该用户无法再访问您的资源。要找出上次使用访问密钥的时间，请使用 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccessKeyLastUsed.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccessKeyLastUsed.html) API（AWS CLI 命令：[https://docs.aws.amazon.com/cli/latest/reference/iam/get-access-key-last-used.html](https://docs.aws.amazon.com/cli/latest/reference/iam/get-access-key-last-used.html)）。
+ **使用临时凭证并为最敏感的 API 操作配置多重身份验证。**利用 IAM policy，可以指定用户可调用哪些 API 操作。在某些情况下，建议要求用户使用 AWS MFA 进行身份验证，然后才允许其执行特别敏感的操作，从而提高安全性。例如，您可能拥有允许用户执行 Amazon EC2 `RunInstances`、`DescribeInstances` 和 `StopInstances` 操作的策略。但您可能希望限制破坏性操作（如 `TerminateInstances`），并确保用户只能在使用 AWS MFA 设备进行身份验证后执行该操作。有关更多信息，请参阅 [使用 MFA 保护 API 访问](id_credentials_mfa_configure-api-require.md)。

## 使用 AWS 访问密钥访问移动应用程序
<a name="access-keys-mobile-app"></a>

您可以使用 AWS 移动应用程序访问一组有限的 AWS 服务和功能。该移动应用程序可帮助您在外出时支持事件响应。如需了解更多信息和下载应用程序，请参阅 [AWS Console Mobile Application](https://aws.amazon.com/console/mobile/)。

您可以使用控制台密码或访问密钥登录移动应用程序。作为最佳实践，不建议使用根用户访问密钥。相反，除在移动设备上使用密码或生物识别锁外，我们强烈建议您还应使用移动应用程序创建一个专门的 IAM 用户来管理 AWS 资源。如果您的移动设备丢失了，您可以删除 IAM 用户的访问权限。

**使用访问密钥登录（移动应用程序）**

1. 在移动设备上打开该应用程序。

1. 如果这是您第一次向设备添加身份，请选择 **Add an identity (添加身份)**，然后选择 **Access keys (访问密钥)**。

   如果您已使用其他身份登录，请选择菜单图标并选择 **Switch identity (切换身份)**。然后选择 **Sign in as a different identity (以其他身份登录)**，然后选择 **Access keys (访问密钥)**。

1. 在 **Access keys (访问密钥)** 页面上输入您的信息。
   + **Access key ID (访问密钥 ID)** – 输入您的访问密钥 ID。
   + **Secret access key (秘密访问密钥)** – 输入您的秘密访问密钥。
   + **Identity name (身份名称)** – 输入将在移动应用程序中显示的身份名称。此名称不需要与您的 IAM 用户名一致。
   + **Identity PIN (身份 PIN)** – 创建将来在登录时使用的个人身份识别码（PIN）。
**注意**  
如果您为 AWS 移动应用程序启用了生物识别技术，系统将提示您使用指纹或面部识别（而非 PIN）进行验证。如果生物识别失败，系统可能会提示您输入 PIN。

1. 选择 **Verify and add keys (验证并添加密钥)**。

   现在，您就可以使用移动应用程序访问一组选定的资源。

## 相关信息
<a name="more-resources"></a>

以下主题提供了有关设置 AWS SDK 和 AWS CLI 以使用访问密钥的指导：
+ *适用于 Java 的 AWS SDK 开发人员指南*中的[设置 AWS 凭证和区域](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup-credentials.html)
+ *适用于 .NET 的 AWS SDK 开发人员指南*中的[使用 SDK Store](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/sdk-store.html)
+ *适用于 PHP 的 AWS SDK 开发人员指南*中的[为 SDK 提供凭证](https://docs.aws.amazon.com/aws-sdk-php/v2/guide/credentials.html)
+ Boto 3（AWS SDK for Python）文档中的[配置](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#configuration)
+ *AWS Tools for Windows PowerShell 用户指南*中的[使用 AWS 凭证](https://docs.aws.amazon.com/powershell/latest/userguide/specifying-your-aws-credentials.html) 
+ *AWS Command Line Interface 用户指南*中的[配置和凭证文件](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) 
+ *适用于 .NET 的 AWS SDK 开发人员指南*中的[使用 IAM 角色授予访问权限](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-hosm.html)
+ [在 *AWS SDK for Java 2.x* 中为 Amazon EC2 配置 IAM 角色](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/java-dg-roles.html)

## 使用访问密钥和私有密钥凭证访问控制台
<a name="console-access-security-keys"></a>

可以使用访问密钥和私有密钥凭证进行直接访问 AWS 管理控制台，而不仅限于 AWS CLI。可以通过 AWS STS [https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html) API 调用来实现这一目的。只需使用 `GetFederationToken` 提供的临时凭证和令牌构建一个控制台 URL，即可让 IAM 主体访问控制台。有关更多信息，请参阅 [使自定义身份凭证代理程序能够访问 AWS 控制台](id_roles_providers_enable-console-custom-url.md)。

应注意，在启用 MFA 的情况下使用 IAM 或根用户凭证直接登录控制台时，将必须使用 MFA。而使用上述方法（将临时凭证与 `GetFederationToken` 结合使用）时，则不需要 MFA。



## 审计访问密钥
<a name="Using_access-keys-audit"></a>

您可以在代码中查看 AWS 访问密钥，以确定密钥是否来自于您拥有的账户。您可以使用 [https://docs.aws.amazon.com/cli/latest/reference/sts/get-access-key-info.html](https://docs.aws.amazon.com/cli/latest/reference/sts/get-access-key-info.html) AWS CLI 命令或 [https://docs.aws.amazon.com/STS/latest/APIReference/API_GetAccessKeyInfo.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetAccessKeyInfo.html) AWS API 操作传递访问密钥 ID。

AWS CLI 和 AWS API 操作返回访问密钥所属的 AWS 账户 的 ID。以 `AKIA` 开头的访问密钥 ID 是 IAM 用户或 AWS 账户根用户 的长期凭证。以 `ASIA` 开头的访问密钥 ID 是使用 AWS STS 操作创建的临时凭证。如果响应中的账户属于您，则您可以根用户的身份登录并查看您的根用户访问密钥。然后，您可以提取[凭证报告](id_credentials_getting-report.md)以了解哪个 IAM 用户拥有这些密钥。要了解谁请求了 `ASIA` 访问密钥的临时凭证，请查看 CloudTrail 日志中的 AWS STS 事件。

为了安全起见，您可以[查看 AWS CloudTrail 日志](cloudtrail-integration.md#cloudtrail-integration_signin-tempcreds)以了解已在 AWS 中执行操作的人员。您可以在角色信任策略中使用 `sts:SourceIdentity` 条件键，以要求用户在代入角色时指定身份。例如，您可以要求 IAM 用户指定自己的用户名作为其源身份。这可以帮助您确定哪个用户在 AWS 中执行了具体的操作。有关更多信息，请参阅 [`sts:SourceIdentity`](reference_policies_iam-condition-keys.md#ck_sourceidentity)。

该操作不指示访问密钥的状态。密钥可能处于活动状态、非活动状态或已删除状态 非活动密钥可能没有执行操作的权限。提供删除的访问密钥可能会返回“密钥不存在”错误。

# IAM 中的 AWS 多重身份验证
<a name="id_credentials_mfa"></a>

为增强安全性，我们建议您配置 Multi-Factor Authentication (MFA) 以帮助保护 AWS 资源。您可以为所有 AWS 账户 的 AWS 账户根用户（包括独立账户、管理账户和成员账户）以及您的 IAM 用户启用 MFA。我们建议您尽可能使用防网络钓鱼的 MFA，例如通行密钥和安全密钥。这些基于 Fido 的身份验证器使用公钥加密技术，可抵御网络钓鱼、中间人和重放攻击，比基于 TOTP 的选项具有更强的安全级别。

对于根用户的所有账户类型，均强制实施 MFA。有关更多信息，请参阅 [保护您的 AWS Organizations 账户的根用户凭证](root-user-best-practices.md#ru-bp-organizations)。

当您为根用户启用 MFA 时，这只会影响根用户凭证。账户中的 IAM 用户是具有自己的凭证的不同身份，并且每个身份具有自己的 MFA 配置。有关使用 MFA 保护根用户的更多信息，请参阅 [AWS 账户根用户 的多重身份验证](enable-mfa-for-root.md)。

您的 AWS 账户根用户 和 IAM 用户最多可以注册 8 台任何类型的 MFA 设备。注册多台 MFA 设备可以提供灵活性，帮助您降低设备丢失或损坏时访问中断的风险。只需一台 MFA 设备即可登录 AWS 管理控制台 或通过 AWS CLI 创建会话。

**注意**  
我们建议您要求您的人类用户在访问 AWS 时使用临时凭证。您是否考虑过使用 AWS IAM Identity Center？ 您可以使用 IAM Identity Center 集中管理对多个 AWS 账户 的访问权限，并为用户提供受 MFA 保护的单点登录访问权限，可从一个位置访问其分配的所有账户。借助 IAM Identity Center，您可以在 IAM Identity Center 中创建和管理用户身份，或者轻松连接到现有的 SAML 2.0 兼容身份提供者。有关更多信息，请参阅*《AWS IAM Identity Center 用户指南》*中的[什么是 IAM Identity Center？](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。

MFA 增加了额外安全性，要求用户在访问 AWS 网站或服务时除了提供登录凭证之外，还需提供 AWS 支持的 MFA 机制的唯一身份验证。

## MFA 类型
<a name="id_credentials_mfa-types"></a>

AWS 支持以下 MFA 类型：

**Contents**
+ [通行密钥和安全密钥](#passkeys-security-keys-for-iam-users)
+ [虚拟身份验证器应用程序](#virtual-auth-apps-for-iam-users)
+ [硬件 TOTP 令牌](#hardware-totp-token-for-iam-users)

### 通行密钥和安全密钥
<a name="passkeys-security-keys-for-iam-users"></a>

AWS Identity and Access Management 对 MFA 支持通行密钥和安全密钥。基于 FIDO 标准，通行密钥使用公有密钥加密技术来提供比密码更安全的强大防网络钓鱼身份验证。AWS 支持两种类型的通行密钥：设备绑定通行密钥（安全密钥）和同步通行密钥。
+ **安全密钥**：这些是物理设备，例如 YubiKey，用作身份验证的第二个因素。单个安全密钥可以支持多个根用户账户和 IAM 用户。
+ **同步通行密钥**：它们使用来自 Google、Apple、Microsoft 账户等提供商的凭证管理器以及第三方服务（例如 1Password、Dashlane 和 Bitwarden）作为第二个因素。

您可以使用内置生物识别身份验证器（例如，Apple MacBook 上的 Touch ID）来解锁凭证管理器并登录 AWS。通行密钥是通过您选择的提供商使用您的指纹、面部或设备 PIN 创建的。您还可以使用一台设备（如移动设备或硬件安全密钥）上的跨设备身份验证 (CDA) 密钥在另一台设备（如笔记本电脑）上登录。有关更多信息，请参阅[跨设备身份验证](https://passkeys.dev/docs/reference/terms/#cross-device-authentication-cda) (CDA)。

您可以跨设备同步通行密钥以方便登录 AWS，从而增强可用性和可恢复性。有关启用通行密钥和安全密钥的更多信息，请参阅 [为根用户启用密钥或安全密钥（控制台）](enable-fido-mfa-for-root.md)。

FIDO 联盟维护一份与 FIDO 规范兼容的所有经 [FIDO 认证产品](https://fidoalliance.org/certification/fido-certified-products/)的列表。

### 虚拟身份验证器应用程序
<a name="virtual-auth-apps-for-iam-users"></a>

虚拟身份验证器应用程序在电话或其他设备上运行，并模拟物理设备。虚拟身份验证器应用程序采用[基于时间的一次性密码](https://datatracker.ietf.org/doc/html/rfc6238)（TOTP）算法，并支持单个设备上的多个令牌。在登录期间，用户必须在出现提示时从该设备键入有效代码。分配给用户的每个令牌必须是唯一的。用户无法从另一个用户的令牌键入代码来进行身份验证。

我们建议您使用防网络钓鱼的 MFA，[例如通行密钥或安全密钥，以获得](#passkeys-security-keys-for-iam-users)最强的保护。如果您还不能使用通行密钥或安全密钥，我们建议您在等待硬件购买批准或等待硬件到达时，使用虚拟 MFA 设备作为临时措施。有关可用作虚拟 MFA 设备的一些受支持应用程序的列表，请参阅[多重身份验证（MFA）](https://aws.amazon.com/iam/features/mfa/?audit=2019q1)。

有关为 IAM 用户设置虚拟 MFA 设备的说明，请参阅 [在 AWS 管理控制台 中分配虚拟 MFA 设备](id_credentials_mfa_enable_virtual.md)。

**注意**  
当您通过 AWS 管理控制台或在登录过程中添加新的虚拟 MFA 设备时，系统会删除您的 AWS 账户中未分配的虚拟 MFA 设备。未分配的虚拟 MFA 设备是指您账户中的设备，但在登录过程中不被账户根用户或 IAM 用户使用。已删除这些设备，因此可以向您的账户添加新的虚拟 MFA 设备。它还允许您重复使用设备名称。  
要查看账户中未分配的虚拟 MFA 设备，您可以使用 [list-virtual-mfa-devices](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/list-virtual-mfa-devices.html) AWS CLI 命令或 [API](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListVirtualMFADevices.html) call 调用。
要停用虚拟 MFA 设备，您可以使用 [deactivate-mfa-device](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/deactivate-mfa-device.html) AWS CLI 命令或 [API](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeactivateMFADevice.html) 调用。设备将变为未分配状态。
要将未分配的虚拟 MFA 设备附加到您的 AWS 账户根用户或 IAM 用户，您需要设备生成的身份验证码，以及 [enable-mfa-device](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/enable-mfa-device.html) AWS CLI 命令或 [API](https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableMFADevice.html) 调用。

### 硬件 TOTP 令牌
<a name="hardware-totp-token-for-iam-users"></a>

硬件设备以[基于时间的一次性密码（TOTP）算法](https://datatracker.ietf.org/doc/html/rfc6238)为基础生成六位数字代码。在登录时，用户必须在另一个网页上键入来自该设备的有效代码。

这些令牌仅与 AWS 账户 一起使用。您只能使用具有与 AWS 安全共享的唯一令牌种子的令牌。令牌种子是在制作令牌时生成的私有密钥。从其他来源购买的令牌不能用于 IAM。为确保兼容性，您必须通过以下链接之一购买硬件 MFA 设备：[OTP 令牌](https://www.amazon.com/SafeNet-IDProve-Time-based-6-Digit-Services/dp/B002CRN5X8)或 [OTP 显卡](https://www.amazon.com/SafeNet-IDProve-Card-Amazon-Services/dp/B00J4NGUO4)。
+ 分配给用户的每台 MFA 设备必须是唯一的。用户无法从另一个用户的设备键入代码来进行身份验证。有关受支持硬件 MFA 设备的信息，请参阅[多重身份验证（MFA）](https://aws.amazon.com/iam/features/mfa/?audit=2019q1)。
+ 如果想使用物理 MFA 设备，我们建议使用安全密钥来代替硬件 TOTP 设备。安全密钥不需要电池，具有防网络钓鱼功能，并可在一台设备上支持多个用户。

您只能从 AWS 管理控制台 启用密钥或安全密钥，而不能从 AWS CLI 或 AWS API 启用。在启用安全密钥之前，您必须对设备拥有物理访问权限。

有关为 IAM 用户设置硬件 TOTP 令牌的说明，请参阅 [在 AWS 管理控制台 中分配硬件 TOTP 令牌](id_credentials_mfa_enable_physical.md)。

**注意**  
**基于 SMS 短信的 MFA** – AWS 已终止对短信多重身份验证（MFA）的支持。我们建议拥有使用基于短信的 MFA 的 IAM 用户的客户切换到以下替代方法之一：[密码或安全密钥](id_credentials_mfa_enable_fido.md)、[虚拟（基于软件）MFA 设备](id_credentials_mfa_enable_virtual.md)或[硬件 MFA 设备](id_credentials_mfa_enable_physical.md)。您可以确定账户中拥有已分配短信 MFA 设备的用户。在 IAM 控制台中，从导航窗格中选择**用户**，然后在表的 **MFA** 列中查找具有 **SMS** 的用户。

## MFA 建议
<a name="id_credentials_mfa-recommendations"></a>

为了帮助保护您的 AWS 身份，请遵循以下 MFA 身份验证建议。
+ 我们建议您使用防网络钓鱼的 MFA（例如通行密钥和安全密钥 ）作为 MFA 设备。这些基于 Fido 的身份验证器可针对网络钓鱼等攻击提供最强大的保护。
+ 我们建议您在您的 AWS 账户 中为 AWS 账户根用户 和 IAM 用户启用多台 MFA 设备。这可以使您提高 AWS 账户 中的安全门槛，简化对高权限用户（例如 AWS 账户根用户）的访问管理。
+ 您最多可以向 AWS 账户根用户 和 IAM 用户注册 **8** 台[当前支持的 MFA 类型](https://aws.amazon.com/iam/features/mfa/)任意组合的 MFA 设备。注册多台 MFA 设备后，只需一台 MFA 设备即可以该用户的身份登录 AWS 管理控制台 或通过 AWS CLI 创建会话。IAM 用户必须使用现有的 MFA 设备进行身份验证，然后才能启用或禁用其他 MFA 设备。
+ 如果 MFA 设备丢失、被盗或无法访问，您可以使用剩余 MFA 设备中的一台访问 AWS 账户，而无需执行 AWS 账户 恢复程序。如果 MFA 设备遗失或被盗，应将解除该设备与所关联 IAM 主体的关联。
+ 通过使用多个 MFA，在地理位置上分散或进行远程办公的员工可以使用基于硬件的 MFA 访问 AWS，同时无需在员工之间协调单个硬件设备的实物交换。
+ 通过为 IAM 主体使用额外的 MFA 设备，您使用一个或多个 MFA 来满足日常需要，同时在安全的物理位置（例如保管库或保险柜）保存物理 MFA 设备，以满足备份和冗余的需要。

**备注**  
您无法将安全密钥或通行密钥的 MFA 信息传递给 AWS STS API 操作来请求临时凭证。使用安全密钥或通行密钥时，您可通过运行 `aws login` 命令获取与 AWS CLI 和 AWS SDK 配合使用的凭证。
您无法使用 AWS CLI 命令或 AWS API 操作来启用 [FIDO 安全密钥](id_credentials_mfa_enable_fido.md)。
多个根用户或 IAM MFA 设备不能使用相同的名称。

## 其他资源
<a name="id_credentials_mfa-resources"></a>

以下资源可帮助您了解有关 MFA 的更多信息。
+ 有关使用 MFA 访问 AWS 的更多信息，请参阅 [已启用 MFA 的登录](console_sign-in-mfa.md)。
+  您可以利用 IAM Identity Center 来启用对 AWS 访问门户、IAM Identity Center 集成应用以及 AWS CLI 的安全访问。有关更多信息，请参阅[在 IAM Identity Center 中启用 MFA](https://docs.aws.amazon.com/singlesignon/latest/userguide/mfa-getting-started.html)。

# 在 AWS 管理控制台 中分配密钥或安全密钥
<a name="id_credentials_mfa_enable_fido"></a>

密钥是一种[多重身份验证（MFA）设备](id_credentials_mfa.md)，可用于保护您的 AWS 资源。AWS 支持同步密钥和设备绑定密钥（也称为安全密钥）。

同步密钥允许 IAM 用户在其许多设备（甚至是新设备）上访问其 FIDO 登录凭证，而不必在每个账户上重新注册每台设备。同步密钥包括 Google、Apple 和 Microsoft 等第一方凭证管理器以及第三方凭证管理器（例如1 Password、Dashlane 和 Bitwarden）作为第二个因素。还可以使用设备上的生物识别技术（如 TouchID、FaceID）来解锁选择的凭证管理器以使用密钥。

或者，设备绑定密钥绑定到 FIDO 安全密钥，您可以其插入计算机的 USB 端口，然后在出现提示时点击以安全地完成登录过程。如果您已将 FIDO 安全密钥用于其他服务，它将有一个 [AWS 支持的配置](id_credentials_mfa_fido_supported_configurations.md)（例如，来自 Yubico 的 YubiKey 5 Series），您也可以将其用于 AWS。否则，如果要在 AWS 中使用面向 MFA 的 WebAuthn，您需要购买 FIDO 安全密钥。此外，FIDO 安全密钥可以在同一台设备上支持多个 IAM 用户后根用户，从而增强在保护账户安全方面的实用性。有关这两种设备类型的规格和购买信息，请参阅[多重身份验证](https://aws.amazon.com/iam/details/mfa/)。

您最多可以向 AWS 账户根用户 和 IAM 用户注册 **8** 台[当前支持的 MFA 类型](https://aws.amazon.com/iam/features/mfa/)任意组合的 MFA 设备。注册多台 MFA 设备后，只需一台 MFA 设备即可以该用户的身份登录 AWS 管理控制台 或通过 AWS CLI 创建会话。建议注册多个 MFA 设备。例如，您可以注册内置身份验证器，也可以注册保存在物理安全位置的安全密钥。如果您无法使用内置身份验证器，则可以使用已注册的安全密钥。对于身份验证器应用程序，我们还建议您在这些应用程序中启用云备份或同步功能，以避免在设备丢失或损坏身份验证器应用程序时失去对账户的访问权限。

**注意**  
我们建议您要求您的人类用户在访问 AWS 时使用临时凭证。您的用户可以与一个身份提供商联合身份到 AWS中，使用其企业凭证和 MFA 配置进行身份验证。为了管理对 AWS 的访问和业务应用程序，我们建议您使用 IAM Identity Center。有关更多信息，请参阅《[IAM Identity Center 用户指南](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)》。

**Topics**
+ [所需权限](#enable-fido-mfa-for-iam-user-permissions-required)
+ [为您自己的 IAM 用户启用密钥或安全密钥（控制台）](#enable-fido-mfa-for-own-iam-user)
+ [为其他 IAM 用户启用密钥或安全密钥（控制台）](#enable-fido-mfa-for-iam-user)
+ [替换密钥或安全密钥](#replace-fido-mfa)
+ [使用密钥或安全密钥的受支持配置](id_credentials_mfa_fido_supported_configurations.md)

## 所需权限
<a name="enable-fido-mfa-for-iam-user-permissions-required"></a>

要为您自己的 IAM 用户管理 FIDO 密钥，同时保护与 MFA 相关的敏感操作，您必须具有以下策略中的权限：

**注意**  
ARN 值是静态值，不用于指示注册身份验证器所使用的协议。我们已弃用 U2F，因此所有新的实现都使用 WebAuthn。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowManageOwnUserMFA",
            "Effect": "Allow",
            "Action": [
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:GetUser",
                "iam:ListMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "DenyAllExceptListedIfNoMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:EnableMFADevice",
                "iam:GetUser",
                "iam:ListMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}
```

------

## 为您自己的 IAM 用户启用密钥或安全密钥（控制台）
<a name="enable-fido-mfa-for-own-iam-user"></a>

您只能从 AWS 管理控制台 为您自己的 IAM 用户启用密钥或安全密钥，而不能从 AWS CLI 或 AWS API 启用。在启用安全密钥之前，您必须对设备拥有物理访问权限。

**为您自己的 IAM 用户启用密钥或安全密钥（控制台）**

1. 使用 AWS 账户 ID 或账户别名、您的 IAM 用户名和密码登录到 [IAM 控制台](https://console.aws.amazon.com/iam)。
**注意**  
为方便起见，AWS登录页面使用浏览器 Cookie 记住您的 IAM 用户名和账户信息。如果您之前以其他用户身份登录，请选择页面底部的 **Sign-in to a different account**（登录到其他账户）以返回主登录页面。在此处，您可以输入要重新导向到您账户 IAM 用户登录页面的 AWS 账户 ID 或账户别名。

   要获取 AWS 账户 ID，请联系管理员。

1. 在右上角的导航栏中，选择您的用户名，然后选择 **Security credentials**（安全凭证）。  
![\[AWS 管理控制台 安全凭证链接\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/security-credentials-user.shared.console.png)

1. 在所选 IAM 用户的页面上，选择**安全凭证**选项卡。

1. 在 **Multi-factor authentication (MFA)** [多重身份验证（MFA）] 部分中，选择 **Assign MFA device**（分配 MFA 设备）。

1. 在 **MFA 设备名称**页面上，输入**设备名称**，选择**密钥或安全密钥**，然后选择**下一步**。

1. 在**设置设备**上，设置您的密钥。使用面部或指纹等生物识别数据、设备 PIN 码或将 FIDO 安全密钥插入计算机的 USB 端口并点按即可创建密钥。

1. 按照浏览器上的说明进行操作，然后选择**继续**。

现在，您已经注册了用于 AWS 的密钥或安全密钥。有关在 AWS 管理控制台上使用 MFA 的信息，请参阅 [已启用 MFA 的登录](console_sign-in-mfa.md)。

## 为其他 IAM 用户启用密钥或安全密钥（控制台）
<a name="enable-fido-mfa-for-iam-user"></a>

您只能从 AWS 管理控制台 为其他 IAM 用户启用密钥或安全密钥，而不能从 AWS CLI 或 AWS API 启用。

**为其他 IAM 用户启用密钥或安全密钥（控制台）**

1. 登录 AWS 管理控制台，单击 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**用户**。

1. 在**用户**下，选择要为其启用 MFA 的用户的名称。

1. 在所选 IAM 用户页面上，选择**安全凭证**选项卡。

1. 在 **Multi-factor authentication (MFA)** [多重身份验证（MFA）] 部分中，选择 **Assign MFA device**（分配 MFA 设备）。

1. 在 **MFA 设备名称**页面上，输入**设备名称**，选择**密钥或安全密钥**，然后选择**下一步**。

1. 在**设置设备**上，设置您的密钥。使用面部或指纹等生物识别数据、设备 PIN 码或将 FIDO 安全密钥插入计算机的 USB 端口并点按即可创建密钥。

1. 按照浏览器上的说明进行操作，然后选择**继续**。

现在，您已经注册了供其他 IAM 用户用于 AWS 的密钥或安全密钥。有关在 AWS 管理控制台上使用 MFA 的信息，请参阅 [已启用 MFA 的登录](console_sign-in-mfa.md)。

## 替换密钥或安全密钥
<a name="replace-fido-mfa"></a>

您一次最多可以向 AWS 账户根用户 和 IAM 用户分配 8 台 [ 当前支持的 MFA 类型](https://aws.amazon.com/iam/features/mfa/)任意组合的 MFA 设备。如果用户丢失 FIDO 身份验证器或者出于某种原因需要进行替换，必须先停用旧的 FIDO 身份验证器。然后，您可以为用户添加新 MFA 设备。
+ 要停用当前与 IAM 用户关联的设备，请参阅 [停用 MFA 设备](id_credentials_mfa_disable.md)。
+ 要为 IAM 用户添加新的 FIDO 安全密钥，请参阅 [为您自己的 IAM 用户启用密钥或安全密钥（控制台）](#enable-fido-mfa-for-own-iam-user)。

如果无权访问新的密钥或安全密钥，则可以启用新的虚拟 MFA 设备或硬件 TOTP 令牌。有关说明，请参阅以下章节之一：
+ [在 AWS 管理控制台 中分配虚拟 MFA 设备](id_credentials_mfa_enable_virtual.md) 
+ [在 AWS 管理控制台 中分配硬件 TOTP 令牌](id_credentials_mfa_enable_physical.md) 

# 使用密钥或安全密钥的受支持配置
<a name="id_credentials_mfa_fido_supported_configurations"></a>

您可以通过使用当前支持的配置，将 FIDO2 设备绑定密钥（也称为安全密钥）配置为 IAM 的多重身份验证（MFA）方法。这包括 IAM 支持的 FIDO2 设备及支持 FIDO2 的浏览器。在注册 FIDO2 设备之前，请确认您使用的是最新版本的浏览器和操作系统（OS）。相关功能在不同的浏览器、身份验证器和操作系统客户端上可能有不同的行为。如果您的设备在一种浏览器上注册失败，则可以尝试使用其他浏览器注册。

FIDO2 是开放身份验证标准，作为 FIDO U2F 的扩展，基于公有密钥加密提供同样高级别的安全性。FIDO2 由 W3C Web 身份验证规范（WebAuthn API）和 FIDO 联盟客户端到身份验证器协议（CTAP，一种应用程序层协议）组成。CTAP 支持客户端或平台（如浏览器或操作系统）与外部身份验证器之间进行通信。当您在 AWS 中启用经 FIDO 认证的身份验证器时，安全密钥会创建仅适用于 AWS 的新密钥对。首先，输入您的凭证。出现提示时，点击安全密钥，这会响应 AWS 发出的身份验证质询。要了解有关 FIDO2 标准的更多信息，请参阅 [FIDO2 项目](https://en.wikipedia.org/wiki/FIDO2_Project)。

## AWS 支持的 FIDO2 设备
<a name="id_credentials_mfa_fido_supported_devices"></a>

IAM 支持 FIDO2 安全设备，这些设备可通过 USB、Bluetooth或 NFC 连接到您的设备。IAM 还支持 TouchID 或 FaceID 等平台身份验证器。IAM 不支持 Windows Hello 的本地密钥注册。若要创建和使用密钥，Windows 用户应使用[跨设备身份验证](https://passkeys.dev/docs/reference/terms/#cross-device-authentication-cda)，即使用来自一台设备（例如移动设备）的密钥或硬件安全密钥在另一台设备（如笔记本电脑）上登录。

**注意**  
AWS 需要访问您的计算机上的物理 USB 端口以验证您的 FIDO2 设备。安全密钥不支持虚拟机、远程连接或浏览器的无痕模式。

FIDO 联盟维护一份与 FIDO 规范兼容的所有 [FIDO2 产品](https://fidoalliance.org/certification/fido-certified-products/)的列表。

## 支持 FIDO2 的浏览器
<a name="id_credentials_mfa_fido_browsers"></a>

FIDO2 安全设备能否在 Web 浏览器中运行，取决于具体的浏览器和操作系统组合。以下浏览器当前支持使用安全密钥：


****  

| Web 浏览器 | macOS 10.15\$1 | Windows 10 | Linux | iOS 14.5\$1 | Android 7\$1 | 
| --- | --- | --- | --- | --- | --- | 
| Chrome | 支持 | 是 | 是 | 是 | 否 | 
| Safari | 是 | 否 | 否 | 是 | 否 | 
| Edge | 是 | 是 | 否 | 是 | 否 | 
| Firefox | 支持 | 是 | 否 | 是 | 否 | 

**注意**  
当前支持 FIDO2 的大多数 Firefox 版本默认情况下不会启用支持。有关在 Firefox 中启用 FIDO2 支持的说明，请参阅 [排查通行密钥和 FIDO 安全密钥问题](troubleshoot_mfa-fido.md)。  
macOS 上的 Firefox 可能不完全支持通行密钥的跨设备身份验证工作流程。系统可能会提示您触摸安全密钥，而不是继续进行跨设备身份验证。建议使用其他浏览器（例如 Chrome 或 Safari）在 macOS 上使用通行密钥登录。

要详细了解支持 FIDO2 认证设备（如 YubiKey）的浏览器，请参阅 [Operating system and web browser support for FIDO2 and U2F](https://support.yubico.com/hc/en-us/articles/360016615020-Operating-system-and-web-browser-support-for-FIDO2-and-U2F)。

### 浏览器插件
<a name="id_credentials_mfa_fido_plugins"></a>

AWS 仅支持原生支持 FIDO2 的浏览器。AWS 不支持使用插件来添加 FIDO2 浏览器支持。某些浏览器插件与 FIDO2 标准不兼容，这可能会导致 FIDO2 安全密钥产生意外结果。

有关禁用浏览器插件和其他问题排查提示的信息，请参阅[我无法启用我的 FIDO 安全密钥](troubleshoot_mfa-fido.md#troubleshoot_mfa-fido-cant-enable)。

## 设备认证
<a name="id_credentials_mfa_fido_certifications"></a>

我们仅在注册安全密钥期间捕获和分配与设备相关的认证，例如 FIPS 验证和 FIDO 认证级别。从 [FIDO Alliance Metadata Service（MDS）](https://fidoalliance.org/metadata/)获取设备认证。如果您的安全密钥的认证状态或级别发生变化，则不会自动反映在设备标签中。要更新设备的认证信息，请再次注册设备，以获取更新的认证信息。

AWS 在设备注册期间提供以下认证类型作为条件密钥，从 FIDO MDS 获得：FIPS-140-2、FIPS-140-3 和 FIDO 认证级别。您可以根据首选认证类型和级别，在其 IAM policy 中指定特定身份验证器的注册。有关更多信息，请参阅下面的策略。

### 设备认证策略示例
<a name="id_credentials_mfa_fido_certifications_policies"></a>

以下用例显示允许您为 MFA 设备注册 FIPS 认证的示例策略。

**Topics**
+ [用例 1：只允许注册通过 FIPS-140-2 L2 认证的设备](#id_credentials_mfa_fido_certifications_policies_use_case_1)
+ [用例 2：允许注册通过 FIPS-140-2 L2 和 FIDO L1 认证的设备](#id_credentials_mfa_fido_certifications_policies_use_case_2)
+ [用例 3：允许注册通过 FIPS-140-2 L2 或 FIPS-140-3 L2 认证的设备](#id_credentials_mfa_fido_certifications_policies_use_case_3)
+ [使用案例 4：允许已通过 FIPS-140-2 L2 认证并支持其他 MFA 类型（例如虚拟身份验证器和硬件 TOTP）的设备注册](#id_credentials_mfa_fido_certifications_policies_use_case_4)

#### 用例 1：只允许注册通过 FIPS-140-2 L2 认证的设备
<a name="id_credentials_mfa_fido_certifications_policies_use_case_1"></a>

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Create"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Activate",
                    "iam:FIDO-FIPS-140-2-certification": "L2"
                }
            }
        }
    ]
}
```

------

#### 用例 2：允许注册通过 FIPS-140-2 L2 和 FIDO L1 认证的设备
<a name="id_credentials_mfa_fido_certifications_policies_use_case_2"></a>

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Create"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Activate",
                    "iam:FIDO-FIPS-140-2-certification": "L2",
                    "iam:FIDO-certification": "L1"
                }
            }
        }
    ]
}
```

------

#### 用例 3：允许注册通过 FIPS-140-2 L2 或 FIPS-140-3 L2 认证的设备
<a name="id_credentials_mfa_fido_certifications_policies_use_case_3"></a>

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Create"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Activate",
                    "iam:FIDO-FIPS-140-2-certification": "L2"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Activate",
                    "iam:FIDO-FIPS-140-3-certification": "L2"
                }
            }
        }
    ]
}
```

------

#### 使用案例 4：允许已通过 FIPS-140-2 L2 认证并支持其他 MFA 类型（例如虚拟身份验证器和硬件 TOTP）的设备注册
<a name="id_credentials_mfa_fido_certifications_policies_use_case_4"></a>

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iam:EnableMFADevice",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "iam:RegisterSecurityKey": "Create"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "iam:EnableMFADevice",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "iam:RegisterSecurityKey": "Activate",
          "iam:FIDO-FIPS-140-2-certification": "L2"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "iam:EnableMFADevice",
      "Resource": "*",
      "Condition": {
        "Null": {
          "iam:RegisterSecurityKey": "true"
        }
      }
    }
  ]
}
```

------

## AWS CLI 和 AWS API
<a name="id_credentials_mfa_fido_cliapi"></a>

AWS 支持仅在 AWS 管理控制台 中使用密钥或安全密钥。在 [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/) 和 [AWS API](https://aws.amazon.com/tools/) 中不支持使用密钥和安全密钥进行 MFA，也不支持使用密钥和安全密钥访问 [MFA 保护的 API 操作](id_credentials_mfa_configure-api-require.md)。

## 其他资源
<a name="id_credentials_mfa_fido_additional_resources"></a>
+ 有关在 AWS 中使用密钥和安全密钥的更多信息，请参阅 [在 AWS 管理控制台 中分配密钥或安全密钥](id_credentials_mfa_enable_fido.md)。
+ 有关在 AWS 中对密钥和安全密钥进行故障排除的帮助信息，请参阅 [排查通行密钥和 FIDO 安全密钥问题](troubleshoot_mfa-fido.md)。
+ 有关 FIDO2 支持的一般行业信息，请参阅 [FIDO2 项目](https://en.wikipedia.org/wiki/FIDO2_Project)。

# 在 AWS 管理控制台 中分配虚拟 MFA 设备
<a name="id_credentials_mfa_enable_virtual"></a>

**重要**  
AWS 建议您在登录 AWS 时，尽可能使用通行密钥或安全密钥作为 MFA。有关更多信息，请参阅 [在 AWS 管理控制台 中分配密钥或安全密钥](id_credentials_mfa_enable_fido.md)。

您可以将手机或其他设备作为虚拟多重身份验证（MFA）设备。为此，请安装符合 [RFC 6238](https://datatracker.ietf.org/doc/html/rfc6238) 的移动应用程序，这是一种基于标准的 TOTP（基于时间的一次性密码）算法。这些应用程序生成六位数的身份验证代码。由于身份验证器可以在不安全的移动设备上运行，而且代码有可能与未经授权的各方共享，因此基于 TOTP 的 MFA 无法提供与 [FIDO2](https://en.wikipedia.org/wiki/FIDO_Alliance#FIDO2) 安全密钥和通行密钥等防网络钓鱼选项相同的安全级别。我们建议您使用通行密钥或安全密钥进行 MFA，以最有效地防范网络钓鱼等攻击。

如果您还不能使用通行密钥或安全密钥，我们建议您在等待硬件购买批准或等待硬件到达时，使用虚拟 MFA 设备作为临时措施。

大多数虚拟 MFA 应用程序支持创建多个虚拟设备，从而允许您在多个 AWS 账户 或用户中使用相同的应用程序。您最多可以向 AWS 账户根用户 和 IAM 用户注册 **8** 台 [MFA 类型](https://aws.amazon.com/iam/features/mfa/)任意组合的 MFA 设备。只需一台 MFA 设备即可登录 AWS 管理控制台 或通过 AWS CLI 创建会话。建议注册多个 MFA 设备。对于身份验证器应用程序，我们还建议您启用云备份或同步功能，以帮助避免在设备丢失或损坏时失去对账户的访问权限。

AWS 需要可产生六位数 OTP 的虚拟 MFA 应用程序。有关您可以使用的虚拟 MFA 应用程序的列表，请参阅 [Multi-Factor Authentication](https://aws.amazon.com/iam/features/mfa/?audit=2019q1)。

**Topics**
+ [所需权限](#mfa_enable_virtual_permissions-required)
+ [为 IAM 用户启用虚拟 MFA 设备（控制台）](#enable-virt-mfa-for-iam-user)
+ [替换虚拟 MFA 设备](#replace-virt-mfa)

## 所需权限
<a name="mfa_enable_virtual_permissions-required"></a>

要管理您的 IAM 用户的虚拟 MFA 设备，您必须具有以下策略中的权限：[AWS：允许使用 MFA 完成身份验证的 IAM 用户在“安全凭证”页面上管理自己的 MFA 设备。](reference_policies_examples_aws_my-sec-creds-self-manage-mfa-only.md)。

## 为 IAM 用户启用虚拟 MFA 设备（控制台）
<a name="enable-virt-mfa-for-iam-user"></a>

您可在 AWS 管理控制台 中使用 IAM 为您账户中的 IAM 用户启用和管理虚拟 MFA 设备。您可以将标签附加到 IAM 资源（包括虚拟 MFA 设备），以识别、组织和控制对这些资源的访问。只有在使用 AWS CLI 或 AWS API 时，才能标记虚拟 MFA 设备。要使用 AWS CLI 或 AWS API 启用和管理 MFA 设备，请参阅 [在 AWS CLI 或 AWS API 中分配 MFA 设备](id_credentials_mfa_enable_cliapi.md)。有关标记 IAM 资源的更多信息，请参阅 [AWS Identity and Access Management 资源的标签](id_tags.md)。

**注意**  
您必须拥有对将托管用户的虚拟 MFA 设备的硬件的物理访问权限以便配置 MFA。例如，您可能为使用在智能手机上运行的虚拟 MFA 设备的用户配置 MFA。在这种情况下，您必须具有智能手机才能完成该向导。因此，您可能想让用户配置和管理他们自己的虚拟 MFA 设备。在此情况下，您必须授予用户执行必要的 IAM 操作所需的权限。有关更多信息以及授予这些权限的 IAM 策略示例，请参阅 [IAM 教程：允许用户管理其凭证和 MFA 设置](tutorial_users-self-manage-mfa-and-creds.md) 和示例策略 [AWS：允许使用 MFA 完成身份验证的 IAM 用户在“安全凭证”页面上管理自己的 MFA 设备。](reference_policies_examples_aws_my-sec-creds-self-manage-mfa-only.md)。

**为 IAM 用户启用虚拟 MFA 设备（控制台）**

1. 登录 AWS 管理控制台，单击 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**用户**。

1. 在 **用户**列表中，选择 IAM 用户的名称。

1. 选择 **Security Credentials (安全凭证)** 选项卡。在 **Multi-factor authentication (MFA)** [多重身份验证（MFA）] 部分中，选择 **Assign MFA device**（分配 MFA 设备）。

1. 在向导中，键入**设备名称**，选择**身份验证器应用程序**，然后选择**下一步**。

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

1. 打开您的虚拟 MFA 应用程序。有关可用于托管虚拟 MFA 设备的应用程序的列表，请参阅[多重身份验证](https://aws.amazon.com/iam/details/mfa/)。

   如果虚拟 MFA 应用程序支持多个虚拟 MFA 设备或账户，请选择相应的选项以创建新的虚拟 MFA 设备或账户。

1. 确定 MFA 应用程序是否支持 QR 代码，然后执行以下操作之一：
   + 在向导中，选择 **Show QR 代码 (显示 QR 代码)**，然后使用该应用程序扫描 QR 代码。这可能是摄像头图标或使用设备的摄像头扫描代码的**扫描代码**选项。
   + 在向导中，选择 **Show secret key**（显示私有密钥），然后在您的 MFA 应用程序中键入私有密钥。

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

1. 在**设置设备**页面中的 **MFA 代码 1** 框中，键入虚拟 MFA 设备当前显示的一次性密码。请等候 30 秒，以便设备生成新的一次性密码。然后在 **MFA code 2 (MFA 代码 2)** 框中键入第二个一次性密码。选择 **Add MFA**（添加 MFA）。
**重要**  
生成代码之后立即提交您的请求。如果生成代码后等待很长时间才提交请求，MFA 设备会成功与用户关联，但 MFA 设备无法同步。这是因为基于时间的一次性密码（TOTP）很快会过期。这种情况下，您可以[重新同步设备](id_credentials_mfa_sync.md)。

虚拟 MFA 设备现在已准备好与 AWS 一起使用了。有关在 AWS 管理控制台上使用 MFA 的信息，请参阅 [已启用 MFA 的登录](console_sign-in-mfa.md)。

**注意**  
当您通过 AWS 管理控制台或在登录过程中添加新的虚拟 MFA 设备时，系统会删除您 AWS 账户中未分配的虚拟 MFA 设备。未分配的虚拟 MFA 设备是指您账户中的设备，但在登录过程中不被账户根用户或 IAM 用户使用。已删除这些设备，因此可以向您的账户添加新的虚拟 MFA 设备。它还允许您重复使用设备名称。  
要查看账户中未分配的虚拟 MFA 设备，您可以使用 [list-virtual-mfa-devices](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/list-virtual-mfa-devices.html) AWS CLI 命令或 [API](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListVirtualMFADevices.html) 调用。
要停用虚拟 MFA 设备，您可以使用 [deactivate-mfa-device](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/deactivate-mfa-device.html) AWS CLI 命令或 [API](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeactivateMFADevice.html) 调用。设备将变为未分配状态。
要将未分配的虚拟 MFA 设备附加到您的 AWS 账户根用户或 IAM 用户，您需要设备生成的身份验证码，以及 [enable-mfa-device](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/enable-mfa-device.html) AWS CLI 命令或 [API](https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableMFADevice.html) 调用。

## 替换虚拟 MFA 设备
<a name="replace-virt-mfa"></a>

您的 AWS 账户根用户 和 IAM 用户最多可以注册 **8** 台 MFA 类型任意组合的 MFA 设备。如果用户丢失设备或出于任何原因需要更换设备，请先停用旧设备。然后，您可以为用户添加新设备。
+ 要停用当前与其他 IAM 用户关联的设备，请参阅 [停用 MFA 设备](id_credentials_mfa_disable.md)。
+ 要为其他 IAM 用户添加替换虚拟 MFA 设备，请按照上述 [为 IAM 用户启用虚拟 MFA 设备（控制台）](#enable-virt-mfa-for-iam-user) 过程中的步骤进行操作。
+ 要为 AWS 账户根用户添加替换虚拟 MFA 设备，请按照 [为根用户启用虚拟 MFA 设备（控制台）](enable-virt-mfa-for-root.md) 过程中的步骤操作。

# 在 AWS 管理控制台 中分配硬件 TOTP 令牌
<a name="id_credentials_mfa_enable_physical"></a>

**重要**  
AWS 建议您在登录 AWS 时，尽可能使用通行密钥或安全密钥作为 MFA。有关更多信息，请参阅 [在 AWS 管理控制台 中分配密钥或安全密钥](id_credentials_mfa_enable_fido.md)。

硬件 TOTP 令牌以基于时间的一次性密码（TOTP）算法为基础生成一个六位数字代码。在登录过程中，用户必须在出现提示时从该设备键入有效代码。分配给用户的每个 MFA 设备都必须是唯一的；进行身份验证时，某个用户无法从另一个用户的设备键入代码。MFA 设备不能跨账户或用户共享。

硬件 TOTP 令牌和 [FIDO 安全密钥](id_credentials_mfa_enable_fido.md)都是您购买的物理设备。硬件 MFA 设备会在您登录 AWS 时生成 TOTP 验证码来验证身份。此类设备需要使用电池，并且随着时间推移可能需要更换以及与 AWS 重新同步。FIDO 安全密钥采用公钥加密技术，不需要电池，并且可提供无缝的身份验证流程。我们建议使用 FIDO 安全密钥，是因为此类密钥能够抵御网络钓鱼攻击，是 TOTP 设备的更安全替代方案。此外，FIDO 安全密钥可以在同一台设备上支持多个 IAM 用户后根用户，从而增强在保护账户安全方面的实用性。有关这两种设备类型的规格和购买信息，请参阅[多重身份验证](https://aws.amazon.com/iam/details/mfa/)。



您可以从 AWS 管理控制台、命令行或 IAM API 为 IAM 用户启用硬件 TOTP 令牌。要为 AWS 账户根用户 启用 MFA 设备，请参阅[为根用户启用硬件 TOTP 令牌（控制台）](enable-hw-mfa-for-root.md)。

您最多可以向 AWS 账户根用户 和 IAM 用户注册 **8** 台[当前支持的 MFA 类型](https://aws.amazon.com/iam/features/mfa/)任意组合的 MFA 设备。注册多台 MFA 设备后，只需一台 MFA 设备即可以该用户的身份登录 AWS 管理控制台 或通过 AWS CLI 创建会话。

**重要**  
我们建议您为用户启用多台 MFA 设备，以便在 MFA 设备丢失或无法访问时能够继续访问您的账户。

**注意**  
如果想从命令行启用 MFA 设备，请使用 [https://docs.aws.amazon.com/cli/latest/reference/iam/enable-mfa-device.html](https://docs.aws.amazon.com/cli/latest/reference/iam/enable-mfa-device.html)。如要使用 IAM API 启用 MFA 设备，请使用 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableMFADevice.html) 操作。

**Topics**
+ [所需权限](#enable-hw-mfa-for-iam-user-permissions-required)
+ [为您自己的 IAM 用户启用硬件 TOTP 令牌（控制台）](#enable-hw-mfa-for-own-iam-user)
+ [为其他 IAM 用户启用硬件 TOTP 令牌（控制台）](#enable-hw-mfa-for-iam-user)
+ [替换物理 MFA 设备](#replace-phys-mfa)

## 所需权限
<a name="enable-hw-mfa-for-iam-user-permissions-required"></a>

要为您自己的 IAM 用户管理硬件 TOTP 令牌，同时保护与 MFA 相关的敏感操作，您必须具有以下策略中的权限：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowManageOwnUserMFA",
            "Effect": "Allow",
            "Action": [
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:GetUser",
                "iam:ListMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "DenyAllExceptListedIfNoMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:EnableMFADevice",
                "iam:GetUser",
                "iam:ListMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}
```

------

## 为您自己的 IAM 用户启用硬件 TOTP 令牌（控制台）
<a name="enable-hw-mfa-for-own-iam-user"></a>

 您可以从 AWS 管理控制台 启用您自己的硬件 TOTP 令牌。

**注意**  
在启用硬件 TOTP 令牌之前，您必须拥有对设备的物理访问权限。

**为您自己的 IAM 用户启用硬件 TOTP 令牌（控制台）**

1. 使用 AWS 账户 ID 或账户别名、您的 IAM 用户名和密码登录到 [IAM 控制台](https://console.aws.amazon.com/iam)。
**注意**  
为方便起见，AWS 登录页面使用浏览器 Cookie 记住您的 IAM 用户名和账户信息。如果您之前以其他用户身份登录，请选择页面底部的 **Sign-in to a different account**（登录到其他账户）以返回主登录页面。在此处，您可以输入要重新导向到您账户 IAM 用户登录页面的 AWS 账户 ID 或账户别名。

   要获取 AWS 账户 ID，请联系管理员。

1. 在右上角的导航栏中，选择您的用户名，然后选择 **Security credentials**（安全凭证）。  
![\[AWS 管理控制台 安全凭证链接\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/security-credentials-user.shared.console.png)

1. 在 **AWS IAM 凭证**选项卡的**多重身份验证（MFA）**部分中，选择**分配 MFA 设备**。

1. 在向导中，键入 **Device name**（设备名称），选择 **Hardware TOTP token**（硬件 TOTP 令牌），然后选择 **Next**（下一步）。

1. 键入设备序列号。序列号通常位于设备的背面。

1. 在 **MFA code 1 (MFA 代码 1)** 框中，输入 MFA 设备显示的六位数编码。您需要按设备正面的按钮来显示编码。  
![\[IAM 控制面板，MFA 设备\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/MFADevice.png)

1. 在设备刷新期间等候 30 秒，然后在 **MFA code 2 (MFA 代码 2)** 框中键入第二个六位数编码。您需要再次按设备正面的按钮来显示第二个编码。

1. 选择 **Add MFA**（添加 MFA）。
**重要**  
在生成身份验证代码后立即提交您的请求。如果生成代码后等待很长时间才提交请求，MFA 设备会成功与用户关联，但 MFA 设备无法同步。这是因为基于时间的一次性密码（TOTP）很快会过期。这种情况下，您可以[重新同步设备](id_credentials_mfa_sync.md)。

设备已准备就绪，可在 AWS 上使用。有关在 AWS 管理控制台上使用 MFA 的信息，请参阅 [已启用 MFA 的登录](console_sign-in-mfa.md)。

## 为其他 IAM 用户启用硬件 TOTP 令牌（控制台）
<a name="enable-hw-mfa-for-iam-user"></a>

 您可以从 AWS 管理控制台 为其他 IAM 用户启用硬件 TOTP 令牌。

**为其他 IAM 用户启用硬件 TOTP 令牌（控制台）**

1. 登录 AWS 管理控制台，单击 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**用户**。

1. 选择要为其启用 MFA 的用户的名称。

1. 选择 **Security Credentials (安全凭证)** 选项卡。在 **Multi-factor authentication (MFA)** [多重身份验证（MFA）] 部分中，选择 **Assign MFA device**（分配 MFA 设备）。

1. 在向导中，键入 **Device name**（设备名称），选择 **Hardware TOTP token**（硬件 TOTP 令牌），然后选择 **Next**（下一步）。

1. 键入设备序列号。序列号通常位于设备的背面。

1. 在 **MFA code 1 (MFA 代码 1)** 框中，输入 MFA 设备显示的六位数编码。您需要按设备正面的按钮来显示编码。  
![\[IAM 控制面板，MFA 设备\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/MFADevice.png)

1. 在设备刷新期间等候 30 秒，然后在 **MFA code 2 (MFA 代码 2)** 框中键入第二个六位数编码。您需要再次按设备正面的按钮来显示第二个编码。

1. 选择 **Add MFA**（添加 MFA）。
**重要**  
在生成身份验证代码后立即提交您的请求。如果生成代码后等待很长时间才提交请求，MFA 设备会成功与用户关联，但 MFA 设备无法同步。这是因为基于时间的一次性密码（TOTP）很快会过期。这种情况下，您可以[重新同步设备](id_credentials_mfa_sync.md)。

设备已准备就绪，可在 AWS 上使用。有关在 AWS 管理控制台上使用 MFA 的信息，请参阅 [已启用 MFA 的登录](console_sign-in-mfa.md)。

## 替换物理 MFA 设备
<a name="replace-phys-mfa"></a>

您一次最多可以向您的 AWS 账户根用户 和 IAM 用户分配 8 台[当前支持的 MFA 类型](https://aws.amazon.com/iam/features/mfa/)任意组合的 MFA 设备。如果用户丢失设备或出于任何原因需要替换它，您必须先停用旧设备。然后，您可以为用户添加新设备。
+ 要停用当前与用户关联的设备，请参阅[停用 MFA 设备](id_credentials_mfa_disable.md)。
+ 要为 IAM 用户添加替代用硬件 TOTP 令牌，请按照本主题前面部分的过程 [为其他 IAM 用户启用硬件 TOTP 令牌（控制台）](#enable-hw-mfa-for-iam-user) 中的步骤进行操作。
+ 要为 AWS 账户根用户 添加替代用硬件 TOTP 令牌，请按照本主题前面部分的过程 [为根用户启用硬件 TOTP 令牌（控制台）](enable-hw-mfa-for-root.md) 中的步骤进行操作。

# 在 AWS CLI 或 AWS API 中分配 MFA 设备
<a name="id_credentials_mfa_enable_cliapi"></a>

您可以使用 AWS CLI 命令或 AWS API 操作为 IAM 用户启用虚拟 MFA 设备。您无法使用 AWS CLI、AWS API、Tools for Windows PowerShell 或任何其他命令行工具为 AWS 账户根用户 启用 MFA 设备。不过，可以使用 AWS 管理控制台 为根用户启用 MFA 设备。

当您从 AWS 管理控制台启用 MFA 设备时，控制台会为您执行多个步骤。如果您改用 AWS CLI、Tools for Windows PowerShell 或 AWS API 创建虚拟设备，则必须按正确的顺序手动执行这些步骤。例如，要创建虚拟 MFA 设备，您必须创建 IAM 对象，将代码提取为字符串或 QR 代码图形。然后，您必须同步该设备并将其与 IAM 用户关联。有关更多详细信息，请参阅 [New-IAMVirtualMFADevice](https://docs.aws.amazon.com/powershell/latest/reference/Index.html?page=New-IAMVirtualMFADevice.html&tocid=New-IAMVirtualMFADevice) 的 **Examples**（示例）部分。对于物理设备，您可以跳过创建步骤，直接同步该设备并将其与用户关联。

您可以将标签附加到 IAM 资源（包括虚拟 MFA 设备），以识别、组织和控制对这些资源的访问。只有在使用 AWS CLI 或 AWS API 时，才能标记虚拟 MFA 设备。

使用 SDK 或 CLI 的 IAM 用户可以通过调用 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableMFADevice.html) 来启用其他 MFA 设备，也可以通过调用 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeactivateMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeactivateMFADevice.html) 来停用现有的 MFA 设备。要成功执行此操作，用户必须首先调用 [https://docs.aws.amazon.com/STS/latest/APIReference/API_GetSessionToken.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetSessionToken.html) 并使用一个现有的 MFA 设备提交 MFA 代码。此调用将会返回临时安全凭证，然后才可以使用这些凭证对需要 MFA 身份验证的 API 操作进行签名。有关示例请求和响应，请参阅 [`GetSessionToken`– 不可信环境中用户的临时凭证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_getsessiontoken)。

**在 IAM 中创建虚拟设备实体来代表虚拟 MFA 设备**  
这些命令提供在以下很多命令中代替序列号的设备 ARN。
+ AWS CLI: [https://docs.aws.amazon.com/cli/latest/reference/iam/create-virtual-mfa-device.html](https://docs.aws.amazon.com/cli/latest/reference/iam/create-virtual-mfa-device.html) 
+ AWS API：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateVirtualMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateVirtualMFADevice.html)

**启用 MFA 设备，以便在 AWS 上使用**  
这些命令将设备与 AWS 同步，并将其与用户关联。如果设备是虚拟设备，则将虚拟设备的 ARN 用作序列号。

**重要**  
在生成身份验证代码后立即提交您的请求。如果生成代码后等待很长时间才提交请求，MFA 设备会成功与用户关联，但 MFA 设备无法同步。这是因为基于时间的一次性密码（TOTP）很快会过期。如果发生这种情况，可以使用下面介绍的命令重新同步设备。
+ AWS CLI: [https://docs.aws.amazon.com/cli/latest/reference/iam/enable-mfa-device.html](https://docs.aws.amazon.com/cli/latest/reference/iam/enable-mfa-device.html) 
+ AWS API：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableMFADevice.html)

**停用设备**  
使用这些命令可取消设备与用户的关联并停用设备。如果设备是虚拟设备，则将虚拟设备的 ARN 用作序列号。您还必须单独删除虚拟设备实体。
+ AWS CLI: [https://docs.aws.amazon.com/cli/latest/reference/iam/deactivate-mfa-device.html](https://docs.aws.amazon.com/cli/latest/reference/iam/deactivate-mfa-device.html) 
+ AWS API：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeactivateMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeactivateMFADevice.html)

**列出虚拟 MFA 设备实体**  
使用以下命令列出虚拟 MFA 设备实体。
+ AWS CLI: [https://docs.aws.amazon.com/cli/latest/reference/iam/list-virtual-mfa-devices.html](https://docs.aws.amazon.com/cli/latest/reference/iam/list-virtual-mfa-devices.html) 
+ AWS API：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListVirtualMFADevices.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListVirtualMFADevices.html)

**要标记虚拟 MFA 设备**  
使用这些命令来标记虚拟 MFA 设备。
+ AWS CLI: [https://docs.aws.amazon.com/cli/latest/reference/iam/tag-mfa-device.html](https://docs.aws.amazon.com/cli/latest/reference/iam/tag-mfa-device.html) 
+ AWS API：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_TagMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_TagMFADevice.html)

**要为虚拟 MFA 设备列出标签**  
使用这些命令列出附加到虚拟 MFA 设备的标签。
+ AWS CLI: [https://docs.aws.amazon.com/cli/latest/reference/iam/list-mfa-device-tags.html](https://docs.aws.amazon.com/cli/latest/reference/iam/list-mfa-device-tags.html) 
+ AWS API：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListMFADeviceTags.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListMFADeviceTags.html)

**要取消虚拟 MFA 设备的标签**  
使用这些命令删除附加到虚拟 MFA 设备的标签。
+ AWS CLI: [https://docs.aws.amazon.com/cli/latest/reference/iam/untag-mfa-device.html](https://docs.aws.amazon.com/cli/latest/reference/iam/untag-mfa-device.html) 
+ AWS API：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_UntagMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UntagMFADevice.html)

**重新同步 MFA 设备**  
如果设备生成的代码不被 AWS 接受，则使用这些命令。如果设备是虚拟设备，则将虚拟设备的 ARN 用作序列号。
+ AWS CLI: [https://docs.aws.amazon.com/cli/latest/reference/iam/resync-mfa-device.html](https://docs.aws.amazon.com/cli/latest/reference/iam/resync-mfa-device.html) 
+ AWS API：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_ResyncMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ResyncMFADevice.html)

**删除 IAM 中的虚拟 MFA 设备实体**  
在取消设备与用户的关联后，可以删除设备实体。
+ AWS CLI: [https://docs.aws.amazon.com/cli/latest/reference/iam/delete-virtual-mfa-device.html](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-virtual-mfa-device.html) 
+ AWS API：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteVirtualMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteVirtualMFADevice.html)

**恢复丢失或无法正常工作的虚拟 MFA 设备**  
有时，托管虚拟 MFA 应用程序的用户设备丢失、更换或无法正常工作。在这种情况下，用户无法自行将其恢复。该用户必须与管理员联系，才能将设备停用。有关更多信息，请参阅 [在 IAM 中恢复受 MFA 保护的身份](id_credentials_mfa_lost-or-broken.md)。

# 检查 MFA 状态
<a name="id_credentials_mfa_checking-status"></a>

使用 IAM 控制台检查 AWS 账户根用户 或 IAM 用户是否启用了有效的 MFA 设备。

**检查根用户的 MFA 状态**

1. 使用您的根用户凭证登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在右上角的导航栏中，选择您的用户名，然后选择 **Security credentials**（安全凭证）。

1. 在 **Multi-Factor Authentication (MFA)** 下查看 MFA 是已启用还是已禁用。如果尚未激活 MFA，系统会显示一个提醒符号 (![\[Alert icon\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/console-alert-icon.console.png))。

如果要为账户启用 MFA，请参阅以下章节之一：
+ [为根用户启用虚拟 MFA 设备（控制台）](enable-virt-mfa-for-root.md)
+ [为根用户启用密钥或安全密钥（控制台）](enable-fido-mfa-for-root.md)
+ [为根用户启用硬件 TOTP 令牌（控制台）](enable-hw-mfa-for-root.md)

**检查 IAM 用户的 MFA 状态**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择 **Users**（用户）。

1. 如有必要，请通过完成以下步骤来将 **MFA** 列添加到用户表中：

   1. 在最右侧的表上方，选择设置图标 (![\[Settings icon\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/console-settings-icon.console.png))。

   1. 在 **Manage Columns** 中，选择 **MFA**。

   1. （可选）清除不希望在用户表中显示的任何列标题的复选框。

   1. 选择 **Close** 返回到用户列表。

1. **MFA** 列告知您 MFA 设备的启用情况。如果用户没有处于活动状态的 MFA 设备，控制台将显示 **None**（无）。如果用户启用了 MFA 设备，则 **MFA** 列将显示启用的设备类型，并附上值 **Virtual**（虚拟）、**Security key**（安全密钥）、**Hardware**（硬件）或 **SMS**（短信）。
**注意**  
AWS 已终止对短信多重身份验证（MFA）的支持。我们建议拥有使用基于短信的 MFA 的 IAM 用户的客户切换到以下替代方法之一：[虚拟（基于软件）MFA 设备](id_credentials_mfa_enable_virtual.md)、[FIDO 安全密钥](id_credentials_mfa_enable_fido.md)或[硬件 MFA 设备](id_credentials_mfa_enable_physical.md)。您可以确定账户中拥有已分配短信 MFA 设备的用户。为此，请转到 IAM 控制台，从导航窗格中选择**用户**，然后在表的 **MFA** 列中查找具有 **SMS** 的用户。

1. 要查看有关用户的 MFA 设备的其他信息，请选择要检查其 MFA 状态的用户的名称，然后选择 **Security credentials** 选项卡。

1. 如果用户没有处于活动状态的 MFA 设备，控制台将显示**无 MFA 设备。在**多重身份验证（MFA）**部分中分配 MFA 设备以提高 AWS 环境的安全性**。如果用户启用了 MFA 设备，则 **Multi-factor authentication (MFA)** [多重身份验证（MFA）] 部分显示有关这些设备的详细信息：
   + 设备名称
   + 设备类型
   + 设备的标识符，例如物理设备的设备序列号或虚拟设备的 AWS 中的 ARN
   + 何时创建设备

要删除或重新同步设备，请选择设备旁边的单选按钮，然后选择 **Remove**（删除）或 **Resync**（重新同步）。

有关启用 MFA 的更多信息，请参阅以下章节：
+ [在 AWS 管理控制台 中分配虚拟 MFA 设备](id_credentials_mfa_enable_virtual.md)
+ [在 AWS 管理控制台 中分配密钥或安全密钥](id_credentials_mfa_enable_fido.md)
+ [在 AWS 管理控制台 中分配硬件 TOTP 令牌](id_credentials_mfa_enable_physical.md)

# 重新同步虚拟和硬件 MFA 设备
<a name="id_credentials_mfa_sync"></a>

您可以使用 AWS 重新同步虚拟和硬件 Multi-Factor Authentication (MFA) 设备。如果您尝试使用的设备并未同步，则将导致用户的登录尝试失败，IAM 会提示您重新同步设备。

**注意**  
FIDO 安全密钥不同步。如果 FIDO 安全密钥丢失或损坏，您可以将其停用。有关停用任何 MFA 设备类型的说明，请参阅[停用其他 IAM 用户的 MFA 设备（控制台）](id_credentials_mfa_disable.md#deactivate-mfa-for-user)。

作为 AWS 管理员，您可以重新同步您的 IAM 用户无法同步的虚拟和硬件 MFA 设备。

如果您的 AWS 账户根用户 MFA 设备不工作，可以使用 IAM 控制台重新同步该设备（完成登录过程与否均可实现）。如果您无法成功地重新同步设备，则可能需要取消关联并重新关联该设备。有关此操作的更多信息，请参阅 [停用 MFA 设备](id_credentials_mfa_disable.md) 和 [IAM 中的 AWS 多重身份验证](id_credentials_mfa.md)。

**Topics**
+ [所需权限](#id_credentials_mfa_sync_console-permissions-required)
+ [重新同步虚拟和硬件 MFA 设备（IAM 控制台）](#id_credentials_mfa_sync_console)
+ [重新同步虚拟和硬件 MFA 设备 (AWS CLI)](#id_credentials_mfa_sync_cli)
+ [重新同步虚拟和硬件 MFA 设备 (AWS API)](#id_credentials_mfa_sync_api)

## 所需权限
<a name="id_credentials_mfa_sync_console-permissions-required"></a>

要为您自己的 IAM 用户重新同步虚拟或硬件 MFA 设备，您必须具有以下策略的权限。此策略不允许您创建或停用设备。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowListActions",
            "Effect": "Allow",
            "Action": [
                "iam:ListVirtualMFADevices"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowUserToViewAndManageTheirOwnUserMFA",
            "Effect": "Allow",
            "Action": [
                "iam:ListMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "BlockAllExceptListedIfNoMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:ListMFADevices",
                "iam:ListVirtualMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}
```

------

## 重新同步虚拟和硬件 MFA 设备（IAM 控制台）
<a name="id_credentials_mfa_sync_console"></a>

您可以使用 IAM 控制台重新同步虚拟和硬件 MFA 设备。

**重新同步您自己 IAM 用户的虚拟或硬件 MFA 设备（控制台）**

1. 使用 AWS 账户 ID 或账户别名、您的 IAM 用户名和密码登录到 [IAM 控制台](https://console.aws.amazon.com/iam)。
**注意**  
为方便起见，AWS登录页面使用浏览器 Cookie 记住您的 IAM 用户名和账户信息。如果您之前以其他用户身份登录，请选择页面底部的 **Sign-in to a different account**（登录到其他账户）以返回主登录页面。在此处，您可以输入要重新导向到您账户 IAM 用户登录页面的 AWS 账户 ID 或账户别名。

   要获取 AWS 账户 ID，请联系管理员。

1. 在右上角的导航栏中，选择您的用户名，然后选择 **Security credentials**（安全凭证）。  
![\[AWS 管理控制台安全凭证链接\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/security-credentials-user.shared.console.png)

1. 在 **AWS IAM 凭证**选项卡的**多重身份验证（MFA）**部分中，选择 MFA 设备旁边的单选按钮，然后选择**重新同步**。

1. 依次将设备上按顺序生成的两个代码键入 **MFA code 1 (MFA 代码 1)** 和 **MFA code 2 (MFA 代码 2)** 中。然后选择 **Resync**（重新同步）。
**重要**  
生成代码之后立即提交您的请求。如果您生成代码，然后等待了很长时间才提交请求，则请求看起来有效，但实际上设备仍然不同步。这是因为基于时间的一次性密码（TOTP）很快会过期。

**重新同步其他 IAM 用户的虚拟或硬件 MFA 设备（控制台）**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择 **Users**，然后选择其 MFA 设备需要重新同步的用户的名称。

1. 选择**安全凭证**选项卡。在**多重身份验证（MFA）**部分中，选择 MFA 设备旁边的单选按钮，然后选择**重新同步**。

1. 依次将设备上按顺序生成的两个代码键入 **MFA code 1 (MFA 代码 1)** 和 **MFA code 2 (MFA 代码 2)** 中。然后选择 **Resync**（重新同步）。
**重要**  
生成代码之后立即提交您的请求。如果您生成代码，然后等待了很长时间才提交请求，则请求看起来有效，但实际上设备仍然不同步。这是因为基于时间的一次性密码（TOTP）很快会过期。

**在登录前重新同步您的根用户 MFA（控制台）**

1. 在 **Amazon Web Services Sign In With Authentication Device**（亚马逊云科技使用身份验证设备登录）页面上，选择 **Having problems with your authentication device?（身份验证设备出现问题？） Click here**（点击此处）。
**注意**  
您可能会看到不同的文本，例如**使用 MFA 登录**和**排除您的身份验证设备故障**。不过，它们提供了相同的功能。

1. 在 **Re-Sync With Our Servers (与服务器重新同步)** 部分中，依次将设备上按顺序生成的两个代码键入 **MFA code 1 (MFA 代码 1)** 和 **MFA code 2 (MFA 代码 2)** 中。然后选择 **Re-sync authentication device**。

1. 如有必要，请再次键入您的密码，然后选择**登录**。然后使用您的 MFA 设备完成登录。

**在登录后重新同步您的根用户 MFA 设备（控制台）**

1. 选择 **Root user**（根用户）并输入您的 AWS 账户 电子邮件地址，以账户拥有者身份登录 [IAM 控制台](https://console.aws.amazon.com/iam/)。在下一页上，输入您的密码。
**注意**  
作为根用户，您无法登录到**以 IAM 用户身份登录**页面。如果您看到**以 IAM 用户身份登录**页面，请选择该页面底部附近的**使用根用户电子邮件登录**。要获取以根用户身份登录方面的帮助，请参阅《AWS 登录 用户指南》**中的[以根用户身份登录 AWS 管理控制台](https://docs.aws.amazon.com/signin/latest/userguide/introduction-to-          root-user-sign-in-tutorial.html)。

1. 在导航栏的右侧选择您的账户名称，然后选择 **Security credentials**（安全凭证）。如有必要，选择 **Continue to Security Credentials**（继续使用安全凭证）。  
![\[导航菜单中的安全凭证\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/security-credentials-root.shared.console.png)

1. 展开页面上的 **Multi-factor authentication (MFA) (多重身份验证)** 部分。

1. 选中设备旁边的单选按钮，然后选择 **Resync**（重新同步）。

1. 在 **Resync MFA device**（重新同步 MFA 设备）对话框中，依次将设备上按顺序生成的两个代码键入 **MFA code 1**（MFA 代码 1）和 **MFA code 2**（MFA 代码 2）中。然后选择 **Resync**（重新同步）。
**重要**  
生成代码之后立即提交您的请求。如果生成代码后等待很长时间才提交请求，MFA 设备会成功与用户关联，但 MFA 设备无法同步。这是因为基于时间的一次性密码（TOTP）很快会过期。

## 重新同步虚拟和硬件 MFA 设备 (AWS CLI)
<a name="id_credentials_mfa_sync_cli"></a>

您可以从 AWS CLI 重新同步虚拟和硬件 MFA 设备。

**重新同步 IAM 用户的虚拟或硬件 MFA 设备 (AWS CLI)**  
在命令提示符处，发布 [aws iam resync-mfa-device](https://docs.aws.amazon.com/cli/latest/reference/iam/resync-mfa-device.html) 命令：
+ 虚拟 MFA 设备：将设备的 Amazon Resource Name (ARN) 指定为序列号。

  ```
  aws iam resync-mfa-device --user-name Richard --serial-number arn:aws:iam::123456789012:mfa/RichardsMFA --authentication-code1 123456 --authentication-code2 987654
  ```
+ 硬件 MFA 设备：将硬件设备的序列号指定为序列号。格式因供应商而异。例如，您可以从 Amazon 购买 gemalto 令牌。它的序列号通常是四个字母，后跟四个数字。

  ```
  aws iam resync-mfa-device --user-name Richard --serial-number ABCD12345678 --authentication-code1 123456 --authentication-code2 987654
  ```

**重要**  
生成代码之后立即提交您的请求。如果您生成代码，然后等待了很长时间才提交请求，则请求将失败，因为代码很快就会过期。

## 重新同步虚拟和硬件 MFA 设备 (AWS API)
<a name="id_credentials_mfa_sync_api"></a>

IAM 有一个执行同步的 API 调用。在这种情况下，建议您授予虚拟和硬件 MFA 设备用户访问此 API 调用的权限。然后，基于此 API 调用构建工具，这样您的用户即可随时根据需要重新同步其设备。

**重新同步 IAM 用户的虚拟或硬件 MFA 设备 (AWS API)**
+ 发送 [ResyncMFADevice](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ResyncMFADevice.html) 请求。

# 停用 MFA 设备
<a name="id_credentials_mfa_disable"></a>

如果您在使用多重身份验证（MFA）设备作为 IAM 用户登录时遇到问题，请与管理员联系以获取帮助。

作为管理员，您可以停用其他 IAM 用户的设备。此操作允许用户不使用 MFA 登录。如果 MFA 设备已更换或设备暂时不可用，您可以将此作为临时解决方案。但是，我们建议您尽快为用户启用新设备。要了解如何启用新 MFA 设备，请参阅 [IAM 中的 AWS 多重身份验证](id_credentials_mfa.md)。

**注意**  
如果您使用 API 或 AWS CLI 从 AWS 账户 中删除用户，您必须停用或删除用户的 MFA 设备。您在删除用户的过程中执行此更改。有关删除用户的更多信息，请参阅 [移除或停用 IAM 用户](id_users_remove.md)。

**Topics**
+ [停用 MFA 设备（控制台）](#deactive-mfa-console)
+ [停用 MFA 设备 (AWS CLI)](#deactivate-mfa-cli)
+ [停用 MFA 设备 (AWS API)](#deactivate-mfa-api)

## 停用 MFA 设备（控制台）
<a name="deactive-mfa-console"></a><a name="deactivate-mfa-for-user"></a>

**停用其他 IAM 用户的 MFA 设备（控制台）**

1. 登录 AWS 管理控制台，单击 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**用户**。

1. 要停用用户的 MFA 设备，请选择要删除其 MFA 的用户的名称。

1. 选择**安全凭证**选项卡。

1. 在**多重身份验证（MFA）**下，选择 MFA 设备旁边的单选按钮，选择**删除**，然后选择**删除**。

   随即从 AWS 中删除该设备。该设备将不能用于登录或验证请求，直到它重新激活并与 AWS 用户或 AWS 账户根用户 相关联。<a name="deactivate-mfa-for-root"></a>

**取消激活 AWS 账户根用户的 MFA 设备（控制台）**

1. 选择 **Root user**（根用户）并输入您的 AWS 账户 电子邮件地址，以账户拥有者身份登录 [IAM 控制台](https://console.aws.amazon.com/iam/)。在下一页上，输入您的密码。
**注意**  
作为根用户，您无法登录到**以 IAM 用户身份登录**页面。如果您看到**以 IAM 用户身份登录**页面，请选择该页面底部附近的**使用根用户电子邮件登录**。要获取以根用户身份登录方面的帮助，请参阅《AWS 登录 用户指南》**中的[以根用户身份登录 AWS 管理控制台](https://docs.aws.amazon.com/signin/latest/userguide/introduction-to-          root-user-sign-in-tutorial.html)。

1. 在导航栏的右侧选择您的账户名称，然后选择 **Security credentials**（安全凭证）。如有必要，选择 **Continue to Security Credentials**（继续使用安全凭证）。  
![\[导航菜单中的安全凭证\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/security-credentials-root.shared.console.png)

1. 在 **Multi-factor authentication (MFA)** [多重身份验证（MFA）] 部分中，选择要停用的 MFA 设备旁边的单选按钮，然后选择 **Remove**（删除）。

1. 选择**移除 **。

   AWS 账户 的 MFA 设备已停用。检查与您的 AWS 账户 相关联的电子邮件邮箱中有无来自 Amazon Web Services 的确认邮件。该电子邮件向您通知 Amazon Web Services 多重验证 (MFA) 已停用。邮件将来自 `@amazon.com` 或 `@aws.amazon.com`。

**注意**  
当您通过 AWS 管理控制台或在登录过程中添加新的虚拟 MFA 设备时，系统会删除您 AWS 账户中未分配的虚拟 MFA 设备。未分配的虚拟 MFA 设备是指您账户中的设备，但在登录过程中不被账户根用户或 IAM 用户使用。已删除这些设备，因此可以向您的账户添加新的虚拟 MFA 设备。它还允许您重复使用设备名称。

## 停用 MFA 设备 (AWS CLI)
<a name="deactivate-mfa-cli"></a>

**停用 IAM 用户的 MFA 设备 (AWS CLI)**
+ 运行以下命令：[https://docs.aws.amazon.com/cli/latest/reference/iam/deactivate-mfa-device.html](https://docs.aws.amazon.com/cli/latest/reference/iam/deactivate-mfa-device.html)

## 停用 MFA 设备 (AWS API)
<a name="deactivate-mfa-api"></a>

**停用 IAM 用户的 MFA 设备 (AWS API)**
+ 调用此操作：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeactivateMFADevice.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeactivateMFADevice.html)

# 在 IAM 中恢复受 MFA 保护的身份
<a name="id_credentials_mfa_lost-or-broken"></a>

若[虚拟 MFA 设备](id_credentials_mfa_enable_virtual.md)或[硬件 TOTP 令牌](id_credentials_mfa_enable_physical.md)似乎运行正常，但您却无法使用它访问 AWS 资源，则可能是与 AWS 不同步所导致的。有关同步虚拟 MFA 设备或硬件 MFA 设备的信息，请参阅[重新同步虚拟和硬件 MFA 设备](id_credentials_mfa_sync.md)。[FIDO 安全密钥](id_credentials_mfa_enable_fido.md)不同步。

如果 AWS 账户根用户 的 [MFA 设备](id_credentials_mfa.md)丢失、损坏或无法工作，您可以恢复账户访问权限。IAM 用户必须与管理员联系，才能将装置停用。

**重要**  
建议您激活多台 MFA 设备。注册多台 MFA 设备有助于确保在设备丢失或损坏时继续访问。您的 AWS 账户根用户 和 IAM 用户最多可以注册 8 台任何类型的 MFA 设备。

## 先决条件 – 使用其他 MFA 设备
<a name="mfa-lost-or-broken-prerequisites"></a>

如果您的[多重身份验证（MFA）设备](id_credentials_mfa.md)丢失、损坏或无法正常工作，您可以使用已注册到同一根用户或 IAM 用户的另一台 MFA 设备登录。

**要使用其他 MFA 设备登录**

1. 使用您的 AWS 账户 ID 或账户别名和密码登录 [AWS 管理控制台](url-comsole-domain;iam)。

1. 在**需要其他验证**页面或**多重身份验证**页面上，选择**尝试另一种 MFA 方法**。

1. 使用您选择的 MFA 设备类型进行身份验证。

1. 根据您是否使用备用 MFA 设备成功登录，下一步会有所不同。
   + 如果您已成功登录，则可以 [重新同步虚拟和硬件 MFA 设备](id_credentials_mfa_sync.md)，这可能会解决问题。如果 MFA 设备丢失或损坏，则您可以将其停用。有关停用任何 MFA 设备类型的说明，请参阅[停用 MFA 设备](id_credentials_mfa_disable.md)。
   + 如果您无法使用 MFA 登录，则请使用 [恢复根用户用户 MFA 设备](#root-mfa-lost-or-broken) 或 [恢复 IAM 用户 MFA 设备](#iam-user-mfa-lost-or-broken) 中的步骤恢复受 MFA 保护的身份。



## 恢复根用户用户 MFA 设备
<a name="root-mfa-lost-or-broken"></a>

如果您无法使用 MFA 登录，则可以使用其他身份验证方法登录，方法是使用在您的账户中注册的电子邮件和主要联系电话号码验证您的身份。

作为根用户使用替代的身份验证因素登录之前，确认您能够访问与您的账户关联的电子邮件和主要联系人电话号码。如果您需要更新主要联系人电话号码，则请以具有*管理员*访问权限的 IAM 用户身份而非根用户身份登录。有关更新账户联系信息的其他说明，请参阅《*AWS Billing 用户指南*》中的[编辑联系信息](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-update-contact-primary.html)。如果您无权访问电子邮件和主要联系人电话号码，则必须联系 [AWS 支持](https://support.aws.amazon.com/#/contacts/aws-mfa-support)。

**重要**  
我们建议您不断更新与根用户关联的电子邮件地址和联系电话号码，以便成功恢复账户。有关更多信息，请参阅《AWS 账户管理 参考指南》中的 [更新 AWS 账户的主要联系人](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-update-contact-primary.html)**。

**使用替代的身份验证因素作为 AWS 账户根用户登录**

1.  选择**根用户**并输入您的 AWS 账户 电子邮件地址，以账户拥有者身份登录。[AWS 管理控制台](https://console.aws.amazon.com/)在下一页上，输入您的密码。

1. 在**需要其他验证**页面上，选择要用于身份验证的 MFA 方法，然后选择**下一步**。
**注意**  
可能会显示替代文本，例如 **Sign in using MFA**（使用 MFA 登录）、**Troubleshoot your authentication device**（对身份验证设备进行故障排除）或 **Troubleshoot MFA**（对 MFA 进行故障排除），但其功能均相同。如果您无法使用替代身份验证因素验证您的账户电子邮件地址和主要联系人电话号码，则请与 [AWS 支持](https://support.aws.amazon.com/#/contacts/aws-mfa-support) 联系以停用您的 MFA 设备。

1. 根据您使用的 MFA 类型，您将看到不同的页面，但是 **MFA 问题排查**选项的功能相同。在**需要其他验证**页面或**多重身份验证**页面上，选择 **MFA 问题排查**。

1. 如果需要，请再次键入您的密码，然后选择 **Sign in**。

1. 在**身份验证设备问题排查**页面的**使用替代身份验证因素登录**部分中，选择**使用替代因素登录**。

1. **使用替代身份验证因素登录**页面上，通过验证电子邮件地址完成账户身份验证，然后选择**发送验证电子邮件**。

1. 检查与您的 AWS 账户 关联的电子邮件中有无来自 Amazon Web Services（recover-mfa-no-reply@verify.signin.aws）的邮件。按照电子邮件中的指导进行操作。

   如果您没有在账户中看到该电子邮件，请检查垃圾邮件文件夹，或者返回到浏览器并选择 **Resend the email**。

1. 在验证您的电子邮件地址后，您可以继续验证您的账户的身份。要验证您的主要联系人电话号码，请选择 **Call me now**（立即呼叫我）。

1. 接听 AWS 打来的电话，在听到提示时，在手机键盘上输入从 AWS 网站获得的 6 位数号码。

   如果您没有接到 AWS 打来的电话，请选择 **Sign in (登录)** 以再次登录到控制台并重新开始。或者，请参阅[多重身份验证（MFA）设备丢失或无法使用](https://support.aws.amazon.com/#/contacts/aws-mfa-support)联系支持人员以获取帮助。

1. 在验证您的电话号码后，您可以通过选择 **Sign in to the console** 登录到您的账户。

1. 下一步取决于您使用的 MFA 的类型：
   + 对于虚拟 MFA 设备，请从您的设备中删除账户。然后，转至 [AWS Security Credentials](https://console.aws.amazon.com/iam/home?#security_credential) 页面并删除旧的 MFA 虚拟设备实体，然后再创建一个新的。
   + 对于 FIDO 安全密钥，请转至 [AWS Security Credentials](https://console.aws.amazon.com/iam/home?#security_credential)（安全凭证）页面并停用旧 FIDO 密钥然后再启用一个新密钥。
   + 对于硬件 TOTP 令牌，请联系第三方提供商以帮助您修复或更换设备。您可以继续使用替代的身份验证因素登录，直到您收到新设备为止。在您拥有新的硬件 MFA 设备后，请转至 [AWS 安全凭证](https://console.aws.amazon.com/iam/home?#security_credential)页面并删除旧的 MFA 设备。
**注意**  
不必将丢失或被盗的 MFA 设备替换为相同类型的设备。例如，如果 FIDO 安全密钥损坏，您订购了一个新的密钥，则可以使用虚拟 MFA 或硬件 TOTP 令牌，直到新 FIDO 安全密钥到达。

**重要**  
如果您的 MFA 设备丢失或被盗，则请在登录并建立替换 MFA 设备后更改您的根用户密码。攻击者可能窃取了身份验证设备，也可能拥有您当前的密码。有关更多信息，请参阅 [更改AWS 账户根用户密码](root-user-password.md)。

## 恢复 IAM 用户 MFA 设备
<a name="iam-user-mfa-lost-or-broken"></a>

如果您是无法使用 MFA 登录的 IAM 用户，则无法自行恢复 MFA 设备。您必须与管理员联系，才能将设备停用。然后，您可以启用新设备。

**作为 IAM 用户获取有关 MFA 设备的帮助**

1. 请联系 AWS 管理员或其他为您提供 IAM 用户的用户名和密码的相关人员。管理员必须停用 MFA 设备 (如[停用 MFA 设备](id_credentials_mfa_disable.md)中所述)，以便您能够登录。

1. 下一步取决于您使用的 MFA 的类型：
   + 对于虚拟 MFA 设备，请从您的设备中删除账户。然后，启用虚拟设备，如[在 AWS 管理控制台 中分配虚拟 MFA 设备](id_credentials_mfa_enable_virtual.md)中所述。
   + 对于 FIDO 安全密钥，请联系第三方提供商帮助您更换设备。当您收到新的 FIDO 安全密钥时，请将其启用，如 [在 AWS 管理控制台 中分配密钥或安全密钥](id_credentials_mfa_enable_fido.md) 中所述。
   + 对于硬件 TOTP 令牌，请联系第三方提供商以帮助您修复或更换设备。在您拥有新的物理 MFA 设备后，请启用设备，如[在 AWS 管理控制台 中分配硬件 TOTP 令牌](id_credentials_mfa_enable_physical.md)中所述。
**注意**  
不必将丢失或被盗的 MFA 设备替换为相同类型的设备。您最多可以拥有 8 台任意组合的 MFA 设备。例如，如果 FIDO 安全密钥损坏，您订购了一个新的密钥，则可以使用虚拟 MFA 或硬件 TOTP 令牌，直到新 FIDO 安全密钥到达。

1. 如果您的 MFA 设备丢失或被盗，还请更改密码，以防攻击者盗走您的身份验证设备及还可能拥有您当前的密码。有关更多信息，请参阅 [管理 IAM 用户的密码](id_credentials_passwords_admin-change-user.md)。

# 使用 MFA 保护 API 访问
<a name="id_credentials_mfa_configure-api-require"></a>

利用 IAM policy，可以指定用户可调用哪些 API 操作。您可以通过要求用户使用多重身份验证（MFA）进行身份验证，然后才允许他们执行特别敏感的操作，从而应用额外的安全性。

例如，您可能拥有允许用户执行 Amazon EC2 `RunInstances`、`DescribeInstances` 和 `StopInstances` 操作的策略。但您可能希望限制破坏性操作（如 `TerminateInstances`），并确保用户只能在使用 AWS MFA 设备进行身份验证后执行该操作。

**Topics**
+ [概述](#MFAProtectedAPI-overview)
+ [方案：跨账户委派的 MFA 保护](#MFAProtectedAPI-cross-account-delegation)
+ [方案：当前账户中 API 操作访问的 MFA 保护](#MFAProtectedAPI-user-mfa)
+ [方案：拥有基于资源的策略的资源的 MFA 保护](#MFAProtectedAPI-resource-policies)

## 概述
<a name="MFAProtectedAPI-overview"></a>

向 API 操作添加 MFA 保护包括以下任务：

1. 管理员为每个用户配置 AWS MFA 设备，这些用户必须发出要求 MFA 身份验证的 API 请求。有关更多信息，请参阅 [IAM 中的 AWS 多重身份验证](id_credentials_mfa.md)。

1. 管理员为用户创建包含 `Condition` 元素的策略，以检查用户是否已使用 AWS MFA 设备进行身份验证。

1. 用户会调用支持 MFA 参数的 AWS STS API 操作之一：[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) 或 [GetSessionToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetSessionToken.html)。调用中包含与用户关联的设备的设备标识符，以及该设备生成的基于时间的一次性密码 (TOTP)。在任一情况下，用户都会取回稍后用来向 AWS 发出其他请求的临时安全凭证。
**注意**  
仅在服务支持临时安全凭证时，该服务的 API 操作的 MFA 保护才可用。有关这些服务的列表，请参阅[使用临时安全凭证访问 AWS](https://docs.aws.amazon.com/STS/latest/UsingSTS/UsingTokens.html)。

如果授权失败，AWS 将返回“访问被拒绝”错误消息（与任何未授权的访问一样）。由于采用受 MFA 保护的 API 策略，因此，如果用户在未获得有效的 MFA 身份验证的情况下试图调用 API 操作，则 AWS 将拒绝用户访问策略中指定的 API 操作。如果 API 操作请求的时间戳在策略中指定的允许范围之外，也会拒绝操作。用户必须使用 MFA 代码和设备序列号请求新的临时安全凭证，通过 MFA 重新进行身份验证。

### 带 MFA 条件的 IAM policy
<a name="MFAProtectedAPI-policies"></a>

带 MFA 条件的策略可附加到以下项：
+ 对于 IAM 用户或组：
+ Amazon S3 存储桶、Amazon SQS 队列或 Amazon SNS 主题等资源
+ 可由用户担任的 IAM 角色的信任策略

可使用策略中的 MFA 条件检查以下属性：
+ Existence（存在性）- 如果只是验证用户是否已使用 MFA 进行身份验证，请检查 `aws:MultiFactorAuthPresent` 密钥在 `Bool` 条件中是否为 `True`。仅当用户使用短期凭证验证时，才会有该键。长期凭证，例如访问密钥，不包括此键。
+ Duration (持续时间) - 如果您只希望在 MFA 身份验证后的指定时间内授予访问权限，请使用数值条件类型将 `aws:MultiFactorAuthAge` 密钥的有效期与某个值（如 3600 秒）进行比较。请注意，如果未使用 MFA，则 `aws:MultiFactorAuthAge` 键不会显示。

以下示例说明了 IAM 角色的信任策略，该策略包含一个 MFA 条件，用于测试是否存在 MFA 身份验证。利用此策略，`Principal` 元素中指定的 AWS 账户 中的用户（将 `ACCOUNT-B-ID` 替换为有效的 AWS 账户 ID）能够代入此策略附加的角色。但是，此类用户仅在已使用 MFA 进行身份验证的情况下才能够担任角色。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Principal": {"AWS": "ACCOUNT-B-ID"},
    "Action": "sts:AssumeRole",
    "Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}}
  }
}
```

------

有关 MFA 的条件类型的更多信息，请参阅[AWS 全局条件上下文密钥](reference_policies_condition-keys.md)、[数字条件运算符](reference_policies_elements_condition_operators.md#Conditions_Numeric)和[用于检查条件键是否存在的条件运算符](reference_policies_elements_condition_operators.md#Conditions_Null)。

### 在 GetSessionToken 和 AssumeRole 之间选择
<a name="scenarios"></a>

AWS STS 提供了两个 API 操作，可供用户传递 MFA 信息：`GetSessionToken` 和 `AssumeRole`。用户调用哪个 API 操作来获取临时安全凭证，取决于采用以下哪个方案。

**将 `GetSessionToken` 用于以下方案：**
+ 调用访问 AWS 账户 中的资源的 API 操作，该账户与发出请求的 IAM 用户相同。请注意，来自 `GetSessionToken` 请求的临时凭证*仅*在您将 MFA 信息包含在凭证请求中时才能访问 IAM 和 AWS STS API 操作。由于 `GetSessionToken` 返回的临时凭证包含 MFA 信息，因此您可以检查由该凭证发出的单个 API 操作中的 MFA。
+ 访问受基于资源且包含 MFA 条件的策略所保护的资源。

`GetSessionToken` 操作旨在使用 MFA 验证用户身份。您不能使用策略来控制身份验证操作。

**将 `AssumeRole` 用于以下方案：**
+ 调用访问相同或不同 AWS 账户 中的资源的 API 操作。API 调用可包含任何 IAM 或 AWS STS API。请注意，要保护访问，您可以在用户担任角色时强制执行 MFA。由 `AssumeRole` 返回的临时凭证未将 MFA 信息包含在上下文中，因此您无法检查单个 API 操作的 MFA。这就是您必须使用 `GetSessionToken` 限制对受基于资源的策略保护的资源的访问的原因。

**注意**  
IAM 用户使用 MFA 登录时，AWS CloudTrail 日志将包含 MFA 信息。如果 IAM 用户代入某个 IAM 角色，CloudTrail 还将在利用代入角色执行操作的 `sessionContext` 属性中记录 `mfaAuthenticated: true`。但是，当使用代入角色的凭证进行 API 调用时，CloudTrail 日志记录与 IAM 要求的内容是分开的。有关更多信息，请参阅 [CloudTrail userIdentity 元素](https://docs.aws.amazon.com//awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html)。

本文档稍后将提供有关如何实现这些方案的详细信息。

### 有关受 MFA 保护的 API 访问的要点
<a name="MFAProtectedAPI-important-points"></a>

了解 API 操作的 MFA 保护的以下几个方面非常重要：
+ MFA 保护仅通过使用临时安全凭证提供，而该凭证必须使用 `AssumeRole` 或 `GetSessionToken` 获取。
+ 无法将受 MFA 保护的 API 访问与 AWS 账户根用户凭证配合使用。
+ 无法将受 MFA 保护的 API 访问与 U2F 安全密钥配合使用。
+ 将 MFA 设备与 AWS 服务配合使用时，无法向联合身份用户分配这些设备；因此，这些用户无法访问受 MFA 控制的 AWS 资源。(请参阅下一个要点。) 
+ 返回临时凭证的其他 AWS STS API 操作不支持 MFA。对于 `AssumeRoleWithWebIdentity` 和 `AssumeRoleWithSAML`，用户通过外部提供程序进行身份验证，并且 AWS 无法确定该提供程序是否需要 MFA。对于 `GetFederationToken`，MFA 不一定要与特定用户相关联。
+ 同样，长期凭证（IAM 用户访问密钥和根用户访问密钥)）无法用于受 MFA 保护的 API 访问，因为它们不会过期。
+ 此外，可以在没有 MFA 信息的情况下调用 `AssumeRole` 和 `GetSessionToken`。在此情况下，发起人将取回临时安全凭证，但这些临时凭证的会话信息不指示使用 MFA 进行身份验证的用户。
+ 要建立 API 操作的 MFA 保护，可将 MFA 条件添加到策略。策略必须包含 `aws:MultiFactorAuthPresent` 条件键以强制使用 MFA。对于跨账户委派，角色的信任策略必须包含条件键。
+ 如果您允许其他 AWS 账户 访问您账户中的资源，则您的资源安全性取决于受信任账户（另一个账户，而不是您的账户）的配置。即使在您强制实施多重身份验证时，也是如此。有权创建虚拟 MFA 设备的受信任账户中的任何标识都可以构建 MFA 索赔，以满足您角色的信任策略的该部分。在允许其他账户的成员访问必须进行多重身份验证的 AWS 资源之前，您应确保受信任账户的所有者遵循安全最佳实践。例如，受信任账户应仅允许特定的受信任身份访问敏感 API 操作，例如 MFA 设备管理 API 操作。
+ 如果策略包含 MFA 条件，则在以下情况下，将拒绝请求：用户未进行 MFA 身份验证或用户提供了无效的 MFA 设备标识符或无效的 TOTP。

## 方案：跨账户委派的 MFA 保护
<a name="MFAProtectedAPI-cross-account-delegation"></a>

在此方案中，您希望将访问权委托给另一账户中的 IAM 用户，但前提是该用户已使用 AWS MFA 设备进行身份验证。有关跨账户委派的更多信息，请参阅 [角色术语和概念](id_roles.md#id_roles_terms-and-concepts)。

假设您有一个账户 A（拥有待访问资源的信任账户）以及 IAM 用户 Anaya，她拥有管理员权限。她希望向账户 B（受信任账户）中的用户 Richard 授予访问权，但希望确保 Richard 在担任该角色之前已使用 MFA 进行身份验证。

1. 在信任账户 A 中，Anaya 创建一个名为 `CrossAccountRole` 的 IAM 角色，并将该角色的信任策略中的主体设置为账户 B 的账户 ID。此信任策略授予对 AWS STS `AssumeRole` 操作的权限。Anaya 还向信任策略添加 MFA 条件，如以下示例中所示。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": {
       "Effect": "Allow",
       "Principal": {"AWS": "ACCOUNT-B-ID"},
       "Action": "sts:AssumeRole",
       "Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}}
     }
   }
   ```

------

1. Anaya 在该角色中添加一个权限策略，以指定允许该角色执行的操作。具有 MFA 保护的角色权限策略与任何其他角色权限策略没有差别。以下示例说明了 Anaya 添加到角色的策略；该策略允许担任该角色的用户对账户 A 中的表 `Books` 执行任何 Amazon DynamoDB 操作。此策略还允许 `dynamodb:ListTables` 操作，此操作是在控制台中执行操作所必需的。
**注意**  
该权限策略不包含 MFA 条件。了解 MFA 身份验证仅用于确定用户是否可以担任此角色很重要。在用户担任此角色后，将不会进行进一步的 MFA 检查。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "TableActions",
               "Effect": "Allow",
               "Action": "dynamodb:*",
               "Resource": "arn:aws:dynamodb:*:111122223333:table/Books"
           },
           {
               "Sid": "ListTables",
               "Effect": "Allow",
               "Action": "dynamodb:ListTables",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 在受信任账户 B 中，管理员确保已使用 AWS MFA 设备配置 IAM 用户 Richard，并且该用户知道设备的 ID。设备 ID 是序列号（如果是硬件 MFA 设备）或设备的 ARN（如果是虚拟 MFA 设备）。

1. 在账户 B 中，管理员将以下策略附加到用户 Richard（或该用户所在的组），该策略允许该用户调用 `AssumeRole` 操作。资源被设置到 Anaya 在第 1 步中创建的角色的 ARN。注意，该策略不包含 MFA 条件。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sts:AssumeRole"
               ],
               "Resource": [
                   "arn:aws:iam::111122223333:role/CrossAccountRole"
               ]
           }
       ]
   }
   ```

------

1. 在账户 B 中，Richard（或 Richard 正在运行的应用程序）调用 `AssumeRole`。API 调用包含要担任角色的 ARN (`arn:aws:iam::ACCOUNT-A-ID:role/CrossAccountRole`)、MFA 设备的 ID 和 Richard 从其设备中获取的当前 TOTP。

   当 Richard 调用 `AssumeRole` 时，AWS 将确定他是否拥有有效的凭证，包括 MFA 要求。如果是这样的话，Richard 将成功担任角色，并且可在使用角色的临时凭证时对账户 A 中名为 `Books` 的表执行任何 DynamoDB 操作。

   有关调用 `AssumeRole` 的程序的示例，请参阅[使用 MFA 身份验证调用 AssumeRole](id_credentials_mfa_sample-code.md#MFAProtectedAPI-example-assumerole)。

## 方案：当前账户中 API 操作访问的 MFA 保护
<a name="MFAProtectedAPI-user-mfa"></a>

在此方案中，您应确保仅当您 AWS 账户 中的用户已使用 AWS MFA 设备进行身份验证后才能访问敏感 API 操作。

假设您拥有账户 A，其中包含一组需要使用 EC2 实例的开发人员。普通开发人员可以使用实例，但他们未获得 `ec2:StopInstances` 或 `ec2:TerminateInstances` 操作的权限。您希望仅允许几个受信任用户执行这些“破坏性”特权操作，因此您将 MFA 保护添加到允许这些敏感 Amazon EC2 操作的策略中。

在此方案中，用户 Sofía 是受信任用户之一。用户 Anaya 是账户 A 中的管理员。

1. Anaya 确保已使用 AWS MFA 设备配置 Sofía，并且 Sofía 知道该设备的 ID。设备 ID 是序列号（如果是硬件 MFA 设备）或设备的 ARN（如果是虚拟 MFA 设备）。

1. Anaya 创建一个名为 `EC2-Admins` 的组并将用户 Sofía 添加到该组中。

1. Anaya 将以下策略附加到 `EC2-Admins` 组。此策略授予用户调用 Amazon EC2 `StopInstances` 和 `TerminateInstances` 操作的权限，但前提是该用户已使用 MFA 进行身份验证。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [{
       "Effect": "Allow",
       "Action": [
         "ec2:StopInstances",
         "ec2:TerminateInstances"
       ],
       "Resource": ["*"],
       "Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}}
     }]
   }
   ```

------

1. 
**注意**  
要使此策略生效，用户必须先注销，然后重新登录。

   如果用户 Sofía 需要停止或终止 Amazon EC2 实例，则她（或她正在运行的应用程序）可调用 `GetSessionToken`。此 API 操作传递 MFA 设备的 ID 和 Sofía 从其设备获取的当前 TOTP。

1. 用户 Sofía（或 Sofía 正在使用的应用程序）使用由 `GetSessionToken` 提供的临时凭证来调用 Amazon EC2 `StopInstances` 或 `TerminateInstances` 操作。

   有关调用 `GetSessionToken` 的程序的示例，请参阅本文档后面的 [使用 MFA 身份验证调用 GetSessionToken](id_credentials_mfa_sample-code.md#MFAProtectedAPI-example-getsessiontoken)。

## 方案：拥有基于资源的策略的资源的 MFA 保护
<a name="MFAProtectedAPI-resource-policies"></a>

在此方案中，您是 S3 存储桶、SQS 队列或 SNS 主题的所有者。您希望确保访问资源的任何 AWS 账户 中的任何用户都已使用 AWS MFA 设备进行身份验证。

此方案介绍了一种提供跨账户 MFA 保护的方法，无需用户先担任角色。在此情况下，用户可在满足以下三个条件时访问资源：用户已使用 MFA 进行身份验证、能够从 `GetSessionToken` 获取临时安全凭证且在受资源策略信任的账户中。

假设您在账户 A 中并创建一个 S3 存储桶。您希望向几个不同 AWS 账户 中的用户授予对此存储桶的访问权，但前提是这些用户已使用 MFA 进行身份验证。

在此方案中，用户 Anaya 是账户 A 中的管理员。用户 Nikhil 是账户 C 中的 IAM 用户。

1. 在账户 A 中，Anaya 创建一个名为 `Account-A-bucket` 的存储桶。

1. Anaya 向该存储桶添加存储桶策略。该策略允许账户 A、账户 B 或账户 C 中的所有用户执行存储桶中的 Amazon S3 `PutObject` 和 `DeleteObject` 操作。该策略包含 MFA 条件。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [{
       "Effect": "Allow",
       "Principal": {"AWS": [
         "ACCOUNT-A-ID",
         "ACCOUNT-B-ID",
         "ACCOUNT-C-ID"
       ]},
       "Action": [
         "s3:PutObject",
         "s3:DeleteObject"
       ],
       "Resource": ["arn:aws:s3:::ACCOUNT-A-BUCKET-NAME/*"],
       "Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}}
     }]
   }
   ```

------
**注意**  
Amazon S3（仅）针对*根*账户访问提供“MFA 删除”功能。在您设置存储桶的版本化状态时，可启用 Amazon S3 MFA Delete 功能。Amazon S3 MFA Delete 功能不适用于 IAM 用户，在管理时独立于 MFA 保护的 API 访问。即使 IAM 用户具有删除存储桶的权限，但在启用 Amazon S3 MFA Delete 功能时，也无法执行删除。有关 Amazon S3 MFA Delete 功能的更多信息，请参阅 [MFA Delete](https://docs.aws.amazon.com/AmazonS3/latest/dev/MultiFactorAuthenticationDelete.html)。

1. 在账户 C 中，管理员确保已使用 AWS MFA 设备配置用户 Nikhil，并且该用户知道设备的 ID。设备 ID 是序列号（如果是硬件 MFA 设备）或设备的 ARN（如果是虚拟 MFA 设备）。

1. 在账户 C 中，Nikhil（或他正在运行的应用程序）将调用 `GetSessionToken`。此调用包括 MFA 设备的 ID 或 ARN 以及 Nikhil 从其设备中获取的当前 TOTP。

1. Nikhil（或他正在使用的应用程序）使用 `GetSessionToken` 返回的临时凭证调用 Amazon S3 `PutObject` 操作以将文件上传到 `Account-A-bucket`。

   有关调用 `GetSessionToken` 的程序的示例，请参阅本文档后面的 [使用 MFA 身份验证调用 GetSessionToken](id_credentials_mfa_sample-code.md#MFAProtectedAPI-example-getsessiontoken)。
**注意**  
在此情况下，`AssumeRole` 返回的临时凭证将不可用。尽管用户可以提供 MFA 信息来担任角色，但 `AssumeRole` 返回的临时凭证不包含 MFA 信息。需要此信息才能满足策略中的 MFA 条件。

# 示例代码：使用多重验证请求凭证
<a name="id_credentials_mfa_sample-code"></a>

以下示例说明如何调用 `GetSessionToken` 和 `AssumeRole` 操作并传递 MFA 身份验证参数。无需任何权限即可调用 `GetSessionToken`，但您必须拥有允许您调用 `AssumeRole` 的策略。随后，返回的凭证将用于列出账户中的所有 S3 存储桶。

## 使用 MFA 身份验证调用 GetSessionToken
<a name="MFAProtectedAPI-example-getsessiontoken"></a>

以下示例说明了如何调用 `GetSessionToken` 并传递 MFA 身份验证信息。然后使用 `GetSessionToken` 操作返回的临时安全凭证来列出账户中的所有 S3 存储桶。

附加到运行此代码的用户（或用户所在的组）的策略提供了返回的临时凭证的权限。对于此示例代码，该策略必须向用户授予请求 Amazon S3 `ListBuckets` 操作的权限。

以下代码示例演示如何使用 `GetSessionToken`。

------
#### [ CLI ]

**AWS CLI**  
**要获取 IAM 身份的一组短期凭证**  
以下 `get-session-token` 命令将检索进行调用的 IAM 身份的一组短期凭证。生成的凭证可用于策略要求多重身份验证（MFA）的请求。凭证在生成 15 分钟后过期。  

```
aws sts get-session-token \
    --duration-seconds 900 \
    --serial-number "YourMFADeviceSerialNumber" \
    --token-code 123456
```
输出：  

```
{
    "Credentials": {
        "AccessKeyId": "ASIAIOSFODNN7EXAMPLE",
        "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY",
        "SessionToken": "AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtpZ3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE",
        "Expiration": "2020-05-19T18:06:10+00:00"
    }
}
```
有关更多信息，请参阅《AWS IAM 用户指南》**中的[请求临时安全凭证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_getsessiontoken)。  
+  有关 API 详细信息，请参阅《AWS CLI 命令参考》**中的 [GetSessionToken](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/get-session-token.html)。

------
#### [ PowerShell ]

**适用于 PowerShell V4 的工具**  
**示例 1：返回包含在设定时间段内有效的临时凭证的 `Amazon.RuntimeAWSCredentials` 实例。用于请求临时凭证的凭证是根据当前 shell 默认值推断出来的。要指定其他凭证，请使用 -ProfileName 或 -AccessKey/-SecretKey 参数。**  

```
Get-STSSessionToken
```
**输出**：  

```
AccessKeyId                             Expiration                              SecretAccessKey                        SessionToken
-----------                             ----------                              ---------------                        ------------
EXAMPLEACCESSKEYID                      2/16/2015 9:12:28 PM                    examplesecretaccesskey...              SamPleTokeN.....
```
**示例 2：返回包含有效期为一小时的临时凭证的 `Amazon.RuntimeAWSCredentials` 实例。用于发出请求的凭证是从指定的配置文件中获得的。**  

```
Get-STSSessionToken -DurationInSeconds 3600 -ProfileName myprofile
```
**输出**：  

```
AccessKeyId                             Expiration                              SecretAccessKey                        SessionToken
-----------                             ----------                              ---------------                        ------------
EXAMPLEACCESSKEYID                      2/16/2015 9:12:28 PM                    examplesecretaccesskey...              SamPleTokeN.....
```
**示例 3：使用与其凭证在配置文件“myprofilename”中指定的账户关联的 MFA 设备的标识号和该设备提供的值，返回包含有效期为一小时的临时凭证的 `Amazon.RuntimeAWSCredentials` 实例。**  

```
Get-STSSessionToken -DurationInSeconds 3600 -ProfileName myprofile -SerialNumber YourMFADeviceSerialNumber -TokenCode 123456
```
**输出**：  

```
AccessKeyId                             Expiration                              SecretAccessKey                        SessionToken
-----------                             ----------                              ---------------                        ------------
EXAMPLEACCESSKEYID                      2/16/2015 9:12:28 PM                    examplesecretaccesskey...              SamPleTokeN.....
```
+  有关 API 详细信息，请参阅《AWS Tools for PowerShell Cmdlet Reference (V4)》**中的 [GetSessionToken](https://docs.aws.amazon.com/powershell/v4/reference)。

**Tools for PowerShell V5**  
**示例 1：返回包含在设定时间段内有效的临时凭证的 `Amazon.RuntimeAWSCredentials` 实例。用于请求临时凭证的凭证是根据当前 shell 默认值推断出来的。要指定其他凭证，请使用 -ProfileName 或 -AccessKey/-SecretKey 参数。**  

```
Get-STSSessionToken
```
**输出**：  

```
AccessKeyId                             Expiration                              SecretAccessKey                        SessionToken
-----------                             ----------                              ---------------                        ------------
EXAMPLEACCESSKEYID                      2/16/2015 9:12:28 PM                    examplesecretaccesskey...              SamPleTokeN.....
```
**示例 2：返回包含有效期为一小时的临时凭证的 `Amazon.RuntimeAWSCredentials` 实例。用于发出请求的凭证是从指定的配置文件中获得的。**  

```
Get-STSSessionToken -DurationInSeconds 3600 -ProfileName myprofile
```
**输出**：  

```
AccessKeyId                             Expiration                              SecretAccessKey                        SessionToken
-----------                             ----------                              ---------------                        ------------
EXAMPLEACCESSKEYID                      2/16/2015 9:12:28 PM                    examplesecretaccesskey...              SamPleTokeN.....
```
**示例 3：使用与其凭证在配置文件“myprofilename”中指定的账户关联的 MFA 设备的标识号和该设备提供的值，返回包含有效期为一小时的临时凭证的 `Amazon.RuntimeAWSCredentials` 实例。**  

```
Get-STSSessionToken -DurationInSeconds 3600 -ProfileName myprofile -SerialNumber YourMFADeviceSerialNumber -TokenCode 123456
```
**输出**：  

```
AccessKeyId                             Expiration                              SecretAccessKey                        SessionToken
-----------                             ----------                              ---------------                        ------------
EXAMPLEACCESSKEYID                      2/16/2015 9:12:28 PM                    examplesecretaccesskey...              SamPleTokeN.....
```
+  有关 API 详细信息，请参阅《*AWS Tools for PowerShell Cmdlet Reference (V5)*》中的 [GetSessionToken](https://docs.aws.amazon.com/powershell/v5/reference)。

------
#### [ Python ]

**适用于 Python 的 SDK（Boto3）**  
 查看 GitHub，了解更多信息。在 [AWS 代码示例存储库](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/sts#code-examples)中查找完整示例，了解如何进行设置和运行。
通过传递 MFA 令牌获取会话令牌，然后使用令牌列出账户的 Amazon S3 存储桶。  

```
def list_buckets_with_session_token_with_mfa(mfa_serial_number, mfa_totp, sts_client):
    """
    Gets a session token with MFA credentials and uses the temporary session
    credentials to list Amazon S3 buckets.

    Requires an MFA device serial number and token.

    :param mfa_serial_number: The serial number of the MFA device. For a virtual MFA
                              device, this is an Amazon Resource Name (ARN).
    :param mfa_totp: A time-based, one-time password issued by the MFA device.
    :param sts_client: A Boto3 STS instance that has permission to assume the role.
    """
    if mfa_serial_number is not None:
        response = sts_client.get_session_token(
            SerialNumber=mfa_serial_number, TokenCode=mfa_totp
        )
    else:
        response = sts_client.get_session_token()
    temp_credentials = response["Credentials"]

    s3_resource = boto3.resource(
        "s3",
        aws_access_key_id=temp_credentials["AccessKeyId"],
        aws_secret_access_key=temp_credentials["SecretAccessKey"],
        aws_session_token=temp_credentials["SessionToken"],
    )

    print(f"Buckets for the account:")
    for bucket in s3_resource.buckets.all():
        print(bucket.name)
```
+  有关 API 详细信息，请参阅《AWS SDK for Python（Boto3）API 参考》**中的 [GetSessionToken](https://docs.aws.amazon.com/goto/boto3/sts-2011-06-15/GetSessionToken)。

------

## 使用 MFA 身份验证调用 AssumeRole
<a name="MFAProtectedAPI-example-assumerole"></a>

下面的示例说明了如何调用 `AssumeRole` 并传递 MFA 身份验证信息。然后使用 `AssumeRole` 返回的临时安全证书列出账户中的所有 Amazon S3 存储桶。

有关此方案的更多信息，请参阅[方案：跨账户委派的 MFA 保护](id_credentials_mfa_configure-api-require.md#MFAProtectedAPI-cross-account-delegation)。

以下代码示例演示如何使用 `AssumeRole`。

------
#### [ .NET ]

**适用于 .NET 的 SDK**  
 查看 GitHub，了解更多信息。查找完整示例，了解如何在 [AWS 代码示例存储库](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/STS#code-examples)中进行设置和运行。

```
using System;
using System.Threading.Tasks;
using Amazon;
using Amazon.SecurityToken;
using Amazon.SecurityToken.Model;

namespace AssumeRoleExample
{
    class AssumeRole
    {
        /// <summary>
        /// This example shows how to use the AWS Security Token
        /// Service (AWS STS) to assume an IAM role.
        ///
        /// NOTE: It is important that the role that will be assumed has a
        /// trust relationship with the account that will assume the role.
        ///
        /// Before you run the example, you need to create the role you want to
        /// assume and have it trust the IAM account that will assume that role.
        ///
        /// See https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html
        /// for help in working with roles.
        /// </summary>

        // A region property may be used if the profile or credentials loaded do not specify a region,
        // or to use a specific region.
        private static readonly RegionEndpoint REGION = RegionEndpoint.USWest2;

        static async Task Main()
        {
            // Create the SecurityToken client and then display the identity of the
            // default user.
            var roleArnToAssume = "arn:aws:iam::123456789012:role/testAssumeRole";

            var client = new Amazon.SecurityToken.AmazonSecurityTokenServiceClient(REGION);

            // Get and display the information about the identity of the default user.
            var callerIdRequest = new GetCallerIdentityRequest();
            var caller = await client.GetCallerIdentityAsync(callerIdRequest);
            Console.WriteLine($"Original Caller: {caller.Arn}");

            // Create the request to use with the AssumeRoleAsync call.
            var assumeRoleReq = new AssumeRoleRequest()
            {
                DurationSeconds = 1600,
                RoleSessionName = "Session1",
                RoleArn = roleArnToAssume
            };

            var assumeRoleRes = await client.AssumeRoleAsync(assumeRoleReq);

            // Now create a new client based on the credentials of the caller assuming the role.
            var client2 = new AmazonSecurityTokenServiceClient(credentials: assumeRoleRes.Credentials, REGION);

            // Get and display information about the caller that has assumed the defined role.
            var caller2 = await client2.GetCallerIdentityAsync(callerIdRequest);
            Console.WriteLine($"AssumedRole Caller: {caller2.Arn}");
        }
    }
}
```
+  有关 API 详细信息，请参阅《适用于 .NET 的 AWS SDK API Reference》**中的 [AssumeRole](https://docs.aws.amazon.com/goto/DotNetSDKV3/sts-2011-06-15/AssumeRole)。

------
#### [ Bash ]

**AWS CLI 及 Bash 脚本**  
 查看 GitHub，了解更多信息。查找完整示例，了解如何在 [AWS 代码示例存储库](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/aws-cli/bash-linux/iam#code-examples)中进行设置和运行。

```
###############################################################################
# function iecho
#
# This function enables the script to display the specified text only if
# the global variable $VERBOSE is set to true.
###############################################################################
function iecho() {
  if [[ $VERBOSE == true ]]; then
    echo "$@"
  fi
}

###############################################################################
# function errecho
#
# This function outputs everything sent to it to STDERR (standard error output).
###############################################################################
function errecho() {
  printf "%s\n" "$*" 1>&2
}

###############################################################################
# function sts_assume_role
#
# This function assumes a role in the AWS account and returns the temporary
#  credentials.
#
# Parameters:
#       -n role_session_name -- The name of the session.
#       -r role_arn -- The ARN of the role to assume.
#
# Returns:
#       [access_key_id, secret_access_key, session_token]
#     And:
#       0 - If successful.
#       1 - If an error occurred.
###############################################################################
function sts_assume_role() {
  local role_session_name role_arn response
  local option OPTARG # Required to use getopts command in a function.

  # bashsupport disable=BP5008
  function usage() {
    echo "function sts_assume_role"
    echo "Assumes a role in the AWS account and returns the temporary credentials:"
    echo "  -n role_session_name -- The name of the session."
    echo "  -r role_arn -- The ARN of the role to assume."
    echo ""
  }

  while getopts n:r:h option; do
    case "${option}" in
      n) role_session_name=${OPTARG} ;;
      r) role_arn=${OPTARG} ;;
      h)
        usage
        return 0
        ;;
      \?)
        echo "Invalid parameter"
        usage
        return 1
        ;;
    esac
  done

  response=$(aws sts assume-role \
    --role-session-name "$role_session_name" \
    --role-arn "$role_arn" \
    --output text \
    --query "Credentials.[AccessKeyId, SecretAccessKey, SessionToken]")

  local error_code=${?}

  if [[ $error_code -ne 0 ]]; then
    aws_cli_error_log $error_code
    errecho "ERROR: AWS reports create-role operation failed.\n$response"
    return 1
  fi

  echo "$response"

  return 0
}
```
+  有关 API 详细信息，请参阅《AWS CLI Command Reference**》中的 [AssumeRole](https://docs.aws.amazon.com/goto/aws-cli/sts-2011-06-15/AssumeRole)。

------
#### [ C\$1\$1 ]

**SDK for C\$1\$1**  
 查看 GitHub，了解更多信息。查找完整示例，学习如何在 [AWS 代码示例存储库](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sts#code-examples)中进行设置和运行。

```
bool AwsDoc::STS::assumeRole(const Aws::String &roleArn,
                             const Aws::String &roleSessionName,
                             const Aws::String &externalId,
                             Aws::Auth::AWSCredentials &credentials,
                             const Aws::Client::ClientConfiguration &clientConfig) {
    Aws::STS::STSClient sts(clientConfig);
    Aws::STS::Model::AssumeRoleRequest sts_req;

    sts_req.SetRoleArn(roleArn);
    sts_req.SetRoleSessionName(roleSessionName);
    sts_req.SetExternalId(externalId);

    const Aws::STS::Model::AssumeRoleOutcome outcome = sts.AssumeRole(sts_req);

    if (!outcome.IsSuccess()) {
        std::cerr << "Error assuming IAM role. " <<
                  outcome.GetError().GetMessage() << std::endl;
    }
    else {
        std::cout << "Credentials successfully retrieved." << std::endl;
        const Aws::STS::Model::AssumeRoleResult result = outcome.GetResult();
        const Aws::STS::Model::Credentials &temp_credentials = result.GetCredentials();

        // Store temporary credentials in return argument.
        // Note: The credentials object returned by assumeRole differs
        // from the AWSCredentials object used in most situations.
        credentials.SetAWSAccessKeyId(temp_credentials.GetAccessKeyId());
        credentials.SetAWSSecretKey(temp_credentials.GetSecretAccessKey());
        credentials.SetSessionToken(temp_credentials.GetSessionToken());
    }

    return outcome.IsSuccess();
}
```
+  有关 API 详细信息，请参阅《适用于 C\$1\$1 的 AWS SDK API Reference》**中的 [AssumeRole](https://docs.aws.amazon.com/goto/SdkForCpp/sts-2011-06-15/AssumeRole)。

------
#### [ CLI ]

**AWS CLI**  
**要代入角色**  
以下 `assume-role` 命令将检索 IAM 角色 `s3-access-example` 的一组短期凭证。  

```
aws sts assume-role \
    --role-arn arn:aws:iam::123456789012:role/xaccounts3access \
    --role-session-name s3-access-example
```
输出：  

```
{
    "AssumedRoleUser": {
        "AssumedRoleId": "AROA3XFRBF535PLBIFPI4:s3-access-example",
        "Arn": "arn:aws:sts::123456789012:assumed-role/xaccounts3access/s3-access-example"
    },
    "Credentials": {
        "SecretAccessKey": "9drTJvcXLB89EXAMPLELB8923FB892xMFI",
        "SessionToken": "AQoXdzELDDY//////////wEaoAK1wvxJY12r2IrDFT2IvAzTCn3zHoZ7YNtpiQLF0MqZye/qwjzP2iEXAMPLEbw/m3hsj8VBTkPORGvr9jM5sgP+w9IZWZnU+LWhmg+a5fDi2oTGUYcdg9uexQ4mtCHIHfi4citgqZTgco40Yqr4lIlo4V2b2Dyauk0eYFNebHtYlFVgAUj+7Indz3LU0aTWk1WKIjHmmMCIoTkyYp/k7kUG7moeEYKSitwQIi6Gjn+nyzM+PtoA3685ixzv0R7i5rjQi0YE0lf1oeie3bDiNHncmzosRM6SFiPzSvp6h/32xQuZsjcypmwsPSDtTPYcs0+YN/8BRi2/IcrxSpnWEXAMPLEXSDFTAQAM6Dl9zR0tXoybnlrZIwMLlMi1Kcgo5OytwU=",
        "Expiration": "2016-03-15T00:05:07Z",
        "AccessKeyId": "ASIAJEXAMPLEXEG2JICEA"
    }
}
```
该命令的输出包含访问密钥、私有密钥和会话令牌，您可以使用它们对 AWS 进行身份验证。  
要使用 AWS CLI，则可以设置与角色关联的命名配置文件。使用配置文件时，AWS CLI 将调用 assume-role 并为您管理凭证。有关更多信息，请参阅《AWS CLI 用户指南》**中的[在 AWS CLI 中使用 IAM 角色](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html)。  
+  有关 API 详细信息，请参阅《AWS CLI 命令参考》**中的 [AssumeRole](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html)。

------
#### [ Java ]

**适用于 Java 的 SDK 2.x**  
 查看 GitHub，了解更多信息。在 [AWS 代码示例存储库](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sts#code-examples)中查找完整示例，了解如何进行设置和运行。

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sts.StsClient;
import software.amazon.awssdk.services.sts.model.AssumeRoleRequest;
import software.amazon.awssdk.services.sts.model.StsException;
import software.amazon.awssdk.services.sts.model.AssumeRoleResponse;
import software.amazon.awssdk.services.sts.model.Credentials;
import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Locale;

/**
 * To make this code example work, create a Role that you want to assume.
 * Then define a Trust Relationship in the AWS Console. You can use this as an
 * example:
 *
 * {
 * "Version":"2012-10-17",		 	 	 
 * "Statement": [
 * {
 * "Effect": "Allow",
 * "Principal": {
 * "AWS": "<Specify the ARN of your IAM user you are using in this code example>"
 * },
 * "Action": "sts:AssumeRole"
 * }
 * ]
 * }
 *
 * For more information, see "Editing the Trust Relationship for an Existing
 * Role" in the AWS Directory Service guide.
 *
 * Also, set up your development environment, including your credentials.
 *
 * For information, see this documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class AssumeRole {
    public static void main(String[] args) {
        final String usage = """

                Usage:
                    <roleArn> <roleSessionName>\s

                Where:
                    roleArn - The Amazon Resource Name (ARN) of the role to assume (for example, arn:aws:iam::000008047983:role/s3role).\s
                    roleSessionName - An identifier for the assumed role session (for example, mysession).\s
                """;

        if (args.length != 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String roleArn = args[0];
        String roleSessionName = args[1];
        Region region = Region.US_EAST_1;
        StsClient stsClient = StsClient.builder()
                .region(region)
                .build();

        assumeGivenRole(stsClient, roleArn, roleSessionName);
        stsClient.close();
    }

    public static void assumeGivenRole(StsClient stsClient, String roleArn, String roleSessionName) {
        try {
            AssumeRoleRequest roleRequest = AssumeRoleRequest.builder()
                    .roleArn(roleArn)
                    .roleSessionName(roleSessionName)
                    .build();

            AssumeRoleResponse roleResponse = stsClient.assumeRole(roleRequest);
            Credentials myCreds = roleResponse.credentials();

            // Display the time when the temp creds expire.
            Instant exTime = myCreds.expiration();
            String tokenInfo = myCreds.sessionToken();

            // Convert the Instant to readable date.
            DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)
                    .withLocale(Locale.US)
                    .withZone(ZoneId.systemDefault());

            formatter.format(exTime);
            System.out.println("The token " + tokenInfo + "  expires on " + exTime);

        } catch (StsException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }
    }
}
```
+  有关 API 详细信息，请参阅《AWS SDK for Java 2.x API Reference》**中的 [AssumeRole](https://docs.aws.amazon.com/goto/SdkForJavaV2/sts-2011-06-15/AssumeRole)。

------
#### [ JavaScript ]

**SDK for JavaScript (v3)**  
 查看 GitHub，了解更多信息。查找完整示例，了解如何在 [AWS 代码示例存储库](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sts#code-examples)中进行设置和运行。
创建客户端。  

```
import { STSClient } from "@aws-sdk/client-sts";
// Set the AWS Region.
const REGION = "us-east-1";
// Create an AWS STS service client object.
export const client = new STSClient({ region: REGION });
```
代入 IAM 角色。  

```
import { AssumeRoleCommand } from "@aws-sdk/client-sts";

import { client } from "../libs/client.js";

export const main = async () => {
  try {
    // Returns a set of temporary security credentials that you can use to
    // access Amazon Web Services resources that you might not normally
    // have access to.
    const command = new AssumeRoleCommand({
      // The Amazon Resource Name (ARN) of the role to assume.
      RoleArn: "ROLE_ARN",
      // An identifier for the assumed role session.
      RoleSessionName: "session1",
      // The duration, in seconds, of the role session. The value specified
      // can range from 900 seconds (15 minutes) up to the maximum session
      // duration set for the role.
      DurationSeconds: 900,
    });
    const response = await client.send(command);
    console.log(response);
  } catch (err) {
    console.error(err);
  }
};
```
+  有关 API 详细信息，请参阅《适用于 JavaScript 的 AWS SDK API Reference》**中的 [AssumeRole](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sts/command/AssumeRoleCommand)。

**SDK for JavaScript (v2)**  
 查看 GitHub，了解更多信息。查找完整示例，了解如何在 [AWS 代码示例存储库](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascript/example_code/sts#code-examples)中进行设置和运行。

```
// Load the AWS SDK for Node.js
const AWS = require("aws-sdk");
// Set the region
AWS.config.update({ region: "REGION" });

var roleToAssume = {
  RoleArn: "arn:aws:iam::123456789012:role/RoleName",
  RoleSessionName: "session1",
  DurationSeconds: 900,
};
var roleCreds;

// Create the STS service object
var sts = new AWS.STS({ apiVersion: "2011-06-15" });

//Assume Role
sts.assumeRole(roleToAssume, function (err, data) {
  if (err) console.log(err, err.stack);
  else {
    roleCreds = {
      accessKeyId: data.Credentials.AccessKeyId,
      secretAccessKey: data.Credentials.SecretAccessKey,
      sessionToken: data.Credentials.SessionToken,
    };
    stsGetCallerIdentity(roleCreds);
  }
});

//Get Arn of current identity
function stsGetCallerIdentity(creds) {
  var stsParams = { credentials: creds };
  // Create STS service object
  var sts = new AWS.STS(stsParams);

  sts.getCallerIdentity({}, function (err, data) {
    if (err) {
      console.log(err, err.stack);
    } else {
      console.log(data.Arn);
    }
  });
}
```
+  有关 API 详细信息，请参阅《适用于 JavaScript 的 AWS SDK API Reference》**中的 [AssumeRole](https://docs.aws.amazon.com/goto/AWSJavaScriptSDK/sts-2011-06-15/AssumeRole)。

------
#### [ PowerShell ]

**适用于 PowerShell V4 的工具**  
**示例 1：返回一组临时凭证（访问密钥、秘密密钥和会话令牌），这些凭证可用于在一小时内访问请求用户通常可能无法访问的 AWS 资源。返回的凭证具有所担任角色的访问策略和所提供策略允许的权限（您不能使用所提供策略授予超出所担任角色访问策略定义权限的权限）。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -Policy "...JSON policy..." -DurationInSeconds 3600
```
**示例 2：返回一组有效期为一小时的临时凭证，其拥有的权限与所担任角色访问策略中定义的权限相同。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -DurationInSeconds 3600
```
**示例 3：返回一组临时凭证，提供与用于执行 cmdlet 的用户凭证关联的 MFA 的序列号和生成的令牌。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -DurationInSeconds 3600 -SerialNumber "GAHT12345678" -TokenCode "123456"
```
**示例 4：返回一组临时凭证，其已承担客户账户中定义的角色。对于第三方可以担任的每个角色，客户账户必须使用每次担任该角色时都必须在 -ExternalId 参数中传递的标识符来创建角色。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -DurationInSeconds 3600 -ExternalId "ABC123"
```
+  有关 API 详细信息，请参阅《AWS Tools for PowerShell Cmdlet Reference (V4)》**中的 [AssumeRole](https://docs.aws.amazon.com/powershell/v4/reference)。

**Tools for PowerShell V5**  
**示例 1：返回一组临时凭证（访问密钥、秘密密钥和会话令牌），这些凭证可用于在一小时内访问请求用户通常可能无法访问的 AWS 资源。返回的凭证具有所担任角色的访问策略和所提供策略允许的权限（您不能使用所提供策略授予超出所担任角色访问策略定义权限的权限）。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -Policy "...JSON policy..." -DurationInSeconds 3600
```
**示例 2：返回一组有效期为一小时的临时凭证，其拥有的权限与所担任角色访问策略中定义的权限相同。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -DurationInSeconds 3600
```
**示例 3：返回一组临时凭证，提供与用于执行 cmdlet 的用户凭证关联的 MFA 的序列号和生成的令牌。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -DurationInSeconds 3600 -SerialNumber "GAHT12345678" -TokenCode "123456"
```
**示例 4：返回一组临时凭证，其已承担客户账户中定义的角色。对于第三方可以担任的每个角色，客户账户必须使用每次担任该角色时都必须在 -ExternalId 参数中传递的标识符来创建角色。**  

```
Use-STSRole -RoleSessionName "Bob" -RoleArn "arn:aws:iam::123456789012:role/demo" -DurationInSeconds 3600 -ExternalId "ABC123"
```
+  有关 API 详细信息，请参阅《*AWS Tools for PowerShell Cmdlet Reference (V5)*》中的 [AssumeRole](https://docs.aws.amazon.com/powershell/v5/reference)。

------
#### [ Python ]

**适用于 Python 的 SDK（Boto3）**  
 查看 GitHub，了解更多信息。在 [AWS 代码示例存储库](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/sts#code-examples)中查找完整示例，了解如何进行设置和运行。
代入需要 MFA 令牌的 IAM 角色并使用临时凭证列出该账户的 Amazon S3 存储桶。  

```
def list_buckets_from_assumed_role_with_mfa(
    assume_role_arn, session_name, mfa_serial_number, mfa_totp, sts_client
):
    """
    Assumes a role from another account and uses the temporary credentials from
    that role to list the Amazon S3 buckets that are owned by the other account.
    Requires an MFA device serial number and token.

    The assumed role must grant permission to list the buckets in the other account.

    :param assume_role_arn: The Amazon Resource Name (ARN) of the role that
                            grants access to list the other account's buckets.
    :param session_name: The name of the STS session.
    :param mfa_serial_number: The serial number of the MFA device. For a virtual MFA
                              device, this is an ARN.
    :param mfa_totp: A time-based, one-time password issued by the MFA device.
    :param sts_client: A Boto3 STS instance that has permission to assume the role.
    """
    response = sts_client.assume_role(
        RoleArn=assume_role_arn,
        RoleSessionName=session_name,
        SerialNumber=mfa_serial_number,
        TokenCode=mfa_totp,
    )
    temp_credentials = response["Credentials"]
    print(f"Assumed role {assume_role_arn} and got temporary credentials.")

    s3_resource = boto3.resource(
        "s3",
        aws_access_key_id=temp_credentials["AccessKeyId"],
        aws_secret_access_key=temp_credentials["SecretAccessKey"],
        aws_session_token=temp_credentials["SessionToken"],
    )

    print(f"Listing buckets for the assumed role's account:")
    for bucket in s3_resource.buckets.all():
        print(bucket.name)
```
+  有关 API 详细信息，请参阅《AWS SDK for Python（Boto3）API Reference》**中的 [AssumeRole](https://docs.aws.amazon.com/goto/boto3/sts-2011-06-15/AssumeRole)。

------
#### [ Ruby ]

**适用于 Ruby 的 SDK**  
 查看 GitHub，了解更多信息。在 [AWS 代码示例存储库](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/ruby/example_code/iam#code-examples)中查找完整示例，了解如何进行设置和运行。

```
  # Creates an AWS Security Token Service (AWS STS) client with specified credentials.
  # This is separated into a factory function so that it can be mocked for unit testing.
  #
  # @param key_id [String] The ID of the access key used by the STS client.
  # @param key_secret [String] The secret part of the access key used by the STS client.
  def create_sts_client(key_id, key_secret)
    Aws::STS::Client.new(access_key_id: key_id, secret_access_key: key_secret)
  end

  # Gets temporary credentials that can be used to assume a role.
  #
  # @param role_arn [String] The ARN of the role that is assumed when these credentials
  #                          are used.
  # @param sts_client [AWS::STS::Client] An AWS STS client.
  # @return [Aws::AssumeRoleCredentials] The credentials that can be used to assume the role.
  def assume_role(role_arn, sts_client)
    credentials = Aws::AssumeRoleCredentials.new(
      client: sts_client,
      role_arn: role_arn,
      role_session_name: 'create-use-assume-role-scenario'
    )
    @logger.info("Assumed role '#{role_arn}', got temporary credentials.")
    credentials
  end
```
+  有关 API 详细信息，请参阅《适用于 Ruby 的 AWS SDK API Reference》**中的 [AssumeRole](https://docs.aws.amazon.com/goto/SdkForRubyV3/sts-2011-06-15/AssumeRole)。

------
#### [ Rust ]

**适用于 Rust 的 SDK**  
 查看 GitHub，了解更多信息。在 [AWS 代码示例存储库](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/rustv1/examples/sts/#code-examples)中查找完整示例，了解如何进行设置和运行。

```
async fn assume_role(config: &SdkConfig, role_name: String, session_name: Option<String>) {
    let provider = aws_config::sts::AssumeRoleProvider::builder(role_name)
        .session_name(session_name.unwrap_or("rust_sdk_example_session".into()))
        .configure(config)
        .build()
        .await;

    let local_config = aws_config::from_env()
        .credentials_provider(provider)
        .load()
        .await;
    let client = Client::new(&local_config);
    let req = client.get_caller_identity();
    let resp = req.send().await;
    match resp {
        Ok(e) => {
            println!("UserID :               {}", e.user_id().unwrap_or_default());
            println!("Account:               {}", e.account().unwrap_or_default());
            println!("Arn    :               {}", e.arn().unwrap_or_default());
        }
        Err(e) => println!("{:?}", e),
    }
}
```
+  有关 API 详细信息，请参阅《AWS SDK for Rust API Reference》**中的 [AssumeRole](https://docs.rs/aws-sdk-sts/latest/aws_sdk_sts/client/struct.Client.html#method.assume_role)。

------
#### [ Swift ]

**适用于 Swift 的 SDK**  
 查看 GitHub，了解更多信息。在 [AWS 代码示例存储库](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/swift/example_code/iam#code-examples)中查找完整示例，了解如何进行设置和运行。

```
import AWSSTS

    public func assumeRole(role: IAMClientTypes.Role, sessionName: String)
        async throws -> STSClientTypes.Credentials
    {
        let input = AssumeRoleInput(
            roleArn: role.arn,
            roleSessionName: sessionName
        )
        do {
            let output = try await stsClient.assumeRole(input: input)

            guard let credentials = output.credentials else {
                throw ServiceHandlerError.authError
            }

            return credentials
        } catch {
            print("Error assuming role: ", dump(error))
            throw error
        }
    }
```
+  有关 API 详细信息，请参阅《AWS SDK for Swift API 参考》**中的 [AssumeRole](https://sdk.amazonaws.com/swift/api/awssts/latest/documentation/awssts/stsclient/assumerole(input:))。

------

# IAM 用户的服务特定凭证
<a name="id_credentials_service-specific-creds"></a>

服务特定凭证是为特定 AWS 服务设计的专用身份验证机制。与标准 AWS 凭证相比，这些凭证提供简化的身份验证，并且是根据个别 AWS 服务的身份验证要求量身定制的。与可以跨多个 AWS 服务使用的访问密钥不同，服务特定凭证仅设计用于为其创建的服务。此针对性的方法通过限制凭证的范围来增强安全性。

服务特定凭证通常由用户名和密码对或根据特定服务的要求格式化的专用 API 密钥组成。创建服务特定凭证时，这些凭证默认处于活动状态，可以立即使用。针对每个 IAM 用户的每个受支持服务，最多可拥有两组服务特定凭证。此限制允许您在需要时轮换到新集合时保留一个活动集。AWS 当前支持以下服务的服务特定凭证：

## 何时使用服务特定凭证
<a name="id_credentials_service-specific-creds-usecase"></a>

服务专用凭证旨在与第三方库、SDK、工具或应用程序兼容，这些库、SDK、工具或应用程序与 AWS 凭证、AWS SDK 或 AWS API 本身不兼容。此类用例包括从自托管基础设施或其他提供商托管的服务迁移到 AWS 服务。

从零开始时，只要有可能，我们建议您使用 AWS 临时凭证（例如 IAM 角色提供的凭证），使用支持 AWS 临时凭证的 AWS SDK 或库对 AWS 服务进行身份验证。

## 轮换服务特定凭证
<a name="id_credentials_service-specific-creds-rotation"></a>

作为最佳安全实践，请定期轮换服务特定凭证。要在不中断应用程序的情况下轮换凭证，请执行下面的操作：

1. 为同一服务和 IAM 用户创建第二组服务特定凭证

1. 更新所有应用程序以使用新凭证并验证它们是否正常工作

1. 将原始凭证的状态更改为“非活跃”

1. 验证所有应用程序是否仍正常运行

1. 当确信不再需要非活跃服务特定凭证时，请删除它们

## 监控服务特定凭证
<a name="id_credentials_service-specific-creds-monitoring"></a>

您可以使用 AWS CloudTrail 来监控 AWS 账户中服务特定凭证的使用情况。要查看与服务特定凭证使用情况相关的 CloudTrail 事件，请查看 CloudTrail 日志中有关使用凭证的服务的事件。有关更多信息，请参阅 [使用 AWS CloudTrail 记录 IAM 和 AWS STS API 调用](cloudtrail-integration.md)。

为了提高安全性，请考虑设置 CloudWatch 警报，以便通知您可能表明未经授权访问或其他安全问题的特定凭证使用模式。有关更多信息，请参阅《*AWS CloudTrail 用户指南*》中的 [Monitoring CloudTrail Log Files with Amazon CloudWatch Logs](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html)。

以下主题提供有关服务特定凭证的信息。

**Topics**
+ [何时使用服务特定凭证](#id_credentials_service-specific-creds-usecase)
+ [轮换服务特定凭证](#id_credentials_service-specific-creds-rotation)
+ [监控服务特定凭证](#id_credentials_service-specific-creds-monitoring)
+ [Amazon Bedrock 和 Amazon CloudWatch Logs 的 API 密钥](id_credentials_bedrock_cloudwatchlogs.md)
+ [将 IAM 与 Amazon Keyspaces（Apache Cassandra 兼容）结合使用](id_credentials_keyspaces.md)

# Amazon Bedrock 和 Amazon CloudWatch Logs 的 API 密钥
<a name="id_credentials_bedrock_cloudwatchlogs"></a>

**注意**  
Amazon CloudWatch Logs API 密钥目前提供预览版，将在未来几周内正式推出。Amazon CloudWatch Logs API 密钥与本页上描述的 Amazon Bedrock 长期 API 密钥非常相似。要了解有关 Amazon CloudWatch Logs 长期 API 密钥的更多信息，请参阅[使用 HLC 端点向 Amazon CloudWatch Logs 发送日志](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_HLC_Endpoint.html)。

Amazon Bedrock 是一项完全托管的服务，提供来自领先的 AI 公司和 Amazon 的基础模型。您可以通过 AWS 管理控制台 访问 Amazon Bedrock，也可以使用 AWS CLI 或 AWS API 以编程方式访问。向 Amazon Bedrock 发出编程请求时，您可以使用[临时安全凭证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)或 Amazon Bedrock API 密钥进行身份验证。Amazon Bedrock 支持两种类型的 API 密钥：
+ **短期 API 密钥** – 短期 API 密钥是使用 AWS 签名版本 4 的预签名 URL。短期 API 密钥与生成 API 密钥的身份的凭证具有相同的权限和过期时间，有效期最长为 12 小时或控制台会话的剩余时间（以较短者为准）。您可以使用 Amazon Bedrock 控制台、Python 包 `aws-bedrock-token-generator` 和其他编程语言的包来生成短期 API 密钥。有关更多信息，请参阅《*Amazon Bedrock 用户指南*》中的 [Generate Amazon Bedrock API keys for easy access to the Amazon Bedrock API](https://docs.aws.amazon.com/bedrock/latest/userguide/api-keys.html)。
+ **长期 API 密钥** – 长期 API 密钥与 IAM 用户关联并使用 IAM [服务特定凭证](id_credentials_service-specific-creds.md)生成。这些凭证仅设计用于 Amazon Bedrock，通过限制凭证范围来增强安全性。您可以设置长期 API 密钥的过期时间。您可以使用 IAM 或 Amazon Bedrock 控制台、AWS CLI 或者 AWS API 来生成长期 API 密钥。

一个 IAM 用户最多可以拥有两个 Amazon Bedrock 长期 API 密钥，这有助于您实施安全的密钥轮换实践。

当生成长期 API 密钥时，AWS 托管式策略 [AmazonBedrockLimitedAccess](https://docs.aws.amazon.com/bedrock/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonBedrockLimitedAccess) 会自动附加到 IAM 用户。此策略授予对核心 Amazon Bedrock API 操作的访问权限。如果需要额外的 Amazon Bedrock 访问权限，则可以修改 IAM 用户的权限。有关修改权限的信息，请参阅[添加和删除 IAM 身份权限](access_policies_manage-attach-detach.md)。有关如何使用 Amazon Bedrock 密钥的更多信息，请参阅《Amazon Bedrock 用户指南》**中的[使用 Amazon Bedrock API 密钥](https://docs.aws.amazon.com/bedrock/latest/userguide/api-keys-use.html)。

**注意**  
与短期 API 密钥相比，长期 API 密钥的安全风险更高。建议尽可能使用短期 API 密钥或临时安全凭证。如果使用长期 API 密钥，建议实施定期密钥轮换实践。

## 先决条件
<a name="id_credentials_bedrock_prerequisites"></a>

必须先满足以下先决条件，然后才能从 IAM 控制台生成 Amazon Bedrock 长期 API 密钥：
+ 与长期 API 密钥关联的 IAM 用户。有关创建 IAM 用户的说明，请参阅[在 AWS 账户 中创建 IAM 用户](id_users_create.md)。
+ 确保您拥有以下 IAM 策略权限来管理 IAM 用户的服务特定凭证。示例策略授予创建、列出、更新、删除和重置服务特定凭证的权限。请将 Resource 元素中的 `username` 值替换为要为其生成 Amazon Bedrock API 密钥的 IAM 用户的名称：

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "ManageBedrockServiceSpecificCredentials",
              "Effect": "Allow",
              "Action": [
                  "iam:CreateServiceSpecificCredential",
                  "iam:ListServiceSpecificCredentials",
                  "iam:UpdateServiceSpecificCredential",
                  "iam:DeleteServiceSpecificCredential",
                  "iam:ResetServiceSpecificCredential"
              ],
              "Resource": "arn:aws:iam::*:user/username"
          }
      ]
  }
  ```

------

## 生成 Amazon Bedrock 的长期 API 密钥（控制台）
<a name="id_credentials_bedrock_console_create"></a>

**生成 Amazon Bedrock 长期 API 密钥（控制台）**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在 IAM 控制台的导航窗格中，选择**用户**。

1. 选择要为其生成 Amazon Bedrock 长期 API 密钥的 IAM 用户。

1. 选择**安全凭证**选项卡。

1. 在 **Amazon Bedrock 的 API 密钥**部分中，选择**生成 API 密钥**。

1. 对于 **API 密钥过期时间**，请执行以下操作之一：
   + 选择 API 密钥的过期时间 **1**、**5**、**30**、**90** 或 **365** 天。
   + 选择**自定义持续时间**以指定自定义 API 密钥到期日期。
   + 选择**永不过期**（不推荐）

1. 选择**生成 API 密钥**。

1. 复制或下载 API 密钥。这是唯一可以查看 API 密钥值的时间。
**重要**  
安全存储 API 密钥。关闭对话框后，将无法再次检索 API 密钥。如果丢失或忘记了秘密访问密钥，则无法检索它。相反，请创建新的访问密钥并使旧密钥处于非活动状态。

## 生成 Amazon Bedrock 的长期 API 密钥 (AWS CLI)
<a name="id_credentials_bedrock_cli_create"></a>

要使用 AWS CLI 生成 Amazon Bedrock 长期 API 密钥，请按照以下步骤进行操作：

1. 使用 [create-user](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-user.html) 命令创建将与 Amazon Bedrock 一起使用的 IAM 用户：

   ```
   aws iam create-user \
       --user-name BedrockAPIKey_1
   ```

1. 使用 [attach-user-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/attach-user-policy.html) 命令将 AWS 托管式策略 `AmazonBedrockLimitedAccess` 附加到 Amazon Bedrock IAM 用户：

   ```
   aws iam attach-user-policy --user-name BedrockAPIKey_1 \
       --policy-arn arn:aws:iam::aws:policy/AmazonBedrockLimitedAccess
   ```

1. 使用 [create-service-specific-credential](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-service-specific-credential.html) 命令生成 Amazon Bedrock 长期 API 密钥。对于凭证期限，可以指定 1-36600 天之间的值。如果未指定凭证期限，则 API 密钥将不会过期。

   要生成有效期为 30 天的长期 API 密钥，请执行下面的操作：

   ```
   aws iam create-service-specific-credential \
       --user-name BedrockAPIKey_1 \
       --service-name bedrock.amazonaws.com \
       --credential-age-days 30
   ```

响应中返回的 `ServiceApiKeyValue` 是长期 Amazon Bedrock API 密钥。安全地存储 `ServiceApiKeyValue` 值，因为您以后无法检索它。

### 列出长期 API 密钥 (AWS CLI)
<a name="id_credentials_bedrock_cli_list"></a>

要列出特定用户的 Amazon Bedrock 长期 API 密钥元数据，请使用带有 `--user-name` 参数的 [list-service-specific-credentials](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/list-service-specific-credentials.html) 命令：

```
aws iam list-service-specific-credentials \
    --service-name bedrock.amazonaws.com \
    --user-name BedrockAPIKey_1
```

要列出账户中的所有 Amazon Bedrock 长期 API 密钥元数据，请使用带有 `--all-users` 参数的 [list-service-specific-credentials](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/list-service-specific-credentials.html) 命令：

```
aws iam list-service-specific-credentials \
    --service-name bedrock.amazonaws.com \
    --all-users
```

### 更新长期 API 密钥状态 (AWS CLI)
<a name="id_credentials_bedrock_cli_update"></a>

要更新 Amazon Bedrock 的长期 API 密钥的状态，请使用 [update-service-specific-credential](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/update-service-specific-credential.html) 命令：

```
aws iam update-service-specific-credential \
    --user-name "BedrockAPIKey_1" \
    --service-specific-credential-id "ACCA1234EXAMPLE1234" \
    --status Inactive|Active
```

## 生成 Amazon Bedrock 的长期 API 密钥 (AWS API)
<a name="id_credentials_bedrock_api"></a>

您可以使用下面的 API 操作来生成和管理 Amazon Bedrock 的长期 API 密钥：
+  [https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceSpecificCredential.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceSpecificCredential.html) 
+  [https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListServiceSpecificCredentials.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListServiceSpecificCredentials.html) 
+  [https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateServiceSpecificCredential.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateServiceSpecificCredential.html) 
+  [https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServiceSpecificCredential.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServiceSpecificCredential.html) 
+  [https://docs.aws.amazon.com/IAM/latest/APIReference/API_ResetServiceSpecificCredential.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ResetServiceSpecificCredential.html) 

# 将 IAM 与 Amazon Keyspaces（Apache Cassandra 兼容）结合使用
<a name="id_credentials_keyspaces"></a>

Amazon Keyspaces（用于 Apache Cassandra）是一种可扩展、高可用、托管的 Apache Cassandra 兼容数据库服务。您可以通过 AWS 管理控制台 或以编程方式访问 Amazon Keyspaces。要使用服务特定的凭证以编程方式访问 Amazon Keyspaces，您可以使用 `cqlsh` 或开源 Cassandra 驱动程序。*服务特定的凭证*包括用户名和密码，例如 Cassandra 用于身份验证和访问管理的用户名和密码。针对每个用户的每个受支持服务，您最多可拥有两组服务特定凭证。

要使用 AWS 访问密钥以编程方式访问 Amazon Keyspaces，您可以使用 AWS 开发工具包、AWS Command Line Interface（AWS CLI）或带有 SiGv4 插件的开源 Cassandra 驱动程序。要了解更多信息，请参阅**《Amazon Keyspaces (for Apache Cassandra) Developer Guide》中的 [Create and configure AWS credentials for Amazon Keyspaces](https://docs.aws.amazon.com//keyspaces/latest/devguide/access.credentials.html)。

**注意**  
如果您计划仅通过控制台与 Amazon Keyspaces 交互，则无需生成服务特定凭证。有关更多信息，请参阅《Amazon Keyspaces（Apache Cassandra 兼容）开发人员指南》中的[使用控制台访问 Amazon Keyspaces ](https://docs.aws.amazon.com/keyspaces/latest/devguide/console_keyspaces.html)。

有关访问 Amazon Keyspaces 所需权限的更多信息，请参阅 *Amazon Keyspaces (for Apache Cassandra) 开发人员指南*中的 [Amazon Keyspaces (for Apache Cassra) 基于身份的策略示例](https://docs.aws.amazon.com/keyspaces/latest/devguide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-console)。

## 生成 Amazon Keyspaces 凭证（控制台）
<a name="keyspaces_credentials_console"></a>

您可以使用 AWS 管理控制台 为 IAM 用户生成 Amazon Keyspaces 用户（针对 Apache Cassandra）凭证。

**生成 Amazon Keyspaces 服务特定凭证（控制台）**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择 **Users (用户)**，然后选择需要凭证的用户的名称。

1. 在 **Credentials for Amazon Keyspaces (for Apache Cassandra)**（Amazon Keyspaces (for Apache Cassandra) 凭证）下方的 **Security Credentials**（安全凭证）选项卡中，选择 **Generate credentials**（生成凭证）。

1. 您的服务特定凭证现在可用。这是唯一一次查看或下载密码的机会。以后您无法恢复它。不过，您可以随时重置密码。将用户和密码保存在安全的位置，因为随后您需要使用它们。

## 生成 Amazon Keyspaces 凭证 (AWS CLI)
<a name="keyspaces_credentials_cli"></a>

您可以使用 AWS CLI 为 IAM 用户生成 Amazon Keyspaces 用户（针对 Apache Cassandra）凭证。

**生成 Amazon Keyspaces 服务特定凭证 (AWS CLI)**
+ 使用以下命令：
  + [aws iam create-service-specific-credential](https://docs.aws.amazon.com/cli/latest/reference/iam/create-service-specific-credential.html)

## 生成 Amazon Keyspaces 凭证 (AWS API)
<a name="keyspaces_credentials_api"></a>

您可以使用 AWS API 为 IAM 用户生成 Amazon Keyspaces 用户（针对 Apache Cassandra）凭证。

**生成 Amazon Keyspaces 服务特定凭证 (AWS API)**
+ 完成以下操作：
  + [CreateServiceSpecificCredential](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceSpecificCredential.html) 

# 查找未使用的 AWS 凭证
<a name="id_credentials_finding-unused"></a>

为提高您的 AWS 账户 的安全性，请删除不需要的 IAM 用户凭证（即密码和访问密钥）。例如，当用户离开您的组织或不再需要访问 AWS 时，请找到用户所使用的凭证并确保这些凭证不再有效。理想情况下，如果不再需要凭证，可将其删除。您始终可在将来需要这些凭证时创建它们。您至少应该更改密码或停用访问密钥，使以前的用户不再具有访问权限。

当然，*未使用* 这个词可以有多种理解，但通常指在指定时段内没用过的凭证。

## 查找未使用的密码
<a name="finding-unused-passwords"></a>

您可以使用 AWS 管理控制台查看用户的密码使用信息。如果您有大量的用户，则您可以使用控制台下载包含有关每个用户上次使用其控制台密码的时间信息的凭证报告。您还可以从 AWS CLI 或 IAM API 访问信息。

**查找未使用的密码 (控制台)**

1. 登录 AWS 管理控制台，单击 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**用户**。

1. 如有必要，请将 **Console last sign-in** 列添加到用户表中：

   1. 在最右侧的表上方，选择设置图标 (![\[Settings icon\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/console-settings-icon.console.png))。

   1. 在**选择可见列**中，选择**控制台上次登录**。

   1. 选择**确认**，返回到用户列表。

1. **Console last sign-in**（控制台上次登录时间）列显示用户上次通过控制台登录 AWS 的日期。您可以利用该信息查找超过指定时间段未使用密码登录的用户。对于从未使用密码登录的用户，该列显示 **Never**。**None** 表示没有密码的用户。最近未使用的密码可能适合做删除处理。
**重要**  
由于服务问题，上次使用密码的数据不包括从 2018 年 5 月 3 日 22:50（太平洋时间）到 2018 年 5 月 23 日 14:08（太平洋时间）之间的密码使用。这会影响 IAM 控制台中显示的[上次登录](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_finding-unused.html)日期和 [IAM 凭证报告](https://docs.aws.amazon.com/IAM/latest/UserGuide/SupportedTypes.xmlid_credentials_getting-report.html)中以及 [GetUser API 操作](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetUser.html)返回的上次使用密码的日期。如果用户在受影响的时间内登录，则返回的上次使用密码的日期是用户在 2018 年 5 月 3 日之前最后一次登录的日期。对于在 2018 年 5 月 23 日 14:08（太平洋时间）之后登录的用户，所返回的上次使用密码的日期准确无误。  
如果您使用上次使用密码的信息来识别未使用的凭证以将其删除（如删除在过去 90 天内未登录过 AWS 的用户），建议您调整评估时段以纳入 2018 年 5 月 23 日之后的日期。或者，如果您的用户使用访问密钥以编程方式访问 AWS，则您可以参阅上次使用访问密钥的信息，因为其中的所有日期都准确无误。

**通过下载凭证报告查找未使用的密码 (控制台)**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**凭证报告**。

1. 选择 **Download Report** 以下载名为 `status_reports_<date>T<time>.csv` 的逗号分隔值 (CSV) 文件。第五列包含具有日期或下列项之一的 `password_last_used` 列：
   + **N/A** - 根本未获得密码的用户。
   + **no\$1information** - 自 在 2014 年 10 月 20 日 IAM 开始跟踪密码使用期限以来未使用其密码的用户。

**查找未使用的密码 (AWS CLI)**  
运行以下命令查找未使用的密码：
+ `[aws iam list-users](https://docs.aws.amazon.com/cli/latest/reference/iam/list-users.html)` 返回用户列表，每个用户均有一个 `PasswordLastUsed` 值。如果缺少此值，则用户未获得密码或自 IAM 在 2014 年 10 月 20 日开始跟踪密码使用期限以来未使用密码。

**查找未使用的密码 (AWS API)**  
调用以下操作查找未使用的密码：
+  ` [ListUsers](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUsers.html)` 返回用户集合，每个用户均有一个 `<PasswordLastUsed>` 值。如果缺少此值，则用户未获得密码或自 IAM 在 2014 年 10 月 20 日开始跟踪密码使用期限以来未使用密码。

有关用于下载凭证报告的命令的信息，请参阅[获取凭证报告 (AWS CLI)](id_credentials_getting-report.md#getting-credential-reports-cliapi)。

## 查找未使用的访问密钥
<a name="finding-unused-access-keys"></a>

您可以使用 AWS 管理控制台查看用户的访问密钥使用信息。如果您有大量的用户，则您可以使用控制台下载凭证报告，以查找每个用户上次使用其访问密钥的时间。您还可以从 AWS CLI 或 IAM API 访问信息。

**查找未使用的访问密钥 (控制台)**

1. 登录 AWS 管理控制台，单击 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**用户**。

1. 如有必要，将 **Access key last used** 列添加到用户表中：

   1. 在最右侧的表上方，选择设置图标 (![\[Settings icon\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/console-settings-icon.console.png))。

   1. 在**选择可见列**中，选择**上次使用的访问密钥**。

   1. 选择**确认**，返回到用户列表。

1. **Access key last used (访问密钥上次使用)** 列显示用户上次以编程方式访问 AWS 以来经过的天数。您可以利用该信息查找超过指定时间段未使用访问密钥的用户。对于没有访问密钥的用户，该列显示 **–**。最近未使用的访问密钥可能适合做删除处理。

**通过下载凭证报告来查找未使用的访问密钥 (控制台)**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**凭证报告**。

1. 选择 **Download Report** 以下载名为 `status_reports_<date>T<time>.csv` 的逗号分隔值 (CSV) 文件。列 11 至 13 包含访问密钥 1 的上次使用日期、区域和服务信息。列 16 至列 18 包含访问密钥 2 的相同信息。如果用户没有访问密钥或用户自 IAM 在 2015 年 4 月 22 日开始跟踪访问密钥使用期限以来未使用访问密钥，则值为 **N/A**。

**查找未使用的访问密钥 (AWS CLI)**  
运行以下命令查找未使用的访问密钥：
+ `[aws iam list-access-keys](https://docs.aws.amazon.com/cli/latest/reference/iam/list-access-keys.html)` 返回有关用户的访问密钥的信息，包括 `AccessKeyID`。
+ `[aws iam get-access-key-last-used](https://docs.aws.amazon.com/cli/latest/reference/iam/get-access-key-last-used.html)` 采用访问密钥 ID 并返回输出，包括 `LastUsedDate`、`Region` (上次在其中使用访问密钥) 和上一次请求的服务的 `ServiceName`。如果缺少 `LastUsedDate`，则自 IAM 在 2015 年 4 月 22 日开始跟踪访问密钥使用期限以来未使用访问密钥。

**查找未使用的访问密钥 (AWS API)**  
调用以下操作查找未使用的访问密钥：
+ `[ListAccessKeys](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAccessKeys.html)` 返回与指定用户关联的访问密钥的 `AccessKeyID` 值的列表。
+ `[GetAccessKeyLastUsed](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccessKeyLastUsed.html)` 采用访问密钥 ID 并返回值的集合。包括 `LastUsedDate`、`Region` (上次在其中使用访问密钥) 和上次请求的服务的 `ServiceName`。如果缺少此值，则用户未获得访问密钥或自 IAM 在 2015 年 4 月 22 日开始跟踪访问密钥使用期间以来未使用访问密钥。

有关用于下载凭证报告的命令的信息，请参阅[获取凭证报告 (AWS CLI)](id_credentials_getting-report.md#getting-credential-reports-cliapi)。

# 为您的 AWS 账户 生成凭证报告
<a name="id_credentials_getting-report"></a>

您可以生成和下载列出您账户中所有用户及其各个凭证状态（包括密码、访问密钥和 MFA 设备）的*凭证报告*。您可以从 AWS 管理控制台、[AWS 开发工具包](https://aws.amazon.com/tools)和[命令行工具](https://aws.amazon.com/tools/#Command_Line_Tools)或 IAM API 获取凭证报告。

**注意**  
IAM 凭证报告仅包含以下 IAM 管理的凭证：密码、每个用户的前两个访问密钥、MFA 设备和 X.509 签名证书。该报告不包括服务特定的凭证（例如 CodeCommit 密码、Amazon Bedrock 长期 API 密钥或 Amazon CloudWatch Logs 长期 API 密钥）或除前两个以外的任何其他用户访问密钥。要查看完整的凭证，请使用 [ListServiceSpecificCredentials](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListServiceSpecificCredentials.html) 和 [ListAccessKeys](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAccessKeys.html) API。

您可以使用凭证报告帮助您进行审核和合规性工作。您可以使用该报告来审计凭证生命周期要求的效果，如密码和访问密钥更新要求。您可以向外部审核员提供报告，或向审核员授予权限，以便他或她可以直接下载报告。

您可以按每四小时一次的频率生成凭证报告。请求报告时，IAM 先检查在过去四小时内是否生成了 AWS 账户 的报告。如果是，则下载最新的报告。如果账户的最新报告是四小时前生成的，或者账户以前没有报告，则 IAM 将生成并下载新报告。

**Topics**
+ [所需的权限](#id_credentials_required_permissions)
+ [了解报告格式](#id_credentials_understanding_the_report_format)
+ [获取凭证报告（控制台）](#getting-credential-reports-console)
+ [获取凭证报告 (AWS CLI)](#getting-credential-reports-cliapi)
+ [获取凭证报告 (AWS API)](#getting-credential-reports-api)

## 所需的权限
<a name="id_credentials_required_permissions"></a>

创建和下载报告需要以下权限：
+ 创建凭证报告：`iam:GenerateCredentialReport`
+ 下载报告：`iam:GetCredentialReport`

## 了解报告格式
<a name="id_credentials_understanding_the_report_format"></a>

凭证报告采用逗号分隔值 (CSV) 文件格式。您可以使用常用电子表格软件打开 CSV 文件以执行分析，也可以构建应用程序以编程方式使用 CSV 文件并执行自定义分析。

CSV 文件包含以下列：

**用户**  
用户的友好名称。

**arn**  
用户的 Amazon Resource Name (ARN)。有关 ARN 的更多信息，请参阅 [IAM ARN](reference_identifiers.md#identifiers-arns)。

**user\$1creation\$1time**  
创建用户的日期和时间，[ISO 8601 日期时间格式](https://en.wikipedia.org/wiki/ISO_8601)。

**password\$1enabled**  
如果用户有密码，则该值为 `TRUE`。否则为 `FALSE`。对于作为组织一部分创建的新成员账户，此值为 `FALSE`，因为默认情况下，这些账户没有根用户凭证。

**password\$1last\$1used**  
AWS 账户根用户 或用户的密码上次用于登录 AWS 网站的日期和时间，采用 [ISO 8601 日期时间格式](http://www.iso.org/iso/iso8601)。捕获用户上次登录时间的 AWS 网站是 AWS 管理控制台、AWS 论坛和 AWS Marketplace。如果密码在 5 分钟的时间范围内多次使用，则仅在此字段中记录第一次使用。  
+ 此字段的值在以下情况下为 `no_information`：
  + 用户的密码从未使用过。
  + 没有与密码关联的登录数据，例如，当用户的密码在 IAM 于 2014 年 10 月 20 日开始跟踪此信息后尚未使用时。
+ 如果用户没有密码，此字段中的值为 `N/A` (不适用)。

**重要**  
由于服务问题，上次使用密码的数据不包括从 2018 年 5 月 3 日 22:50（太平洋时间）到 2018 年 5 月 23 日 14:08（太平洋时间）之间的密码使用。这会影响 IAM 控制台中显示的[上次登录](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_finding-unused.html)日期和 [IAM 凭证报告](https://docs.aws.amazon.com/IAM/latest/UserGuide/SupportedTypes.xmlid_credentials_getting-report.html)中以及 [GetUser API 操作](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetUser.html)返回的上次使用密码的日期。如果用户在受影响的时间内登录，则返回的上次使用密码的日期是用户在 2018 年 5 月 3 日之前最后一次登录的日期。对于在 2018 年 5 月 23 日 14:08（太平洋时间）之后登录的用户，所返回的上次使用密码的日期准确无误。  
如果您使用上次使用密码的信息来识别未使用的凭证以将其删除（如删除在过去 90 天内未登录过 AWS 的用户），建议您调整评估时段以纳入 2018 年 5 月 23 日之后的日期。或者，如果您的用户使用访问密钥以编程方式访问 AWS，则您可以参阅上次使用访问密钥的信息，因为其中的所有日期都准确无误。

**password\$1last\$1changed**  
上次设置用户密码的日期和时间，[ISO 8601 日期时间格式](https://en.wikipedia.org/wiki/ISO_8601)。如果用户没有密码，则此字段中的值为 `N/A` (不适用)。

**password\$1next\$1rotation**  
如果账户的[密码策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingPasswordPolicies.html)要求密码轮换，则此字段包含用户需要设置新密码的日期和时间，[ISO 8601 日期时间格式](https://en.wikipedia.org/wiki/ISO_8601)。AWS 账户（根）的值始终是 `not_supported`。

**mfa\$1active**  
如果对用户启用了[多重验证](id_credentials_mfa.md) (MFA) 设备，则此值为 `TRUE`。否则为 `FALSE`。

**access\$1key\$11\$1active**  
如果用户有访问密钥且访问密钥状态为 `Active`，则该值为 `TRUE`。否则为 `FALSE`。适用于账户根用户和 IAM 用户。

**access\$1key\$11\$1last\$1rotated**  
创建或上次更改用户访问密钥的日期和时间，[ISO 8601 日期时间格式](https://en.wikipedia.org/wiki/ISO_8601)。如果用户没有活动的访问密钥，则此字段中的值为 `N/A` (不适用)。适用于账户根用户和 IAM 用户。

**access\$1key\$11\$1last\$1used\$1date**  
最近使用用户的访问密钥签署 AWS API 请求的日期和时间（采用 [ISO 8601 日期时间格式](https://en.wikipedia.org/wiki/ISO_8601)）。如果访问密钥在 15 分钟的时间范围内多次使用，则仅在此字段中记录第一次使用。适用于账户根用户和 IAM 用户。  
此字段的值在这些情况下为 `N/A`（不适用）：  
+ 用户没有访问密钥。
+ 访问密钥从未使用过。
+ 访问密钥在 IAM 于 2015 年 4 月 22 日开始跟踪此信息后尚未使用。

**access\$1key\$11\$1last\$1used\$1region**  
最近在其中使用访问密钥的 [AWS 区域](https://docs.aws.amazon.com/general/latest/gr/rande.html)。如果访问密钥在 15 分钟的时间范围内多次使用，则仅在此字段中记录第一次使用。适用于账户根用户和 IAM 用户。  
此字段的值在这些情况下为 `N/A`（不适用）：  
+ 用户没有访问密钥。
+ 访问密钥从未使用过。
+ 上次使用访问密钥是在 IAM 于 2015 年 4 月 22 日开始跟踪此信息之前。
+ 上次使用的服务不是区域特定的服务，如 Amazon S3。

**access\$1key\$11\$1last\$1used\$1service**  
最近使用访问密钥访问的 AWS 服务。此字段的值使用服务的命名空间，例如 `s3` 表示 Amazon S3，`ec2` 表示 Amazon EC2。如果访问密钥在 15 分钟的时间范围内多次使用，则仅在此字段中记录第一次使用。适用于账户根用户和 IAM 用户。  
此字段的值在这些情况下为 `N/A`（不适用）：  
+ 用户没有访问密钥。
+ 访问密钥从未使用过。
+ 上次使用访问密钥是在 IAM 于 2015 年 4 月 22 日开始跟踪此信息之前。

**access\$1key\$12\$1active**  
如果用户有第二个访问密钥且第二个键的状态为 `Active`，则该值为 `TRUE`。否则为 `FALSE`。适用于账户根用户和 IAM 用户。  
用户最多可以有两个访问密钥，为方便轮换，可以首先更新密钥，然后再删除之前的密钥。有关更新访问密钥的更多信息，请参阅 [更新访问密钥](id-credentials-access-keys-update.md)。

**access\$1key\$12\$1last\$1rotated**  
创建或上次更改用户第二个访问密钥的日期和时间，采用 [ISO 8601 日期时间格式](https://en.wikipedia.org/wiki/ISO_8601)。如果用户没有第二个活动的访问密钥，则此字段中的值为 `N/A` (不适用)。适用于账户根用户和 IAM 用户。

**access\$1key\$12\$1last\$1used\$1date**  
最近使用用户的第二个访问密钥签署 AWS API 请求的日期和时间（采用 [ISO 8601 日期时间格式](https://en.wikipedia.org/wiki/ISO_8601)）。如果访问密钥在 15 分钟的时间范围内多次使用，则仅在此字段中记录第一次使用。适用于账户根用户和 IAM 用户。  
此字段的值在这些情况下为 `N/A`（不适用）：  
+ 用户没有第二个访问密钥。
+ 用户的第二个访问密钥从未使用过。
+ 上次使用用户的第二个访问密钥是在 IAM 于 2015 年 4 月 22 日开始跟踪此信息之前。

**access\$1key\$12\$1last\$1used\$1region**  
最近在其中使用用户的第二个访问密钥的 [AWS 区域](https://docs.aws.amazon.com/general/latest/gr/rande.html)。如果访问密钥在 15 分钟的时间范围内多次使用，则仅在此字段中记录第一次使用。适用于账户根用户和 IAM 用户。此字段的值在这些情况下为 `N/A`（不适用）：  
+ 用户没有第二个访问密钥。
+ 用户的第二个访问密钥从未使用过。
+ 上次使用用户的第二个访问密钥是在 IAM 于 2015 年 4 月 22 日开始跟踪此信息之前。
+ 上次使用的服务不是区域特定的服务，如 Amazon S3。

**access\$1key\$12\$1last\$1used\$1service**  
最近使用用户的第二个访问密钥访问的 AWS 服务。此字段的值使用服务的命名空间，例如 `s3` 表示 Amazon S3，`ec2` 表示 Amazon EC2。如果访问密钥在 15 分钟的时间范围内多次使用，则仅在此字段中记录第一次使用。适用于账户根用户和 IAM 用户。此字段的值在这些情况下为 `N/A`（不适用）：  
+ 用户没有第二个访问密钥。
+ 用户的第二个访问密钥从未使用过。
+ 上次使用用户的第二个访问密钥是在 IAM 于 2015 年 4 月 22 日开始跟踪此信息之前。

**cert\$11\$1active**  
如果用户有 X.509 签名证书且证书状态为 `Active`，则该值为 `TRUE`。否则为 `FALSE`。

**cert\$11\$1last\$1rotated**  
创建或上次更改用户签名证书的日期和时间，[ISO 8601 日期时间格式](https://en.wikipedia.org/wiki/ISO_8601)。如果用户没有活动的签名证书，则此字段中的值为 `N/A` (不适用)。

**cert\$12\$1active**  
如果用户有第二个 X.509 签名证书且证书状态为 `Active`，则该值为 `TRUE`。否则为 `FALSE`。  
用户最多可以有两个 X.509 签名证书，以便于进行证书轮换。

**cert\$12\$1last\$1rotated**  
创建或上次更改用户第二个签名证书的日期和时间，[ISO 8601 日期时间格式](https://en.wikipedia.org/wiki/ISO_8601)。如果用户没有第二个活动的签名证书，则此字段中的值为 `N/A` (不适用)。

**additional\$1credentials\$1info**  
当用户拥有两个以上的访问密钥或证书时，该值是其他访问密钥或证书的数量，以及可用于列出与该用户关联的访问密钥或证书的操作。

## 获取凭证报告（控制台）
<a name="getting-credential-reports-console"></a>

您可以使用 AWS 管理控制台下载逗号分隔值 (CSV) 文件形式的凭证报告。

**下载凭证报告（控制台）**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**凭证报告**。

1. 选择**下载报告**。

## 获取凭证报告 (AWS CLI)
<a name="getting-credential-reports-cliapi"></a>

**下载凭证报告 (AWS CLI)**

1. 生成凭证报告。AWS 存储单个报告。如果存在报告，生成凭证报告将覆盖以前的报告。[https://docs.aws.amazon.com/cli/latest/reference/iam/generate-credential-report.html](https://docs.aws.amazon.com/cli/latest/reference/iam/generate-credential-report.html)

1. 查看上次生成的报告：[https://docs.aws.amazon.com/cli/latest/reference/iam/get-credential-report.html](https://docs.aws.amazon.com/cli/latest/reference/iam/get-credential-report.html)

## 获取凭证报告 (AWS API)
<a name="getting-credential-reports-api"></a>

**下载凭证报告 (AWS API)**

1. 生成凭证报告。AWS 存储单个报告。如果存在报告，生成凭证报告将覆盖以前的报告。[https://docs.aws.amazon.com/IAM/latest/APIReference/API_GenerateCredentialReport.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GenerateCredentialReport.html)

1. 查看上次生成的报告：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetCredentialReport.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetCredentialReport.html)

# CodeCommit 的 IAM 凭证：Git 凭证、SSH 密钥和 AWS 访问密钥
<a name="id_credentials_ssh-keys"></a>

CodeCommit 是一种在 AWS 云中托管私有 Git 存储库的托管版本控制服务。要使用 CodeCommit，您需要配置 Git 客户端，使其与 CodeCommit 存储库通信。作为此配置的一部分，您需要提供 IAM 凭证，CodeCommit 将用该凭证来对您进行身份验证。IAM 支持具有三种凭证的 CodeCommit：
+ Git 凭证 - 一种由 IAM 生成的用户名和密码对，供您通过 HTTPS 与 CodeCommit 存储库进行通信。
+ SSH 密钥 - 一种本地生成的公有-私有密钥对，供您关联至 IAM 用户，以通过 SSH 与 CodeCommit 存储库进行通信。
+  [AWS 访问密钥](id_credentials_access-keys.md) - 供您配合 AWS CLI 中包含的凭证辅助程序使用，以通过 HTTPS 与 CodeCommit 存储库通信。

**注意**  
您无法使用 SSH 密钥或 Git 凭证来访问另一个 AWS 账户中的存储库。要了解如何在其他 AWS 账户 中为 IAM 用户和组配置对 CodeCommit 存储库的访问权限，请参阅《*AWS CodeCommit 用户指南*》[使用角色配置对 AWS CodeCommit 存储库的跨账户访问](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account.html)。

请参阅下面几节了解有关每个选项的更多信息。

## 将 Git 凭证和 HTTPS 与 CodeCommit 配合使用（推荐）
<a name="git-credentials-code-commit"></a>

借助 Git 凭证，您可以为 IAM 用户生成静态用户名和密码对，然后使用这些凭证进行 HTTPS 连接。您还可以将这些凭证与支持静态 Git 凭证的任何第三方工具或集成开发环境 (IDE) 配合使用。

这些凭证对所有支持的操作系统来说是通用的，并且兼容大多数凭证管理系统、开发环境及其他软件开发工具，因此，这是我们推荐使用的方法。您可以随时重置 Git 凭证的密码。如果不再需要凭证，您还可以停用或删除它们。

**注意**  
您无法为 Git 凭证选择自己的用户名或密码。IAM 会为您生成这些凭证，以帮助确保它们符合 AWS 的安全标准和 CodeCommit 中的安全存储库。凭证生成之后，您只能下载它们一次。因此，请务必将凭证保存在安全的位置。如有必要，您可以随时重置密码，但这会使通过旧密码配置的所有连接失效。您必须使用新密码重新配置连接，然后才能再次进行连接。

请参阅以下主题了解更多信息：
+ 要创建 IAM 用户，请参阅 [在 AWS 账户 中创建 IAM 用户](id_users_create.md)。
+ 要借助 CodeCommit 生成并使用 Git 凭证，请参阅 *AWS CodeCommit 用户指南*中的[适用于使用 Git 凭证的 HTTPS 用户](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html)。

**注意**  
在生成 Git 凭证后更改 IAM 用户的名称不会更改 Git 凭证的用户名。用户名和密码保持不变且仍然有效。

**更新服务特定凭证**

1. 除了当前正在使用的一组凭证外，创建第二组特定于服务的凭证。

1. 更新所有应用程序以使用这组新凭证，然后验证应用程序能否正常工作。

1. 将原始凭证的状态更改为“停用”。

1. 确保您的所有应用程序仍能正常工作。

1. 删除已停用的特定于服务的凭证。

## 借助 CodeCommit 使用 SSH 密钥和 SSH
<a name="ssh-keys-code-commit"></a>

借助 SSH 连接，您可以在本地计算机上创建公有和私有密钥文件，以供 Git 和 CodeCommit 进行 SSH 身份验证。将公有密钥关联至 IAM 用户，并将私有密钥存储在本地计算机上。请参阅以下主题了解更多信息：
+ 要创建 IAM 用户，请参阅 [在 AWS 账户 中创建 IAM 用户](id_users_create.md)。
+ 要创建 SSH 公有密钥并将其与 IAM 用户相关联，请参阅 *AWS CodeCommit 用户指南*中的[适用于 Linux、macOS 或 Unix 上的 SSH 连接](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-ssh-unixes.html)或请参阅[适用于 Windows 上的 SSH 连接](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-ssh-windows.html)。

**注意**  
公有密钥必须采用 ssh-rsa 格式或 PEM 格式进行编码。公有密钥的最小位长度为 2048 位，最大长度为 16384 位。这独立于您上传的文件大小。例如，您可以生成 2048 位密钥，但生成的 PEM 文件大小为 1679 字节。如果您采用其他格式或大小提供公有密钥，则系统会显示一条错误消息，指出该密钥格式无效。

## 将 HTTPS 与 AWS CLI 凭证辅助程序和 CodeCommit 配合使用
<a name="access-keys-code-commit"></a>

作为使用 Git 凭证进行 HTTPS 连接的替代方法，您可以允许 Git 在需要进行 AWS 身份验证以与 CodeCommit 存储库交互时使用 IAM 用户凭证的加密签名版本或 Amazon EC2 实例角色。这是唯一一种不需要 IAM 用户就能连接 CodeCommit 存储库的方法。这也是唯一一种适用于联合访问和临时凭证的方法。请参阅以下主题了解更多信息：
+ 有关联合访问的更多信息，请参阅[身份提供程序和 AWS 中的联合身份验证](id_roles_providers.md)和[访问经过外部身份验证的用户（身份联合验证）](id_roles_common-scenarios_federated-users.md)。
+ 有关临时凭证的更多信息，请参阅 [IAM 临时安全凭证](id_credentials_temp.md) 和[临时访问 CodeCommit 存储库](https://docs.aws.amazon.com/codecommit/latest/userguide/temporary-access.html)。

AWS CLI 凭证辅助程序不兼容 Keychain Access、Windows Credential Management 等其他凭证辅助系统。在使用凭证辅助程序配置 HTTPS 连接时，还有一些其他的配置注意事项。有关更多信息，请参阅 *AWS CodeCommit 用户指南*中的[使用 AWS CLI 凭证辅助程序在 Linux、macOS 或 Unix 上进行 HTTPS 连接](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-https-unixes.html)或使用 [AWS CLI 凭证辅助程序在 Windows 上进行 HTTPS 连接](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-https-windows.html)。

# 在 IAM 中管理服务器证书
<a name="id_credentials_server-certs"></a>

要在 AWS 中启用与您的网站或应用程序的 HTTPS 连接，您需要 SSL/TLS *服务器证书*。对于 AWS Certificate Manager (ACM) 支持的区域中的证书，我们建议您使用 ACM 预置、管理和部署您的服务器证书。在不支持的区域中，您必须将 IAM 作为证书管理器。要了解 ACM 支持的具体区域，请参阅《AWS 一般参考》中的 [AWS Certificate Manager 端点和限额](https://docs.aws.amazon.com/general/latest/gr/acm.html)**。

**重要**  
ACM 是预置、管理和部署您的服务器证书的首选工具。利用 ACM，您可以请求证书或将现有 ACM 或外部证书部署到 AWS 资源。ACM 提供的证书是免费的，并将自动续订。在[支持的区域](https://docs.aws.amazon.com/general/latest/gr/acm.html)中，您可以使用 ACM 从控制台中或以编程方式管理服务器证书。有关使用 ACM 的更多信息，请参阅 [https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html)。有关请求 ACM 证书的更多信息，请参阅*AWS Certificate Manager用户指南*中的[请求公有证书](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html)或[请求私有证书](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-private.html)。有关将第三方证书导入 ACM 中的更多信息，请参阅 *AWS Certificate Manager 用户指南*中的[导入证书](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)。

只有当您必须在 [ACM 不支持](https://docs.aws.amazon.com/general/latest/gr/acm.html)的区域中支持 HTTPS 连接时，才应使用 IAM 作为证书管理器。IAM 安全地加密您的私有密钥并将加密的版本存储在 IAM SSL 证书存储中。IAM 支持在所有区域部署服务器证书，但您必须从外部提供商获取证书，以便与 AWS 搭配使用。您无法将 ACM 证书上传到 IAM。此外，您还无法从 IAM 控制台管理证书，

有关将第三方证书上传到 IAM 的更多信息，请参阅以下主题。

**Topics**
+ [上传服务器证书（AWS API）](#upload-server-certificate)
+ [服务器证书的 AWS API 操作](#id_credentials_server-certs-api)
+ [排查服务器证书问题](#server-certificate-troubleshooting)

## 上传服务器证书（AWS API）
<a name="upload-server-certificate"></a>

要将服务器证书上传到 IAM，您必须提供证书及其匹配的私有密钥。如果证书不是自签名的，则您还必须提供证书链。(上传自签名证书时无需证书链。) 在上传证书前，请确保您已具有所有这些项目而且它们满足以下条件：
+ 证书在上传时必须是有效的。您不能在证书有效期开始 (证书的 `NotBefore` 日期) 之前或证书有效期到期 (证书的 `NotAfter` 日期) 之后上传证书。
+ 私有密钥必须是未加密的。您不能上传受密码或口令保护的私有密钥。有关解密已加密的私有密钥的帮助信息，请参阅[排查服务器证书问题](#server-certificate-troubleshooting)。
+ 证书、私有密钥和证书链必须均采用 PEM 编码。有关将这些项目转换为 PEM 格式的帮助信息，请参阅[排查服务器证书问题](#server-certificate-troubleshooting)。

要使用 [IAM API](https://docs.aws.amazon.com/IAM/latest/APIReference/) 上传证书，请发送 [UploadServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UploadServerCertificate.html) 请求。以下示例说明如何使用 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/) 执行该操作。示例假定以下各项：
+ PEM 编码的证书存储在名为 `Certificate.pem` 的文件中。
+ PEM 编码的证书链存储在名为 `CertificateChain.pem` 的文件中。
+ PEM 编码的未加密私有密钥存储在名为 `PrivateKey.pem` 的文件中。
+ （可选）您希望用键-值对标记服务器证书。例如，您可以添加标签键 `Department` 和标签值 `Engineering` 来帮助识别和组织证书。

要使用以下示例命令，请用自己的文件名替换这些文件名。将 *ExampleCertificate* 替换为已上传证书的名称。如果要标记证书，请将 *ExampleKey* 和 *ExampleValue* 标签键值对替换为您自己的值。在一个连续行上键入命令。为更便于阅读，以下示例包含了换行符和多余的空格。

```
aws iam upload-server-certificate --server-certificate-name ExampleCertificate
                                    --certificate-body file://Certificate.pem
                                    --certificate-chain file://CertificateChain.pem
                                    --private-key file://PrivateKey.pem
                                    --tags '{"Key": "ExampleKey", "Value": "ExampleValue"}'
```

如果上述命令执行成功，则它将返回有关上传的证书的元数据，包括其 [Amazon Resource Name (ARN)](reference_identifiers.md#identifiers-arns)、友好名称、标识符 (ID)、到期日期、标签等。

**注意**  
如果您要上传服务器证书以用于 Amazon CloudFront，则必须使用 `--path` 选项指定路径。路径必须以 `/cloudfront` 开头且必须包含尾部反斜杠 (例如，`/cloudfront/test/`)。

要使用 AWS Tools for Windows PowerShell上传证书，请使用 [Publish-IAMServerCertificate](https://docs.aws.amazon.com/powershell/latest/reference/Index.html?page=Publish-IAMServerCertificate.html&tocid=Publish-IAMServerCertificate)。

## 服务器证书的 AWS API 操作
<a name="id_credentials_server-certs-api"></a>

使用以下命令来查看、标记、重命名和删除服务器证书。
+ 使用 [GetServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServerCertificate.html) 命令来检索证书。此请求会返回证书、证书链（如果已上传一个）和有关证书的元数据。
**注意**  
在您上传后，无法从 IAM 下载或检索私有密钥。
+ 使用 [Get-IAMServerCertificate](https://docs.aws.amazon.com/powershell/latest/reference/Index.html?page=Get-IAMServerCertificate.html&tocid=Get-IAMServerCertificate) 来检索证书。
+ 使用 [ListServerCertificates](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListServerCertificates.html) 列出已上传的服务器证书。该请求会返回包含有关每个证书的元数据的列表。
+ 使用 [Get-IAMServerCertificates](https://docs.aws.amazon.com/powershell/latest/reference/Index.html?page=Get-IAMServerCertificates.html&tocid=Get-IAMServerCertificates) 列出已上传的服务器证书。
+ 使用 [TagServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_TagServerCertificate.html) 标记现有的服务器证书。
+ 使用 [UntagServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UntagServerCertificate.html) 取消标记服务器证书。
+ 使用 [UpdateServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateServerCertificate.html) 重命名服务器证书或更新其路径。

   以下示例说明如何使用 AWS CLI 执行该操作。

  要使用以下示例命令，请将旧的证书名称和证书路径替换为新的，然后在一个连续行上键入命令。为更便于阅读，以下示例包含了换行符和多余的空格。

  ```
  aws iam update-server-certificate --server-certificate-name ExampleCertificate
                                      --new-server-certificate-name CloudFrontCertificate
                                      --new-path /cloudfront/
  ```

  要使用 AWS Tools for Windows PowerShell 重命名服务器证书或更新其路径，请使用 [Update-IAMServerCertificate](https://docs.aws.amazon.com/powershell/latest/reference/Index.html?page=Update-IAMServerCertificate.html&tocid=Update-IAMServerCertificate)。
+ 使用 [DeleteServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServerCertificate.html) 删除服务器证书。

  要使用 AWS Tools for Windows PowerShell 删除服务器证书，请使用 [Remove-IAMServerCertificate](https://docs.aws.amazon.com/powershell/latest/reference/Index.html?page=Remove-IAMServerCertificate.html&tocid=Remove-IAMServerCertificate)。

## 排查服务器证书问题
<a name="server-certificate-troubleshooting"></a>

您必须先确保证书、私有密钥和证书链均是 PEM 编码的，然后才能将证书上传到 IAM。您还必须确保私有密钥是未加密的。请见以下 示例。

**Example PEM 编码证书示例**  

```
-----BEGIN CERTIFICATE-----
Base64-encoded certificate
-----END CERTIFICATE-----
```

**Example PEM 编码的未加密的私有密钥示例**  

```
-----BEGIN RSA PRIVATE KEY-----
Base64-encoded private key
-----END RSA PRIVATE KEY-----
```

**Example PEM 编码的证书链示例**  
一个证书链包含一个或多个证书。您可以使用文本编辑器、Windows 中的复制命令或 Linux cat 命令，以将证书文件串联到一个链中。如果包含多个证书，则每个证书必须证明上一个证书。您可以串联证书以完成该操作，包括最后的根 CA 证书。  
以下示例包含三个证书，但证书链可能包含更多或更少的证书。  

```
-----BEGIN CERTIFICATE-----
Base64-encoded certificate
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
Base64-encoded certificate
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
Base64-encoded certificate
-----END CERTIFICATE-----
```

如果这些项目在上传到 IAM 时未采用正确的格式，您可以使用 [OpenSSL](https://openssl.org/) 将其转换为正确的格式。

**将证书或证书链从 DER 转换为 PEM**  
使用 [OpenSSL **x509** 命令](https://openssl.org/docs/manmaster/man1/x509.html)，如以下示例所示。在以下示例命令中，将 `Certificate.der` 替换为包含您的 DER 编码的证书的文件的名称。将 `Certificate.pem` 替换为要包含 PEM 编码的证书的输出文件的首选名称。  

```
openssl x509 -inform DER -in Certificate.der -outform PEM -out Certificate.pem
```
 

**将私有密钥从 DER 转换为 PEM**  
使用 [OpenSSL **rsa** 命令](https://openssl.org/docs/manmaster/man1/rsa.html)，如以下示例所示。在以下示例命令中，将 `PrivateKey.der` 替换为包含您的 DER 编码的私有密钥的文件的名称。将 `PrivateKey.pem` 替换为要包含 PEM 编码的私有密钥的输出文件的首选名称。  

```
openssl rsa -inform DER -in PrivateKey.der -outform PEM -out PrivateKey.pem
```
 

**解密已加密的私有密钥 (删除密码或口令)**  
使用 [OpenSSL **rsa** 命令](https://openssl.org/docs/manmaster/man1/rsa.html)，如以下示例所示。要使用以下示例命令，请将 `EncryptedPrivateKey.pem` 替换为包含您的已加密的私有密钥的文件的名称。将 `PrivateKey.pem` 替换为要包含 PEM 编码的未加密私有密钥的输出文件的首选名称。  

```
openssl rsa -in EncryptedPrivateKey.pem -out PrivateKey.pem
```
 

**将证书包从 PKCS\$112 (PFX) 转换为 PEM**  
使用 [OpenSSL **pkcs12** 命令](https://openssl.org/docs/manmaster/man1/pkcs12.html)，如以下示例所示。在以下示例命令中，将 `CertificateBundle.p12` 替换为包含您的 PKCS\$112 编码的证书包的文件的名称。将 `CertificateBundle.pem` 替换为要包含 PEM 编码的证书捆绑包的输出文件的首选名称。  

```
openssl pkcs12 -in CertificateBundle.p12 -out CertificateBundle.pem -nodes
```
 

**将证书包从 PKCS\$17 转换为 PEM**  
使用 [OpenSSL **pkcs7** 命令](https://openssl.org/docs/manmaster/man1/pkcs7.html)，如以下示例所示。在以下示例命令中，将 `CertificateBundle.p7b` 替换为包含您的 PKCS\$17 编码的证书包的文件的名称。将 `CertificateBundle.pem` 替换为要包含 PEM 编码的证书捆绑包的输出文件的首选名称。  

```
openssl pkcs7 -in CertificateBundle.p7b -print_certs -out CertificateBundle.pem
```