

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 创建 Salesforce 客户密钥
<a name="tutorials_salesforce-client-secret"></a>

在本教程中，您将创建 Salesforce 客户端密钥并将其 AWS Secrets Manager 作为[托管外部密钥](managed-external-secrets.md)存储，开启托管轮换，然后通过将轮换凭据交换为访问令牌来测试轮换凭证。本教程大约需要 20-30 分钟才能完成。

本教程使用的 AWS 服务可能会对您产生费用 AWS 账户，包括您存储在 Secrets Manager 中的密钥的费用，以及客户托管密钥（如果您选择使用）的费用。有关更多信息，请参阅 [定价](intro.md#asm_pricing)。

**注意**  
本教程以[SalesforceClientSecret](mes-partner-salesforce.md)密钥类型为例。其他托管外部密钥类型也遵循类似的流程。您可以使用集成合作伙伴定义的格式创建密钥，开启托管轮换，然后使用轮换的证书。有关已注册合作伙伴的列表及其所需的密钥格式，请参阅。[整合合作伙伴](mes-partners.md)

在开始本教程之前，请确保您具有以下各项。
+ 允许您创建外部客户端应用程序 (ECA) 的 Salesforce 账户（开发者或其他账户）。
+ 您的管理权限 AWS 账户。在生产环境中，最佳做法是为不同的任务使用不同的角色。例如，在组织中管理密钥的角色将创建密钥，而一个单独的角色将在运行时使用该密钥。在执行教程步骤时，我们建议您继续使用相同身份。有关如何在生产环境中设置权限的信息，请参阅 [的身份验证和访问控制 AWS Secrets Manager](auth-and-access.md)。

**Topics**
+ [步骤 1：创建外部客户端应用程序并启用 OAuth](#tutorials_salesforce-client-secret_step1)
+ [步骤 2：创建托管外部密钥并启用轮换](#tutorials_salesforce-client-secret_step2)
+ [步骤 3：测试轮换后的凭证](#tutorials_salesforce-client-secret_step3)
+ [步骤 4：清理资源](#tutorials_salesforce-client-secret_step4)
+ [后续步骤](#tutorials_salesforce-client-secret_nextsteps)

## 步骤 1：创建外部客户端应用程序并启用 OAuth
<a name="tutorials_salesforce-client-secret_step1"></a>

第一步是在 Salesforce 中创建外部客户端应用程序 (ECA) 并将其配置为 OAuth，这样 Secrets Manager 就可以轮换客户端密钥。有关完整的 Salesforce 程序，请参阅 Salesforce 文档中的[使用外部客户端应用程序设置授权](https://developer.salesforce.com/docs/platform/accsdk/guide/acc-sdk-setup-auth-external.html)。

设置 ECA 时，请务必配置以下内容：
+ 在组织级别，启用 “**允许通过 REST API 访问外部客户端应用程序消费者机密**”。此设置允许 Secrets Manager 通过 Salesforce REST API 检索和轮换使用者密钥。
+ 在 ECA 上，启用 OAuth 范围**通过 API 管理用户数据 (api)**。
+ 在 ECA 上，启用 “**启用客户端凭证流**”。
+ 在 ECA 上，启用 “**启用令牌交换流程**” 和 “**需要为令牌交换流程提供密钥**”。

创建 ECA 后，在下一步中收集需要存储在密钥中的值：
+ ECA Manager OAuth 设置中的使用**者密****钥**（客户端 ID）和使用者密钥（客户端密钥）。
+ 例如`https://{{MyDomainName}}.my.salesforce.com`，你的 Salesforce 我的域名基础网址。
+ ECA 的**应用程序 ID** **和消费者 ID**。它们对应于 Salesforce 文档中的`external_client_app_identifier`和`consumer_id`字段。要了解如何检索这些值，请参阅 Salesforce 文档中的[暂存 OAuth 凭证](https://help.salesforce.com/s/articleView?id=xcloud.eca_stage_oauth_credentials.htm&type=5)。

有关密钥中每个必填字段的描述，请参阅[Salesforce 客户密码](mes-partner-salesforce.md)。

## 步骤 2：创建托管外部密钥并启用轮换
<a name="tutorials_salesforce-client-secret_step2"></a>

接下来，你将 Salesforce 客户端密钥作为托管外部密钥存储在 Secrets Manager 中，然后开启托管轮换。使用托管轮换，您无需创建或维护 Lambda 轮换函数。Secrets Manager 会为你轮换密钥。

**创建密钥并开启轮换（控制台）**

1. 打开 Secrets Manager 控制台，网址为[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)。

1. 选择**存储新密钥**。

1. 在 **Choose secret type**（选择密钥类型）页面上，执行以下操作：

   1. 对于**密钥类型**，请选择 Salesforce 客户机密托管外部密钥类型 (**SalesforceClientSecret**)。

   1. 输入 Salesforce 客户端密钥的密钥值字段：使用者密钥、消费者密钥、基本 URI、应用程序 ID 和消费者 ID。有关每个字段的说明，请参见[Salesforce 客户密码](mes-partner-salesforce.md)。

   1. 对于**加密密钥**，请选择使用 fo **aws/secretsmanager**r Secret AWS 托管式密钥 s Manager。使用此密钥不产生任何费用。您也可以使用自己的客户托管密钥。有关使用客户托管密钥的成本的信息，请参阅 [定价](intro.md#asm_pricing)。

   1. 选择**下一步**。

1. 在 “**配置密钥**” 页面上，输入描述性**密钥名称**和**描述**，然后选择 “**下一步**”。

1. 在 “**配置轮换**” 页面上，执行以下操作。对于托管的外部密钥，默认情况下，密钥创建期间会启用轮换。

   1. 确认**自动旋转**已开启。

   1. 在 “**轮换元数据**” 下，对于 **API 版本** (`apiVersion`)，输入您的 Salesforce 组织的 API 版本。该字段为必填。它必须采用格式`v{{XX.X}}`，其中{{X}}为数字字符，并且必须至少为`v65.0`。如果您希望 Secrets Manager 使用一组单独的管理凭证轮换密钥，请同时提供管理员密钥 ARN。有关每个元数据字段的描述，请参阅[Salesforce 客户密码](mes-partner-salesforce.md)。

   1. 在**密钥轮换的服务权限**中，选择**创建新角色以自动创建一个 IAM 角色**，该角色具有 Secrets Manager 轮换密钥所需的权限。默认情况下，权限仅限于创建密钥的 AWS 区域中的集成合作伙伴。有关更多信息，请参阅 [安全性和权限](mes-security.md)。

   1. 在 “**轮换计划**” 下，按照 UTC 时区输入您的日程安排，例如每 30 天自动轮换一次。

   1. 选择**下一步**。

1. 在 **Review (审核)** 页上，审核您的密钥详细信息，然后选择 **Store (存储)**。

有关为托管外部密钥配置轮换的更多方法，包括 AWS AWS CLI，请参阅[轮换 Secrets Manager 托管的外部机密](rotate-secrets_external.md)。

## 步骤 3：测试轮换后的凭证
<a name="tutorials_salesforce-client-secret_step3"></a>

最后一步是通过检索密钥值并将凭证交换为 Salesforce 访问令牌来确认轮换的证书是否有效。

**检索密钥值（控制台）**

1. 打开 Secrets Manager 控制台，网址为[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)。

1. 在**密钥**列表页上，选择您的密钥。

1. 在 **Secret details**（秘密详细信息）页面上，向下滚动并选择 **Retrieve secret value**（检索秘密值）。记下当前`consumerKey`和`consumerSecret`值。

**注意**  
确认`consumerKey`和`consumerSecret`值实际上已与您最初存储的值相比发生了变化。如果它们没有更改，请等待几分钟，然后再次检查。如果它们仍未更改，请检查是否 AWS CloudTrail 有密钥`RotationFailed`的事件，其中包括有关轮换失败原因的详细信息。有关更多信息，请参阅 [我的托管外部密钥无法轮换](troubleshoot.md#troubleshoot-mes-not-rotating)。

接下来，使用检索到的凭证向 Salesforce 申请访问令牌。{{MyDomainName}}用你的 Salesforce 我的域名替换，{{consumerKey}}然后{{consumerSecret}}用你检索到的值替换和。

```
curl -X POST "https://{{MyDomainName}}.my.salesforce.com/services/oauth2/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id={{consumerKey}}" \
  -d "client_secret={{consumerSecret}}"
```

如果凭证有效，Salesforce 会返回一个 JSON 响应，其中包含一个。`access_token`收到访问令牌可确认轮换的凭证有效。

当您在命令 shell 中输入命令时，存在访问命令历史记录或实用程序可以访问您命令参数的风险。请参阅[降低使用存储 AWS Secrets Manager 密钥 AWS CLI 的风险](security_cli-exposure-risks.md)。

## 步骤 4：清理资源
<a name="tutorials_salesforce-client-secret_step4"></a>

为避免持续产生费用，请在不再需要本教程中创建的资源时将其删除：密钥和 Secrets Manager 创建的 IAM 轮换角色。删除密钥也会停止自动轮换。

**删除密钥（控制台）**

1. 打开 Secrets Manager 控制台，网址为[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)。

1. 在**密钥**列表页上，选择您的密钥。

1. 在**密钥详细信息**部分中，选择**操作**，然后选择**编辑描述**。

1. 在 “**禁用密钥并计划删除**” 对话框中，输入等待期，然后选择 “**计划删除**”。Secrets Manager 使密钥无法立即访问，并安排在恢复时段之后将其删除。有关更多信息，请参阅 [删除一个 AWS Secrets Manager 机密密钥](manage_delete-secret.md)。

**删除轮换角色（控制台）**

1. 在上打开 IAM 控制台 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)，然后选择**角色**。

1. 找到 Secrets Manager 为轮换创建的角色，将其选中，然后选择**删除**。有关更多信息，请参阅《IAM 用户指南》**中的[删除角色或实例配置文件](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html)。

## 后续步骤
<a name="tutorials_salesforce-client-secret_nextsteps"></a>
+ 要详细了解托管外部机密以及 Secrets Manager 与之集成的合作伙伴，请参阅[使用 AWS Secrets Manager 管理外部机密以管理第三方机密](managed-external-secrets.md)。
+ 要查看 Salesforce 所需的机密值和轮换元数据字段，请参阅[Salesforce 客户密码](mes-partner-salesforce.md)。
+ 有关为托管外部密钥设置轮换的更多方法，请参阅[轮换托管的外部机密](rotate-secrets_external.md)。
+ 您可以通过缓存密钥来提高性能并降低成本。有关更多信息，请参阅 [从那里获取秘密 AWS Secrets Manager](retrieving-secrets.md)。
+ 要了解使用 Secrets Manager 的费用，请参阅[定价](intro.md#asm_pricing)。