

这是 AWS CDK v2 开发者指南。旧版 CDK v1 于 2022 年 6 月 1 日进入维护阶段，并于 2023 年 6 月 1 日终止支持。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AWS Cloud Development Kit (AWS CDK) 的身份和访问管理
<a name="security-iam"></a>

 AWS 身份和访问管理 (IAM) Access Managemen AWS t 是一项可帮助管理员安全地控制对资源的访问 AWS 的服务。IAM 管理员控制谁可以*进行身份验证*（登录）和*授权*（拥有权限）使用 AWS 资源。IAM 是一项无需额外付费即可使用的 AWS 服务。

## 受众
<a name="security-iam-audience"></a>

您使用 AWS 身份和访问管理 (IAM) 的方式会有所不同，具体取决于您所做的工作。 AWS

 **服务用户**-如果您使用 AWS 服务完成工作，则管理员会为您提供所需的凭证和权限。当你使用更多 AWS 功能来完成工作时，你可能需要额外的权限。了解如何管理访问权限有助于您向管理员请求适合的权限。

 **服务管理员**-如果您负责公司的 AWS 资源，则可能拥有对 AWS 资源的完全访问权限。你的工作是确定你的 AWS 服务用户应该访问哪些服务和资源。然后，您必须向 IAM 管理员提交请求以更改服务用户的权限。请查看该页面上的信息以了解 IAM 的基本概念。

 **IAM 管理员** — 如果您是 IAM 管理员，则可能需要详细了解如何编写策略来管理对 AWS 服务的访问权限。

## 使用身份进行身份验证
<a name="security-iam-authentication"></a>

身份验证是您 AWS 使用身份凭证登录的方式。您必须以 AWS 账户根用户身份、IAM 用户*身份或通过担任 IAM 角色进行身份验证*（登录 AWS）。

您可以使用通过身份源提供的凭据以 AWS 联合身份登录。 AWS IAM 身份中心（IAM 身份中心）用户、贵公司的单点登录身份验证以及您的 Google 或 Facebook 凭证就是联合身份的示例。当您以联合身份登录时，您的管理员以前使用 IAM 角色设置了身份联合验证。当你使用联合访问 AWS 时，你就是在间接扮演一个角色。

根据您的用户类型，您可以登录 AWS 管理控制台或 AWS 访问门户。有关登录的更多信息 AWS，请参阅《[登录*用户指南》中的如何 AWS 登录*您的 AWS 账户](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)。

要 AWS 以编程方式访问，请 AWS 提供 AWS CDK、软件开发套件 (SDKs) 和命令行接口 (CLI)，以便使用您的凭据对请求进行加密签名。如果您不使用 AWS 工具，则必须自己签署请求。有关使用推荐的方法自行签署请求的更多信息，请参阅《* AWS 一般参考*》中的 “[签名版本 4 签名流程](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)”。

