

# SAML 2.0 联合身份验证
<a name="id_roles_providers_saml"></a>

AWS 使用 [SAML 2.0（安全断言标记语言 2.0）](https://wiki.oasis-open.org/security)支持联合身份验证，SAML 2.0 是许多身份验证提供商 (IdP) 使用的一种开放标准。此功能可实现联合单点登录（SSO），因此用户可以登录 AWS 管理控制台 或调用 AWS API 操作，而不必为企业中的每个人都创建一个 IAM 用户。通过使用 SAML，您可以使用 AWS 简化配置联合身份验证流程，因为您可以使用 IdP 的服务而不是[编写自定义身份代理代码](https://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingFedTokens.html)。

**注意**  
IAM SAML 身份联合验证支持来自基于 SAML 的联合身份提供者（IdP）的加密 SAML 响应。IAM Identity Center 和 Amazon Cognito 不支持来自 IAM SAML 身份提供商的加密 SAML 断言。  
您可以将对加密 SAML 断言的支持间接添加到具有 Amazon Cognito 用户池的 Amazon Cognito 身份池联合身份验证。用户池具有独立于 IAM SAML 联合身份验证的 SAML 联合身份验证，并且支持 [SAML 签名和加密](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-SAML-signing-encryption.html)。尽管此功能没有直接扩展到身份池，但用户池可以是身份池的 IDP。要对身份池使用 SAML 加密，请将具有加密的 SAML 提供商添加到一个用户池，其是身份池的 IdP。  
SAML 提供商必须能够使用用户池提供的密钥对 SAML 断言进行加密。用户池不接受使用 IAM 提供的证书进行加密的断言。

IAM 联合支持这些使用案例：
+ [**允许组织中的用户或应用程序调用 AWS API 操作的联合访问权限**](#CreatingSAML-configuring)。下面的部分将讨论此用例。您可以使用组织内生成的 SAML 断言 (身份验证响应的一部分) 获得临时安全凭证。此方案类似于 IAM 支持的其他联合方案，如 [请求临时安全凭证](id_credentials_temp_request.md) 和 [OIDC 联合身份验证](id_roles_providers_oidc.md) 中介绍的方案。但是，企业中基于 SAML 2.0 的 IdP 可以在运行时处理很多细节功能，以用于执行身份验证和授权检查。
+ [**从组织向 AWS 管理控制台进行基于 Web 的单一登录 (SSO)**](id_roles_providers_enable-console-saml.md)。用户可以登录您企业中由与 SAML 2.0 兼容的 IdP 托管的门户，选择转向 AWS，并将其重新导向到控制台，而无需提供其他登录信息。您可以使用第三方 SAML IdP 建立对控制台的 SSO 访问，或者可以创建自定义 IdP 来支持外部用户的控制台访问。有关构建自定义 IdP 的更多信息，请参阅[使自定义身份凭证代理程序能够访问 AWS 控制台](id_roles_providers_enable-console-custom-url.md)。

**Topics**
+ [使用基于 SAML 的联合身份验证来对 AWS 进行 API 访问](#CreatingSAML-configuring)
+ [配置基于 SAML 2.0 的联合身份验证的概述](#CreatingSAML-configuring-IdP)
+ [用于允许对 AWS 资源进行 SAML 联合访问的角色的概述](#CreatingSAML-configuring-role)
+ [唯一标识基于 SAML 的联合中的用户](#CreatingSAML-userid)
+ [在 IAM 中创建 SAML 身份提供者](id_roles_providers_create_saml.md)
+ [配置具有依赖方信任的 SAML 2.0 IdP 并添加陈述](id_roles_providers_create_saml_relying-party.md)
+ [将第三方 SAML 解决方案提供者与 AWS 集成](id_roles_providers_saml_3rd-party.md)
+ [为身份验证响应配置 SAML 断言。](id_roles_providers_create_saml_assertions.md)
+ [使 SAML 2.0 联合主体能够访问 AWS 管理控制台](id_roles_providers_enable-console-saml.md)
+ [在您的浏览器中查看 SAML 响应](troubleshoot_saml_view-saml-response.md)

## 使用基于 SAML 的联合身份验证来对 AWS 进行 API 访问
<a name="CreatingSAML-configuring"></a>

假设您想要为员工提供一种将数据从他们的计算机中复制到备份文件夹的方法。您可以构建一个可在用户的计算机上运行的应用程序。在后端，该应用程序可在 Amazon S3 存储桶中读写对象。用户没有直接访问 AWS 的权限。而应使用以下过程：

![\[获得基于 SAML 断言的临时安全证书\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/saml-based-federation-diagram.png)


1. 您组织中的用户使用客户端应用程序来请求您组织的 IdP 进行身份验证。

1. IdP 根据组织的身份存储对用户进行身份验证。

1. IdP 构建一个具有用户相关信息的 SAML 断言，并将此断言发送到客户端应用程序。当您为 IAM SAML IdP 启用 SAML 加密时，此断言将由外部 IdP 加密。

1. 客户端应用程序调用 AWS STS [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) API，并传递 SAML 提供商的 ARN、要代入的角色的 ARN 以及来自 IdP 的 SAML 断言。如果启用了加密，则通过客户端应用程序传递的断言在传输过程中保持加密状态。

1. （可选）AWS STS 使用您从外部 IdP 上传的私有密钥来解密加密的 SAML 断言。

1. API 对客户端应用程序的响应包括临时安全凭证。

1. 客户端应用程序使用临时安全凭证来调用 Amazon S3 API 操作。

## 配置基于 SAML 2.0 的联合身份验证的概述
<a name="CreatingSAML-configuring-IdP"></a>

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

**注意**  
为了提高联合身份验证弹性，我们建议您将 IdP 和AWS联合身份验证配置为支持多个 SAML 登录端点。有关详细信息，请参阅 AWS 安全博客文章[如何使用区域性 SAML 端点进行失效转移](https://aws.amazon.com/blogs//security/how-to-use-regional-saml-endpoints-for-failover)。

**配置组织的 IdP 和 AWS 以使之相互信任**

1. 将 AWS 注册为您组织的 IdP 的服务提供商（SP）。通过 `https://region-code.signin.aws.amazon.com/static/saml-metadata.xml` 使用 SAML 元数据文档

   有关可能的 *region-code* 值的列表，请参阅 [AWS 登录端点](https://docs.aws.amazon.com/general/latest/gr/signin-service.html)中的 **Region**（区域）列。

   您可以选择通过 `https://signin.aws.amazon.com/static/saml-metadata.xml` 使用 SAML 元数据文档。

1. <a name="createxml"></a>通过使用您企业的 IdP，生成一个同等 SAML 元数据 XML 文件，该文件可将您的 IdP 描述为 AWS 中的 IAM 身份提供者。它必须包括发布者名称、创建日期、过期日期以及 AWS 可用来验证来自您组织的身份验证响应（断言）的密钥。

   如果允许从外部 IdP 发送加密的 SAML 断言，则必须使用组织的 IdP 生成私有密钥文件，并以 .pem 文件格式将此文件上传到 IAM SAML 配置。AWS STS 需要此私有密钥文件来解密与上传到 IdP 的公有密钥对应的 SAML 响应。
**注意**  
如 [SAML V2.0 元数据互操作性配置文件 1.0 版](https://docs.oasis-open.org/security/saml/Post2.0/sstc-metadata-iop-os.html)所定义，IAM 既不会评估 SAML 元数据文档的 X.509 证书，也不会在该证书过期时采取任何行动。如果您担心 X.509 证书过期，建议您监控证书到期日期，并根据贵组织的治理和安全策略来轮换证书。

1. <a name="samlovrcreateentity"></a>在 IAM 控制台中，创建一个 SAML 身份提供商。在此过程中，您将上传 SAML 元数据文档和私有解密密钥，这些文档和私有解密密钥是由贵组织中的 IdP 在 [Step 2](#createxml) 中生成的。有关更多信息，请参阅 [在 IAM 中创建 SAML 身份提供者](id_roles_providers_create_saml.md)。

1. <a name="samlovrcreaterole"></a>在 IAM 中创建一个或多个 IAM 角色。在角色的信任策略中，您可将 SAML 提供商设置为可在您的组织与 AWS 之间建立信任关系的主体。该角色的权限策略确定了允许您组织的用户在 AWS 中执行的操作。有关更多信息，请参阅 [为第三方身份提供者创建角色](id_roles_create_for-idp.md)。
**注意**  
角色信任策略中使用的 SAML IdP 必须与角色位于同一账户中。

1. 在您企业的 IdP 中，定义可将您企业中的用户或组映射到 IAM 角色的断言。请注意，您的组织中不同的用户和组可能映射到不同的 IAM 角色。执行映射的确切步骤取决于您使用的 IdP。在用户 Amazon S3 文件夹中的[较早场景](#CreatingSAML-configuring)中，则所有用户都可能映射到提供 Amazon S3 权限的同一角色。有关更多信息，请参阅 [为身份验证响应配置 SAML 断言。](id_roles_providers_create_saml_assertions.md)。

   如果您的 IdP 支持对 AWS 控制台的 SSO，则可配置控制台会话的最大持续时间。有关更多信息，请参阅 [使 SAML 2.0 联合主体能够访问 AWS 管理控制台](id_roles_providers_enable-console-saml.md)。

1. 在您正在创建的应用程序中，您可以调用 AWS Security Token Service `AssumeRoleWithSAML` API，将其传递给您在[Step 3](#samlovrcreateentity) 中创建的 SAML 提供商的 ARN、您在[Step 4](#samlovrcreaterole) 中创建的要代入的角色的 ARN 以及从您的 IdP 处获取的有关当前用户的 SAML 断言。AWS 确保代入角色的请求来自 SAML 提供商所引用的 IdP。

   有关更多信息，请参阅[https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) API 参考*中的 AWS Security Token ServiceAssumeRoleWithSAML*。

1. 如果请求成功，API 会返回一组临时安全凭证，您的应用程序即可用其向 AWS 发出已签名的请求。您的应用程序具有有关当前用户的信息并可访问 Amazon S3 中用户特定的文件夹，如上一方案中所述。

## 用于允许对 AWS 资源进行 SAML 联合访问的角色的概述
<a name="CreatingSAML-configuring-role"></a>

您在 IAM 中创建的角色将确定您组织中的 SAML 联合主体在 AWS 中允许执行的操作。当您为角色创建信任策略时，您可以将先前创建的 SAML 提供商指定为 `Principal`。此外，您还可以使用 `Condition` 设置信任策略的范围，以便仅允许与特定 SAML 属性匹配的用户访问角色。例如，您可以指定仅允许 SAML 从属关系为 `staff` (在 https://openidp.feide.no 中断言) 的用户访问角色，如以下示例策略所示：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
    "Effect": "Allow",
    "Principal": {"Federated": "arn:aws:iam::111122223333:saml-provider/ExampleOrgSSOProvider"},
    "Action": "sts:AssumeRoleWithSAML",
    "Condition": {
      "StringEquals": {
        "saml:aud": "https://us-east-1.signin.aws.amazon.com/saml",
        "saml:iss": "https://openidp.feide.no"
      },
      "ForAllValues:StringLike": {"saml:edupersonaffiliation": ["staff"]}
    }
  }]
}
```

------

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws-cn:iam::111122223333:saml-provider/ExampleOrgSSOProvider"
            },
            "Action": "sts:AssumeRoleWithSAML",
            "Condition": {
                "StringEquals": {
                    "saml:aud": "https://ap-east-1.signin.amazonaws.cn/saml",
                    "saml:iss": "https://openidp.feide.no"
                },
                "ForAllValues:StringLike": {
                    "saml:edupersonaffiliation": [
                        "staff"
                    ]
                }
            }
        }
    ]
}
```

------

**注意**  
角色信任策略中使用的 SAML IdP 必须与角色位于同一账户中。

策略中的 `saml:aud` 上下文键指定登录控制台时浏览器显示的 URL。此登录端点 URL 必须与您的身份提供者的收件人属性相匹配。您可以添加特定区域内的登录 URL。AWS 建议使用区域端点而不是全局端点，以提高联合身份验证的韧性。如果您只配置了一个端点，则如果该端点变得不可用（此情况发生可能性极小），您就无法通过联合身份验证登录 AWS。有关可能的 *region-code* 值的列表，请参阅 [AWS 登录端点](https://docs.aws.amazon.com/general/latest/gr/signin-service.html)中的 **Region**（区域）列。

以下示例显示了带有可选 `region-code` 的登录 URL 格式。

`https://region-code.signin.aws.amazon.com/saml`

如果需要 SAML 加密，则登录 URL 必须包含 AWS 分配给您的 SAML 提供商的唯一标识符，您可以在身份提供者详细信息页面上找到该标识符。在以下示例中，登录 URL 包含要求在登录路径后附加 /acs/ 的 IdP 唯一标识符。

`https://region-code.signin.aws.amazon.com/saml/acs/IdP-ID`

对于该角色中的权限策略，您可以像任何角色一样指定权限。例如，如果允许您企业的用户管理 Amazon Elastic Compute Cloud 实例，您必须在权限策略中明确允许 Amazon EC2 操作，如 **AmazonEC2FullAccess** 托管策略中的操作。

有关您可以签入策略的 SAML 密钥的更多信息，请参阅[基于 SAML 的 AWS STS 联合身份验证的可用键](reference_policies_iam-condition-keys.md#condition-keys-saml)。

## 唯一标识基于 SAML 的联合中的用户
<a name="CreatingSAML-userid"></a>

在 IAM 中创建访问策略时，可根据用户的身份指定权限，这一点通常很有用。举例来说，对于已使用 SAML 联合的用户，应用程序可能希望使用如下的结构保留 Amazon S3 中的信息：

```
amzn-s3-demo-bucket/app1/user1
amzn-s3-demo-bucket/app1/user2
amzn-s3-demo-bucket/app1/user3
```

您可以通过 Amazon S3 控制台或 AWS CLI 创建存储桶 (`amzn-s3-demo-bucket`) 和文件夹 (`app1`)，因为这些都是静态值。但是，用户特定文件夹（*user1*、*user2*、*user3* 等）必须在运行时使用代码创建，因为在用户首次通过联合流程登录之前，用来标识用户的值是未知的。

要编写在资源名称中引用特定于用户的详细信息的策略，必须在可以用于策略条件的 SAML 密钥中提供用户身份。以下密钥可用于基于 SAML 2.0 的联合身份验证，以便在 IAM policy 中使用。您可以使用以下键返回的值为资源 (如 Amazon S3 文件夹) 创建唯一的用户标识符。
+ `saml:namequalifier`. 哈希值，基于 `Issuer` 响应值 (`saml:iss`)、包含 `AWS` 账户 ID 的字符串和 IAM 中 SAML 提供商的友好名称（ARN 的最后一部分）的串联。账户 ID 与 SAML 提供商的易记名称的串联可作为键 `saml:doc` 供 IAM policy 使用。账户 ID 与提供商名称必须使用“/”分隔，例如在“123456789012/provider\$1name”中。有关更多信息，请参阅`saml:doc` 上的 [基于 SAML 的 AWS STS 联合身份验证的可用键](reference_policies_iam-condition-keys.md#condition-keys-saml) 键。

  `NameQualifier` 与 `Subject` 的组合可用于唯一识别 SAML 联合主体。以下伪代码显示如何计算此值。在此伪代码中，`+` 表示串联，`SHA1` 代表使用 SHA-1 生成消息摘要的功能，`Base64` 代表生成哈希输出的 Base-64 编码版本的功能。

   `Base64 ( SHA1 ( "https://example.com/saml" + "123456789012" + "/MySAMLIdP" ) )` 

   有关可用于基于 SAML 的联合的策略键的更多信息，请参阅[基于 SAML 的 AWS STS 联合身份验证的可用键](reference_policies_iam-condition-keys.md#condition-keys-saml)。
+ `saml:sub`（字符串）。这是该陈述的主题，其中包含唯一标识组织中某个用户的值 (例如 `_cbb88bf52c2510eabe00c1642d4643f41430fe25e3`)。
+ `saml:sub_type`（字符串）。此键可以是 `persistent`、`transient` 或在您的 SAML 断言中使用的 `Format` 和 `Subject` 元素的完整 `NameID` URI。`persistent` 的值表示在所有会话中用户的 `saml:sub` 值是相同的。如果值为 `transient`，则用户在每个会话中拥有不同的 `saml:sub` 值。有关 `NameID` 元素的 `Format` 属性的信息，请参阅[为身份验证响应配置 SAML 断言。](id_roles_providers_create_saml_assertions.md)。

以下示例说明了一个权限策略，该策略使用上述密钥为 Amazon S3 中的用户特定文件夹授予权限。该策略假设 Amazon S3 对象使用同时包含 `saml:namequalifier` 和 `saml:sub` 的前缀进行标识。请注意，`Condition` 元素包括一个测试，用于确保 `saml:sub_type` 设置为 `persistent`。如果已设置为 `transient`，每个会话用户的 `saml:sub` 值可以不同，且不应使用值的组合来标识用户特定的文件夹。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "s3:GetObject",
      "s3:PutObject",
      "s3:DeleteObject"
    ],
    "Resource": [
      "arn:aws:s3:::amzn-s3-demo-bucket-org-data/backup/${saml:namequalifier}/${saml:sub}",
      "arn:aws:s3:::amzn-s3-demo-bucket-org-data/backup/${saml:namequalifier}/${saml:sub}/*"
    ],
    "Condition": {"StringEquals": {"saml:sub_type": "persistent"}}
  }
}
```

------

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "s3:GetObject",
      "s3:PutObject",
      "s3:DeleteObject"
    ],
    "Resource": [
      "arn:aws-cn:s3:::amzn-s3-demo-bucket-org-data/backup/${saml:namequalifier}/${saml:sub}",
      "arn:aws-cn:s3:::amzn-s3-demo-bucket-org-data/backup/${saml:namequalifier}/${saml:sub}/*"
    ],
    "Condition": {"StringEquals": {"saml:sub_type": "persistent"}}
  }
}
```

------

有关将断言从 IdP 映射到策略的更多信息，请参阅[为身份验证响应配置 SAML 断言。](id_roles_providers_create_saml_assertions.md)。

# 在 IAM 中创建 SAML 身份提供者
<a name="id_roles_providers_create_saml"></a>

IAM SAML 2.0 身份提供程序是 IAM 中的一个实体，该实体描述支持 [SAML 2.0 (安全断言标记语言 2.0)](https://wiki.oasis-open.org/security) 标准的外部身份提供程序 (IdP) 服务。如果您希望在与 SAML 兼容的 IdP（例如 Shibboleth 或 Active Directory 联合身份验证服务）和 AWS 之间建立信任，以便企业中的用户能够访问 AWS 资源，则需要使用 IAM 身份提供者。IAM SAML 身份提供程序用作 IAM 信任策略中的主体。

有关此方案的更多信息，请参阅[SAML 2.0 联合身份验证](id_roles_providers_saml.md)。

您可以在 AWS 管理控制台 中或通过使用 AWS CLI、Tools for Windows PowerShell 或 AWS API 调用，创建和管理 IAM 身份提供程序。

创建 SAML 提供商后，必须创建一个或多个 IAM 角色。角色是 AWS 中的一个实体，它没有自己的凭证（与用户一样）。但在此情况下，角色将动态分配给由 IdP 验证的 SAML 联合主体。该角色允许您的 IdP 请求临时安全凭证以便访问 AWS。分配给该角色的策略决定了用户可在 AWS 中执行的操作。要创建用于 SAML 联合的角色，请参阅[为第三方身份提供者创建角色](id_roles_create_for-idp.md)。

最后，在创建角色后，您可通过配置包含有关 AWS 的信息的 IdP 以及希望 SAML 联合主体使用的角色来完成 SAML 信任。这称为在 IdP 和 AWS 之间配置信赖方信任。要配置信赖方信任，请参阅[配置具有依赖方信任的 SAML 2.0 IdP 并添加陈述](id_roles_providers_create_saml_relying-party.md)。

**Topics**
+ [先决条件](#idp-manage-identityprovider-prerequisites)
+ [创建和管理 IAM SAML 身份提供商（控制台）](#idp-manage-identityprovider-console)
+ [管理 SAML 加密密钥](#id_federation_manage-saml-encryption)
+ [创建和管理 IAM SAML 身份提供商 (AWS CLI)](#idp-create-identityprovider-CLI)
+ [创建和管理 IAM SAML 身份提供商 (AWS API)](#idp-create-identityprovider-API)
+ [后续步骤](#id_roles_create-for-saml-next-steps)

## 先决条件
<a name="idp-manage-identityprovider-prerequisites"></a>

在创建 SAML 身份提供商之前，您必须从 IdP 处获得以下信息。
+ 从 IdP 中获取 SAML 元数据文档。此文档包括发布者名称、过期信息以及可用来验证从 IdP 处收到的 SAML 身份验证响应（断言）的密钥。要生成元数据文档，请使用外部 IdP 提供的身份管理软件。
**重要**  
此元数据文件包括颁发者名称、过期信息以及可用来验证从 IdP 处收到的 SAML 身份验证响应 (断言) 的密钥。元数据文件必须采用不含字节顺序标记 (BOM) 的 UTF-8 格式编码。要删除 BOM，您可以使用 Notepad\$1\$1 等文本编辑工具以 UTF-8 格式对文件进行编码。  
作为 SAML 元数据文档的一部分，X.509 证书必须使用长度至少为 1024 位的密钥。此外，X.509 证书也不能有任何重复的扩展名。您可以使用扩展程序，但扩展程序只能在证书中显示一次。如果 X.509 证书不符合任一条件，则 IdP 将创建失败，并返回“Unable to parse metadata”这一错误消息。  
如 [SAML V2.0 元数据互操作性配置文件 1.0 版](https://docs.oasis-open.org/security/saml/Post2.0/sstc-metadata-iop-os.html)所定义，IAM 既不会评估 SAML 元数据文档的 X.509 证书，也不会在该证书过期时采取任何行动。如果您担心 X.509 证书过期，建议您监控证书到期日期，并根据贵组织的治理和安全策略来轮换证书。
+ 选择启用 SAML 加密时，必须使用您的 IdP 生成私有密钥文件，并以 .pem 文件格式将此文件上传到 IAM SAML 配置。AWS STS 需要此私有密钥文件来解密与 IdP 使用的公有密钥对应的 SAML 响应。支持下列算法：
  + 加密算法
    + AES-128
    + AES-256
    + RSA-OAEP
  + 密钥传输算法
    + AES-CBC
    + AES-GCM

  有关生成私有密钥的步骤，请参阅身份提供者的文档。
**注意**  
IAM Identity Center 和 Amazon Cognito 不支持来自 IAM SAML 身份提供商的加密 SAML 断言。您可以将对加密 SAML 断言的支持间接添加到具有 Amazon Cognito 用户池的 Amazon Cognito 身份池联合身份验证。用户池具有独立于 IAM SAML 联合身份验证的 SAML 联合身份验证，并且支持 [SAML 签名和加密](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-SAML-signing-encryption.html)。尽管此功能没有直接扩展到身份池，但用户池可以是身份池的 IDP。要对身份池使用 SAML 加密，请将具有加密的 SAML 提供商添加到一个用户池，其是身份池的 IdP。  
SAML 提供商必须能够使用用户池提供的密钥对 SAML 断言进行加密。用户池不接受使用 IAM 提供的证书进行加密的断言。

有关如何配置许多可用 IdP 以使用 AWS（包括如何生成所需的 SAML 元数据文档）的说明，请参阅[将第三方 SAML 解决方案提供者与 AWS 集成](id_roles_providers_saml_3rd-party.md)。

有关 SAML 联合身份验证的帮助，请参阅 [SAML 联合身份验证故障排除](troubleshoot_saml.md)。

## 创建和管理 IAM SAML 身份提供商（控制台）
<a name="idp-manage-identityprovider-console"></a>

您可以使用 AWS 管理控制台 来创建、更新和删除 IAM SAML 身份提供商。有关 SAML 联合身份验证的帮助，请参阅 [SAML 联合身份验证故障排除](troubleshoot_saml.md)。

**创建 IAM SAML 身份提供程序（控制台）**

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

1. 在导航窗格中，选择 **Identity providers**（身份提供程序），然后选择 **Add provider**（添加提供商）。

1. 对于 **Configure provider**（配置提供商），选择 **SAML**。

1. 键入身份提供程序的名称。

1. 对于 **Metadata document**（元数据文档），选择 **Choose file**（选择文件），指定您在 [先决条件](#idp-manage-identityprovider-prerequisites) 中下载的 SAML 元数据文档。
**注意**  
SAML 元数据文档中的 `validUntil` 或 `cacheDuration` 属性定义了身份提供者的**有效期至**日期。如果 SAML 元数据文档不包含有效期属性，则**有效期至**日期将与 X.509 证书到期日期不匹配。  
IAM 不会对 SAML 元数据文档中的 X.509 证书过期进行评估或采取行动。如果您担心 X.509 证书过期，建议您监控证书到期日期，并根据贵组织的治理和安全策略来轮换证书。

1. （可选）对于 **SAML 加密**，请选择**选择文件**并选择您在[先决条件](#idp-manage-identityprovider-prerequisites)中创建的私有密钥文件。选择**需要加密**，以仅接受来自您的 IdP 的加密请求。

1. （可选）对于 **Add tags** (添加标签)，您可以添加键值对来帮助识别和组织您的 IdP。您还可以使用标签来控制对 AWS 资源的访问。要了解有关标记 SAML 身份提供程序的更多信息，请参阅[标记 IAM SAML 身份提供者](id_tags_saml.md)。

   选择 **Add tag（添加标签）**。为每个标签键值对输入值。

1. 验证您提供的信息。完成后，选择 **Add provider**（添加提供商）。

1. 为您的身份提供商分配一个 IAM 角色。此角色授予由您的身份提供者管理的外部用户身份访问您账户中的 AWS 资源的权限。要了解有关为联合身份创建角色的更多信息，请参阅 [为第三方身份提供者创建角色](id_roles_create_for-idp.md)
**注意**  
角色信任策略中使用的 SAML IdP 必须与角色位于同一账户中。

**删除 SAML 提供商（控制台）**

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

1. 在导航窗格中，选择 **Identity providers**（身份提供程序）。

1. 选中要删除的身份提供程序旁边的单选按钮。

1. 选择**删除**。此时会打开一个新窗口。

1. 通过在字段中键入 `delete` 一词以确认您要删除此提供商。然后选择 **Delete**(删除)。

## 管理 SAML 加密密钥
<a name="id_federation_manage-saml-encryption"></a>

您可以将 IAM SAML 提供商配置为在来自外部 IdP 的 SAML 响应中接收加密断言。用户可以通过调用 `[sts:AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)` 来使用加密的 SAML 断言在 AWS 中代入角色。

SAML 加密确保断言在通过中介或第三方传递时是安全的。此外，此功能可帮助您满足 FedRAMP 或任何要求对 SAML 断言进行加密的内部合规策略要求。

要配置 IAM SAML 身份提供商，请参阅 [在 IAM 中创建 SAML 身份提供者](#id_roles_providers_create_saml)。有关 SAML 联合身份验证的帮助，请参阅 [SAML 联合身份验证故障排除](troubleshoot_saml.md)。

### 轮换 SAML 加密密钥
<a name="id_federation_manage-saml-keys-rotate"></a>

IAM 使用您上传到 IAM SAML 提供商的私有密钥来解密来自 IdP 的加密 SAML 断言。每个身份提供商最多可以保存两个私钥文件，允许您根据需要轮换私钥。保存两个文件后，每个请求将首先尝试使用最新的**添加**日期进行解密，然后 IAM 尝试使用最旧的**添加**日期对请求进行解密。

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

1. 在导航窗格中，选择**身份提供商**，然后从列表中选择您的提供商。

1. 选择 **SAML 加密**选项卡，然后选择**添加新密钥**。

1. 选择**选择文件**，并将您从 IdP 下载的私有密钥作为 .pem 文件上传。然后，选择**添加密钥**。

1. 在**用于 SAML 解密的私钥**部分，选择已过期的私钥文件，然后选择**删除**。建议您在添加新的私有密钥后删除过期的私有密钥，以确保首次尝试断言解密的成功。

## 创建和管理 IAM SAML 身份提供商 (AWS CLI)
<a name="idp-create-identityprovider-CLI"></a>

您可以使用 AWS CLI 来创建、更新和删除 SAML 提供商。有关 SAML 联合身份验证的帮助，请参阅 [SAML 联合身份验证故障排除](troubleshoot_saml.md)。

**创建 IAM 身份提供程序并上传元数据文档 (AWS CLI)**
+ 运行以下命令：[https://docs.aws.amazon.com/cli/latest/reference/iam/create-saml-provider.html](https://docs.aws.amazon.com/cli/latest/reference/iam/create-saml-provider.html)

**更新 IAM SAML 身份提供商 (AWS CLI)**

您可以更新 IAM SAML 提供商的元数据文件、SAML 加密设置并轮换私钥解密文件。要轮换私有密钥，请添加您的新私有密钥，然后在单独的请求中删除旧密钥。有关轮换私有密钥的更多信息，请参阅 [管理 SAML 加密密钥](#id_federation_manage-saml-encryption)。
+ 运行以下命令：[https://docs.aws.amazon.com/cli/latest/reference/iam/update-saml-provider.html](https://docs.aws.amazon.com/cli/latest/reference/iam/update-saml-provider.html)

**要标记现有 IAM 身份提供程序 (AWS CLI)**
+ 运行以下命令：[https://docs.aws.amazon.com/cli/latest/reference/iam/tag-saml-provider.html](https://docs.aws.amazon.com/cli/latest/reference/iam/tag-saml-provider.html)

**要列出现有 IAM 身份提供程序 (AWS CLI) 的标签**
+ 运行以下命令：[https://docs.aws.amazon.com/cli/latest/reference/iam/list-saml-provider-tags.html](https://docs.aws.amazon.com/cli/latest/reference/iam/list-saml-provider-tags.html)

**要删除现有 IAM 身份提供程序 (AWS CLI) 的标签**
+ 运行以下命令：[https://docs.aws.amazon.com/cli/latest/reference/iam/untag-saml-provider.html](https://docs.aws.amazon.com/cli/latest/reference/iam/untag-saml-provider.html)

**删除 IAM SAML 身份提供程序 (AWS CLI)**

1. （可选）要列出所有提供商的信息（例如 ARN、创建日期和过期时间），请运行以下命令：
   + [https://docs.aws.amazon.com/cli/latest/reference/iam/list-saml-providers.html](https://docs.aws.amazon.com/cli/latest/reference/iam/list-saml-providers.html)

1. （可选）要获取有关特定提供商的信息，如 ARN、创建日期、过期日期、加密设置和私钥信息，请运行以下命令：
   + [https://docs.aws.amazon.com/cli/latest/reference/iam/get-saml-provider.html](https://docs.aws.amazon.com/cli/latest/reference/iam/get-saml-provider.html)

1. 要删除 IAM 身份提供程序，请运行以下命令：
   + [https://docs.aws.amazon.com/cli/latest/reference/iam/delete-saml-provider.html](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-saml-provider.html)

## 创建和管理 IAM SAML 身份提供商 (AWS API)
<a name="idp-create-identityprovider-API"></a>

您可以使用 AWS API 来创建、更新和删除 SAML 提供商。有关 SAML 联合身份验证的帮助，请参阅 [SAML 联合身份验证故障排除](troubleshoot_saml.md)。

**创建 IAM 身份提供程序并上传元数据文档 (AWS API)**
+ 调用此操作：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateSAMLProvider.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateSAMLProvider.html)

**更新 IAM SAML 身份提供商 (AWS API)**

您可以更新 IAM SAML 提供商的元数据文件、SAML 加密设置并轮换私钥解密文件。要轮换私有密钥，请添加您的新私有密钥，然后在单独的请求中删除旧密钥。有关轮换私有密钥的更多信息，请参阅 [管理 SAML 加密密钥](#id_federation_manage-saml-encryption)。
+ 调用此操作：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateSAMLProvider.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateSAMLProvider.html)

**要标记现有 IAM 身份提供程序 (AWS API)**
+ 调用此操作：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_TagSAMLProvider.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_TagSAMLProvider.html)

**要列出现有 IAM 身份提供程序 (AWS API) 的标签**
+ 调用此操作：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListSAMLProviderTags.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListSAMLProviderTags.html)

**要删除现有 IAM 身份提供程序的标签 (AWS API)**
+ 调用此操作：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_UntagSAMLProvider.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UntagSAMLProvider.html)

**删除 IAM 身份提供程序 (AWS API)**

1. （可选）要列出所有 IdP 的信息（例如 ARN、创建日期和过期时间），请调用以下操作：
   + [https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListSAMLProviders.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListSAMLProviders.html)

1. （可选）要获取有关特定提供商的信息，如 ARN、创建日期、过期日期、加密设置和私钥信息，请调用以下操作：
   + [https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetSAMLProvider.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetSAMLProvider.html)

1. 要删除 IdP，请调用以下操作：
   + [https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteSAMLProvider.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteSAMLProvider.html)

## 后续步骤
<a name="id_roles_create-for-saml-next-steps"></a>

创建 SAML 身份提供商后，通过您的 IdP 设置依赖方信任。您还可以在策略中使用 IdP 身份验证响应中的声明控制对角色的访问。
+ 您必须告知 IdP 将 AWS 作为服务提供商。这称为在 IdP 和 AWS 之间添加依赖方信任。添加信赖方信任的具体步骤取决于您使用的 IdP。有关更多信息，请参阅 [配置具有依赖方信任的 SAML 2.0 IdP 并添加陈述](id_roles_providers_create_saml_relying-party.md)。
+ 当 IdP 将包含断言的响应发送到 AWS 时，许多传入断言将映射到 AWS 上下文密钥。您可以使用 Condition 元素在 IAM 策略中使用这些上下文键来控制对角色的访问权限。有关详细信息，请参阅 [为身份验证响应配置 SAML 断言。](id_roles_providers_create_saml_assertions.md)

# 配置具有依赖方信任的 SAML 2.0 IdP 并添加陈述
<a name="id_roles_providers_create_saml_relying-party"></a>

当您创建 IAM 身份提供程序和用于 SAML 访问的角色时，您实际上将告知 AWS 关于外部身份提供程序 (IdP) 的信息以及允许其用户执行的操作。下一步是让 IdP 知道 AWS 作为服务提供商。这称为在 IdP 和 AWS 之间添加*依赖方信托*。添加信赖方信任的具体步骤取决于您使用的 IdP。有关详细信息，请参阅身份管理软件对应的文档。

许多 IdP 允许指定一个 URL，他们可从中读取包含信赖方信息和证书的 XML 文档。对于 AWS，请使用登录端点 URL。以下示例显示了包含可选 `region-code` 的 URL 格式。

`https://region-code.signin.aws.amazon.com/static/saml-metadata.xml`

如果需要 SAML 加密，则 URL 必须包含 AWS 分配给您的 SAML 提供商的唯一标识符，您可以在身份提供者详细信息页面上找到该标识符。以下示例显示了包含唯一标识符的区域登录 URL。

`https://region-code.signin.aws.amazon.com/static/saml/IdP-ID/saml-metadata.xml`

有关可能的 *region-code* 值的列表，请参阅 [AWS 登录端点](https://docs.aws.amazon.com/general/latest/gr/signin-service.html)中的 **Region**（区域）列。对于 AWS 值，您也可以使用非区域端点 `https://signin.aws.amazon.com/saml`。

如果您无法直接指定 URL，请从之前的 URL 下载 XML 文档，然后将其导入您的 IdP 软件。

您还需要在指定 AWS 作为信赖方的 IdP 中，创建相应的声明规则。当 IdP 向 AWS 终端节点发送 SAML 响应时，它包括具有一个或多个*索赔* 的 SAML *断言*。断言是有关用户及其组的信息。断言规则将该信息映射到 SAML 属性中。这可确保来自 IdP 的 SAML 身份验证响应包含 IAM 策略中 AWS 用于检查 SAML 联合主体权限的必要属性。有关更多信息，请参阅以下主题：
+  [用于允许对 AWS 资源进行 SAML 联合访问的角色的概述](id_roles_providers_saml.md#CreatingSAML-configuring-role)。本主题将讨论如何在 IAM 策略中使用特定于 SAML 的键以及如何使用它们限制 SAML 联合主体的权限。
+ [为身份验证响应配置 SAML 断言。](id_roles_providers_create_saml_assertions.md). 本主题将讨论如何配置包括用户相关信息的 SAML 陈述。将声明捆绑到 SAML 断言中并包括在发送到 AWS 的 SAML 响应中。您必须确保 AWS 策略所需的信息以 AWS 可识别和使用的形式包括在 SAML 断言中。
+  [将第三方 SAML 解决方案提供者与 AWS 集成](id_roles_providers_saml_3rd-party.md)。本主题提供了由第三方组织提供的关于如何与 AWS 集成身份解决方案的文档链接。

**注意**  
为了提高联合身份验证弹性，我们建议您将 IdP 和AWS联合身份验证配置为支持多个 SAML 登录端点。有关详细信息，请参阅 AWS 安全博客文章[如何使用区域性 SAML 端点进行失效转移](https://aws.amazon.com/blogs//security/how-to-use-regional-saml-endpoints-for-failover)。

# 将第三方 SAML 解决方案提供者与 AWS 集成
<a name="id_roles_providers_saml_3rd-party"></a>

**注意**  
我们建议您要求您的人类用户在访问 AWS 时使用临时凭证。您是否考虑过使用 AWS IAM Identity Center？ 您可以使用 IAM Identity Center 集中管理对多个 AWS 账户 的访问权限，并为用户提供受 MFA 保护的单点登录访问权限，可从一个位置访问其分配的所有账户。借助 IAM Identity Center，您可以在 IAM Identity Center 中创建和管理用户身份，或者轻松连接到现有的 SAML 2.0 兼容身份提供者。有关更多信息，请参阅*《AWS IAM Identity Center 用户指南》*中的[什么是 IAM Identity Center？](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。

以下链接将帮助您配置第三方 SAML 2.0 身份提供程序 (IdP) 解决方案以利用 AWS 联合身份验证。请与您的身份提供商联系，以确定他们是否支持 SAML 令牌加密。有关 SAML 加密要求，请参阅 [管理 SAML 加密密钥](id_roles_providers_create_saml.md#id_federation_manage-saml-encryption)。

**提示**  
AWS Support 工程师可以帮助有商业和企业支持计划的客户完成涉及第三方软件的一些集成任务。有关受支持的平台和应用程序的最新列表，请参阅《AWS Support 常见问题》中的[支持哪些第三方软件？](https://aws.amazon.com/premiumsupport/faqs/#what3rdParty)。


****  

| 解决方案 | 更多信息 | 
| --- | --- | 
| Auth0 |  [与 Amazon Web Services 集成](https://auth0.com/docs/integrations/aws) – Auth0 文档网站上的此页面包含了介绍如何使用 AWS 管理控制台 来设置单点登录（SSO）的资源的链接，并提供了一个 JavaScript 示例。您可以配置 Auth0 来传递[会话标签](id_session-tags.md)。有关更多信息，请参阅 [Auth0 宣布与 AWS 合作开发 IAM 会话标签](https://auth0.com/blog/auth0-partners-with-aws-for-iam-session-tags/)。 | 
| Microsoft Entra |  [教程：Microsoft Entra SSO 与 AWS 单账户访问集成](https://learn.microsoft.com/en-us/azure/active-directory/saas-apps/amazon-web-service-tutorial) - Microsoft 网站上的这篇教程介绍了如何使用 SAML 联合身份验证将 Microsoft Entra（以前称为 Azure AD）设置为身份提供者（IdP）。 | 
| Centrify | [Configure Centrify and Use SAML for SSO to AWS](https://docs.centrify.com/Content/Applications/AppsWeb/AmazonSAML.htm)（配置 Centrify 并对亚马逊云科技使用 SAML SSO）- 此 Centrify 网站页面说明如何配置 Centrify 以对 AWS 使用 SAML SSO。 | 
| CyberArk | 配置 [CyberArk](https://docs.cyberark.com/Product-Doc/OnlineHelp/Idaptive/Latest/en/Content/Applications/AppsWeb/AmazonSAML.htm)，以便为从 CyberArk 用户门户通过 SAML 单点登录(SSO)登入的用户提供 Amazon Web Services (AWS) 访问。 | 
| ForgeRock | [ForgeRock Identity Platform](https://backstage.forgerock.com/docs/am/6.5/saml2-guide/#saml2-create-hosted-idp) 与 AWS 集成。您可以配置 ForgeRock 来传递[会话标签](id_session-tags.md)。有关更多信息，请参阅 [Amazon Web Services 的基于属性的访问控制](https://www.forgerock.com/blog/attribute-based-access-control-amazon-web-services)。 | 
| Google Workspace | [Amazon Web Services 云应用程序](https://support.google.com/a/answer/6194963) - 这篇有关 Google Workspace Admin Help 站点的文章描述了如何将 Google Workspace 配置为 SAML 2.0 IdP，并使用 AWS 作为服务提供程序。 | 
| IBM | 您可以配置 IBM 来传递[会话标签](id_session-tags.md)。有关更多信息，请参阅 [IBM Cloud Identity IDaaS（最早支持 AWS 会话标签的解决方案之一）](https://community.ibm.com/community/user/security/blogs/adam-case/2019/11/25/ibm-cloud-identity-idaas-one-of-first-to-support-aws-session-tags)。 | 
| JumpCloud |  [为 Amazon 单点登录（SSO）授予通过 IAM 角色进行访问的权限AWS](https://support.jumpcloud.com/support/s/article/Granting-Access-via-IAM-Roles-for-Single-Sign-On-SSO-with-Amazon-AWS) – 这篇有关 JumpCloud 网站的文章将描述如何为 AWS 设置与启用基于 IAM 角色的 SSO。 | 
| Matrix42 | [MyWorkspace 入门指南](https://myworkspace.matrix42.com/documents/MyWorkspace-Getting-Started-with-AWS.pdf) - 本指南介绍如何将 AWS 身份服务与 Matrix42 MyWorkspace 集成。 | 
| Microsoft Active Directory 联合身份验证服务 (AD FS) |  [现场记录：将 Active Directory 联合身份验证服务与 AWS IAM Identity Center 集成](https://aws.amazon.com/blogs/architecture/field-notes-integrating-active-directory-federation-service-with-aws-single-sign-on/) – AWS 架构博客上的这篇文章介绍了 AD FS 与 AWS IAM Identity Center（IAM Identity Center）之间的身份验证流。IAM Identity Center 通过 SAML 2.0 支持身份联合验证，从而得以与 AD FS 解决方案集成。用户可使用其企业凭证登录 IAM Identity Center 门户，从而减少在 IAM Identity Center 上维护单独凭证的管理开销。您也可以配置 AD FS 来传递[会话标签](id_session-tags.md)。有关更多信息，请参阅[将基于属性的访问控制与 AD FS 结合使用来简化 IAM 权限管理](https://aws.amazon.com/blogs/security/attribute-based-access-control-ad-fs-simplify-iam-permissions-management/)。  | 
| miniOrange | [SSO for AWS](http://miniorange.com/amazon-web-services-%28aws%29-single-sign-on-%28sso%29) - miniOrange 网站上的此页面介绍如何为企业建立对 AWS 的安全访问以及对 AWS 应用程序访问的完全控制。 | 
| Okta |  [使用 Okta 集成 Amazon Web Services Command Line Interface](https://support.okta.com/help/Documentation/Knowledge_Article/Integrating-the-Amazon-Web-Services-Command-Line-Interface-Using-Okta) - 通过 Okta 支持网站上的此页面可以了解如何配置 Okta 才能与 AWS 配合使用。您可以配置 Okta 来传递[会话标签](id_session-tags.md)。有关更多信息，请参阅 [Okta 与 AWS 合作，通过会话标签简化访问](https://www.okta.com/blog/2019/11/okta-and-aws-partner-to-simplify-access-via-session-tags/)。 | 
| Okta | [AWS 账户联合身份验证 ](https://help.okta.com/oie/en-us/Content/Topics/DeploymentGuides/AWS/aws-deployment.htm) - Okta 网站上的此部分介绍如何为 AWS 设置和启用 IAM Identity Center。 | 
| OneLogin | 从 [OneLogin 知识库](https://onelogin.service-now.com/support)中，搜索 SAML AWS 以获取文章列表，这些文章介绍了如何在 OneLogin 与 AWS 之间设置 IAM Identity Center 功能，以实现单角色和多角色方案。您可以配置 OneLogin 来传递[会话标签](id_session-tags.md)。有关更多信息，请参阅 [OneLogin 和会话标签：AWS 资源的基于属性的访问控制](https://www.onelogin.com/blog/aws-session-tags-integration)。 | 
| Ping Identity |  [PingFederate AWS Connector](https://support.pingidentity.com/s/marketplace-integration-details?recordId=a7i1W0000004HBwQAM) – 查看有关 PingFederate AWS Connector 的详细信息，快速连接模板来轻松设置单点登录 (SSO) 和预配置连接。阅读文档，并下载最新的 PingFederate AWS Connector，以便与 AWS 集成。您可以配置 Ping Identity 来传递 [会话标签](id_session-tags.md)。有关更多信息，请参阅[宣布推出针对 AWS 中的基于属性的访问控制的 Ping 身份支持](https://support.pingidentity.com/s/document-item?bundleId=integrations&topicId=pon1571779451105.html)。  | 
| RadiantLogic | [Radiant Logic 技术合作伙伴](http://www.radiantlogic.com/about/partners/technology-partners/) - Radiant Logic 的 RadiantOne Federated Identity Service 与 AWS 进行了集成，可以为基于 SAML 的 SSO 提供身份中心。 | 
| RSA | 《[Amazon Web Services - RSA Ready 实施指南](https://community.rsa.com/s/article/Amazon-Web-Services-RSA-Ready-Implementation-Guide)》为集成 AWS 和 RSA 提供了指导。有关 SAML 配置的更多信息，请参阅 [Amazon Web Services - SAML 我的页面 SSO 配置 - RSA Ready 实施指南](https://community.rsa.com/s/article/Amazon-Web-Services-SAML-My-Page-SSO-Configuration-RSA-Ready-Implementation-Guide)。 | 
| Salesforce.com |  [How to configure SSO from Salesforce to AWS](https://developer.salesforce.com/page/Configuring-SAML-SSO-to-AWS) - Salesforce.com 开发人员站点上的这篇方法文章介绍如何在 Salesforce 中设置身份提供程序 (IdP) 以及如何将 AWS 配置为服务提供商。 | 
| SecureAuth |  [AWS - SecureAuth SAML SSO](https://docs.secureauth.com/2104/en/amazon-web-services--aws---idp-initiated--integration-guide.html) - SecureAuth 网站上的该文章介绍了如何设置 SAML 以与 SecureAuth 设备的 AWS 集成在一起。 | 
| Shibboleth |  [如何使用 Shibboleth 对 AWS 管理控制台 进行 SSO](https://aws.amazon.com/blogs/security/how-to-use-shibboleth-for-single-sign-on-to-the-aws-management-console) - AWS 安全博客中的这篇文章提供分步教程，介绍如何设置 Shibboleth 并将它配置为 AWS 的身份提供程序。您可以配置 Shibboleth 来传递[会话标签](id_session-tags.md)。 | 

有关更多详细信息，请参阅 AWS 网站上的 [IAM 合作伙伴](https://aws.amazon.com/iam/partners/)页面。

# 为身份验证响应配置 SAML 断言。
<a name="id_roles_providers_create_saml_assertions"></a>

在您验证组织中的用户身份后，外部身份提供者（IdP）将向 AWS 登录端点 URL 发送身份验证响应。此响应是一个包含 SAML 令牌的 POST 请求，该令牌遵循[适用于 SAML 2.0 的 HTTP POST 绑定](http://docs.oasis-open.org/security/saml/v2.0/saml-bindings-2.0-os.pdf)标准，其中包含以下元素或*断言*。您可在与 SAML 兼容的 IdP 中配置这些断言。请参考 IdP 文档，以了解有关如何输入这些声明的说明。

当 IdP 将包含断言的响应发送到 AWS 时，许多传入断言将映射到 AWS 上下文密钥。可以在 IAM policy 中使用 `Condition` 元素检查这些上下文密钥。可用映射的列表如[将 SAML 属性映射到 AWS 信任策略上下文密钥](#saml-attribute-mapping)部分中所示。

## `Subject` 和 `NameID`
<a name="saml_subject-name-id"></a>

响应必须恰好具有一个 `SubjectConfirmation` 元素，该元素具有同时包含 `NotOnOrAfter` 和 `Recipient` 属性的 `SubjectConfirmationData` 元素。收件人属性必须包含与 AWS 登录端点 URL 匹配的值。您的 IdP 可能会使用 `ACS`、`Recipient`、或 `Target` 这样的术语来指代此属性。

如果需要 SAML 加密，则登录 URL 必须包含 AWS 分配给您的 SAML 提供商的唯一标识符，您可以在身份提供者详细信息页面上找到该标识符。以下示例显示了带有可选 `region-code` 的登录 URL 格式。

`https://region-code.signin.aws.amazon.com/saml`

在以下示例中，登录 URL 包含要求在登录路径后附加 /acs/ 的唯一标识符。

`https://region-code.signin.aws.amazon.com/saml/acs/IdP-ID`

有关可能的 *region-code* 值的列表，请参阅 [AWS 登录端点](https://docs.aws.amazon.com/general/latest/gr/signin-service.html)中的 **Region**（区域）列。对于 AWS 值，您还可以使用全局登录端点 `https://signin.aws.amazon.com/saml`。

`NameID` 元素的值可以是持久性的、瞬态的或由 IdP 解决方案提供的完整格式 URI 构成。持久性值表示在不同会话之间用户的 `NameID` 值是相同的。如果值是瞬态的，则用户在每个会话中拥有不同的 `NameID` 值。单点登录交互支持以下类型的标识符：
+ `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent`
+ `urn:oasis:names:tc:SAML:2.0:nameid-format:transient`
+ `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`
+ `urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified`
+ `urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName`
+ `urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName`
+ `urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos`
+ `urn:oasis:names:tc:SAML:2.0:nameid-format:entity`

以下摘录显示了一个示例。用您自己的值替代标记值。

```
<Subject>
  <NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">_cbb88bf52c2510eabe00c1642d4643f41430fe25e3</NameID>
  <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
    <SubjectConfirmationData NotOnOrAfter="2013-11-05T02:06:42.876Z" Recipient="https://region-code.signin.aws.amazon.com/saml/SAMLSP4SHN3UIS2D558H46"/>
  </SubjectConfirmation>
</Subject>
```

**重要**  
`saml:aud` 上下文键来自 SAML *recipient* 属性，因为它等同于 OIDC 受众字段（例如 `accounts.google.com:aud`）的 SAML。

## `PrincipalTag` SAML 属性
<a name="saml_role-session-tags"></a>

（可选）您可使用将 `Name` 属性设置为 `https://aws.amazon.com/SAML/Attributes/PrincipalTag:{TagKey}` 的 `Attribute` 元素。此元素允许您将属性作为 SAML 断言中的会话标签传递。有关会话标签的更多信息，请参阅 [在 AWS STS 中传递会话标签](id_session-tags.md)。

要将属性作为会话标签传递，请包含指定标签值的 `AttributeValue` 元素。例如，要传递标签键/值对 `Project` = `Marketing` 和 `CostCenter` = `12345`，请使用以下属性。为每个标签包含一个单独的 `Attribute` 元素。

```
<Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:Project">
  <AttributeValue>Marketing</AttributeValue>
</Attribute>
<Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:CostCenter">
  <AttributeValue>12345</AttributeValue>
</Attribute>
```

要将上述标签设置为可传递，请包含另一个 `Attribute` 元素并将 `Name` 属性设置为 `https://aws.amazon.com/SAML/Attributes/TransitiveTagKeys`。这是一个可选的多值属性，可将您的会话标签设置为可传递。当您使用 SAML 会话代入 AWS 中的另一个角色时，可传递标签将保留。这称为[角色链](id_roles.md#iam-term-role-chaining)。例如，要将 `Principal` 和 `CostCenter` 标签均设置为可传递，请使用以下属性指定键。

```
<Attribute Name="https://aws.amazon.com/SAML/Attributes/TransitiveTagKeys">
  <AttributeValue>Project</AttributeValue>
  <AttributeValue>CostCenter</AttributeValue>
</Attribute>
```

## `Role` SAML 属性
<a name="saml_role-attribute"></a>

您可使用将 `Name` 属性设置为 `https://aws.amazon.com/SAML/Attributes/Role` 的 `Attribute` 元素。此元素包含一个或多个 `AttributeValue` 元素，这些元素可列出用户通过 IdP 映射到的 IAM 身份提供程序和角色。IAM 角色和 IAM 身份提供程序指定为逗号分隔的 ARN 对，格式与传递到 [AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) 的 `RoleArn` 和 `PrincipalArn` 参数相同。此元素必须至少包含一个角色/提供商对（`AttributeValue` 元素），也可以包含多个对。如果该元素包含多个对，则用户需要选择其使用 WebSSO 登录 AWS 管理控制台 时要代入的角色。

**重要**  
`Name` 标签中 `Attribute` 属性的值区分大小写。必须将其一字不差地设置为 `https://aws.amazon.com/SAML/Attributes/Role`。

```
<Attribute Name="https://aws.amazon.com/SAML/Attributes/Role">
  <AttributeValue>arn:aws:iam::account-number:role/role-name1,arn:aws:iam::account-number:saml-provider/provider-name</AttributeValue>
  <AttributeValue>arn:aws:iam::account-number:role/role-name2,arn:aws:iam::account-number:saml-provider/provider-name</AttributeValue>
  <AttributeValue>arn:aws:iam::account-number:role/role-name3,arn:aws:iam::account-number:saml-provider/provider-name</AttributeValue>
</Attribute>
```

## `RoleSessionName` SAML 属性
<a name="saml_role-session-attribute"></a>

您可使用将 `Name` 属性设置为 `https://aws.amazon.com/SAML/Attributes/RoleSessionName` 的 `Attribute` 元素。该元素包含一个为临时凭证提供标识符的 `AttributeValue` 元素，这些凭证是针对 SSO 颁发的。您可以使用此选项将临时凭证与正在使用您应用程序的用户相关联。该元素用于在 AWS 管理控制台中显示用户信息。`AttributeValue` 元素中的值长度必须介于 2 到 64 个字符之间，只能包含字母数字字符、下划线和以下字符：**. , \$1 = @ -**（连字符）。它不能含有空格。该值通常是用户 ID (`john`) 或电子邮件地址 (`johndoe@example.com`)。该值不应包含空格，如用户的显示名称 (`John Doe`)。

**重要**  
`Name` 标签中 `Attribute` 属性的值区分大小写。必须将其一字不差地设置为 `https://aws.amazon.com/SAML/Attributes/RoleSessionName`。

```
<Attribute Name="https://aws.amazon.com/SAML/Attributes/RoleSessionName">
  <AttributeValue>user-id-name</AttributeValue>
</Attribute>
```

## `SessionDuration` SAML 属性
<a name="saml_role-session-duration"></a>

（可选）您可使用将 `Name` 属性设置为 `https://aws.amazon.com/SAML/Attributes/SessionDuration"` 的 `Attribute` 元素。该元素包含一个 `AttributeValue` 元素，它指定用户在必须请求新的临时凭证之前可访问 AWS 管理控制台的时间长度。该值是一个表示会话秒数的整数。该值的范围是 900 秒 (15 分钟) 到 43200 秒 (12 小时)。如果该属性不存在，则凭证持续时间为 1 小时 (`DurationSeconds` API 的 `AssumeRoleWithSAML` 参数的默认值)。

要使用该属性，您必须配置 SAML 提供商，以通过控制台登录 Web 终端节点 (`https://region-code.signin.aws.amazon.com/saml`) 提供对 AWS 管理控制台的单一登录访问。有关可能的 *region-code* 值的列表，请参阅 [AWS 登录端点](https://docs.aws.amazon.com/general/latest/gr/signin-service.html)中的 **Region**（区域）列。您可以选择使用以下 URL：`https://signin.aws.amazon.com/static/saml`。请注意，该属性仅将会话扩展到 AWS 管理控制台。它不能延长其他凭证的有效期。但是，如果它存在于 `AssumeRoleWithSAML` API 调用中，则可以用来*缩短* 会话的持续时间。调用返回的凭证的默认生命周期为 60 分钟。

另请注意，如果还定义了 `SessionNotOnOrAfter` 属性，则两个属性的 ***lesser***（较小值）（`SessionDuration` 或 `SessionNotOnOrAfter`）将建立控制台会话的最大持续时间。

在启用具有更长持续时间的控制台会话时，可能产生凭证外泄的风险。为了帮助缓解这种风险，您可以通过在 IAM 控制台页面的 **Role Summary **(角色摘要) 上选择 **Revoke Sessions**（撤销会话）立即禁用所有角色的有效控制台会话。有关更多信息，请参阅 [撤销 IAM 角色临时安全凭证](id_roles_use_revoke-sessions.md)。

**重要**  
`Name` 标签中 `Attribute` 属性的值区分大小写。必须将其一字不差地设置为 `https://aws.amazon.com/SAML/Attributes/SessionDuration`。

```
<Attribute Name="https://aws.amazon.com/SAML/Attributes/SessionDuration">
  <AttributeValue>1800</AttributeValue>
</Attribute>
```

## `SourceIdentity` SAML 属性
<a name="saml_sourceidentity"></a>

（可选）您可使用将 `Name` 属性设置为 `https://aws.amazon.com/SAML/Attributes/SourceIdentity` 的 `Attribute` 元素。该元素包含一个 `AttributeValue` 元素，为使用 IAM 角色的人员或应用程序提供标识符。当您使用 SAML 会话代入 AWS 中的另一个角色时，源身份的值将保留，称为[角色链](id_roles.md#iam-term-role-chaining)。源身份的值存在于对角色会话期间执行的每个操作的请求中。在角色会话期间无法更改已设置的值。然后，管理员可以使用 AWS CloudTrail 日志来监控和审计源身份信息，以确定谁在使用共享角色执行操作。

`AttributeValue` 元素中的值长度必须介于 2 到 64 个字符之间，只能包含字母数字字符、下划线和以下字符：**. , \$1 = @ -**（连字符）。它不能含有空格。该值通常是与用户关联的属性，例如用户 ID (`john`) 或电子邮件地址 (`johndoe@example.com`)。该值不应包含空格，如用户的显示名称 (`John Doe`)。有关使用基于身份的策略的更多信息，请参阅 [监控和控制使用所担任角色执行的操作](id_credentials_temp_control-access_monitor.md)。

**重要**  
如果您的 SAML 断言配置为使用 [`SourceIdentity`](#saml_sourceidentity) 属性，则您的角色信任策略还必须包含 `sts:SetSourceIdentity` 操作，否则代入角色操作会失败。有关使用基于身份的策略的更多信息，请参阅 [监控和控制使用所担任角色执行的操作](id_credentials_temp_control-access_monitor.md)。

要传递源身份属性，请包含 `AttributeValue` 元素，指定源身份的值。例如，要传递源身份 `Diego` 使用以下属性。

```
<Attribute Name="https://aws.amazon.com/SAML/Attributes/SourceIdentity">
  <AttributeValue>Diego</AttributeValue>
```

## 将 SAML 属性映射到 AWS 信任策略上下文密钥
<a name="saml-attribute-mapping"></a>

本部分中的表列出了常用的 SAML 属性以及它们在 AWS 中映射到信任策略条件上下文密钥的方式。您可以使用这些键来控制对角色的访问。为此，请将键与 SAML 访问请求中所附带断言包含的值进行比较。

**重要**  
这些键仅在 IAM 信任策略（可决定谁能担任角色的策略）中可用，并且不适用于权限策略。

在 eduPerson 和 eduOrg 属性表中，值是以字符串或字符串列表的形式键入的。对于字符串值，您可以使用 `StringEquals` 或 `StringLike` 条件测试 IAM 信任策略中的这些值。对于包含字符串列表的值，您可以使用 `ForAnyValue` 和 `ForAllValues` [策略集运算符](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)测试信任策略中的这些值。

**注意**  
每个 AWS 上下文密钥只能包含一个断言。如果包含多个声明，将仅映射其中一个。

下表显示 eduPerson 和 eduOrg 属性。


| eduPerson 或 eduOrg 属性（`Name` 密钥） | 映射至此 AWS 上下文密钥（`FriendlyName` 密钥） | Type | 
| --- | --- | --- | 
|   `urn:oid:1.3.6.1.4.1.5923.1.1.1.1`   |   `eduPersonAffiliation`   |  字符串列表  | 
|   `urn:oid:1.3.6.1.4.1.5923.1.1.1.2`   |   `eduPersonNickname`   |  字符串列表  | 
|   `urn:oid:1.3.6.1.4.1.5923.1.1.1.3`   |   `eduPersonOrgDN`   |  字符串  | 
|   `urn:oid:1.3.6.1.4.1.5923.1.1.1.4`   |   `eduPersonOrgUnitDN`   |  字符串列表  | 
|   `urn:oid:1.3.6.1.4.1.5923.1.1.1.5`   |   `eduPersonPrimaryAffiliation`   |  字符串  | 
|   `urn:oid:1.3.6.1.4.1.5923.1.1.1.6`   |   `eduPersonPrincipalName`   |  字符串  | 
|   `urn:oid:1.3.6.1.4.1.5923.1.1.1.7`   |   `eduPersonEntitlement`   |  字符串列表  | 
|   `urn:oid:1.3.6.1.4.1.5923.1.1.1.8`   |   `eduPersonPrimaryOrgUnitDN`   |  字符串  | 
|   `urn:oid:1.3.6.1.4.1.5923.1.1.1.9`   |   `eduPersonScopedAffiliation`   |  字符串列表  | 
|   `urn:oid:1.3.6.1.4.1.5923.1.1.1.10`   |   `eduPersonTargetedID`   |  字符串列表  | 
|   `urn:oid:1.3.6.1.4.1.5923.1.1.1.11`   |   `eduPersonAssurance`   |  字符串列表  | 
|   `urn:oid:1.3.6.1.4.1.5923.1.2.1.2`   |   `eduOrgHomePageURI`   |  字符串列表  | 
|   `urn:oid:1.3.6.1.4.1.5923.1.2.1.3`   |   `eduOrgIdentityAuthNPolicyURI`   |  字符串列表  | 
|   `urn:oid:1.3.6.1.4.1.5923.1.2.1.4`   |   `eduOrgLegalName`   |  字符串列表  | 
|   `urn:oid:1.3.6.1.4.1.5923.1.2.1.5`   |   `eduOrgSuperiorURI`   |  字符串列表  | 
|   `urn:oid:1.3.6.1.4.1.5923.1.2.1.6`   |   `eduOrgWhitePagesURI`   |  字符串列表  | 
|   `urn:oid:2.5.4.3`   |   `cn`   |  字符串列表  | 

下表显示 Active Directory 属性。


| AD 属性 | 映射到此 AWS 上下文密钥 | Type | 
| --- | --- | --- | 
|  `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name`  |  `name`  |  字符串  | 
|  `http://schemas.xmlsoap.org/claims/CommonName`  |  `commonName`  |  字符串  | 
|  `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname`  |  `givenName`  |  字符串  | 
|  `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname`  |  `surname`  |  字符串  | 
|  `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`  |  `mail`  |  字符串  | 
|  `http://schemas.microsoft.com/ws/2008/06/identity/claims/primarygroupsid`  |  `uid`  |  字符串  | 

下表显示 X.500 属性。


| X.500 属性 | 映射到此 AWS 上下文密钥 | Type | 
| --- | --- | --- | 
|  `2.5.4.3`  |  `commonName`  |  字符串  | 
|  `2.5.4.4`  |  `surname`  |  字符串  | 
|  `2.4.5.42`  |  `givenName`  |  字符串  | 
|  `2.5.4.45`  |  `x500UniqueIdentifier`  |  字符串  | 
|  `0.9.2342.19200300100.1.1`  |  `uid`  |  字符串  | 
|  `0.9.2342.19200300100.1.3`  |  `mail`  |  字符串  | 
|  `0.9.2342.19200300.100.1.45`  |  `organizationStatus`  |  字符串  | 

# 使 SAML 2.0 联合主体能够访问 AWS 管理控制台
<a name="id_roles_providers_enable-console-saml"></a>

您可使用一个角色配置符合 SAML 2.0 标准的身份提供者（IdP）和 AWS 以允许 SAML 联合主体访问 AWS 管理控制台。该角色为用户授予了在控制台中执行任务的权限。如果您希望为 SAML 联合主体提供访问 AWS 的其他方式，请参阅以下其中一项主题：
+ AWS CLI: [切换到 IAM 角色（AWS CLI）](id_roles_use_switch-role-cli.md)
+ Tools for Windows PowerShell: [切换到 IAM 角色（Tools for Windows PowerShell）](id_roles_use_switch-role-twp.md)
+ AWS API：[切换到 IAM 角色（AWS API）](id_roles_use_switch-role-api.md)

## 概述
<a name="enable-console-saml-overview"></a>

下图说明了启用了 SAML 的单一登录的流程。

**注意**  
SAML 的这种特定用途与[SAML 2.0 联合身份验证](id_roles_providers_saml.md)中所述的更常规的用途不同，因为此工作流程将代表用户打开 AWS 管理控制台。这需要使用 AWS 登录端点，而不是直接调用 `AssumeRoleWithSAML` API。该终端节点将为用户调用 API 并返回将用户的浏览器自动重定向到 AWS 管理控制台的 URL。

![\[使用 SAML 单点登录 (SSO) 到 AWS 管理控制台\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/saml-based-sso-to-console.diagram.png)


下图说明了以下步骤：

1. 用户浏览到您的组织的门户网站，并选择转到 AWS 管理控制台的选项。在企业中，门户网站通常充当处理您企业与 AWS 之间的信任交换的 IdP。例如，在 Active Directory 联合身份验证服务中，门户网站 URL 为：`https://ADFSServiceName/adfs/ls/IdpInitiatedSignOn.aspx`

1. 该门户网站可验证您的组织用户的身份。

1. 该门户网站生成一个 SAML 身份验证响应，其中包括识别用户身份的断言以及用户的相关属性。您也可以配置 IdP 以包含一个名为 `SessionDuration` 的 SAML 断言属性，该属性指定控制台会话的有效时间长度。您还可以配置 IdP，将属性作为[会话标签](id_session-tags.md)传递。该门户网站将此响应发送到客户端浏览器。

1. 该客户端浏览器将被重定向到 AWS 单一登录终端节点并发布 SAML 断言。

1. 终端节点将代表用户请求临时安全凭证，并创建一个使用这些凭证的控制台登录 URL。

1. AWS 将登录 URL 作为重定向发回客户端。

1. 该客户端浏览器将重定向到 AWS 管理控制台。如果 SAML 身份验证响应包含映射到多个 IAM 角色的属性，则系统将首先提示用户选择角色以访问控制台。

从用户的角度来看，整个流程以透明的方式进行：用户在您的企业的内部门户网站开始操作，在 AWS 管理控制台 结束操作，无需提供任何 AWS 凭证。

有关如何配置此行为的概述以及指向详细步骤的链接，请参阅以下章节。

## 将网络配置为适用于 AWS 的 SAML 提供商
<a name="fedconsole-config-network-as-saml"></a>

在组织的网络中，配置身份存储（例如 Windows Active Directory）以使用基于 SAML 的 IdP，例如 Windows Active Directory 联合身份验证服务、Shibboleth 等。通过使用 IdP，可以生成一个元数据文档，此文档将您的组织描述为 IdP 并且包含身份验证密钥。另外，还要将企业的门户网站配置为将访问 AWS 管理控制台 的用户请求路由至 AWS SAML 终端节点，以便使用 SAML 断言进行身份验证。如何配置您的 IdP 来生成 metadata.xml 文件取决于您的 IdP。请参阅您的 IdP 文档以获得指示，或参阅[将第三方 SAML 解决方案提供者与 AWS 集成](id_roles_providers_saml_3rd-party.md)以获得指向很多支持的 SAML 提供商 Web 文档。

## 在 IAM 中创建 SAML 提供商
<a name="fedconsole-create-saml-provider"></a>

然后，登录 AWS 管理控制台并转至 IAM 控制台。在此，您创建一个新的 SAML 提供商，这是在 IAM 中包含您的企业的 IdP 的相关信息的实体。在此过程中，您可以上传在上一节中由贵组织中的 IdP 软件生成的元数据文档。有关更多信息，请参阅 [在 IAM 中创建 SAML 身份提供者](id_roles_providers_create_saml.md)。

## 在 AWS 中为 SAML 联合主体中配置权限
<a name="fedconsole-grantperms"></a>

下一步是创建一个 IAM 角色，以在 IAM 与您企业的 IdP 之间建立信任关系。该角色必须将您的 IdP 标识为主体（可信实体）以实现联合身份验证目的。该角色还定义了由您的组织的 IdP 进行身份验证的用户可以在 AWS 中执行的操作。您可使用 IAM 控制台创建该角色。在创建指示谁可以代入角色的信任策略时，您可以将先前创建的 SAML 提供商指定为 IAM。您还可以指定用户要代入角色必须匹配的一个或多个 SAML 属性。例如，您可以指定只允许其 SAML `[eduPersonOrgDN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html#ck_edupersonorgdn)` 值为 `ExampleOrg` 的用户登录。角色向导会自动添加一个测试 `saml:aud` 属性的条件，以确保仅出于登录 AWS 管理控制台的目的担任该角色。

如果需要 SAML 加密，则登录 URL 必须包含 AWS 分配给您的 SAML 提供商的唯一标识符，您可以在身份提供者详细信息页面上找到该标识符。该角色的信任策略可能如下所示：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::111122223333:saml-provider/ExampleOrgSSOProvider"
            },
            "Action": "sts:AssumeRoleWithSAML",
            "Condition": {
                "StringEquals": {
                    "saml:edupersonorgdn": "ExampleOrg",
                    "saml:aud": "https://region-code.signin.aws.amazon.com/saml/acs/SAMLSP4SHN3UIS2D558H46"
                }
            }
        }
    ]
}
```

------

**注意**  
角色信任策略中使用的 SAML IdP 必须与角色位于同一账户中。

我们建议使用区域端点作为 `https://region-code.signin.aws.amazon.com/static/saml-metadata.xml` 的 `saml:aud` 属性。有关可能的 *region-code* 值的列表，请参阅 [AWS 登录端点](https://docs.aws.amazon.com/general/latest/gr/signin-service.html)中的 **Region**（区域）列。

对于该角色中的[权限策略](access_policies.md)，您可以像任何角色、用户或组一样指定权限。例如，如果允许您的企业中的用户管理 Amazon EC2 实例，您可以在权限策略中显式允许 Amazon EC2 操作。您可通过分配一个[托管策略](access_policies_manage-attach-detach.md) (如 **Amazon EC2 完全访问**托管策略) 执行此操作。

有关创建用于 SAML IdP 的角色的详细信息，请参阅[创建用于 SAML 2.0 联合身份验证的角色（控制台）](id_roles_create_for-idp_saml.md)。

## 完成配置并创建 SAML 断言
<a name="fedconsole-configassertions"></a>

通过安装位于 `https://region-code.signin.aws.amazon.com/static/saml-metadata.xml` 或 `https://signin.aws.amazon.com/static/saml-metadata.xml` 的 `saml-metadata.xml` 文件，通知 SAML IdP AWS 是您的服务提供商。如果需要 SAML 加密，则可在 `https://region-code.signin.aws.amazon.com/static/saml/SAMLSP4SHN3UIS2D558H46/saml-metadata.xml` 找到该文件。

有关可能的 *region-code* 值的列表，请参阅 [AWS 登录端点](https://docs.aws.amazon.com/general/latest/gr/signin-service.html)中的 **Region**（区域）列。

安装该文件的方式取决于您的 IdP。一些提供商为您提供了键入该 URL 的选项，此时，IdP 将为您获取并安装该文件。另一些提供商则要求您从该 URL 处下载该文件，然后将其作为本地文件提供。请参阅您的 IdP 文档以获得详细信息或参阅[将第三方 SAML 解决方案提供者与 AWS 集成](id_roles_providers_saml_3rd-party.md)以获得指向很多支持的 SAML 提供商的 Web 文档。

您还可配置一条信息，您希望 IdP 在身份验证响应期间将此信息作为 SAML 属性传递到 AWS。这些信息的大部分在 AWS 中显示为条件上下文密钥，您可以在策略中进行评估。这些条件键确保仅向正确上下文中的授权用户授予权限来访问您的 AWS 资源。您可以指定限制何时可使用控制台的时段。您还可以指定在必须刷新用户的凭证之前用户可访问控制台的最长时间（最多 12 个小时）。有关详细信息，请参阅[为身份验证响应配置 SAML 断言。](id_roles_providers_create_saml_assertions.md)。

# 在您的浏览器中查看 SAML 响应
<a name="troubleshoot_saml_view-saml-response"></a>

以下过程介绍了在排除 SAML 2.0 相关问题时，如何在浏览器中查看服务提供商的 SAML 响应。

对于所有浏览器，请转到您可以重现问题的页面。然后，针对相应的浏览器执行以下步骤：

**Topics**
+ [Google Chrome](#chrome)
+ [Mozilla Firefox](#firefox)
+ [Apple Safari](#safari)
+ [如何处理 Base64 编码的 SAML 响应](#whatnext)

## Google Chrome
<a name="chrome"></a>

**在 Chrome 中查看 SAML 响应**

这些步骤已经过 Google Chrome 版本 106.0.5249.103（官方版本）（arm64）的测试。如果您使用其他版本，则可能需要相应地调整步骤。

1. 按 **F12** 以启动 **Developer Tools**（开发人员工具）控制台。

1. 选择 **Network**（网络）选项卡，然后选择 **Developer Tools**（开发人员工具）窗口左上角的 **Preserve log**（保留日志）。

1. 重现问题。

1. （可选）如果 **Method**（方法）列在 **Developer Tools**（开发人员工具）的 **Network**（网络）日志窗格中不可见，右击任何列标签并选择 **Method**（方法）以添加列。

1. 在 **Developer Tools**（开发人员工具）的 **Network**（网络）日志窗格中查找 **SAML Post**。选择该行，然后查看顶部的 **Payload**（有效负载）选项卡。查找包含编码请求的 **SAMLResponse** 元素。关联值为 Base64 编码的响应。

## Mozilla Firefox
<a name="firefox"></a>

**在 Firefox 中查看 SAML 响应**

此过程已在 Mozilla Firefox 版本 105.0.3（64 位）上进行了测试。如果您使用其他版本，则可能需要相应地调整步骤。

1. 按 **F12** 以启动 **Web Developer Tools**（Web 开发人员工具）控制台。

1. 选择 **Network** 选项卡。

1. 在 **Web Developer Tools**（Web 开发人员工具）窗口的右上角，选择选项（小齿轮图标）。选择 **Persist logs**（保留日志）。

1. 重现问题。

1. （可选）如果 **Method**（方法）列在 **Web 开发人员工具**的 **Network**（网络）日志窗格中不可见，右击任何列标签并选择 **Method**（方法）以添加列。

1. 在表中查找 **POST** **SAML**。选择该行，然后查看 **Request**（请求）选项卡并找到 **SAMLResponse** 元素。关联值为 Base64 编码的响应。

## Apple Safari
<a name="safari"></a>

**在 Safari 中查看 SAML 响应**

这些步骤已经过 Apple Safari 版本 16.0（17614.1.25.9.10、17614）的测试。如果您使用其他版本，则可能需要相应地调整步骤。

1. 在 Safari 中启用 Web Inspector。打开 **Preferences** 窗口，选择 **Advanced** 选项卡，然后选择 **Show Develop menu in the menu bar**。

1. 现在您可以打开 Web Inspector。在菜单栏中选择 **Develop**（开发），然后选择 **Show Web Inspector**（显示 Web 检查器）。

1. 选择 **Network** 选项卡。

1. 在 **Web Inspector**（Web 检查器）窗口的左上角，选择选项（包含三条横线的小圆圈图标）。选择 **Preserve Log**（保留日志）。

1. （可选）如果 **Method**（方法）列在 **Web Inspector**（Web 检查器）的**Network**（网络）日志窗格中不可见，右击任何列标签并选择 **Method**（方法）以添加列。

1. 重现问题。

1. 在表中查找 **POST** **SAML**。选择该行，然后查看 Headers（标头）选项卡。

1. 查找包含编码请求的 **SAMLResponse** 元素。向下滚动，查找名为 `Request Data` 的 `SAMLResponse`。关联值为 Base64 编码的响应。

## 如何处理 Base64 编码的 SAML 响应
<a name="whatnext"></a>

在浏览器中找到 Base64 编码的 SAML 响应元素之后，复制这些元素并使用您偏好的 Base-64 解码工具来提取带有 XML 标签的响应。

**安全提示**  
由于您查看的 SAML 响应数据可能包含敏感安全数据，我们建议您不要使用*在线* base64 解码程序。而是使用安装在本地计算机上、不会通过网络发送 SAML 数据的工具。

**适用于 Windows 系统的内置选项 (PowerShell)：**

```
PS C:\> [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("base64encodedtext"))
```

**适用于 MacOS 和 Linux 系统的内置选项：**

```
$ echo "base64encodedtext" | base64 --decode
```

**查看解码后的文件中的值**  
查看解码后的 SAML 响应文件中的值。
+ 验证 saml:NameID 属性的值是否与经过身份验证的用户的用户名匹配。
+ 查看 https://aws.amazon.com/SAML/Attributes/Role 的值。ARN 和 SAML 提供商区分大小写，并且 [ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html) 必须与您账户中的资源匹配。
+ 查看 https://aws.amazon.com/SAML/Attributes/RoleSessionName 的值。该值必须与[声明规则](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_relying-party.html)中的值匹配。
+ 如果为电子邮件地址或账户名配置了属性值，请确保这些值正确无误。这些值必须与经过身份验证的用户的电子邮件地址或账户名相对应。

**检查是否有错并确认配置**  
检查这些值是否包含错误，并确认下面的配置是否正确。
+ 声明规则符合要求的要素，并且所有 ARN 都正确无误。有关更多信息，请参阅 [配置具有依赖方信任的 SAML 2.0 IdP 并添加陈述](id_roles_providers_create_saml_relying-party.md)。
+ 您已将最新元数据文件从 IdP 上传到 SAML 提供商中的 AWS。有关更多信息，请参阅 [使 SAML 2.0 联合主体能够访问 AWS 管理控制台](id_roles_providers_enable-console-saml.md)。
+ 您正确配置了 IAM 角色的信任策略。有关更多信息，请参阅 [担任角色的方法](id_roles_manage-assume.md)。