

# 什么是 IAM？
<a name="introduction"></a>

Amazon Identity and Access Management (IAM) 是一种 Web 服务，可以帮助您安全地控制对 Amazon 资源的访问。借助 IAM，您可以管理控制用户可访问哪些 Amazon 资源的权限。可以使用 IAM 来控制谁通过了身份验证（准许登录）并获得授权（具有相应权限）来使用资源。IAM 提供了控制您 Amazon Web Services 账户 身份验证和授权所需的基础设施。

**身份**

 当您创建 Amazon Web Services 账户 时，最初使用的是一个对所有 Amazon Web Services 服务和资源拥有完全访问权限的登录身份（称为 Amazon Web Services 账户*根用户*）。我们强烈建议不要使用根用户进行日常任务。有关要求根用户凭证的任务，请参阅*《IAM 用户指南》*中的[需要根用户凭证的任务](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

除了根用户之外，使用 IAM 还可以设置其他身份，例如管理员、分析师和开发人员，并且可以授予其访问成功完成其任务所需资源的访问权限。

**访问管理**

在 IAM 中设置用户后，他们将使用其登录凭证向 Amazon 进行身份验证。通过匹配登录凭证与受 Amazon Web Services 账户 信任的主体（IAM 用户、Amazon STS 联合主体、IAM 角色或应用程序）来进行身份验证。接下来，请求授予主体对资源的访问权限。如果用户已被授予资源的相应资源，则根据授权请求授予访问权限。例如，当您首次登录控制台并进入控制台主页时，您并未访问特定服务。当您选择一项服务时，授权请求将发送至该服务，并查看您的身份是否在授权用户列表中，正在执行哪些策略来控制授予的访问级别，以及任何其他可能生效的策略。授权请求可以由您 Amazon Web Services 账户 内的主体提出，也可以由您信任的其他 Amazon Web Services 账户 提出。

获得授权后，主体可以对您 Amazon Web Services 账户 里的资源采取行动或执行操作。例如，主体可以启动新的 Amazon Elastic Compute Cloud 实例、修改 IAM 群组成员资格或删除 Amazon Simple Storage Service 存储桶。

**提示**  
Amazon 培训和认证提供了介绍 IAM 的 10 分钟视频：  
[Amazon Identity and Access Management 简介](https://www.aws.training/learningobject/video?id=16448)。

**服务可用性**

IAM 和很多其他 Amazon 服务一样，具备[最终一致性](https://wikipedia.org/wiki/Eventual_consistency)。IAM 通过复制 Amazon 在全球的数据中心内多个服务器上的数据实现高可用性。如果成功请求更改某些数据，则更改会提交并安全存储。不过，更改必须跨 IAM 复制，这需要时间。此类更改包括创建或更新用户、组、角色或策略。在应用程序的关键、高可用性代码路径中，我们不建议进行此类 IAM 更改。而应在不常运行的、单独的初始化或设置例程中进行 IAM 更改。另外，在生产工作流程依赖这些更改之前，请务必验证更改已传播。有关更多信息，请参阅 [我所做的更改可能不会立即可见](troubleshoot.md#troubleshoot_general_eventual-consistency)。

**服务费用信息**

Amazon Identity and Access Management（IAM）、Amazon IAM Identity Center 和 Amazon Security Token Service（Amazon STS）是为您的 Amazon 账户提供的功能，不会另外收费。只有在您使用 IAM 用户或 Amazon STS 临时安全证书访问其他 Amazon 服务时才会向您收取费用。

IAM Access Analyzer 外部访问分析没有额外费用。但是，您需要为未使用的访问分析和客户策略检查支付费用。有关 IAM Access Analyzer 的收费和价格的完整列表，请参阅 [IAM Access Analyzer 定价](https://www.amazonaws.cn/iam/access-analyzer/pricing)。

有关其他 Amazon 产品的定价信息，请参阅 [Amazon Web Services 定价页面](https://www.amazonaws.cn/pricing/)。

**与其他 Amazon 服务集成**

IAM 已与很多 Amazon 服务集成。有关与 IAM 配合使用的 Amazon 服务列表以及这些服务支持的 IAM 功能，请参阅 [使用 IAM 的 Amazon 服务](reference_aws-services-that-work-with-iam.md)。

# 为什么应该使用 IAM？
<a name="intro-iam-features"></a>

Amazon Identity and Access Management 是一款用于安全管理 Amazon 资源访问权限的强大工具。使用 IAM 的主要优点之一是能够向您的 Amazon 账户授予共享访问权限。此外，IAM 还允许您分配精细的权限，从而可让您精确控制不同用户可以对特定资源执行的操作。这种访问控制级别对于维护 Amazon 环境的安全至关重要。IAM 还具有其他几项安全功能。您可以添加多重身份验证（MFA）以获得额外的保护层，以及利用身份联合验证无缝集成来自公司网络或其他身份提供商的用户。IAM 还与 Amazon CloudTrail 集成，并且提供详细的日志记录和身份信息，以支持审计和合规性要求。通过利用这些功能，您可以协助确保对关键 Amazon 资源的访问受到严格控制和安全保障。

## 对您 Amazon Web Services 账户 的共享访问权限
<a name="intro-shared-access"></a>

您可以向其他人员授予管理和使用您 Amazon 账户中的资源的权限，而不必共享您的密码或访问密钥。

## 精细权限
<a name="intro-granular-permissions"></a>

您可以针对不同资源向不同人员授予不同权限。例如，您可以允许某些用户完全访问 Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Simple Storage Service (Amazon S3)、Amazon DynamoDB、Amazon Redshift 以及其他 Amazon 服务。对于另一些用户，您可以允许仅针对某些 Amazon S3 存储桶的只读访问权限，或是仅管理某些 Amazon EC2 实例的权限，或是访问您的账单信息但无法访问任何其他内容的权限。

## 在 Amazon EC2 上运行的应用程序针对 Amazon 资源的安全访问权限
<a name="intro-secure-access"></a>

您可以使用 IAM 功能安全地为 EC2 实例上运行的应用程序提供凭证。这些凭证为您的应用程序提供权限以访问其他 Amazon 资源。示例包括 S3 存储桶和 DynamoDB 表。

## 多重身份验证 (MFA)
<a name="intro-mfa-iam"></a>

您可以向您的账户和各个用户添加双重身份验证以实现更高安全性。借助 MFA，您或您的用户不仅必须提供使用账户所需的密码或访问密钥，还必须提供来自经过特殊配置的设备的代码。如果您已将 FIDO 安全密钥与其他服务配合使用，则该密钥应该具有 Amazon 支持的配置，您可以使用 WebAuthn 实现 MFA 安全性。有关更多信息，请参阅[使用密钥或安全密钥的受支持配置](id_credentials_mfa_fido_supported_configurations) 

## 联合身份
<a name="intro-identity-federation-iam"></a>

您可以允许已在其他位置（例如，在您的企业网络中或通过互联网身份提供商）获得密码的用户获取对您 Amazon Web Services 账户 的访问权限。这些用户被授予符合 IAM 最佳实践建议的临时凭证。使用联合身份验证增强 Amazon 账户的安全性。

## 实现保证的身份信息
<a name="intro-identity-assurance"></a>

如果您使用 [Amazon CloudTrail](https://www.amazonaws.cn/cloudtrail/)，则会收到日志记录，其中包括有关对您账户中的资源进行请求的人员的信息。这些信息基于 IAM 身份。

## PCI DSS 合规性
<a name="intro-pci-dss-compliance"></a>

IAM 支持由商家或服务提供商处理、存储和传输信用卡数据，而且已经验证符合支付卡行业 (PCI) 数据安全标准 (DSS)。有关 PCI DSS 的更多信息，包括如何请求 Amazon PCI Compliance Package 的副本，请参阅 [PCI DSS 第 1 级](https://www.amazonaws.cn/compliance/pci-dss-level-1-faqs/)。

# 何时使用 IAM？
<a name="when-to-use-iam"></a>

Amazon Identity and Access Management 是一项核心基础设施服务，为 Amazon 中基于身份的访问控制提供基础。每次访问 Amazon 账户时都使用 IAM。您使用 IAM 的方式将取决于组织内的具体职责和工作职能。Amazon 服务的用户利用 IAM 访问其日常工作所需的 Amazon 资源，管理员则授予相应的权限。另一方面，IAM 管理员负责管理 IAM 身份并编写策略来控制对资源的访问。无论您的角色如何，每次对 Amazon 资源进行身份验证和授权访问时，您都会与 IAM 进行交互。这可能涉及以 IAM 用户身份登录、担任 IAM 角色或利用联合身份验证实现无缝访问。了解各种 IAM 功能和使用案例是有效管理 Amazon 环境安全访问的关键举措。在创建策略和权限时，IAM 提供一种灵活而精细的方法。除了基于身份的策略（指定用户或角色可以访问的操作和资源）之外，您还可以定义信任策略来控制哪些主体可以担任角色。通过配置这些 IAM 策略，您可以帮助确保用户和应用程序具有执行其所需任务的适当权限级别。

## 当您执行不同的工作职能时
<a name="security_iam_audience"></a>

Amazon Identity and Access Management 是一项核心基础设施服务，为 Amazon 中基于身份的访问控制提供基础。每次访问 Amazon 账户时都使用 IAM。

 使用 IAM 的方式因您可以在 Amazon 中执行的操作而异。
+ 服务用户 – 如果使用 Amazon 服务来完成工作，则您的管理员会为您提供所需的凭证和权限。当您使用更多高级功能来完成工作时，您可能需要额外权限。了解如何管理访问权限有助于您向管理员请求适合的权限。
+ 服务管理员 – 如果您在公司负责管理 Amazon 资源，则您可能具有对 IAM 的完全访问权限。您有责任确定您的服务用户应访问哪些 IAM 功能和资源。然后，您必须向 IAM 管理员提交请求以更改服务用户的权限。请查看该页面上的信息以了解 IAM 的基本概念。
+ IAM 管理员 – 如果您是 IAM 管理员，您可以管理 IAM 身份并编写策略以管理对 IAM 的访问。

 

## 当您获得授权访问 Amazon 资源时
<a name="security_iam_authentication-intro"></a>

身份验证是您使用身份凭证登录 Amazon 的方法。您必须作为 Amazon Web Services 账户根用户、IAM 用户或通过担任 IAM 角色进行身份验证。

对于编程访问，Amazon 提供了 SDK 和 CLI 来对请求进行加密签名。有关更多信息，请参阅*《IAM 用户指南》*中的[适用于 API 请求的 Amazon 签名版本 4](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_sigv.html)。

## 当您以 IAM 用户身份登录时
<a name="security_iam_authentication-iamuser"></a>

*[IAM 用户](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_users.html)*是对某个人员或应用程序具有特定权限的一个身份。建议使用临时凭证，而非具有长期凭证的 IAM 用户。有关更多信息，请参阅*《IAM 用户指南》*中的[要求人类用户使用带有身份提供商的联合身份验证才能使用临时凭证访问 Amazon](https://docs.amazonaws.cn/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)。

[https://docs.amazonaws.cn/IAM/latest/UserGuide/id_groups.html](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_groups.html)指定一组 IAM 用户，便于更轻松地对大量用户进行权限管理。有关更多信息，请参阅*《IAM 用户指南》*中的 [IAM 用户使用案例](https://docs.amazonaws.cn/IAM/latest/UserGuide/gs-identities-iam-users.html)。

## 当您代入 IAM 角色时
<a name="security_iam_authentication-iamrole"></a>

*[IAM 角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles.html)*是具有特定权限的身份，可提供临时凭证。您可以通过[从用户切换到 IAM 角色（控制台）](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)或调用 Amazon CLI 或 Amazon API 操作来担任角色。有关更多信息，请参阅《IAM 用户指南》**中的[担任角色的方法](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_manage-assume.html)。

IAM 角色对于联合用户访问、临时 IAM 用户权限、跨账户访问、跨服务访问以及在 Amazon EC2 上运行的应用程序非常有用。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

## 当您创建策略和权限时
<a name="getting-started_trust-policies"></a>

您可通过创建策略 (这是列出用户可执行的操作以及操作可以影响的资源的文档) 向用户授予权限。默认情况下会拒绝未显式允许的任何操作或资源。可将策略创建并附加到主体（用户、用户组、用户代入的角色以及资源）。

您可以将这些策略与 IAM 角色一起使用：
+ **信任策略**：定义哪些[主体](https://docs.amazonaws.cn/glossary/latest/reference/glos-chap.html?icmpid=docs_homepage_addtlrcs#principal)能够在何种条件下担任该角色。信任策略是适用于 IAM 角色的一种特定类型的基于资源的策略。角色只能具有一个信任策略。
+ **基于身份的策略（内联和托管）**– 这些策略定义了角色的用户能够对哪些资源执行（或拒绝执行）的权限。

使用 [IAM 基于身份的策略示例](access_policies_examples.md) 帮助您的 IAM 身份定义权限。在找到所需的策略后，请选择查看该策略以查看该策略的 JSON 版本。您可以将该 JSON 策略文档用作自己策略的模板。

**注意**  
如果您使用 IAM Identity Center 管理用户，则可以在 IAM Identity Center 中分配权限集，而非将权限策略附加到主体。当您向组或 Amazon IAM Identity Center 中的用户 分配权限集时，IAM Identity Center 会在每个账户中创建相应的 IAM 角色，并将权限集中指定的策略附加到这些角色中。IAM Identity Center 管理该角色，并允许您定义的授权用户代入该角色。如果您修改权限集，IAM Identity Center 会确保相应的 IAM policy 和角色也相应更新。  
有关 IAM Identity Center 的更多信息，请参阅 *Amazon IAM Identity Center 用户指南*中的[什么是 IAM Identity Center？](https://docs.amazonaws.cn/singlesignon/latest/userguide/what-is.html)。

# 我如何管理 IAM？
<a name="intro-managing-iam"></a>

在 Amazon 环境中管理 Amazon Identity and Access Management 涉及利用各种工具和界面。最常用的方法是通过 Amazon Web Services 管理控制台，这一基于 Web 的界面可让您执行各种 IAM 管理任务，从创建用户和角色到配置权限。

对于更熟悉命令行界面的用户，Amazon 提供了两组命令行工具 - Amazon Command Line Interface 和 Amazon Tools for Windows PowerShell。这些工具可让您直接从终端发出与 IAM 相关的命令，通常比导航控制台更高效。此外，Amazon CloudShell 允许您使用与控制台登录相关联的权限，直接从 Web 浏览器运行 CLI 或 SDK 命令。

除了控制台和命令行之外，Amazon 还提供适用于各种编程语言的软件开发工具包（SDK），使您能够将 IAM 管理功能直接集成到自己的应用程序中。或者，您可以使用 IAM Query API（可让您直接向服务发布 HTTPS 请求）以编程方式访问 IAM。利用这些不同的管理方法，您可以灵活地将 IAM 整合到现有的工作流程和过程中。

## 使用 Amazon Web Services 管理控制台
<a name="intro-managing-iam-section-1"></a>

Amazon 管理控制台是一款 Web 应用程序，其中包含并引用了多种用于管理 Amazon 资源的服务控制台。首次登录时，您会看到控制台主页。通过控制台主页可以访问各个服务控制台，此外还可以一站式访问执行 Amazon 相关任务所需的信息。登录控制台后可以使用哪些服务和应用程序，取决于您有权访问哪些 Amazon 资源。您可以通过代入角色、成为已获得相关权限的组成员或获得显式授权来获得资源权限。对于独立 Amazon 账户，根用户或 IAM 管理员负责配置对资源的访问权限。对于 Amazon Organizations，管理账户或委托管理员负责配置对资源的访问权限。

如果您计划让人使用 Amazon 管理控制台来管理 Amazon 资源，我们建议您为用户配置临时凭证，以遵循 [最佳安全实践](best-practices.md)。代入角色的 IAM 用户、联合主体和 IAM Identity Center 中的用户拥有临时凭证，而 IAM 用户和根用户拥有长期凭证。根用户凭证提供对 Amazon Web Services 账户的完全访问权限，而其他用户拥有的凭证提供对 IAM policy 授权的资源的访问权限。

不同类型的 Amazon Web Services 管理控制台 用户会有不同的登录体验。
+ IAM 用户和根用户通过 Amazon 主登录 URL（https://signin.aws.amazon.com）登录。登录之后，这些用户可以访问账户中已获得权限的资源。

  您必须使用根用户电子邮件地址和密码才能以根用户身份登录。

  您必须拥有 Amazon Web Services 账户号码或别名、IAM 用户名和 IAM 用户密码才能以 IAM 用户身份登录。

  我们建议您仅在需要长期凭证的特定情况（例如用于紧急访问）下使用账户中的 IAM 用户，并且仅将根用户用于 [需要根用户凭证的任务](id_root-user.md#root-user-tasks)。

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

  完成会话后应退出控制台，以防止之前的登录信息被重复使用。
+ IAM Identity Center 用户使用其组织特有的特定 Amazon Web Services 访问门户登录。登录后，这些用户可以选择要访问的账户或应用程序。如果选择访问某个账户，则可以选择要在管理会话中使用的权限集。
+ 在与 Amazon Web Services 账户关联的外部身份提供者中管理的 OIDC 和 SAML 联合主体使用自定义企业访问门户登录。用户可用的 Amazon 资源取决于其组织选择的策略。

**注意**  
可以要求根用户、IAM 用户和 IAM Identity Center 中的用户通过 Amazon 的多重身份验证（MFA）验证身份后才能获得对 Amazon 资源的访问权限，从而增强安全性。启用 MFA 后，您还必须有权访问 MFA 设备才能登录。

要详细了解不同用户如何登录管理控制台，请参阅《Amazon 登录用户指南》中的 [Sign in to the Amazon Management Console](https://docs.amazonaws.cn/signin/latest/userguide/console-sign-in-tutorials.html)**。

## Amazon 命令行工具
<a name="management-method-cli"></a>

您可以使用 Amazon 命令行工具，在系统的命令行中发出命令以执行 IAM 和 Amazon 任务。与控制台相比，使用命令行更快、更方便。如果要构建执行 Amazon 任务的脚本，命令行工具也会十分有用。

Amazon 提供两组命令行工具：[Amazon Command Line Interface](https://www.amazonaws.cn/cli/)（Amazon CLI）和 [Amazon Tools for Windows PowerShell](https://www.amazonaws.cn/powershell/)。有关安装和使用 Amazon CLI 的更多信息，请参阅 [Amazon Command Line Interface 用户指南](https://docs.amazonaws.cn/cli/latest/userguide/)。有关安装和使用 Tools for Windows PowerShell 的信息，请参阅 [Amazon Tools for PowerShell 用户指南](https://docs.amazonaws.cn/powershell/latest/userguide/)。

登录控制台后，您可以从浏览器使用 Amazon CloudShell 来运行 CLI 或 SDK 命令。访问 Amazon 资源的权限取决于您登录控制台时使用的凭证。根据您的经验，您可能会发现使用 CLI 来管理 Amazon Web Services 账户 更高效。有关更多信息，请参阅 [将 Amazon CloudShell 与 Amazon Identity and Access Management 结合使用](using-aws-with-cloudshell.md)。

### Amazon 命令行界面（CLI）和软件开发工具包（SDK）
<a name="management-method-cli-sdk"></a>

IAM Identity Center 和 IAM 用户在通过 CLI 或相关 SDK 中的应用程序编程接口（API）进行身份验证时，将使用不同的方法来验证其凭证。

凭证和配置设置位于不同位置（例如，系统或用户环境变量、本地 Amazon 配置文件）或在命令行上显式声明为参数。某些位置优先于其他位置。

IAM Identity Center 和 IAM 都提供了可用于 CLI 或 SDK 的访问密钥。IAM Identity Center 访问密钥是可以自动刷新的临时凭证，建议优先使用这种访问密钥，而不是与 IAM 用户关联的长期访问密钥。

要使用 CLI 或 SDK 来管理 Amazon Web Services 账户，您可以在浏览器中使用 Amazon CloudShell。如果您使用 CloudShell 来运行 CLI 或 SDK 命令，则必须首先登录控制台。访问 Amazon 资源的权限取决于您登录控制台时使用的凭证。根据您的经验，您可能会发现使用 CLI 来管理 Amazon Web Services 账户更高效。

对于应用程序开发，您可以将 CLI 或 SDK 下载到您的计算机上，然后从命令提示符或 Docker 窗口登录。在这种情况下，您可以在 CLI 脚本或 SDK 应用程序中配置身份验证和访问凭证。您可以通过不同的方式配置对资源的编程访问权限，具体取决于环境和可用的访问权限。
+ 使用 Amazon 服务进行本地代码身份验证时，推荐的方法是使用 IAM Identity Center 和 IAM Roles Anywhere
+ 对 Amazon 环境中运行的代码，推荐的身份验证方法是使用 IAM 角色或使用 IAM Identity Center 凭证。

使用 Amazon Web Services 访问门户登录时，您可以从选择权限集的起始页获取短期凭证。这些凭证有明确的有效期，不会自动刷新。如果要使用此类凭证，请在登录 Amazon 门户后，选择 Amazon Web Services 账户，然后选择该权限集。选择**命令行或编程访问权限**以查看可用于以编程方式或通过 CLI 访问 Amazon 资源的选项。有关这些方法的更多信息，请参阅《IAM Identity Center 用户指南》的 [Getting and refreshing temporary credentials](https://docs.amazonaws.cn/singlesignon/latest/userguide/howtogetcredentials.html#how-to-get-temp-credentials)**。这些凭证通常在应用程序开发期间用于快速测试代码。

我们建议在自动化访问您的 Amazon 资源时使用会自动刷新的 IAM Identity Center 凭证。如果您已在 IAM Identity Center 中配置了用户和权限集，则可以使用 `aws configure sso` 命令来使用命令行向导，这将有助于识别可供您使用的凭证并将其存储在配置文件中。有关配置文件配置的更多信息，请参阅《Amazon 命令行界面版本 2 用户指南》中的 [使用 `aws configure sso` 向导配置您的配置文件](https://docs.amazonaws.cn/cli/latest/userguide/sso-configure-profile-token.html#sso-configure-profile-token-auto-sso)**。

**注意**  
许多示例应用程序使用与 IAM 用户或根用户关联的长期访问密钥。在试用学习时，您只应在沙盒环境中使用长期凭证。查看 [长期访问密钥的替代方案](security-creds-programmatic-access.md#security-creds-alternatives-to-long-term-access-keys)，并计划尽快将代码过渡到使用替代凭证，例如 IAM Identity Center 凭证或 IAM 角色。转换代码后，请删除访问密钥。

要了解有关配置 CLI 的更多信息，请参阅《Amazon 命令行界面版本 2 用户指南》中的 [安装或更新最新版本的 Amazon CLI](https://docs.amazonaws.cn/cli/latest/userguide/getting-started-install.html)**，以及《Amazon 命令行界面用户指南》中的 [身份验证和访问凭证](https://docs.amazonaws.cn/cli/latest/userguide/cli-chap-authentication.html)**

要了解有关配置 SDK 的更多信息，请参阅《Amazon SDK 和工具参考指南》中的 [IAM Identity Center authentication](https://docs.amazonaws.cn/sdkref/latest/guide/access-sso.html)**，以及《Amazon SDK 和工具参考指南》中的 [IAM Roles Anywhere](https://docs.amazonaws.cn/sdkref/latest/guide/access-rolesanywhere.html)**。

## 使用 Amazon SDK
<a name="intro-managing-iam-section-2"></a>

Amazon 提供的 SDK（软件开发工具包）包含各种编程语言和平台（Java、Python、Ruby、.NET、iOS、Android 等）的库和示例代码。开发工具包提供了可通过编程方式访问 IAM 和 Amazon 的便捷方式。例如，软件开发工具包执行以下类似任务：加密签署请求、管理错误以及自动重试请求。有关 Amazon 软件开发工具包的信息（包括如何下载及安装），请参阅[适用于 Amazon Web Services 的工具](https://www.amazonaws.cn/tools/)页面。

## 使用 IAM Query API
<a name="intro-managing-iam-section-3"></a>

您可以使用 IAM Query API（可让您直接向服务发布 HTTPS 请求）以编程方式访问 IAM 和 Amazon。当您使用 Query API 时，必须添加代码，才能使用您的凭证对请求进行数字化签名。有关更多信息，请参阅 [使用 HTTP 查询请求调用 IAM API](programming.md) 和 [IAM API 参考](https://docs.amazonaws.cn/IAM/latest/APIReference/)。

# IAM 的工作原理
<a name="intro-structure"></a>

Amazon Identity and Access Management 提供了控制您 Amazon Web Services 账户 身份验证和授权所需的基础设施。

首先，人类用户或应用程序使用其登录凭证与 Amazon 进行身份验证。IAM 将登录凭证与受 Amazon Web Services 账户 信任的主体（IAM 用户、Amazon STS 联合用户主体、IAM 角色或应用程序）进行匹配，验证访问 Amazon 的权限。

接下来，IAM 请求授予主体对资源的访问权限。IAM 根据授权请求授予或拒绝访问。例如，当您首次登录控制台并进入控制台主页时，您并未访问特定服务。选择一项服务后，将向 IAM 发送该服务的授权请求。IAM 将验证您的身份是否在授权用户列表中，确定哪些策略控制授予的访问权限级别，并评估任何其他可能生效的策略。您的 Amazon Web Services 账户 或您信任的其他 Amazon Web Services 账户 内的主体可以提出授权请求。

获得授权后，主体可以对您 Amazon Web Services 账户 中的资源执行操作。例如，主体可以启动新的 Amazon Elastic Compute Cloud 实例、修改 IAM 群组成员资格或删除 Amazon Simple Storage Service 存储桶。下图通过 IAM 基础设施说明了这一过程：

![\[此图表显示了 IAM 服务如何对主体进行身份验证和授权，以对其他 Amazon 服务或资源执行操作。\]](http://docs.amazonaws.cn/IAM/latest/UserGuide/images/intro-diagram _policies_800.png)


## 请求的组成部分
<a name="intro-structure-request"></a>

在主体尝试使用 Amazon Web Services 管理控制台、Amazon API 或 Amazon CLI 时，该主体将向 Amazon 发送*请求*。请求包含以下信息：
+ **操作**：主体想要执行的操作，例如 Amazon Web Services 管理控制台 中的操作，或者 Amazon CLI 或 Amazon API 中的操作。
+ **资源**：主体请求对其执行操作的 Amazon 资源对象。
+ **主体** – 已使用实体（用户或角色）发送请求的人员或应用程序。有关主体的信息包括权限策略。
+ **环境数据**：有关 IP 地址、用户代理、SSL 启用状态和时间戳的信息。
+ **资源数据**：与请求的资源相关的数据，例如 DynamoDB 表名或 Amazon EC2 实例上的标签。

Amazon 将请求信息收集到*请求上下文*中，IAM 会对其进行评估以授权该请求。

## 如何对主体进行身份验证
<a name="intro-structure-authentication"></a>

主体使用其凭证登录 Amazon，IAM 会对其进行身份验证，以允许主体向 Amazon 发送请求。某些服务（如 Amazon S3 和 Amazon STS）允许来自匿名用户的特定请求。不过，它们是该规则的例外情况。每种类型的用户都要经过身份验证。
+ **根用户**：用于身份验证的登录凭证是您用于创建 Amazon Web Services 账户 的电子邮件地址和当时指定的密码。
+ **联合主体**：您的身份提供者会对您进行身份验证并将您的凭证传递给 Amazon，您无需直接登录 Amazon。IAM Identity Center 和 IAM 都支持身份联合验证。
+ **Amazon IAM Identity Center 目录 中的用户***（非联合用户）*：直接在 IAM Identity Center 默认目录中创建的用户使用 Amazon Web Services 访问门户登录并提供您的用户名和密码。
+ **IAM 用户**：您可以通过提供账户 ID 或别名、用户名和密码进行登录。要对 API 或 Amazon CLI 中的工作负载进行身份验证，您可以通过承担角色使用临时凭证，也可以通过提供访问密钥和私密访问密钥来使用长期凭证。

  要了解有关 IAM 实体的更多信息，请参阅 [IAM 用户](id_users.md) 和 [IAM 角色](id_roles.md)。

Amazon 建议您对所有用户使用多重身份验证（MFA）以提高您账户的安全性。要了解有关 MFA 的更多信息，请参阅 [IAM 中的 Amazon 多重身份验证](id_credentials_mfa.md)。

## 授权和权限策略基础知识
<a name="intro-structure-authorization"></a>

授权是指主体拥有完成其请求所需的权限。在授权期间，IAM 使用请求上下文中的值来识别适用于该请求的策略。然后，它使用策略来确定是允许还是拒绝请求。IAM 将大多数权限策略存储为指定主体实体权限的 [JSON 文档](access_policies.md#access_policies-json)。

有[多种类型的策略](access_policies.md)可以影响授权请求。要向用户提供访问您账户中 Amazon 资源的权限，您可以使用基于身份的策略。基于资源的策略可以授予[跨账户访问权限](access_permissions-required.md#UserPermissionsAcrossAccounts)。要在另一个账户中发出请求，此其他账户中的策略必须允许访问资源，*并且*您用于发出请求的 IAM 实体必须具有允许该请求基于身份的策略。

IAM 检查应用于请求上下文的每个策略。IAM 策略评估使用*显式拒绝*，这意味着如果一个权限策略包含拒绝操作，则 IAM 将拒绝整个请求并停止评估。由于请求*默认被拒绝*，因此适用的权限策略必须允许请求的每个部分，IAM 才能授权您的请求。单个账户中对于请求的评估逻辑遵循以下基本规则：
+ 默认情况下，所有请求都将被拒绝。（通常，始终允许使用 Amazon Web Services 账户根用户 凭证创建的访问该账户资源的请求。） 
+ 任何权限策略（基于身份或基于资源）中的显式允许将覆盖此默认值。
+ Amazon Organizations 服务控制策略（SCP）或资源控制策略（RCP）、IAM 权限边界或会话策略的存在将覆盖允许。如果存在其中一个或多个策略类型，它们必须都允许请求。否则，将隐式拒绝它。有关 SCP 和 RCP 更多信息，请参阅《Amazon Organizations 用户指南》**中的 [Authorization policies in Amazon Organizations](https://docs.amazonaws.cn/organizations/latest/userguide/orgs_manage_policies_authorization_policies.html)。
+ 任何策略中的显式拒绝都会覆盖所有策略中的允许。

要了解更多信息，请参阅[策略评估逻辑](reference_policies_evaluation-logic.md)。<a name="intro-structure-actions"></a>

在 IAM 对主体进行身份验证和授权后，IAM 将通过评估适用于主体的权限策略来批准其请求中的操作。每项 Amazon 服务都定义了其支持的操作，包括可以对资源执行的操作，例如，查看、创建、编辑和删除该资源。适用于主体的权限策略必须包含执行操作必需的操作。要了解有关 IAM 如何评估权限策略的更多信息，请参阅 [策略评估逻辑](reference_policies_evaluation-logic.md)。

服务定义了主体可以对每个资源执行的一组操作。创建权限策略时，请确保包含您希望用户能够执行的操作。例如，IAM 支持针对用户资源的 40 多种操作，包括以下基本操作：
+ `CreateUser`
+ `DeleteUser`
+ `GetUser`
+ `UpdateUser`

此外，您还可以在权限策略中指定条件，当请求满足指定条件时，允许访问资源。例如，您可能希望策略语句在特定日期之后生效，或者在 API 请求中存在特定值时控制访问。要指定条件，您可以使用策略语句的 [`Condition`](reference_policies_elements_condition_operators.md) 元素。

在 IAM 批准请求中的操作后，主体便可使用您账户中的相关资源。资源是位于服务中的对象。示例包括 Amazon EC2 实例、IAM 用户和 Amazon S3 存储桶。如果主体创建请求以对未包含在权限策略中的资源执行操作，则服务会拒绝该请求。例如，如果您有权删除 IAM 角色，但请求删除 IAM 组；您无权删除 IAM 组，因此请求失败。要了解不同 Amazon 服务支持哪些操作、资源和条件键，请参阅 [Amazon 服务的操作、资源和条件键](reference_policies_actions-resources-contextkeys.html)。

# 比较 IAM 身份和凭证
<a name="introduction_identity-management"></a>

Amazon Identity and Access Management 中管理的身份是 IAM 用户、IAM 角色和 IAM 组。这些是 Amazon 与 Amazon Web Services 账户 一起创建的根用户之外的身份。

强烈建议您不使用根用户执行日常任务，即使是管理任务。相反，可以预置其他用户并授予他们执行必要任务所需的权限。可以通过如下方式添加用户：将人员添加到 IAM Identity Center 目录，将外部身份提供商与 IAM Identity Center 或 IAM 联合，或者创建最低权限 IAM 用户。

**重要**  
在北京和宁夏区域，没有根用户的概念。所有用户都是 IAM 用户，包括创建 Amazon 账户的用户。

为了获得额外的安全性，我们建议集中根访问，以帮助您集中保护使用 Amazon Organizations 管理的 Amazon Web Services 账户 的根用户凭证。[集中管理成员账户的根访问权限](id_root-user.md#id_root-user-access-management) 允许您集中移除和防止长期的根用户凭证恢复，从而防止大规模的意外根访问。启用集中根访问后，您可以假设一个特权会话，以对成员账户执行操作。

设置用户之后，您可以授予特定人员对 Amazon Web Services 账户 的访问权限，并为他们提供访问资源的权限。

作为[最佳实践](best-practices.md)，Amazon 建议您要求人类用户担任 IAM 角色访问 Amazon，从而他们可使用临时凭证。如果您在 IAM Identity Center 目录中管理身份，或者使用与身份提供商的联合身份验证，则应遵循最佳实践。

## 术语
<a name="intro-structure-terms"></a>

通常在使用 IAM 身份时使用这些术语：

**IAM 资源**  
IAM 服务存储以下资源。您可以在控制台中添加、编辑和移除它们。  
+ IAM 用户
+ IAM 组
+ IAM 角色
+ 权限策略
+ 身份提供者对象

**IAM 实体**  
Amazon 用于身份验证的 IAM 资源。在基于资源的策略中指定该实体作为主体。  
+ IAM 用户
+ IAM 角色

**IAM 身份**  
在策略中授权执行操作和访问资源的 IAM 资源。身份包括 IAM 用户、IAM 组和 IAM 角色。  
  

![\[此图显示 IAM 用户和 IAM 角色是既是实体也是身份的主体，但根用户是既不是实体也不是身份的主体。此图还告知您 IAM 组是身份。IAM 身份验证使用策略控制身份的访问权限，但根用户拥有完全 Amazon 资源访问权限，并且不受基于身份或资源的 IAM 策略的限制。\]](http://docs.amazonaws.cn/IAM/latest/UserGuide/images/iam-terms-2.png)


**主体**  
可对 Amazon 资源发出操作请求的 Amazon Web Services 账户根用户、IAM 用户或 IAM 角色。主体包括人类用户、工作负载、联合主体和担任的角色。在身份验证后，IAM 会根据主体类型授予主体永久或临时凭证，以向 Amazon 发出请求。  
*人类用户*也称为*人类身份*，例如应用程序的人员、管理员、开发人员、操作员和使用者。  
*工作负载*是可提供商业价值的一系列资源和代码，例如应用程序、过程、操作工具和其他组件。  
*联合主体*是指其身份和凭证由其他身份提供者（例如 Active Directory、Okta 或 Microsoft Entra）管理的用户。  
*IAM 角色*是可在账户中创建的 IAM 身份，该身份具有特定权限，可确定该身份可执行和不可执行的操作。但是，角色旨在让需要它的任何人代入，而不是唯一地与某个人员关联。  
IAM 可向 IAM 用户和根用户授予长期凭证和 IAM 角色临时凭证。Amazon IAM Identity Center 中的用户、OIDC 和 SAML 联合主体登录 Amazon 后将担任 IAM 角色，获得其授予的临时凭证。作为[最佳实践](best-practices.md)，我们建议您要求人类用户和工作负载使用临时凭证访问 Amazon 资源。

## IAM 用户和 IAM Identity Center 中用户之间的区别
<a name="intro-identity-users"></a>

 **IAM 用户**不是单独的账户；他们是您账户中的个人用户。每个用户都可以有自己的密码可用于访问 Amazon Web Services 管理控制台。您还可以为每个用户创建单独的访问密钥，以便用户可以发出编程请求以使用账户中的资源。

IAM 用户及其访问密钥将拥有 Amazon 资源的长期凭证。IAM 用户的主要用途是使无法使用 IAM 角色的工作负载能够使用 API 或 CLI 向 Amazon 服务发出编程请求。

**注意**  
对于需要具有编程访问权限和长期凭证的 IAM 用户的场景，我们建议在需要时更新访问密钥。有关更多信息，请参阅 [更新访问密钥](id-credentials-access-keys-update.md)。

员工身份（人员）是 **Amazon IAM Identity Center 中的用户**，其根据所执行的角色具有不同的权限需求，并且可以在组织内的各种 Amazon Web Services 账户 中工作。如果您的用例需要访问密钥，则可以使用 Amazon IAM Identity Center 中的用户 支持这些应用场景。通过 Amazon Web Services 访问门户登录的人员可以使用 Amazon 资源的短期凭证获取访问密钥。对于集中式访问权限管理，我们建议使用 [Amazon IAM Identity Center（IAM Identity Center）](https://docs.amazonaws.cn/singlesignon/latest/userguide/getting-started.html)来管理对您账户的访问权限以及这些账户中的其他权限。IAM Identity Center 会自动配置 Identity Center 目录作为您的默认身份源，您可以在其中添加人员和组，并分配其对您 Amazon 资源的访问级别。有关更多信息，请参阅《[Amazon IAM Identity Center 用户指南](https://docs.amazonaws.cn/singlesignon/latest/userguide/what-is.html)》中的*什么是 Amazon IAM Identity Center*。

这两种类型用户之间的主要区别在于，IAM Identity Center 中的用户在登录 Amazon 时会自动担任 IAM 角色，然后才能访问管理控制台或 Amazon 资源。每次用户登录 Amazon 时，IAM 角色都会授予临时凭证。对于使用 IAM 角色登录的 IAM 用户，其必须具有担任和切换角色的权限，并且必须在访问 Amazon 账户后显式选择切换到其想要担任的角色。

## 现有身份源的联合用户
<a name="intro-identity-federation"></a>

如果您组织中的用户在登录到公司网络时已通过身份验证，则不必为其创建单独的 IAM 用户或 IAM Identity Center 中的用户。相反，您可以使用 IAM 或 Amazon IAM Identity Center 将这些用户身份*联合*到 Amazon 中。OIDC 和 SAML 联合主体将担任 IAM 角色，该角色授予其访问特定资源的权限。有关角色的更多信息，请参阅 [角色术语和概念](id_roles.md#id_roles_terms-and-concepts)。

![\[此图显示联合主体如何获取临时 Amazon 安全凭证以访问 Amazon Web Services 账户中的资源。\]](http://docs.amazonaws.cn/IAM/latest/UserGuide/images/iam-intro-federation.diagram.png)


联合身份验证在以下情况尤其有用：
+ **您的用户已存在于公司目录中。**

  如果您的公司目录与安全断言标记语言 2.0 (SAML 2.0) 兼容，则可以配置公司目录以便为用户提供对 Amazon Web Services 管理控制台的单一登录 (SSO) 访问。有关更多信息，请参阅 [临时凭证的常见情形](id_credentials_temp.md#sts-introduction)。

  如果您的公司目录与 SAML 2.0 不兼容，则可以创建身份凭证代理程序应用程序以便为用户提供对 Amazon Web Services 管理控制台 的单点登录（SSO）访问。有关更多信息，请参阅 [使自定义身份凭证代理程序能够访问 Amazon 控制台](id_roles_providers_enable-console-custom-url.md)。

  如果您的公司目录是 Microsoft Active Directory，则可以使用 Amazon IAM Identity Center 连接 Active Directory 中的自我管理目录或 [Amazon Directory Service](https://www.amazonaws.cn/directoryservice/) 中的目录，以便在公司目录与您 Amazon Web Services 账户 之间建立信任。

  如果您使用外部身份提供者（IdP）（例如 Okta 或 Microsoft Entra）管理用户，则可以使用 Amazon IAM Identity Center 在 IdP 和 Amazon Web Services 账户 之间建立信任。有关更多信息，请参阅《Amazon IAM Identity Center 用户指南》**中的[连接到外部身份提供者](https://docs.amazonaws.cn/singlesignon/latest/userguide/manage-your-identity-source-idp.html)。
+ **您的用户已有 Internet 身份。**

  如果您创建的移动应用程序或基于 Web 的应用程序可以允许用户通过 Internet 身份提供商 (如 Login with Amazon、Facebook、Google 或任何与 OpenID Connect (OIDC) 兼容的身份提供商) 标识自己，则应用程序可以使用联合访问 Amazon。有关更多信息，请参阅 [OIDC 联合身份验证](id_roles_providers_oidc.md)。
**提示**  
要使用与 Internet 身份提供商的联合身份，我们建议使用 [Amazon Cognito](https://docs.amazonaws.cn/cognito/latest/developerguide/what-is-amazon-cognito.html)。

## 提供用户访问权限的不同方法
<a name="AccessControlMethods"></a>

以下是可以提供您的 Amazon 资源访问权限的几种方式。


****  

| 用户访问类型 | 何时使用？ | 哪里有更多信息？ | 
| --- | --- | --- | 
|  使用 IAM Identity Center 为人员（例如您的员工用户）提供 Amazon 资源的单点登录访问权限  |  IAM Identity Center 提供了一个集中位置，将用户的管理及其对 Amazon Web Services 账户 和云应用程序的访问汇集在一起。 您可以在 IAM Identity Center 中设置身份存储，也可以与现有身份提供者（IdP）一起配置联合身份验证。安全最佳实践建议向人类用户授予 Amazon 资源的有限凭证。 人员可以获得更简单的登录体验，并且您可以控制其通过单个系统访问资源。IAM Identity Center 支持多重身份验证（MFA），以提高账户的安全性。  |  有关设置 IAM Identity Center 的更多信息，请参阅《Amazon IAM Identity Center 用户指南》**中的[入门](https://docs.amazonaws.cn/singlesignon/latest/userguide/getting-started.html)。 有关在 IAM Identity Center 中使用 MFA 的更多信息，请参阅《Amazon IAM Identity Center 用户指南》**中的[多重身份验证](https://docs.amazonaws.cn/singlesignon/latest/userguide/enable-mfa.html)。  | 
| 人类用户（例如您的员工用户）使用 IAM 身份提供商（IdP）访问 Amazon 服务的联合访问权限 | IAM 支持与 OpenID Connect (OIDC) 或者 SAML 2.0 (Security Assertion Markup Language 2.0) 兼容的 IdPs。创建 IAM 身份提供者后，必须创建一个或多个可以动态分配给联合主体的 IAM 角色。 | 有关 IAM 身份提供程序和联合身份验证的更多信息，请参阅 [身份提供程序和 Amazon 中的联合身份验证](id_roles_providers.md)。 | 
|  Amazon Web Services 账户 间的跨账户访问权限  |  您想要与其他 Amazon Web Services 账户 中的用户共享对特定 Amazon 资源的访问权限。 角色是授予跨账户访问权限的主要方式。但是，某些 Amazon 服务支持基于资源的策略，允许您将策略直接附加到资源（而不是使用角色作为代理）。  | 有关 IAM 角色的更多信息，请参阅 [IAM 角色](id_roles.md)。 有关服务关联角色的更多信息，请参阅[创建服务相关角色](id_roles_create-service-linked-role.md)。 有关哪些服务支持使用服务相关角色的信息，请参阅 [使用 IAM 的 Amazon 服务](reference_aws-services-that-work-with-iam.md)。查找在**服务相关角色**列中具有**是**值的服务。要查看该服务的服务相关角色文档，请选择该列中与**是**有关的链接。  | 
|  您的 Amazon Web Services 账户 中指定 IAM 用户的长期凭证  |  您可能有一些特定的使用案例需要带有 Amazon 中 IAM 用户的长期凭证。您可以使用 IAM 在您的 Amazon Web Services 账户 中创建这些 IAM 用户，并使用 IAM 管理他们的权限。部分使用场景包括： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/IAM/latest/UserGuide/introduction_identity-management.html) 根据 [最佳实践](best-practices.md)，对于需要具有 [编程访问权限和长期凭证](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_credentials_access-keys.html) 的 IAM 用户的场景，我们建议在需要时更新访问密钥。有关更多信息，请参阅 [更新访问密钥](id-credentials-access-keys-update.md)。  | 有关设置 IAM 用户的信息，请参阅 [在 Amazon Web Services 账户 中创建 IAM 用户](id_users_create.md)。 有关 IAM 用户访问密钥的更多信息，请参阅 [管理 IAM 用户的访问密钥。](id_credentials_access-keys.md)。 有关 Amazon CodeCommit 或 Amazon Keyspaces 的服务特定凭证的更多信息，请参阅 [CodeCommit 的 IAM 凭证：Git 凭证、SSH 密钥和 Amazon 访问密钥](id_credentials_ssh-keys.md) 和 [将 IAM 与 Amazon Keyspaces（Apache Cassandra 兼容）结合使用](id_credentials_keyspaces.md)。  | 

## 支持编程用户访问
<a name="gs-get-keys"></a>

如果用户需要在 Amazon Web Services 管理控制台之外与 Amazon 交互，则需要编程式访问权限。授予编程式访问权限的方法取决于访问 Amazon 的用户类型：
+ 如果您在 IAM Identity Center 中管理身份，则 Amazon API 需要一个配置文件，而 Amazon Command Line Interface 需要一个配置文件或环境变量。
+ 如果您有 IAM 用户，则 Amazon API 和 Amazon Command Line Interface 需要访问密钥。可能的话，创建临时凭证，该凭证由一个访问密钥 ID、一个秘密访问密钥和一个指示凭证何时到期的安全令牌组成。

要向用户授予编程式访问权限，请选择以下选项之一。


| 哪个用户需要编程式访问权限？ | Option | 更多信息 | 
| --- | --- | --- | 
|   员工身份  （在 IAM Identity Center 中管理的人员和用户）  | 使用短期凭证签署对 Amazon CLI 或 Amazon API 的编程式请求（直接或使用 Amazon SDK）。 |  对于 Amazon CLI，请按照《Amazon IAM Identity Center 用户指南》**中[获取用于 CLI 访问的 IAM 角色凭证](https://docs.amazonaws.cn//singlesignon/latest/userguide/howtogetcredentials.html)中的说明进行操作。 对于 Amazon API，请按照《Amazon SDK 和工具参考指南》**中 [SSO 凭证](https://docs.amazonaws.cn//sdkref/latest/guide/feature-sso-credentials.html)中的说明进行操作。  | 
| IAM 用户 | 使用短期凭证签署对 Amazon CLI 或 Amazon API 的编程式请求（直接或使用 Amazon SDK）。 | 按照[将临时凭证用于 Amazon 资源](https://docs.amazonaws.cn//IAM/latest/UserGuide/id_credentials_temp_use-resources.html)中的说明进行操作。 | 
| IAM 用户 | 使用长期凭证签署对 Amazon CLI 或 Amazon API 的编程式请求（直接或使用 Amazon SDK）。（不推荐使用） | 按照[管理 IAM 用户的访问密钥](https://docs.amazonaws.cn//IAM/latest/UserGuide/id_credentials_access-keys.html)中的说明进行操作。 | 
| 联合身份验证主体 | 使用 Amazon STS API 操作创建具有临时安全凭证（包括访问密钥对和会话令牌）的新会话。 | 有关 API 操作的说明，请参阅 [请求临时安全凭证](id_credentials_temp_request.md) | 

# 权限和策略如何提供访问管理
<a name="introduction_access-management"></a>

Amazon Identity and Access Management（IAM）的访问管理部分帮助定义主体实体可在账户内执行的操作。主体实体是指使用 IAM 实体（IAM 用户或 IAM 角色）进行身份验证的人员或应用程序。访问管理通常称为*授权*。您在 Amazon 中通过创建策略并将其附加到 IAM 身份（IAM 用户、IAM 组或 IAM 角色）或 Amazon 资源来管理访问权限。策略是 Amazon 中的对象；在与身份或资源相关联时，策略定义它们的权限。在主体使用 IAM 实体（IAM 用户或 IAM 角色）发出请求时，Amazon 将评估这些策略。策略中的权限确定是允许还是拒绝请求。大多数策略在 Amazon 中存储为 JSON 文档。有关策略类型和用法的更多信息，请参阅[Amazon Identity and Access Management 中的策略和权限](access_policies.md)。

## 策略和账户
<a name="intro-access-accounts"></a>

如果您管理 Amazon 中的单个账户，则使用策略定义该账户中的权限。如果您管理跨多个账户的权限，则管理 IAM 用户的权限会比较困难。您可以将 IAM 角色、基于资源的策略或访问控制列表 (ACL) 用于跨账户权限。但是，如果您拥有多个账户，那我们建议您改用该 Amazon Organizations 服务来帮助您管理这些权限。有关更多信息，请参阅《Amazon Organizations 用户指南》**中的[什么是 Amazon Organizations？](https://docs.amazonaws.cn/organizations/latest/userguide/orgs_introduction.html)。

## 策略和用户
<a name="intro-access-users"></a>

IAM 用户是Amazon Web Services 账户中的身份。当您创建 IAM 用户时，他们无法访问您账户中的任何内容，直到您向他们授予权限。向 IAM 用户授予权限的方法是创建基于身份的策略，这是附加到 IAM 用户或 IAM 用户所属 IAM 组的策略。下面的示例演示一个 JSON 策略，该策略允许 IAM 用户对 `us-east-2` 区域内 `123456789012` 账户中的 `Books` 表执行所有 Amazon DynamoDB 操作（`dynamodb:*`）。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "dynamodb:*",
    "Resource": "arn:aws:dynamodb:us-east-2:123456789012:table/Books"
  }
}
```

------

 在将此策略附加到您的 IAM 用户后，该用户有权在 DynamoDB 实例的 `Books` 表中执行所有操作。大多数 IAM 用户都有多个策略，这些策略组合在一起代表其授予的总权限。

默认情况下会拒绝策略未显式允许的操作或资源。例如，如果上述策略是附加到用户的单个策略，则该用户可以对 `Books` 表执行 DynamoDB 操作，但不能对其他表执行这些操作。同样，不允许用户在 Amazon EC2、Amazon S3 或任何其他 Amazon 服务中执行任何操作，因为策略中未包含使用这些服务的权限。

## 策略和 IAM 组
<a name="intro-access-groups"></a>

可以将 IAM 用户组织为 *IAM 组*，然后将策略附加到该 IAM 组。这种情况下，各 IAM 用户仍有自己的凭证，但是 IAM 组中的所有 IAM 用户都具有附加到该 IAM 组的权限。使用 IAM 组可更轻松地管理权限。

![\[此图显示如何将 IAM 用户组织为 IAM 组，以便更轻松地管理权限，因为每个 IAM 用户都具有分配到 IAM 组的权限。\]](http://docs.amazonaws.cn/IAM/latest/UserGuide/images/iam-intro-users-and-groups.diagram.png)


IAM 用户或 IAM 组可以附加授予不同权限的多个策略。在这种情况下，策略的组合决定了主体的有效权限。如果主体对操作和资源没有显式 `Allow` 权限，则主体没有这些权限。

## 联合用户会话和角色
<a name="intro-access-roles"></a>

联合主体无法通过与 IAM 用户相同的方式在您的 Amazon Web Services 账户中获得永久身份。要向联合主体分配权限，可以创建称为*角色*的实体，并为角色定义权限。当 SAMl 或 OIDC 联合主体登录 Amazon 时，该用户会与角色关联，被授予角色中定义的权限。有关更多信息，请参阅 [为第三方身份提供者创建角色](id_roles_create_for-idp.md)。

## 基于身份和基于资源的策略
<a name="intro-access-resource-based-policies"></a>

基于身份的策略是附加到 IAM 身份（如 IAM 用户、组或角色）的权限策略。基于资源的策略是附加到资源（如 Amazon S3 存储桶或 IAM 角色信任策略）的权限策略。

***基于身份的策略***控制身份可以在哪些条件下对哪些资源执行哪些操作。基于身份的策略可以进一步分类：
+ **托管策略** – 基于身份的独立策略，可附加到您的 Amazon Web Services 账户 中的多个用户、组和角色。您可以使用两个类型的托管策略：
  + **Amazon 托管策略**——由 Amazon 创建和管理的托管策略。如果您刚开始使用策略，建议先使用 Amazon 托管策略。
  + **客户管理型策略** – 您在 Amazon Web Services 账户 中创建和管理的管理型策略。与 Amazon 托管策略相比，客户托管策略可以更精确地控制策略。您可以在可视化编辑器中创建、编辑和验证 ，它是一项 IAM policy，也可以直接创建 JSON 策略文档以创建和编辑该策略。有关更多信息，请参阅 [使用客户管理型策略定义自定义 IAM 权限](access_policies_create.md) 和 [编辑 IAM 策略](access_policies_manage-edit.md)。
+ **内联策略**——由您创建和管理的策略，直接嵌入在单个用户、组或角色中。大多数情况下，我们不建议使用内联策略。

***基于资源的策略***控制指定的主体可以在何种条件下对该资源执行哪些操作。基于资源的策略是内联策略，没有基于资源的托管策略。要启用跨账户存取，您可以将整个账户或其他账户中的 IAM 实体指定为基于资源的策略中的主体。****

IAM 服务支持一种基于资源的策略（称为角色*信任策略*），您可将这种策略附加到 IAM 角色。由于 IAM 角色同时是支持基于资源的策略的身份和资源，因此，您必须同时将信任策略和基于身份的策略附加到 IAM 角色。信任策略定义哪些主体实体（账户、用户、角色和 Amazon STS 联合用户主体）可以代入该角色。要了解 IAM 角色如何与其他基于资源的策略不同，请参阅 [IAM 中的跨账户资源访问](access_policies-cross-account-resource-access.md)。

要了解哪些服务支持基于资源的策略，请参阅[使用 IAM 的 Amazon 服务](reference_aws-services-that-work-with-iam.md)。要了解基于资源的策略的更多信息，请参阅 [基于身份的策略和基于资源的策略](access_policies_identity-vs-resource.md)。

# 使用 ABAC 授权根据属性定义权限
<a name="introduction_attribute-based-access-control"></a>

基于属性的访问权限控制（ABAC）是一种授权策略，该策略基于属性来定义权限。Amazon 将这些属性称为*标签*。您可以将标签附加到 IAM 资源（包括 IAM 实体（IAM 用户和 IAM 角色））以及 Amazon 资源。您可以为 IAM 委托人创建单个 ABAC 策略或者一小组策略。您可以将这些 ABAC 策略设计为在主体的标签与资源标签匹配时允许操作。ABAC 的属性系统既提供高级用户上下文，又提供精细的访问控制。由于 ABAC 是基于属性的，因此它可以对数据或应用程序执行动态授权，从而实时授予或撤销访问权限。ABAC 在扩展环境中以及身份或资源策略管理变得复杂的情况下非常有用。

例如，您可以创建具有 `access-project` 标签键的三个 IAM 角色。将第一个 IAM 角色的标签值设置为 `Heart`，第二个为 `Star`，第三个为 `Lightning`。然后，您可以使用单个策略，在 IAM 角色和 Amazon 资源具有标签值 `access-project` 时允许访问。有关演示如何在 Amazon 中使用 ABAC 的详细教程，请参阅[IAM 教程：根据标签定义访问 Amazon 资源的权限](tutorial_attribute-based-access-control.md)。要了解支持 ABAC 的服务，请参阅 [使用 IAM 的 Amazon 服务](reference_aws-services-that-work-with-iam.md)。

![\[下图说明应用于主体的标签必须与应用于资源的标签相匹配，才能向用户授予该资源的权限。标签可应用于 IAM 组、资源组、个人用户和单个资源。\]](http://docs.amazonaws.cn/IAM/latest/UserGuide/images/tutorial-abac-concept-23.png)


## ABAC 与传统 RBAC 模型的比较
<a name="introduction_attribute-based-access-control_compare-rbac"></a>

IAM 中使用的传统授权模型是基于角色的访问控制（RBAC）。RBAC 根据用户的工作职能（或称*角色*）定义权限，这与 IAM 角色不同。IAM 确实包含[任务函数的管式策略](access_policies_job-functions.md)，能够将权限分配给 RBAC 模型中的任务函数。

在 IAM 中，您通过为不同工作职能创建不同策略来实施 RBAC。然后，您可将策略附加到身份（IAM 用户、IAM 组或 IAM 角色）。作为[最佳实践](best-practices.md)，您向工作职能授予所需的最小权限。这会导致[最低权限](best-practices.md#grant-least-privilege)访问。每个工作职能策略都列出了分配给该策略的身份可以访问的特定资源。使用传统 RBAC 模型的缺点是，当您或您的用户向您的环境添加新资源时，您必须更新策略以允许访问这些资源。

例如，假设您的员工在处理三个项目，名为 `Heart`、`Star` 和 `Lightning`。您可以为每个项目创建一个 IAM 角色。然后，您将策略附加到各个 IAM 角色，定义允许担任该 IAM 角色的任何用户可以访问的资源。如果员工更换了公司中的工作，您可向其分配不同的 IAM 角色。您可以将用户或计划分配给多个 IAM 角色。但是，`Star` 项目可能需要额外的资源，例如新的 Amazon EC2 容器。在这种情况下，您必须更新附加到 `Star` IAM 角色的策略，来指定新的容器资源。否则，系统将不允许 `Star` 项目成员访问新的容器。

![\[下图说明基于角色的访问控制要求为每个身份分配一个基于工作职能的特定策略来访问不同的资源。\]](http://docs.amazonaws.cn/IAM/latest/UserGuide/images/tutorial-abac-rbac-concept-23.png)


**相比传统 RBAC 模型，ABAC 具备以下优势：**
+ **ABAC 权限随着创新扩展。**它不再需要管理员更新现有策略以允许对新资源的访问。例如，假设您使用 `access-project` 标签指定了 ABAC 策略。开发人员使用 `access-project` = `Heart` 标签的 IAM 角色。当 `Heart` 项目中的员工需要额外的 Amazon EC2 资源时，开发人员可以使用 `access-project` = `Heart` 标签创建新 Amazon EC2 实例。这样，`Heart` 项目中的任何员工可以启动和停止这些实例，因为其标签值匹配。
+ **ABAC 需要较少的策略。**由于您无需为不同工作职能创建不同策略，需要创建的策略数量减少。这些策略更易于管理。
+ **使用 ABAC，团队可以动态响应变化和增长。**由于新资源的权限是根据属性自动授予的，因此您无需为身份手动分配策略。例如，如果您的公司已经使用 ABAC 支持 `Heart` 和 `Star` 项目，则可以轻松地添加新 `Lightning` 项目。IAM 管理员创建具有 `access-project` = `Lightning` 标签的新 IAM 角色。无需更改策略以支持新项目。有权担任该 IAM 角色的任何用户可以创建和查看使用 `access-project` = `Lightning` 标记的实例。另一种情况是团队成员从 `Heart` 项目转到 `Lightning` 项目。为了向团队成员提供 `Lightning` 项目的访问权限，IAM 管理员将其分配给不同的 IAM 角色。无需更改权限策略。
+ **使用 ABAC 可以实现精细权限。**在您创建策略时，最佳实践是[授予最小权限](best-practices.md#grant-least-privilege)。使用传统 RBAC 时，您可编写允许访问特定资源的策略。但使用 ABAC 时，如果资源的标签与主体的标签匹配，则可以允许对所有资源执行操作。
+ **通过 ABAC 使用来自您公司目录的员工属性。**您可以配置 SAML 或 OIDC 提供商，以将会话标签传递给 IAM。当您的员工希望在 Amazon 中进行联合身份验证时，IAM 会将其属性应用于其最终的主体。然后，您可以使用 ABAC 来允许或拒绝基于这些属性的权限。

有关演示如何在 Amazon 中使用 ABAC 的详细教程，请参阅[IAM 教程：根据标签定义访问 Amazon 资源的权限](tutorial_attribute-based-access-control.md)。