无论使用何种身份验证方法，您都可能需要提供其他安全信息。例如， AWS 建议您使用多重身份验证 (MFA) 来提高账户的安全性。[https://docs.aws.amazon.com/singlesignon/latest/userguide/enable-mfa.html](https://docs.aws.amazon.com/singlesignon/latest/userguide/enable-mfa.html) * AWS IAM Identity Center 用户指南中的多重身份*[验证和 IAM 用户指南 AWS中的使用多重身份验证 (MFA)。](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa.html)

### AWS 账户 root 用户
<a name="security-iam-authentication-rootuser"></a>

创建 AWS 账户时，您首先需要一个登录身份，该身份可以完全访问该账户中的所有 AWS 服务和资源。此身份称为 AWS 账户 *root 用户*，使用您创建账户时使用的电子邮件地址和密码登录即可访问该身份。强烈建议您不要使用根用户执行日常任务。保护好根用户凭证，并使用这些凭证来执行仅根用户可以执行的任务。有关要求您以根用户身份登录的任务的完整列表，请参阅 *IAM 用户指南*中的[需要根用户凭证的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

### 联合身份
<a name="security-iam-authentication-federated"></a>

作为最佳实践，要求人类用户（包括需要管理员访问权限的用户）使用与身份提供商的联合身份验证通过临时证书访问 AWS 服务。

*联合身份是指*来自您的企业用户目录、Web 身份提供商、Direc AWS tory Service、Identity Center 目录的用户，或者任何使用通过身份源提供的凭据访问 AWS 服务的用户。当联合身份访问 AWS 账户时，他们扮演角色，角色提供临时证书。

对于集中访问管理，我们建议您使用 AWS IAM 身份中心。您可以在 IAM Identity Center 中创建用户和群组，也可以连接并同步到您自己的身份源中的一组用户和群组，以便在您的所有 AWS 账户和应用程序中使用。有关 IAM 身份中心的信息，请参阅[什么是 IAM 身份中心？](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) 在 * AWS IAM 身份中心用户指南*中。

### IAM 用户和群组
<a name="security-iam-authentication-iamuser"></a>

I *[AM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*是您 AWS 账户中对个人或应用程序具有特定权限的身份。在可能的情况下，我们建议使用临时凭证，而不是创建具有长期凭证（如密码和访问密钥）的 IAM 用户。但是，如果您有一些特定的使用案例需要长期凭证以及 IAM 用户，建议您轮换访问密钥。有关更多信息，请参阅《IAM 用户指南》**中的[对于需要长期凭证的使用案例，应在需要时更新访问密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#rotate-credentials)。

[IAM 组](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)是一个指定一组 IAM 用户的身份。您不能使用组的身份登录。您可以使用组来一次性为多个用户指定权限。如果有大量用户，使用组可以更轻松地管理用户权限。例如，您可以拥有一个名为的群组，*IAMAdmins*并向该群组授予管理 IAM 资源的权限。

用户与角色不同。用户唯一地与某个人员或应用程序关联，而角色旨在让需要它的任何人代入。用户具有永久的长期凭证，而角色提供临时凭证。要了解更多信息，请参阅《IAM 用户指南》**中的 [IAM 用户的使用案例](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html)。

### IAM 角色
<a name="security-iam-authentication-iamrole"></a>

I *[AM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)*是您的 AWS 账户中具有特定权限的身份。它类似于 IAM 用户，但与特定人员没有关联。您可以通过[切换角色在 AWS 管理控制台中临时担任 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)。您可以通过调用 AWS CLI 或 AWS API 操作或使用自定义 URL 来代入角色。有关使用角色的方法的更多信息，请参阅《IAM 用户指南》中的[使用 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)**。

具有临时凭证的 IAM 角色在以下情况下很有用：
+  **联合用户访问**：要向联合身份分配权限，请创建角色并为角色定义权限。当联合身份进行身份验证时，该身份将与角色相关联并被授予由此角色定义的权限。有关用于联合身份验证的角色的信息，请参阅《IAM 用户指南》**中的[针对第三方身份提供者创建角色（联合身份验证）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp.html)。如果您使用 IAM Identity Center，则需要配置权限集。为控制您的身份在进行身份验证后可以访问的内容，IAM Identity Center 将权限集与 IAM 中的角色相关联。有关权限集的信息，请参阅 * AWS IAM Identity Center 用户指南*中的[权限集](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html)。
+  **临时 IAM 用户权限**：IAM 用户可代入 IAM 用户或角色，以暂时获得针对特定任务的不同权限。
+  **跨账户访问**：您可以使用 IAM 角色以允许不同账户中的某个人（可信主体）访问您的账户中的资源。角色是授予跨账户访问权限的主要方式。但是，对于某些 AWS 服务，您可以将策略直接附加到资源（而不是使用角色作为代理）。要了解用于跨账户访问的角色和基于资源的策略之间的差别，请参阅*《IAM 用户指南》*中的 [IAM 角色与基于资源的策略有何不同](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_compare-resource-policies.html)。
+  **跨服务访问**-某些 AWS 服务使用其他 AWS 服务中的功能。例如，当您在某个服务中进行调用时，该服务通常会在 Amazon EC2 中运行应用程序或在 Simple Storage Service（Amazon S3）中存储对象。服务可能会使用发出调用的主体的权限、使用服务角色或使用服务相关角色来执行此操作。
  +  **服务角色**：服务角色是服务代表您在账户中执行操作而代入的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。IAM 管理员可以在 IAM 中创建、修改和删除服务角色。有关更多信息，请参阅 *IAM 用户指南*中的[创建角色以向 AWS 服务委派权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。
  +  **服务相关角色**-服务相关角色是一种与服务关联的服务角色。 AWS 服务可以代入代表您执行操作的角色。服务相关角色显示在您的 AWS 账户中，并归服务所有。IAM 管理员可以查看但不能编辑服务关联角色的权限。
+  在 A@@ **mazon EC2 上运行的应用程序** — 您可以使用 IAM 角色管理在 EC2 实例上运行并发出 AWS CLI 或 AWS API 请求的应用程序的临时证书。这优先于在 EC2 实例中存储访问密钥。要向 EC2 实例分配 AWS 角色并使其可供其所有应用程序使用，您需要创建附加到该实例的实例配置文件。实例配置文件包含角色，并使 EC2 实例上运行的程序能够获得临时凭证。有关更多信息，请参阅《IAM 用户指南》**中的[使用 IAM 角色向在 Amazon EC2 实例上运行的应用程序授予权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html)。

要了解是使用 IAM 角色还是 IAM 用户，请参阅《IAM 用户指南》**中的[何时创建 IAM 角色（而不是用户）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html#id_which-to-choose_role)。