

# 身份提供程序和 AWS 中的联合身份验证
<a name="id_roles_providers"></a>

作为最佳实践，建议您要求人类用户使用与身份提供商的联合身份验证访问 AWS 资源，而不是在您的 AWS 账户 中创建单独的 IAM 用户。利用身份提供程序 (IdP)，您可以管理 AWS 外部的用户身份，并向这些外部用户身份授予使用您账户中的 AWS 资源的权限。如果您的组织已有自己的身份系统（如企业用户目录），这将十分有用。如果要创建需要访问 AWS 资源的移动应用程序或 Web 应用程序，这也十分有用。

**注意**  
您还可以使用外部 SAML 身份提供商在 [IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/what-is.html) 中管理人类用户，而不是在 IAM 中使用 SAML 联合身份验证。IAM Identity Center 与身份提供商的联合身份验证使您能够允许人员访问组织中的多个 AWS 账户和多个 AWS 应用程序。要了解需要使用 IAM 用户的特定情况，请参阅 [何时创建 IAM 用户（而非角色）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html#id_which-to-choose)。

如果您喜欢在不启用 IAM Identity Center 的情况下使用单个 AWS 账户，则可以将 IAM 与外部 IdP 结合使用，后者会使用 [OpenID Connect（OIDC）](http://openid.net/connect/)或 [SAML 2.0（安全断言标记语言 2.0）](https://wiki.oasis-open.org/security)向 AWS 提供身份信息。OIDC 将不在 AWS 上运行的应用程序（例如 GitHub Actions）连接到 AWS 资源。知名的 SAML 身份提供者的示例如 Shibboleth 和 Active Directory 联合身份验证服务。

使用身份提供商时，您不必创建自定义登录代码或管理自己的用户身份。IdP 将向您提供它们。您的外部用户通过 IdP 登录，您可以向这些外部身份授予使用您的账户中的 AWS 资源的权限。身份提供者可帮助您确保 AWS 账户 的安全，因为您不必再在应用程序中分配或嵌入长期安全凭证（如访问密钥）。

查看下表，以帮助确定哪种 IAM 联合身份验证类型最适合您的使用案例：IAM、IAM Identity Center 还是 Amazon Cognito。以下摘要和表格概述了您的用户可以用来获得对 AWS 资源的联合访问权限的方法。


| IAM 联合身份验证类型 | 账户类型 | 对……的访问管理 | 支持的身份源 | 
| --- | --- | --- | --- | 
| 使用 IAM Identity Center 的联合身份验证 | 由 AWS Organizations 管理的多个账户 | 您的人力的人类用户 |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_roles_providers.html)  | 
| 使用 IAM 的联合身份验证 | 单一独立账户 |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_roles_providers.html)  | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_roles_providers.html)  | 
| 使用 Amazon Cognito 身份池的联合身份验证 | 任何 | 需要 IAM 授权才能访问资源的应用程序的用户 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_roles_providers.html)  | 

## 使用 IAM Identity Center 的联合身份验证
<a name="id_roles_providers_identity-center"></a>

为方便集中管理人类用户的访问权限，我们建议使用 [IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) 来管理对您账户的访问以及这些账户中的权限。IAM Identity Center 中的用户将被授予对您的 AWS 资源的长期凭证。您可以使用 Active Directory、外部身份提供者（IdP）或 IAM Identity Center 目录作为身份源，供用户和组分配对您的 AWS 资源的访问权限。

IAM Identity Center 支持使用 SAML（安全断言标记语言）2.0 的身份联合验证，为被授权在 AWS 访问门户中使用应用程序的用户提供联合单点登录访问权限。然后，用户可以单点登录到支持 SAML 的服务，包括 AWS 管理控制台 和第三方应用程序（如 Microsoft 365、SAP Concur 和 Salesforce）。

## 使用 IAM 的联合身份验证
<a name="id_roles_providers_iam"></a>

虽然我们强烈建议在 IAM Identity Center 中管理人类用户，但在短期、小规模部署中，您可以通过 IAM 为人类用户启用联合主体访问权限。IAM 允许您使用单独的 SAML 2.0 和 Open ID Connect（OIDC）IdP，并使用联合主体属性进行访问控制。借助 IAM，您可以将用户属性（例如成本中心、职务或区域设置）从您的 IdP 传递给 AWS，并根据这些属性实施精细访问权限。

*工作负载*是一系列资源和代码，它们可提供商业价值，如应用程序或后端过程。您的工作负载可能需要 IAM 身份才能向 AWS 服务、应用程序、操作工具和组件发出请求。这些身份包括运行在您的 AWS 环境（例如 Amazon EC2 实例或 AWS Lambda 函数）中运行的计算机。

您还可以为需要访问权限的外部团体管理计算机身份。要为计算机身份授予访问权限，您可以使用 IAM 角色。IAM 角色具有特定的权限并可通过使用带有角色会话的临时安全凭证提供访问 AWS 的方法。此外，您还可以拥有位于 AWS 以外且需要访问您的 AWS 环境的计算机。对于在 AWS 外部运行的计算机，您可以使用 [IAM Roles Anywhere](https://docs.aws.amazon.com/rolesanywhere/latest/userguide/introduction.html)。有关角色的更多信息，请参阅 [IAM 角色](id_roles.md)。有关如何使用角色跨 AWS 账户 委派访问权限的详情，请参阅 [IAM 教程：使用 IAM 角色委托跨 AWS 账户的访问权限](tutorial_cross-account-with-roles.md)。

要将 IdP 直接连接到 IAM，您需要创建 IAM 身份提供者实体，以在您的 AWS 账户 和 IdP 之间建立信任关系。IAM 支持与 [OpenID Connect (OIDC)](http://openid.net/connect/) 或者 [SAML 2.0 (Security Assertion Markup Language 2.0)](https://wiki.oasis-open.org/security) 兼容的 IdPs。有关通过 AWS 使用这些 IdP 之一的更多信息，请参阅以下部分：
+ [OIDC 联合身份验证](id_roles_providers_oidc.md)
+ [SAML 2.0 联合身份验证](id_roles_providers_saml.md)

## 使用 Amazon Cognito 身份池的联合身份验证
<a name="id_roles_providers_cognito"></a>

Amazon Cognito 专为想要在其移动应用程序和 Web 应用程序中对用户进行身份验证和授权的开发人员而设计。Amazon Cognito 用户池为您的应用程序添加登录和注册功能，身份池提供 IAM 凭证，授予您的用户访问您在 AWS 中管理的受保护资源的权利。身份池通过 [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) API 操作获取临时会话的凭证。

Amazon Cognito 与支持 SAML 和 OpenID Connect 的外部身份提供者以及 Facebook、Google 和 Amazon 等社交身份提供者合作。您的应用程序可以使用用户群体或外部 IdP 登录用户，然后在 IAM 角色中使用自定义的临时会话代表他们检索资源。

## 其他资源
<a name="id_roles_providers_additional_resources"></a>
+ 有关如何创建自定义联合身份验证代理以使用组织的身份验证系统实现到 AWS 管理控制台 的单点登录（SSO）的演示，请参阅 [使自定义身份凭证代理程序能够访问 AWS 控制台](id_roles_providers_enable-console-custom-url.md)。