

# 在 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 联合身份验证服务）和 Amazon 之间建立信任，以便企业中的用户能够访问 Amazon 资源，则需要使用 IAM 身份提供者。IAM SAML 身份提供程序用作 IAM 信任策略中的主体。

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

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

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

最后，在创建角色后，您可通过配置包含有关 Amazon 的信息的 IdP 以及希望 SAML 联合主体使用的角色来完成 SAML 信任。这称为在 IdP 和 Amazon 之间配置信赖方信任。要配置信赖方信任，请参阅[配置具有依赖方信任的 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 身份提供商 (Amazon CLI)](#idp-create-identityprovider-CLI)
+ [创建和管理 IAM SAML 身份提供商 (Amazon 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 配置。Amazon 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.amazonaws.cn/cognito/latest/developerguide/cognito-user-pools-SAML-signing-encryption.html)。尽管此功能没有直接扩展到身份池，但用户池可以是身份池的 IDP。要对身份池使用 SAML 加密，请将具有加密的 SAML 提供商添加到一个用户池，其是身份池的 IdP。  
SAML 提供商必须能够使用用户池提供的密钥对 SAML 断言进行加密。用户池不接受使用 IAM 提供的证书进行加密的断言。

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

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

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

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

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

1. 登录 Amazon Web Services 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.amazonaws.cn/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。您还可以使用标签来控制对 Amazon 资源的访问。要了解有关标记 SAML 身份提供程序的更多信息，请参阅[标记 IAM SAML 身份提供者](id_tags_saml.md)。

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

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

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

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

1. 登录 Amazon Web Services 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.amazonaws.cn/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.amazonaws.cn/STS/latest/APIReference/API_AssumeRoleWithSAML.html)` 来使用加密的 SAML 断言在 Amazon 中代入角色。

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. 登录 Amazon Web Services 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.amazonaws.cn/iam/)。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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