IAM FAQ 最好仔细看看联合身份验证

https://aws.amazon.com/cn/iam/faqs/ 

IAM授权 Policies and Permissions

https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/access_policies.html

如果您已管理 AWS 外部的用户身份,则可以使用 IAM 身份提供商 而不必在 AWS 账户中创建 IAM 用户。利用身份提供商 (IdP),您可以管理 AWS 外部的用户身份,并向这些外部用户身份授予使用您账户中的 AWS 资源的权限。如果您的组织已有自己的身份系统(如企业用户目录),这将十分有用。如果要创建需要访问 AWS 资源的移动应用程序或 Web 应用程序,这也十分有用。

使用 IAM 身份提供商时,您不必创建自定义登录代码或管理自己的用户身份。IdP 将向您提供它们。您的外部用户通过已知的 IdP(例如 Login with Amazon、Facebook 或 Google)进行登录。您可以向这些外部身份授予使用您账户中的 AWS 资源的权限。IAM 身份提供商可帮助您确保 AWS 账户的安全,因为您不必在应用程序中分配或嵌入长期安全凭证(如访问密钥)。

要使用 IdP,请创建 IAM 身份提供商实体以在您的 AWS 账户与该 IdP 之间建立信任关系。IAM 支持与 OpenID Connect (OIDC) 或 SAML 2.0(安全断言标记语言 2.0)兼容的 IdP。有关通过 AWS 使用这些 IdP 之一的更多信息,请参阅以下部分:

To use an IdP, you create an IAM identity provider entity to establish a trust relationship between your AWS account and the IdP. IAM supports IdPs that are compatible with OpenID Connect (OIDC) or SAML 2.0 (Security Assertion Markup Language 2.0). For more information about using one of these IdPs with AWS, see the following sections:

一、Web 联合身份验证Web Identity Federation),AssumeRoleWithWebIdentity您不需要创建自定义登录代码或管理自己的用户身份。相反,应用程序的用户可以使用知名的外部身份提供商(例如,Login with Amazon、Facebook、Google 或任何其他 OpenID Connect (OIDC) 兼容的 IdP)登录。他们可以接收身份验证令牌,然后用该令牌交换 AWS 中的临时安全凭证,这些凭证映射到有权使用您 AWS 账户中的资源的 IAM 角色。使用 IdP 可帮助您确保 AWS 账户的安全,因为您不必随应用程序嵌入和分配长期安全凭证。

对于大多数方案,我们建议您使用 Amazon Cognito,因为它可充当身份代理并为您完成许多联合工作。有关详细信息,请参阅以下部分:将 Amazon Cognito 用于移动应用程序

如果您未使用 Amazon Cognito,则必须编写与 Web IdP(例如 Facebook)交互的代码,然后调用 AssumeRoleWithWebIdentity API 以便用您从这些 IdP 处获得的身份验证令牌交换 AWS 临时安全凭证。如果您现有的应用程序已采用这种方法,则您可以继续使用它。

  OpenID Connect 1.0 is a simple identity layer on top of the OAuth 2.0 protocol. 

  Web Identity Federation 是与 OpenID Connect相一致的。可以用于和Facebook、Google等联合认证。为了获得最佳结果,请使用 Amazon Cognito 作为几乎所有 Web 联合身份验证方案的身份代理。Amazon Cognito 易于使用并提供了额外功能,如匿名(未经身份验证的)访问,并可跨设备和提供商同步用户数据。但是,如果您已通过手动用 AssumeRoleWithWebIdentity API 创建了使用 Web 联合身份验证的应用程序,也可继续使用它,您的应用程序仍能正常工作。

注意:虽然 Amazon Cognito 和 Google 都基于 OIDC 技术,但您无需创建 IAM 身份提供商实体来使用它们。对 Amazon Cognito 和 Google 的支持已内置到 AWS 中。

二、 SAML 2.0(安全断言标记语言 2.0)支持联合身份验证,SAML 2.0 是许多身份验证提供商 (IdP) 使用的一种开放标准。此功能可实现联合单一登录 (SSO),因此用户可以登录 AWS 管理控制台或调用 AWS API 操作,而不必为组织中的每个人都创建一个 IAM 用户。由于可以使用 IdP 的服务而不必编写自定义身份代理代码,因此您可以通过使用 SAML 来简化为 AWS 配置联合身份验证的过程。组织内部必须有支持 SAML 2.0 的 IdP,例如 Microsoft Active Directory 联合身份验证服务 (AD FS,Windows Server 的一部分)、Shibboleth 或其他兼容的 SAML 2.0 提供商。

  SAML 2.0 是与LDAP、 SSO、AD关联的,用于企业身份集成,联合认证

使用基于 SAML 的联合身份验证来对 AWS 进行 API 访问:在使用前面方案和图表中所述的基于 SAML 2.0 的联合身份验证之前,您必须先配置组织的 IdP 和您的 AWS 账户,使之相互信任。以下步骤介绍了用于配置此信任的一般过程。组织内部必须有支持 SAML 2.0 的 IdP,例如 Microsoft Active Directory 联合身份验证服务 (AD FS,Windows Server 的一部分)、Shibboleth 或其他兼容的 SAML 2.0 提供商。

使 SAML 2.0 联合身份用户能够访问 AWS 管理控制台(AssumeRoleWithSAML)在组织的网络中,配置身份存储(例如 Windows Active Directory)以使用基于 SAML 的 IdP,例如 Windows Active Directory 联合身份验证服务、Shibboleth 等。

三、Cognito 借助 Amazon Cognito,您可以快速轻松地为 Web 和移动应用程序添加用户注册/登录和访问控制功能。Amazon Cognito 可将用户规模扩展到数百万,并支持通过 SAML 2.0 使用社交身份提供商 (如 Facebook、Google 和 Amazon) 以及企业身份提供商进行登录。

  Amazon Cognito 用户池是基于标准的身份提供商,支持身份和访问管理标准,如 Oauth 2.0、SAML 2.0 和 OpenID Connect。

    使用 Web 联合身份验证的首选方式是使用 Amazon Cognito。例如,开发人员 Adele 正在制作一款用于移动设备的游戏,其中将分数和个人资料等用户数据存储在 Amazon S3 和 Amazon DynamoDB 中。如不想在 IAM 中为每个玩家都新建用户身份,而是将游戏制作成用户可使用其已通过知名的外部身份提供商 (IdP)(如 Login with AmazonFacebookGoogle 或任何 OpenID Connect (OIDC) 兼容的 IdP)建立的身份进行登录。

  下图以 Login with Amazon 作为 IdP,展示此过程运行方式的简化流程。对于步骤 2,该应用程序还可以使用 Facebook、Google 或任何与 OIDC 兼容的 IdP,但此处不进行说明。

AssumeRoleWithWebIdentity

  1. 客户在移动设备上启动您的应用程序。应用程序要求用户登录。

  2. 应用程序使用 Login with Amazon 资源接受用户凭证。

  3. 应用程序使用 Cognito API 操作将 Login with Amazon ID 令牌交换成 Cognito 令牌。

  4. 应用程序从 AWS STS 请求临时安全凭证,并传递 Cognito 令牌。

  5. 应用程序可使用临时安全凭证访问应用程序运行所需的任何 AWS 资源。与临时安全凭证关联的角色及其分配的策略将决定可访问的资源。

   Cognito可以同时支持SAML2.0和OpenID Connect,对于基于 Web Identity Federation 特别推荐使用Cognito来简化认证配置的复制性。

https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_roles_providers_oidc_cognito.html

原文地址:https://www.cnblogs.com/cloudrivers/p/11387499.html