

# IAM 入门
<a name="getting-started"></a>

AWS Identity and Access Management (IAM) 可以帮助您安全地控制对 Amazon Web Services (AWS) 和您的账户资源的访问。IAM 也可以使您的登录凭证保持私密。您不用专门注册使用 IAM。使用 IAM 不会产生任何费用。

使用 IAM 为用户和角色等身份提供访问帐户中资源的权限。例如，您可以对您在 AWS 外部管理的企业目录中的现有用户使用 IAM，或者您可以使用 AWS IAM Identity Center 在 AWS 中创建用户。联合身份代入已定义的 IAM 角色来访问所需的资源。有关 IAM Identity Center 的更多信息，请参阅 *AWS IAM Identity Center 用户指南*中的[什么是 IAM Identity Center？](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。

**注意**  
IAM 已与多种 AWS 产品集成。有关支持 IAM 的服务的列表，请参阅 [使用 IAM 的 AWS 服务](reference_aws-services-that-work-with-iam.md)。

要了解如何开始使用 AWS、创建管理用户和 AWS Organizations 以及使用多种服务来解决构建和启动您的第一个项目等问题，请参阅[入门资源中心](https://aws.amazon.com/getting-started/)。

# 设置 AWS 账户
<a name="getting-started-account-iam"></a>

在开始使用 IAM 之前，请确保您已完成 AWS 环境的初始设置。

注册过程完成后，AWS 会向您发送一封确认电子邮件。在任何时候，您都可以通过转至 [https://aws.amazon.com/](https://aws.amazon.com/) 并选择**我的账户**来查看当前的账户活动并管理您的账户。

当您注册此服务时，您使用电子邮件地址和密码创建一个 AWS 账户。它们是您的 AWS根用户凭证。作为最佳实践，不要使用根用户凭证访问 AWS 来执行日常任务。仅使用您的根用户凭证来执行[需要根用户凭证的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/root-user-tasks.html)。此外，不要与任何其他人共享您的凭证。相反，可以将人员添加到您的目录中，并允许其访问您的 AWS 账户。

**保护您的 AWS 账户根用户**

1.  选择**根用户**并输入您的 AWS 账户 电子邮件地址，以账户拥有者身份登录。[AWS 管理控制台](https://console.aws.amazon.com/)在下一页上，输入您的密码。

   要获取使用根用户登录方面的帮助，请参阅《AWS 登录 用户指南》**中的 [Signing in as the root user](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 为您的根用户启用多重身份验证（MFA）。

   有关说明，请参阅《IAM 用户指南》**中的[为 AWS 账户 根用户启用虚拟 MFA 设备（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**授予对 Billing Console 的访问权限**

默认情况下，AWS 账户 中的 IAM 用户和角色无法访问账单和成本管理控制台。即使他们拥有授予对特定 Billing 功能访问权限的 IAM policy，也是如此。要授予访问权限，AWS 账户 根用户必须先激活 IAM 访问权限。
**注意**  
作为安全最佳实践，我们建议您通过与 [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) 的身份联合验证来提供对资源的访问权限。当您结合 AWS Organizations 启用 IAM Identity Center 时，默认情况下会启用账单和成本管理控制台，并对组织中的所有 AWS 账户 进行合并计费。有关更多信息，请参阅《Billing and Cost Management User Guide》**中的 [Consolidating billing for AWS Organizations](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/consolidated-billing.html)。

1. 使用您的根用户凭证（您用于创建 AWS 账户的电子邮件地址和密码）登录 AWS 管理控制台。

1. 在导航栏中，选择账户名称，然后选择[账户](https://console.aws.amazon.com/billing/home#/account)。

1. 向下滚动页面，直到找到 **IAM 用户和角色的账单信息访问权限**部分，然后选择**编辑**。

1. 选中 **Activate IAM Access**（激活 IAM 访问权限）复选框以激活对 Billing and Cost Management 页面的访问权限。

1. 选择**更新**。

    该页面会显示消息 **IAM 用户/角色的账单信息访问权限已激活**。
**重要**  
单独激活 IAM 访问权限并不会授予用户或角色查看账单和成本管理控制台页面的任何权限。您还必须将所需的基于身份的策略附加到 IAM 角色以授予对账单控制台的访问权限。角色提供用户可以在需要时使用的临时凭证。

1. 使用 AWS 管理控制台 [创建角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)，担任该角色的用户可以访问账单控制台。

1. 在角色的**添加权限**页面上，添加权限以列出和查看有关您的 AWS 账户 中账单资源的详细信息。

   AWS 托管策略[账单](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/managed-policies.html#security-iam-awsmanpol-Billing)授予用户查看和编辑账单和成本管理控制台的权限。这包括查看账户使用量、修改预算和付款方式。有关您可以附加到 IAM 角色以控制对账户账单信息的访问权限的更多策略示例，请参阅《Billing and Cost Management User Guide》**中的 [AWS Billing policy examples](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-example-policies.html)。

# 查看您的 AWS 账户 ID
<a name="console-account-id"></a>

如果您已登录控制台，则可以使用以下方法查看您的 AWS 账户 的账户 ID。

## 查看您的 AWS 账户 ID
<a name="console-account-id-section-1"></a>

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

当您转到 IAM **控制面板**的 AWS 账户 部分时，将显示 AWS 账户 ID。您也可以在右上角的导航栏中查看您的账户 ID。选择您的用户名，账户 ID 会显示在您的用户名上方。

![\[账户信息下拉框（带突出显示的账户 ID）\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/find-account-id.png)


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

使用以下命令查看您的用户 ID、账户 ID 和用户 ARN：
+ [aws sts get-caller-identity](https://docs.aws.amazon.com/cli/latest/reference/sts/get-caller-identity.html)

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

使用以下 API 查看您的用户 ID、账户 ID 和用户 ARN：
+ [GetCallerIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetCallerIdentity.html) 

------

# 为您的 AWS 账户 ID 使用别名
<a name="console-account-alias"></a>

账户 ID 是 12 位数字，用于唯一标识您的账户。账户中的 IAM 用户默认使用包含账户 ID 的 Web URL 登录。如果没有 URL，他们登录时可以在 AWS 登录页面上提供账户 ID。

您的登录页面 URL 地址默认格式如下：

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

许多人发现单词比数字更容易记住，因此为您的账户 ID 创建别名可以帮助 IAM 用户更轻松地登录。

如果为您的 AWS 账户 ID 创建一个 AWS 账户 别名，您的登录页面 URL 地址格式类似如下示例。

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

**创建账户别名前的注意事项**
+ 您的 AWS 账户 只能有一个别名。如果为您的 AWS 账户创建新的别名，新别名将覆盖原有别名，包含原有别名的 URL 将失效。
+ 账户别名必须仅包含数字、小写字母和连字符。有关 AWS 账户实体的限制条件的更多信息，请参阅 [IAM 和 AWS STS 配额](reference_iam-quotas.md)。
+ 账户别名必须在给定网络*分区*内的所有 Amazon Web Services 产品中是唯一的名称。

  *分区* 是一组 AWS 区域。每个 AWS 账户的作用域为一个分区。

  以下是支持的分区：
  + `aws` - AWS 区域
  + `aws-cn` – 中国区域
  + `aws-us-gov` - AWS GovCloud (US) 区域

**注意**  
账户别名不是密码，它们将显示在面向公众的登录页面 URL 中。请勿在账户别名中包含任何敏感信息。  
创建 AWS 账户 别名后，包含 AWS 账户 ID 的原始 URL 地址依然有效，可以使用。

# 创建账户别名
<a name="account-alias-create"></a>

要执行下列步骤，您必须至少具有以下 IAM 权限：
+ `iam:ListAccountAliases`
+ `iam:CreateAccountAlias`

## 创建 AWS 账户 别名
<a name="console-account-alias-section-1"></a>

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

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

1. 在导航窗格中，选择**控制面板**。

1. 在 **AWS 账户**部分，找到**账户别名**，然后选择**创建**。如果别名已存在，则选择 **Edit**（编辑）。

1. 在对话框中，输入要用于别名的名称，然后选择**保存更改**。

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

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

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

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

------

# 删除账户别名
<a name="account-alias-delete"></a>

要执行下列步骤，您必须至少具有以下 IAM 权限：
+ `iam:ListAccountAliases`
+ `iam:DeleteAccountAlias`

## 删除账户别名
<a name="console-account-alias-section-2"></a>

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

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

1. 在导航窗格中，选择**控制面板**。

1. 在**AWS账户**部分，选择**账户别名**旁边的**删除**。

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

要删除 AWS 账户 ID 别名，请运行以下命令：
+ `[aws iam delete-account-alias](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-account-alias.html)`

要确认账户别名已删除，请尝试通过运行以下命令显示您的 AWS 账户 ID 别名：
+ `[aws iam list-account-aliases](https://docs.aws.amazon.com/cli/latest/reference/iam/list-account-aliases.html)`

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

要删除 AWS 账户 ID 别名，请调用以下操作：
+ `[DeleteAccountAlias](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteAccountAlias.html)` 

要确认账户别名已删除，请尝试通过调用以下操作显示您的 AWS 账户 ID 别名：
+ `[ListAccountAliases](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAccountAliases.html)` 

------

**注意**  
删除账户别名后，您账户的唯一登录 URL 基于您的账户 ID。任何连接到别名 URL 的尝试都将失败并且不会重定向。

# 规划对 AWS 账户的访问权限
<a name="gs-identities"></a>

设置 AWS 时，请规划希望人们如何访问您的 AWS 账户和资源，以设置精心设计且安全的身份管理解决方案。

**身份来源**

根据 IAM 最佳实践，人类用户和工作负载在访问您的 AWS 资源时应使用临时凭证。临时凭证将授予使用 IAM 角色访问资源的身份。联合到 IAM 的用户和 IAM Identity Center 内的用户（联合身份或在 IAM Identity Center 目录中创建）都使用 IAM 角色来访问资源。

在开始使用 AWS 之前，请通过以下方式规划如何设置您的身份：
+ 启用具有 AWS Organizations 的 IAM Identity Center，并将 IAM Identity Center 中的用户直接添加到组织目录中。

  要了解如何将用户直接添加到 IAM Identity Center 组织目录，请参阅[添加用户](https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html)
+ 将您现有的外部身份提供商与 IAM Identity Center 或 IAM 联合起来。

  要了解如何将外部身份提供商联合到 IAM Identity Center 组织目录，请使用相应的[入门教程](https://docs.aws.amazon.com/singlesignon/latest/userguide/tutorials.html)。

**访问管理**

确定您的用户将访问的 AWS 资源和服务，并定义每个用户、组或角色所需的访问权限和策略。
+ 如果您使用 IAM Identity Center，则会在组织的每个 AWS 账户中自动创建 IAM 身份提供商以及 IAM 角色和权限策略。这些角色和权限与您在向特定应用程序或 AWS 账户分配人员或组时指定的权限一致。

  有关更多信息，请参阅[分配用户访问权限](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-assign-account-access-user.html)和[设置对应用程序的单点登录访问权限](https://docs.aws.amazon.com/singlesignon/latest/userguide/set-up-single-sign-on-access-to-applications.html)。
+ 如果您在 AWS 账户 中将身份提供商直接与 IAM 联合，则必须创建一个供用户担任的角色和两条策略：一条信任策略，指定可以担任该角色的人员；一条权限策略，指定允许或拒绝担任该角色的人员访问的 AWS 操作和资源。

  有关更多信息，请参阅 [身份提供程序和 AWS 中的联合身份验证](id_roles_providers.md)。

# 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)。

------

# 将多重身份验证用于身份验证
<a name="gs-identities-mfa"></a>

将多重身份验证（MFA）用于身份验证是另一项 IAM 最佳实践建议。MFA 是一个额外的安全层，它要求用户在提供用户名和密码以验证其身份后提供额外的身份验证因素。该功能显著增强了安全性，使攻击者更难获得未经授权的访问，即使用户的密码遭到泄露也是如此。MFA 被广泛用作保护在线账户、云服务和其他敏感资源访问的最佳实践。AWS 支持根用户、IAM 用户、IAM Identity Center 的用户、Builder ID 和联合用户的 MFA。为了提高安全性，您可以创建策略，要求在允许用户访问资源或采取特定操作之前配置 MFA，并将这些策略附加到您的 IAM 角色。IAM Identity Center 已预先配置为默认开启 MFA，因此 IAM Identity Center 中的所有用户除了使用用户名和密码外，还必须使用 MFA 登录。

**注意**  
所有 AWS 账户 账户类型（独立账户、管理账户和成员账户）都需要为其根用户配置 MFA。如果尚未启用 MFA，则用户必须在首次登录尝试访问 AWS 管理控制台后 35 天内注册 MFA。

有关更多信息，请参阅 [Configure MFA in IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/mfa-getting-started.html) 和 [IAM 中的 AWS 多重身份验证](id_credentials_mfa.md)。

# 准备最低权限许可
<a name="getting-started-reduce-permissions"></a>

使用*最低权限许可*是 IAM 最佳实践的建议。最低权限许可的概念是授予用户执行某项任务所需的权限，而不授予其他权限。设置时，请考虑如何支持最低权限许可。根用户、管理员用户和紧急访问 IAM 用户都拥有强大的权限，而日常任务不需要这些权限。在您学习 AWS 和试用各种服务时，我们建议您在 IAM Identity Center 中至少创建一个具有较低权限的用户，以便在不同的场景中使用。您可以使用 IAM policy 来定义在特定条件下可以对特定资源执行的操作，然后使用较低权限的账户连接到这些资源。

如果您使用的是 IAM Identity Center，请考虑使用 IAM Identity Center 权限集作为开始。要了解更多信息，请参阅《IAM Identity Center 用户指南》中的 [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)**。

如果您不使用 IAM Identity Center，则请使用 IAM 角色为不同的 IAM 实体定义权限。要了解更多信息，请参阅[IAM 角色创建](id_roles_create.md)。

IAM 角色和 IAM Identity Center 权限集均可使用基于工作职能的 AWS 托管策略。有关这些策略授予权限的详细信息，请参阅 [工作职能的 AWS 托管策略](access_policies_job-functions.md)。

**重要**  
请记住，AWS 托管策略可能不会为您的特定使用场景授予最低权限许可，因为它们可供所有 AWS 客户使用。设置后，我们建议您使用 IAM Access Analyzer 根据在 AWS CloudTrail 中记录的访问活动来生成最低权限策略。有关策略生成的更多信息，请参阅 [IAM Access Analyzer 策略生成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-generation.html)。

开始使用时，建议您使用 AWS 托管策略来授予权限。经过预定义的示例活动时段（如 90 天）后，您可以查看人员和工作负载已访问的服务。然后，您可以创建新的客户管理型策略，该策略的权限有所减少以替换 AWS 托管策略。新策略应仅包括采样周期内访问的服务。更新权限以移除 AWS 托管策略并附加您创建的新的客户管理型策略。

# 查看 AWS 账户的上次访问信息
<a name="getting-started-reduce-permissions-last-accessed"></a>

您可以使用 IAM 控制台、AWS CLI 或 AWS API 查看 IAM 的上次访问服务信息。有关数据、所需的权限、故障排除和支持的区域的重要信息，请参阅[使用上次访问的信息优化 AWS 中的权限](access_policies_last-accessed.md)。

您可以在 IAM 中查看下列资源类型的信息。在每种情况下，该信息包括给定报告周期允许的服务：
+ **IAM 用户**：查看有关用户上次尝试访问每个允许的服务的信息。
+ **IAM 组**：查看有关 IAM 组成员上次尝试访问每个允许的服务的信息。此报告还包括已尝试访问的成员的总数。
+ **IAM 角色**：查看有关某个人上次使用角色尝试访问每个允许的服务的信息。
+ **Policy**（策略）- 查看有关用户或角色上次尝试访问每个允许的服务的信息。此报告还包括已尝试访问的实体的总数。

**注意**  
在 IAM 中查看资源的访问信息之前，请确保您了解信息的报告周期、报告的实体和已评估的策略类型。有关更多详细信息，请参阅[关于上次访问的信息的知识](access_policies_last-accessed.md#access_policies_last-accessed-know)。

有关上次访问的信息的更多信息，请参阅[使用上次访问的信息优化 AWS 中的权限](access_policies_last-accessed.md)。

## 查看 AWS 账户 的上次访问信息
<a name="getting-started-reduce-permissions-last-accessed-proc"></a>

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

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

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

1. 在导航窗格中，选择 **Groups**（组）、**Users**（用户）、**Roles**（角色）或 **Policies**（策略）。

1. 请选择任意用户、用户组、角色或策略名称打开相应的**摘要**页面，然后选择**上次访问时间**选项卡。根据您选择的资源查看以下信息：
   + **User group**（用户组）- 查看用户组成员（用户）可以访问的服务列表。您还可以查看成员上次访问服务的时间、成员使用的用户组策略以及发出请求的用户组成员。请选择策略的名称以了解它是托管策略还是内联用户组策略。请选择用户组成员的名称以查看该用户组的所有成员以及他们上次访问服务的时间。
   + **User**（用户）- 查看用户可以访问的服务列表。您还可以查看这些用户和角色上次访问服务的时间，以及当前与该用户关联的策略。请选择策略的名称以了解它是托管策略、内联用户策略还是用户组的内联策略。
   + **Role**（角色）- 查看角色可以访问的服务的列表、角色上次访问服务的时间以及所使用的策略。选择策略的名称以了解它是托管策略还是内联角色策略。
   + **Policy**（策略）- 查看策略中允许的操作的服务列表。还可以查看上次使用策略访问服务的时间以及使用该策略的实体（用户或角色）。**上次访问**日期还包括通过其他策略授予对此策略的访问权限的时间。选择实体的名称以了解哪些实体已附加此策略以及实体上次访问服务的时间。

1. 在表中的**服务**列中，选择 [包含上次访问操作信息的一种服务](access_policies_last-accessed-action-last-accessed.md) 的名称，以查看 IAM 实体尝试访问的管理操作的列表。您可以查看 AWS 区域以及时间戳（显示某个人上次尝试执行操作的时间）。

1. 对于 [包含上次访问操作信息的服务](access_policies_last-accessed-action-last-accessed.md) 的服务和管理操作，将会显示**上次访问时间**列。查看此列中返回的以下可能结果。这些结果会有所不同，具体取决于是否允许某个服务或操作、是否访问了此服务或操作，以及 AWS 是否跟踪此服务或操作以获取上次访问的信息。  
**<number of> 天前**  
自跟踪周期内使用服务或操作以来的天数。服务的跟踪周期为过去 400 天。Amazon S3 操作的跟踪周期从 2020 年 4 月 12 日开始。Amazon EC2、IAM Lambda 和操作的跟踪周期从 2021 年 4 月 7 日开始。所有其他服务的跟踪周期从 2023 年 5 月 23 日开始计算。要详细了解每个 AWS 区域的跟踪开始日期，请参阅 [AWS 跟踪上次访问信息的位置](access_policies_last-accessed.md#last-accessed_tracking-period)。  
**在跟踪周期间未访问**  
所跟踪的服务或操作在跟踪周期内未被实体使用。

   您可能对未出现在列表中的操作拥有权限。如果 AWS 当前未包含操作的跟踪信息，则可能会发生这种情况。您不应仅出于缺少跟踪信息来做出权限决定。相反，我们建议您使用此信息来告知和支持授予最小权限的总体策略。检查您的策略以确认访问级别是否适当。

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

您可以使用 AWS CLI 检索有关上次使用 AWS 账户 中的 IAM 资源尝试访问 AWS 服务和 Amazon S3、Amazon EC2、IAM 以及 Lambda 操作的信息。IAM 资源可能是用户、用户组、角色或策略。
+ 为 AWS 账户 中的 IAM 资源生成报告。请求必须包括要报告的 IAM 资源（用户、用户组、角色或策略）的 ARN。您可以指定要在报告中生成的粒度级别，以查看服务或服务和操作的访问详细信息。该请求返回一个 `job-id`，您之后可在 `get-service-last-accessed-details` 和 `get-service-last-accessed-details-with-entities` 操作中使用它来监控 `job-status`，直到作业完成。
  + [aws iam generate-service-last-accessed-details](https://docs.aws.amazon.com/cli/latest/reference/iam/generate-service-last-accessed-details.html)

  1. 检索有关使用上一步中的 `job-id` 参数的报告的详细信息。
     + [aws iam get-service-last-accessed-details](https://docs.aws.amazon.com/cli/latest/reference/iam/get-service-last-accessed-details.html)

     此操作根据您在 `generate-service-last-accessed-details` 操作中请求的资源类型和粒度级别返回以下信息：
     + **User**（用户）- 返回指定用户可访问的服务的列表。对于每个服务，此操作返回用户上次尝试的日期和时间以及用户的 ARN。
     + **用户组** — 返回指定用户组的成员可使用附加到用户组的策略访问的服务列表。对于每个服务，此操作返回任何用户组成员（用户）上次尝试的日期和时间。它还返回该用户的 ARN 以及已尝试访问服务的用户组成员的总数。使用 [GetServiceLastAccessedDetailsWithEntities](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLastAccessedDetailsWithEntities.html) 操作可检索所有成员的列表。
     + **Role**（角色）- 返回指定角色可访问的服务的列表。对于每个服务，此操作返回角色上次尝试的日期和时间以及角色的 ARN。
     + **Policy**（策略）- 返回指定策略允许访问的服务的列表。对于每个服务，此操作返回实体（用户或角色）上次尝试使用策略访问服务的日期和时间。它还返回实体的 ARN 以及已尝试访问的实体的总数。

  1. 了解有关在尝试访问特定服务时使用用户组或策略权限的实体的更多信息。此操作返回具有每个实体的 ARN、ID、名称、路径、类型（用户或角色）的实体列表以及实体上次尝试访问服务的时间。您还可以对用户和角色使用此操作，但它仅返回有关该实体的信息。
     + [aws iam get-service-last-accessed-details-with-entities](https://docs.aws.amazon.com/cli/latest/reference/iam/get-service-last-accessed-details-with-entities.html)

  1. 了解有关在尝试访问特定服务时身份（用户、用户组或角色）使用的基于身份的策略的更多信息。在指定身份和服务时，此操作返回身份可用于访问指定服务的权限策略的列表。此操作提供策略的当前状态，而不依赖于生成的报告。它也不返回其他策略类型，例如基于资源的策略、访问控制列表、AWS Organizations 策略、IAM 权限边界或会话策略。有关更多信息，请参阅 [策略类型](access_policies.md#access_policy-types) 或 [对单个账户内的请求进行策略评估](reference_policies_evaluation-logic_policy-eval-basics.md)。
     + [aws iam list-policies-granting-service-access](https://docs.aws.amazon.com/cli/latest/reference/iam/list-policies-granting-service-access.html)

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

您可以使用 AWS API 检索有关上次使用 IAM 资源尝试访问 AWS 服务和 Amazon S3、Amazon EC2、IAM 以及 Lambda 操作的信息。IAM 资源可能是用户、用户组、角色或策略。您可以指定要在报告中生成的粒度级别，以查看服务或服务和操作的详细信息。

1. 生成报告。请求必须包括要报告的 IAM 资源（用户、用户组、角色或策略）的 ARN。它返回一个 `JobId`，您之后可在 `GetServiceLastAccessedDetails` 和 `GetServiceLastAccessedDetailsWithEntities` 操作中使用它来监控 `JobStatus`，直到作业完成。
   + [GenerateServiceLastAccessedDetails](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GenerateServiceLastAccessedDetails.html)

1. 检索有关使用上一步中的 `JobId` 参数的报告的详细信息。
   + [GetServiceLastAccessedDetails](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLastAccessedDetails.html)

   此操作根据您在 `GenerateServiceLastAccessedDetails` 操作中请求的资源类型和粒度级别返回以下信息：
   + **User**（用户）- 返回指定用户可访问的服务的列表。对于每个服务，此操作返回用户上次尝试的日期和时间以及用户的 ARN。
   + **用户组** — 返回指定用户组的成员可使用附加到用户组的策略访问的服务列表。对于每个服务，此操作返回任何用户组成员（用户）上次尝试的日期和时间。它还返回该用户的 ARN 以及已尝试访问服务的用户组成员的总数。使用 [GetServiceLastAccessedDetailsWithEntities](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLastAccessedDetailsWithEntities.html) 操作可检索所有成员的列表。
   + **Role**（角色）- 返回指定角色可访问的服务的列表。对于每个服务，此操作返回角色上次尝试的日期和时间以及角色的 ARN。
   + **Policy**（策略）- 返回指定策略允许访问的服务的列表。对于每个服务，此操作返回实体（用户或角色）上次尝试使用策略访问服务的日期和时间。它还返回实体的 ARN 以及已尝试访问的实体的总数。

1. 了解有关在尝试访问特定服务时使用用户组或策略权限的实体的更多信息。此操作返回具有每个实体的 ARN、ID、名称、路径、类型（用户或角色）的实体列表以及实体上次尝试访问服务的时间。您还可以对用户和角色使用此操作，但它仅返回有关该实体的信息。
   + [GetServiceLastAccessedDetailsWithEntities](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLastAccessedDetailsWithEntities.html)

1. 了解有关在尝试访问特定服务时身份（用户、用户组或角色）使用的基于身份的策略的更多信息。在指定身份和服务时，此操作返回身份可用于访问指定服务的权限策略的列表。此操作提供策略的当前状态，而不依赖于生成的报告。它也不返回其他策略类型，例如基于资源的策略、访问控制列表、AWS Organizations 策略、IAM 权限边界或会话策略。有关更多信息，请参阅 [策略类型](access_policies.md#access_policy-types) 或 [对单个账户内的请求进行策略评估](reference_policies_evaluation-logic_policy-eval-basics.md)。
   + [ListPoliciesGrantingServiceAccess](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListPoliciesGrantingServiceAccess.html)

------

# 基于访问活动生成策略
<a name="getting-started_reduce-permissions-edit-policy"></a>

您可以使用 AWS CloudTrail 中记录的 IAM 用户或 IAM 角色的访问活动，让 IAM Access Analyzer 生成客户管理型策略，以仅允许访问特定用户和角色所需的服务。

IAM Access Analyzer 生成 IAM 策略时，会返回信息来帮助您进一步自定义策略。生成策略时可以返回两类信息：
+ **包含操作级别信息的策略 -** 对于某些 AWS 服务（例如 Amazon EC2），IAM Access Analyzer 可以识别在 CloudTrail 事件中发现的操作，并列出其生成的策略中所使用的操作。有关支持的服务的列表，请参阅 [IAM Access Analyzer 策略生成服务](access-analyzer-policy-generation-action-last-accessed-support.md)。对于某些服务，IAM Access Analyzer 会提示您将服务的操作添加到生成的策略中。
+ **包含服务级别信息的策略–** IAM Access Analyzer 使用[上次访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_last-accessed.html)的信息创建策略模板，其中包含最近使过用的所有服务。使用 AWS 管理控制台 时，我们会提示您查看服务并添加操作以完成策略。

## 基于访问活动生成策略
<a name="getting-started_reduce-permissions-edit-policy-section-1"></a>

在下述步骤中，我们将减少分配给角色的权限，以匹配用户的使用情况。在选择用户时，请选择其使用情况可体现该角色的用户。许多客户设置了具有 **PowerUser** 权限的测试用户账户，然后让他们在短时间内执行一组特定的任务，以确定执行这些任务所需的访问权限。

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

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

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

1. 在导航窗格中，选择**用户**，然后选择用户名以进入用户详细信息页面。

1. 在**权限**选项卡的“基于 CloudTrail 事件生成策略”部分下，选择**生成策略**。

1. 在**生成策略**页面上，配置以下项目：
   + 在**选择时间段**中，选择**过去 7 天**。
   + 对于**待分析的 CloudTrail 跟踪**，请选择记录该用户活动的区域和跟踪。
   + 请选择**创建和使用新的服务角色**。

1. 选择**生成策略**，然后等到角色创建完毕。在出现**正在生成策略**通知消息之前，请勿刷新或离开控制台页面。

1. 生成策略后，您必须根据需要使用资源的账户 ID 和 ARN 对其进行审查和自定义。此外，自动生成的策略可能不包含完成策略所需的操作级信息。有关更多信息，请参阅 [IAM Acess Analyzer 策略生成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-generation.html)。

   例如，您可能编辑第一个包括 `Allow` 效果和 `NotAction` 元素的语句以仅允许 Amazon EC2 和 Amazon S3 操作。为此，请将其替换为具有 `FullAccessToSomeServices` ID 的语句。您的新策略可能类似于以下示例策略。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
         {
             "Sid": "FullAccessToSomeServices",
             "Effect": "Allow",
             "Action": [
                 "ec2:*",
                 "s3:*"
             ],
             "Resource": "*"
         },
         {
             "Effect": "Allow",
             "Action": [
                 "iam:CreateServiceLinkedRole",
                 "iam:DeleteServiceLinkedRole",
                 "iam:ListRoles",
                 "organizations:DescribeOrganization"
             ],
             "Resource": "*"
         }
     ]
   }
   ```

------

1. 为了支持[授予最低权限](best-practices.md#grant-least-privilege)的最佳实践，请查看并更正[策略验证](access_policies_policy-validator.md)期间返回的任何错误、警告或建议。

1. 要进一步减少策略对特定操作和资源的权限，请在 CloudTrail **Event history**（事件历史记录）中查看您的事件。在此处，您可以查看有关用户已访问的特定操作和资源的详细信息。有关更多信息，请参阅 *AWS CloudTrail 用户指南*中的[在 CloudTrail 控制台中查看 CloudTrail 事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events-console.html)。

1. 查看并验证您的策略后，请使用描述性名称进行保存。

1. 导航到**角色**页面，然后选择人员在执行新策略允许的任务时将担任的角色。

1. 选择**权限**选项卡，然后依次选择**添加权限**和**附加策略**。

1. 在**附加权限策略**页面的**其他权限策略**列表中，选择您创建的策略，然后选择**附加策略**。

1. 您将返回到**角色**详细信息页面。该角色附加了两个策略：您之前的 AWS 托管策略（例如 **PowerUserAccess**）和您的新策略。选中 AWS 托管策略的复选框，然后选择**移除**。当系统要求确认移除时，选择**移除**。

根据您创建的新策略，承担此角色的 IAM 用户、SAML 和 OIDC 联合主体和工作负载现在具有缩减的访问权限。

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

您可以通过 AWS CLI 使用以下命令生成策略。

**生成策略**
+ [aws accessanalyzer start-policy-generation](https://docs.aws.amazon.com/cli/latest/reference/accessanalyzer/start-policy-generation.html)

**查看生成的策略**
+ [aws accessanalyzer get-generated-policy](https://docs.aws.amazon.com/cli/latest/reference/accessanalyzer/get-generated-policy.html)

**取消策略生成请求**
+ [aws accessanalyzer cancel-policy-generation](https://docs.aws.amazon.com/cli/latest/reference/accessanalyzer/cancel-policy-generation.html)

**查看策略生成请求列表**
+ [aws accessanalyzer list-policy-generations](https://docs.aws.amazon.com/cli/latest/reference/accessanalyzer/list-policy-generations.html)

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

您可以通过 AWS API 使用以下操作生成策略。

**生成策略**
+ [StartPolicyGeneration](https://docs.aws.amazon.com/access-analyzer/latest/APIReference/API_StartPolicyGeneration.html)

**查看生成的策略**
+ [GetGeneratedPolicy](https://docs.aws.amazon.com/access-analyzer/latest/APIReference/API_GetGeneratedPolicy.html)

**取消策略生成请求**
+ [CancelPolicyGeneration](https://docs.aws.amazon.com/access-analyzer/latest/APIReference/API_CancelPolicyGeneration.html)

**查看策略生成请求列表**
+ [ListPolicyGenerations](https://docs.aws.amazon.com/access-analyzer/latest/APIReference/API_ListPolicyGenerations.html)

------

# 使用搜索查找 IAM 资源
<a name="console_search"></a>

处理访问调查发现时，可以使用 IAM 控制台搜索页面作为查找 IAM 资源的更快捷选项。您可以使用部分资源名称或 ARN 搜索资源。

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

IAM 控制台搜索功能可查找以下所有项目：
+ 与您的搜索关键字 (用户、组、角色、身份提供商和策略) 匹配的 IAM 实体名称
+ 与搜索关键字匹配的任务

IAM 控制台搜索功能不返回有关 Access Analyzer 的信息。

搜索结果中的每一行都是一个有效链接。例如，您可以在搜索结果中选择用户名称，这样，您将转到该用户的详细信息页面。或者您也可以选择操作链接，例如 **Create user**，从而进入 **Create User** 页面。

**注意**  
访问密钥搜索要求您在搜索框中输入完整的访问密钥 ID。搜索结果显示与该键关联的用户。您可在此处直接导航到该用户的页面，并且可以在该页面中管理其访问密钥。

使用 IAM 控制台中的 **Search** 页面查找与该账户相关的项目。

**在 IAM 控制台中搜索项目**

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

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

1. 在导航窗格中，选择**搜索**。

1. 在 **Search (搜索)** 框中，键入您的搜索关键字。

1. 在搜索结果列表中选择一个链接以导航到控制台相应的部分。

下面的图标指出了通过搜索找到的项目的类型：


****  

| 图标 | 描述 | 
| --- | --- | 
|  ![\[a portrait outline on gray background\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/search_user.png)  | IAM 用户 | 
|  ![\[multiple portrait outlines on a blue background\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/search_group.png)  | IAM 组 | 
|  ![\[a magic wand icon on a navy background\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/search_role.png)  | IAM 角色 | 
|  ![\[a document icon on an organe background\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/search_policy.png)  | IAM policy | 
|  ![\[a white start on an organe background\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/search_action.png)  | “创建任务”或“附加策略”等任务 | 
|  ![\[a white X on a red background\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/search_delete.png)  | 使用关键字 delete 搜索到的结果 | 

**搜索短语示例**

您可以在 IAM 搜索中使用以下短语。将斜体术语替换为您要查找的实际 IAM 用户、组、角色、访问密钥、策略或身份提供者的名称。
+ ***user\$1name***、***group\$1name* **、***role\$1name***、***policy\$1name*** 或 ***identity\$1provider\$1name***
+ ***access\$1key***
+ **add user *user\$1name* to groups** 或 **add users to group *group\$1name***
+ **remove user *user\$1name* from groups**
+ **delete *user\$1name***、**delete *group\$1name***、**delete *role\$1name***、**delete *policy\$1name*** 或 **delete *identity\$1provider\$1name***
+ **manage access keys *user\$1name***
+ **manage signing certificates *user\$1name***
+ **users**
+ **manage MFA for *user\$1name***
+ **manage password for *user\$1name***
+ **create role**
+ **password policy**
+ **edit trust policy for role *role\$1name***
+ **show policy document for role *role\$1name***
+ **attach policy to *role\$1name***
+ **create managed policy**
+ **create user**
+ **create group**
+ **attach policy to *group\$1name***
+ **attach entities to *policy\$1name***
+ **detach entities from *policy\$1name***

------