

# IAM 用户的使用案例
<a name="gs-identities-iam-users"></a>

您在 AWS 账户 中创建的 IAM 用户拥有您可以直接管理的长期凭证。

在 AWS 中管理访问权限时，IAM 用户通常并非最佳选择。在大多数使用案例中，您应该避免依赖 IAM 用户，原因有几个。

首先，IAM 用户是为个人账户设计的，因此随着组织的发展，他们无法很好地扩展。管理大量 IAM 用户的权限和安全很快就会成为一项挑战。

IAM 用户还缺乏其他 AWS 身份管理解决方案所提供的集中可见性和审计功能。这可能会使维护安全性和监管合规性变得更具挑战性。

最后，使用更具可扩展性的身份管理方法，可以更轻松地实施安全最佳实践，例如多重身份验证、密码策略和角色分离。

建议不要依赖 IAM 用户，而是使用更强大的解决方案，例如具有 AWS Organizations 的 IAM Identity Center 或来自外部提供商的联合身份。随着 AWS 环境的增长，这些选项将为您提供更好的控制、安全性和运营效率。

因此，建议您仅对[联合用户不支持的使用案例](https://docs.aws.amazon.com//IAM/latest/UserGuide/id.html#id_which-to-choose)使用 IAM 用户。

以下列表确定 AWS 中需要带 IAM 用户的长期凭证的特定使用案例。您可以使用 IAM 在您 AWS 账户的伞形结构下创建这些 IAM 用户，并使用 IAM 管理他们的权限。
+ 紧急访问您的 AWS 账户
+ 无法使用 IAM 角色的工作负载
  + AWS CodeCommit访问
  + Amazon Keyspaces（Apache Cassandra 兼容）访问
+ 第三方 AWS 客户端
+ AWS IAM Identity Center 不适用于您的账户，而且您没有其他身份提供商



# 创建用于紧急访问的 IAM 用户
<a name="getting-started-emergency-iam-user"></a>

*[IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*是 AWS 账户内对某个人员或应用程序具有特定权限的一个身份。

让 IAM 用户进行紧急访问是创建 IAM 用户的推荐理由之一，这样当您的身份提供商无法访问时，您可以访问您的 AWS 账户。

**注意**  
作为安全[最佳实践](best-practices.md)，我们建议您通过身份联合验证而非创建 IAM 用户来提供对资源的访问权限。要了解需要使用 IAM 用户的特定情况，请参阅 [何时创建 IAM 用户（而非角色）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html#id_which-to-choose)。

## 创建用于紧急访问的 IAM 用户
<a name="getting-started-emergency-iam-user-section-1"></a>

**最小权限**  
要执行下列步骤，您必须至少具有以下 IAM 权限：  
`access-analyzer:ValidatePolicy`
`iam:AddUserToGroup`
`iam:AttachGroupPolicy`
`iam:CreateGroup`
`iam:CreateLoginProfile`
`iam:CreateUser`
`iam:GetAccountPasswordPolicy`
`iam:GetLoginProfile`
`iam:GetUser`
`iam:ListAttachedGroupPolicies`
`iam:ListAttachedUserPolicies`
`iam:ListGroupPolicies`
`iam:ListGroups`
`iam:ListGroupsForUser`
`iam:ListPolicies`
`iam:ListUserPolicies`
`iam:ListUsers`

------
#### [ Console ]<a name="gs-proc-iam-user-user"></a>

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

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

1. 在导航窗格中，选择**用户**，然后选择**创建用户**。
**注意**  
如果您启用了 IAM Identity Center，则 AWS 管理控制台 会显示一条提醒，提示您最好在 IAM Identity Center 中管理用户的访问权限。在此过程中，您创建的 IAM 用户专门在您的身份提供商不可用时使用。

1. 在**指定用户详细信息**页面中的**用户详细信息**下的**用户名**中，输入新用户的名称。这是 AWS 的登录名。在此示例中，请输入 **EmergencyAccess**。
**注意**  
用户名可以是一个最多由 64 个字母、数字和以下字符构成的组合：加号 (\$1)、等号 (=)、逗号 (,)、句点 (.)、at 符号 (@)、下划线 (\$1) 和连字符 (-)。账户中的名称必须唯一。名称不区分大小写。例如，您不能创建名为 TESTUSER 和 testuser 的两个用户。在策略中使用用户名或将其作为 ARN 的一部分时，用户名区分大小写。在控制台中向客户显示用户名时（例如在登录过程中），用户名不区分大小写。

1. 选择**向 AWS 管理控制台 提供用户访问权限 – *可选***旁边的复选框，然后选择**我想创建一个 IAM 用户**。

1. 在**控制台密码**下，选择**自动生成的密码**。

1. 清除**用户必须在下次登录时创建新密码（推荐）**旁边的复选框。由于该 IAM 用户用于紧急访问，因此受信任的管理员会保留密码，仅在需要时提供密码。

1. 在**设置权限**页面上的**权限选项**下，选择**将用户添加到组**。然后，在**用户组**下，选择**创建组**。

1. 在**创建用户组**页面上的**用户组名称**中，输入 **EmergencyAccessGroup**。然后，在**权限策略**下，选择 **AdministratorAccess**。

1. 选择**创建用户组**，返回**设置权限**页面。

1. 在**用户组**下，选择您之前创建的 **EmergencyAccessGroup** 名称。

1. 选择**下一步**，进入**查看并创建**页面。

1. 在**查看和创建**页面上，查看要添加到新用户的用户组成员资格列表。如果您已准备好继续，请选择**创建用户**。

1. 在**找回密码**页面上，选择**下载 .csv 文件**以保存包含用户凭证信息（连接 URL、用户名和密码）的 .csv 文件。

1. 保存此文件，以便在您需要登录 IAM 且无权访问身份提供商时使用。

新的 IAM 用户显示在**用户**列表中。选择**用户名称**链接以查看用户详细信息。

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

1. 创建一个名为 **EmergencyAccess** 的用户。
   + [aws iam create-user](https://docs.aws.amazon.com/cli/latest/reference/iam/create-user.html)

   ```
   aws iam create-user \
      --user-name EmergencyAccess
   ```

1. （可选）向用户提供对 AWS 管理控制台的访问权限。这需要密码。要为 IAM 用户创建密码，您可以使用 `--cli-input-json` 参数传递包含密码的 JSON 文件。您还必须向用户提供[账户登录页面的 URL](id_users_sign-in.md)。
   +  [aws iam create-login-profile](https://docs.aws.amazon.com/cli/latest/reference/iam/create-login-profile.html)

     ```
      
     aws iam create-login-profile \
        --generate-cli-skeleton > create-login-profile.json
     ```
   + 在文本编辑器中打开 `create-login-profile.json` 文件并输入符合密码策略的密码，然后保存该文件。例如：

     ```
     {
      "UserName": "EmergencyAccess",
      "Password": "Ex@3dRA0djs",
      "PasswordResetRequired": false
     }
     ```
   + 再次使用 `aws iam create-login-profile` 命令，传递 `--cli-input-json` 参数以指定您的 JSON 文件。

     ```
     aws iam create-login-profile \
        --cli-input-json file://create-login-profile.json
     ```
**注意**  
如果您在 JSON 文件中提供的密码违反了账户的密码策略，则将收到 `PassworPolicyViolation` 错误。如果发生这种情况，则请查看您账户的[密码策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_passwords_account-policy.html#default-policy-details)，并更新 JSON 文件中的密码以符合要求。

1. 创建 **EmergencyAccessGroup**，将 AWS 托管策略 `AdministratorAccess` 附加到组，然后将 **EmergencyAccess** 用户添加到该组。
**注意**  
*AWS 托管策略* 是由 AWS 创建和管理的独立策略。每个策略都有自己的 Amazon 资源名称（ARN），其中包含策略名称。例如，`arn:aws:iam::aws:policy/IAMReadOnlyAccess` 是一个 AWS 托管策略。有关 ARN 的更多信息，请参阅 [IAM ARN](reference_identifiers.md#identifiers-arns)。有关适用于 AWS 服务 的 AWS 托管式策略的列表，请参阅 [AWS 托管式策略](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/policy-list.html)。
   + [aws iam create-group](https://docs.aws.amazon.com/cli/latest/reference/iam/create-group.html) 

     ```
     aws iam create-group \
        --group-name EmergencyAccessGroup
     ```
   + [aws iam attach-group-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/attach-group-policy.html)

     ```
     aws iam attach-group-policy \
        --policy-arn arn:aws:iam::aws:policy/AdministratorAccess \
        --group-name >EmergencyAccessGroup
     ```
   + [aws iam add-user-to-group](https://docs.aws.amazon.com/cli/latest/reference/iam/add-user-to-group.html) 

     ```
     aws iam add-user-to-group \
        --user-name EmergencyAccess \
        --group-name EmergencyAccessGroup
     ```
   + 运行 [aws iam get-group](https://docs.aws.amazon.com/cli/latest/reference/iam/get-group.html) 命令列出 **EmergencyAccessGroup** 及其成员。

     ```
     aws iam get-group \
        --group-name EmergencyAccessGroup
     ```

------

# 为无法使用 IAM 角色的工作负载创建 IAM 用户
<a name="getting-started-workloads"></a>

**重要**  
作为[最佳实践](best-practices.md#lock-away-credentials)，建议您要求您的人类用户在访问 AWS 时使用[临时凭证](id_credentials_temp.md)。  
或者，您可以使用 [AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/getting-started.html) 管理自己的用户身份，包括您的管理用户。建议使用 IAM Identity Center 来管理对您账户的访问以及这些账户中的权限。如果您使用的是外部身份提供商，则还可以在 IAM Identity Center 中配置用户身份的访问权限。

如果您的使用案例需要具有编程访问权限和长期凭证的 IAM 用户，我们建议您确立程序以在需要时更新访问密钥。有关更多信息，请参阅 [更新访问密钥](id-credentials-access-keys-update.md)。

要执行一些账户和服务管理任务，您必须使用根用户凭证登录。要查看需要您以根用户身份登录的任务，请参阅[需要根用户凭证的任务](id_root-user.md#root-user-tasks)。

## 为无法使用 IAM 角色的工作负载创建 IAM 用户
<a name="getting-started-workloads-section-1"></a>

**最小权限**  
要执行下列步骤，您必须至少具有以下 IAM 权限：  
`iam:AddUserToGroup`
`iam:AttachGroupPolicy`
`iam:CreateAccessKey`
`iam:CreateGroup`
`iam:CreateServiceSpecificCredential`
`iam:CreateUser`
`iam:GetAccessKeyLastUsed`
`iam:GetAccountPasswordPolicy`
`iam:GetAccountSummary`
`iam:GetGroup`
`iam:GetLoginProfile`
`iam:GetPolicy`
`iam:GetRole`
`iam:GetUser`
`iam:ListAccessKeys`
`iam:ListAttachedGroupPolicies`
`iam:ListAttachedUserPolicies`
`iam:ListGroupPolicies`
`iam:ListGroups`
`iam:ListGroupsForUser`
`iam:ListInstanceProfilesForRole`
`iam:ListMFADevices`
`iam:ListPolicies`
`iam:ListRoles`
`iam:ListRoleTags`
`iam:ListSSHPublicKeys`
`iam:ListServiceSpecificCredentials`
`iam:ListSigningCertificates`
`iam:ListUserPolicies`
`iam:ListUserTags`
`iam:ListUsers`
`iam:UploadSSHPublicKey`
`iam:UploadSigningCertificate`

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

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

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

1. 在导航窗格中，选择**用户**，然后选择**创建用户**。

1. 在**指定用户详细信息**页面中，执行以下操作：

   1. 对于 **User name**，键入 ***WorkloadName***。将 ***WorkloadName*** 替换为要使用该账户的工作负载的名称。

   1. 选择**下一步**。

1. （可选）在**设置权限**页面上，执行以下操作：

   1. 选择 **Add user to group**。

   1. 选择**创建群组**。

   1. 在**创建用户组**对话框中，对于**用户组名称**，键入代表组中工作负载使用情况的名称。在本示例中，使用名称 **Automation**。

   1. 在**权限策略**下，选中 **PowerUserAccess** 托管策略对应的复选框。
**提示**  
在**权限策略**搜索框中输入 *Power* 以快速找到此托管策略。

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

   1. 返回到带有 IAM 组列表的页面，选中新用户组所对应的复选框。如果列表中未显示新组，请选择 **Refresh**（刷新）。

   1. 选择**下一步**。

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

1. 验证新用户的用户组成员资格。如果您已准备好继续，请选择 **Create user**（创建用户）。

1. 此时将显示一条状态通知，告知您已成功创建用户。选择**查看用户**，进入用户详细信息页面

1. 选择**安全凭证**选项卡。然后，创建工作负载所需的凭证。
   + **访问密钥** - 选择**创建访问密钥**，为用户生成和下载访问密钥。
**重要**  
这是您查看或下载秘密访问密钥的唯一机会，您必须向用户提供此信息，他们才能使用 AWS API。将用户的新访问密钥 ID 和秘密访问密钥保存在安全的地方。**完成此步骤后，您再也无法访问这些秘密访问密钥。**
   + **用于 AWS CodeCommit 的 SSH 公有密钥** – 选择**上传 SSH 公有密钥**上传 SSH 公有密钥，这样用户就可以通过 SSH 与 CodeCommit 存储库进行通信。
   + **用于 AWS CodeCommit 的 HTTPS Git 凭证** – 选择**生成凭证**以生成一组与 Git 存储库配合使用的唯一用户凭证。选择**下载凭证**，将用户名和密码保存到 .csv 文件中。这是该信息可用的唯一时间。如果您忘记或丢失密码，则需要重置密码。
   + **用于 Amazon Keyspaces（Apache Cassandra 兼容）的凭证** - 选择**生成凭证**以生成用于 Amazon Keyspaces 的特定服务用户凭证。选择**下载凭证**，将用户名和密码保存到 .csv 文件中。这是该信息可用的唯一时间。如果您忘记或丢失密码，则需要重置密码。
**重要**  
服务特定凭证是与特定 IAM 用户相关联的长期凭证，只能用于所针对的服务。要向 IAM 角色或联合身份授予使用临时凭证访问所有 AWS 资源的权限，应将 AWS 身份验证与适用于 Amazon Keyspaces 的 SigV4 身份验证插件搭配使用。有关更多信息，请参阅 *Amazon Keyspaces（Apache Cassandra 兼容）开发人员指南*中的[使用临时凭证连接到使用 IAM 角色和 SigV4 插件的 Amazon Keyspaces（Apache Cassandra 兼容）](https://docs.aws.amazon.com/keyspaces/latest/devguide/access.credentials.html#temporary.credentials.IAM)。
   + **X.509 签名证书** - 如果您需要发出安全的 SOAP 协议请求且位于 AWS Certificate Manager 不支持的区域，请选择**创建 X.509 证书**。ACM 是预置、管理和部署您的服务器证书的首选工具。有关使用 ACM 的更多信息，请参阅 [https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html)。

您已经创建具有编程访问权限的用户，并且使用 **PowerUserAccess** 任务函数对其进行配置。该用户的权限策略授予对除 IAM 和 AWS Organizations 之外的所有服务的完全访问权限。

如果工作负载无法担任 IAM 角色，则可以使用此相同的流程向其他工作负载授予对您 AWS 账户 资源的编程访问权限。此过程使用 **PowerUserAccess** 托管策略来分配权限。要遵循最低权限的最佳实践，可以考虑使用限制性更强的策略或创建自定义策略，将访问权限限制为仅访问该计划所需的资源。要了解有关使用限制用户对特定 AWS 资源的权限的策略的信息，请参阅[适用于 AWS 资源的 Access Management](access.md)和[IAM 基于身份的策略示例](access_policies_examples.md)。要在创建用户组之后向其中添加其他用户，请参阅 [编辑 IAM 组中的用户](id_groups_manage_add-remove-users.md)。

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

1. 创建一个名为 **Automation** 的用户。
   + [aws iam create-user](https://docs.aws.amazon.com/cli/latest/reference/iam/create-user.html)

   ```
                 aws iam create-user \
                     --user-name Automation
   ```

1. 创建一个名为 **AutomationGroup** 的 IAM 用户组，将 AWS 托管策略 `PowerUserAccess` 附加到该组，然后将 **Automation** 用户添加到该组。
**注意**  
*AWS 托管策略* 是由 AWS 创建和管理的独立策略。每个策略都有自己的 Amazon 资源名称（ARN），其中包含策略名称。例如，`arn:aws:iam::aws:policy/IAMReadOnlyAccess` 是一个 AWS 托管策略。有关 ARN 的更多信息，请参阅 [IAM ARN](reference_identifiers.md#identifiers-arns)。有关适用于 AWS 服务 的 AWS 托管式策略的列表，请参阅 [AWS 托管式策略](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/policy-list.html)。
   + [aws iam create-group](https://docs.aws.amazon.com/cli/latest/reference/iam/create-group.html) 

     ```
                       aws iam create-group \
                           --group-name AutomationGroup
     ```
   + [aws iam attach-group-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/attach-group-policy.html)

     ```
                       aws iam attach-group-policy \
                           --policy-arn arn:aws:iam::aws:policy/PowerUserAccess \
                           --group-name AutomationGroup
     ```
   + [aws iam add-user-to-group](https://docs.aws.amazon.com/cli/latest/reference/iam/add-user-to-group.html) 

     ```
                      aws iam add-user-to-group \
                          --user-name Automation \
                          --group-name AutomationGroup
     ```
   + 运行 [aws iam get-group](https://docs.aws.amazon.com/cli/latest/reference/iam/get-group.html) 命令列出 **AutomationGroup** 及其成员。

     ```
                     aws iam get-group \
                          --group-name AutomationGroup
     ```

1. 创建工作负载所需的安全凭证。
   + **创建用于测试的访问密钥**：[aws iam create-access-key](https://docs.aws.amazon.com/cli/latest/reference/iam/create-access-key.html)

     ```
                            aws iam create-access-key \
                                --user-name Automation
     ```

     此命令的输出显示秘密访问密钥和访问密钥 ID。将此信息记录并存储在安全的位置。如果这些凭证丢失，将无法恢复，则必须创建一个新的访问密钥。
**重要**  
这些 IAM 用户访问密钥是长期凭证，会给您的账户带来安全风险。完成测试后，建议您删除这些访问密钥。如果您有考虑访问密钥的场景，则请调查是否可以为工作负载 IAM 用户启用 MFA，并使用 [aws sts get-session-token](https://docs.aws.amazon.com/cli/latest/reference/sts/get-session-token.html) 获取会话的临时凭证，而不是使用 IAM 访问密钥。
   + **上传 AWS CodeCommit 的 SSH 公有密钥**：[aws iam upload-ssh-public-key](https://docs.aws.amazon.com/cli/latest/reference/iam/upload-ssh-public-key.html)

     以下示例假设您的 SSH 公有密钥存储在文件 `sshkey.pub` 中。

     ```
                            aws upload-ssh-public-key \
                                --user-name Automation \
                                --ssh-public-key-body file://sshkey.pub
     ```
   + **上传 X.509 签名证书**：[aws iam upload-signing-certificate](https://docs.aws.amazon.com/cli/latest/reference/iam/upload-signing-certificate.html)

     如果您需要发出安全 SOAP 协议请求且位于 AWS Certificate Manager 不支持的区域，则请上传 X.509 证书。ACM 是预置、管理和部署您的服务器证书的首选工具。有关使用 ACM 的更多信息，请参阅 [https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html)。

     以下示例假设您的 X.509 签名证书存储在文件 `certificate.pem` 中。

     ```
                           aws iam upload-signing-certificate \
                           --user-name Automation \
                           --certificate-body file://certificate.pem
     ```

如果工作负载无法担任 IAM 角色，则可以使用此相同的流程向其他工作负载授予对您 AWS 账户 资源的编程访问权限。此过程使用 **PowerUserAccess** 托管策略来分配权限。要遵循最低权限的最佳实践，可以考虑使用限制性更强的策略或创建自定义策略，将访问权限限制为仅访问该计划所需的资源。要了解有关使用限制用户对特定 AWS 资源的权限的策略的信息，请参阅[适用于 AWS 资源的 Access Management](access.md)和[IAM 基于身份的策略示例](access_policies_examples.md)。要在创建用户组之后向其中添加其他用户，请参阅 [编辑 IAM 组中的用户](id_groups_manage_add-remove-users.md)。

------