

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

# AWS Secrets Manager 在 Amazon Data Firehose 中进行身份验证
<a name="using-secrets-manager"></a>

Amazon Data Firehose 与 AWS Secrets Manager 之集成，可让您安全地访问您的密钥并自动轮换证书。通过这种集成，Firehose 可在运行时从 Secrets Manager 检索密钥，以连接到前面提到的流式传输目的地并传输您的数据流。这样，无论是在还是 API 参数中，在直播创建工作流程中，您的密钥都不会以 AWS 管理控制台 纯文本形式显示。它提供了一种安全的实践方法来管理您的密钥，并使您免于复杂的凭证管理活动（例如，设置自定义 Lambda 函数来管理密码轮换）。

有关更多信息，请参阅 [AWS Secrets Manager 《用户指南》](https://docs.aws.amazon.com/secretsmanager/latest/userguide)。

**Topics**
+ [了解密钥](secrets-manager-whats-secret.md)
+ [创建密钥](secrets-manager-create.md)
+ [使用密钥](secrets-manager-how.md)
+ [轮换密钥](secrets-manager-rotate.md)

# 了解密钥
<a name="secrets-manager-whats-secret"></a>

密钥可以是密码、一组证书（例如用户名和密码）、 OAuth 令牌或您以加密形式存储在 Secrets Manager 中的其他机密信息。

对于每个目标，您必须以正确的 JSON 格式指定密钥键值对，如下一节所示。如果您的密钥没有按照目的地的正确 JSON 格式，则 Amazon Data Firehose 将无法连接到您的目的地。

**MySQL 和 PostgreSQL 等数据库的密钥格式**

```
{
    "username":  "<username>",
    "password":  "<password>"
}
```

**Amazon Redshift 预置集群和 Amazon Redshift Serverless 工作组的密钥格式**

```
{
    "username":  "<username>",
    "password":  "<password>"
}
```

**Splunk 的密钥格式**

```
{
    "hec_token":  "<hec token>"
}
```

**Snowflake 的密钥格式**

```
{
    "user":  "<snowflake-username>",
    "private_key":  "<snowflake-private-key>", // without the beginning and ending private key, remove all spaces and newlines
    "key_passphrase":  "<snowflake-private-key-passphrase>" // optional
}
```

**HTTP 端点、Coralogix、Datadog、Dynatrace、Elastic、Honeycomb、Logz.io、Mon LogicMonitor goDB Cloud 和 New Relic 的秘密格式**

```
{
    "api_key":  "<apikey>"
}
```

# 创建密钥
<a name="secrets-manager-create"></a>

要创建密钥，请按照《*AWS Secrets Manager 用户指南》*中[创建 AWS Secrets Manager 密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)中的步骤进行操作。

# 使用密钥
<a name="secrets-manager-how"></a>

我们建议你使用存储凭证或密钥 AWS Secrets Manager 来连接直播目的地，例如亚马逊 Redshift、HTTP 终端节点、Snowflake、Splunk、Coralogix、Datadog、Dynatrace、Elastic、Honeycomb、Logz.io、MongoDB Cloud 和 New Relic。 LogicMonitor

在创建 Firehose 流时，您可以通过 AWS 管理控制台使用 Secrets Manager 为这些目的地配置身份验证。有关更多信息，请参阅 [配置目的地设置](create-destination.md)。或者，您也可以使用[CreateDeliveryStream](https://docs.aws.amazon.com/firehose/latest/APIReference/API_CreateDeliveryStream.html)和 [UpdateDestination](https://docs.aws.amazon.com/firehose/latest/APIReference/API_UpdateDestination.html)API 操作来配置 Secrets Manager 的身份验证。

Firehose 使用加密方法缓存密钥，并在每次连接到目的地时使用这些密钥。它每 10 分钟刷新一次缓存，以确保可使用最新的凭证。

在流的生命周期中，您可以选择随时关闭从 Secrets Manager 检索密钥的功能。如果您不想使用 Secrets Manager 来检索密钥，则可以改用 username/password 或 API 密钥。

**注意**  
尽管在 Firehose 中的此功能无需支付额外费用，但您需要为访问和维护 Secrets Manager 付费。有关更多信息，请参阅 [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/pricing/) 定价页。

## 授予 Firehose 检索密钥的访问权限
<a name="secrets-manager-permission"></a>

要让 Firehose 从中检索密钥 AWS Secrets Manager，您必须向 Firehose 提供访问密钥所需的权限以及加密您的密钥的密钥。

使用 AWS Secrets Manager 存储和检索密钥时，有几种不同的配置选项，具体取决于密钥的存储位置和加密方式。
+ 如果密钥与您的 IAM 角色存储在同一个 AWS 账户中，并且使用默认 AWS 托管密钥 (`aws/secretsmanager`) 进行加密，则 Firehose 担任的 IAM 角色只需要`secretsmanager:GetSecretValue`获得该密钥的权限即可。

  ```
  // secret role policy
  {
      "Version": "2012-10-17", 		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "secretsmanager:GetSecretValue",
              "Resource": "Secret ARN"
          }
      ]
  }
  ```

  有关 IAM 策略的更多信息，请参阅 [AWS Secrets Manager的权限策略示例](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_examples.html)。
+ 如果密钥与角色存储在同一个账户中，但使用[客户自主管理型密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)（CMK）加密，则该角色同时需要 `secretsmanager:GetSecretValue` 和 `kms:Decrypt` 权限。CMK 策略还需要允许 IAM 角色执行 `kms:Decrypt`。
+ 如果密钥存储在与您的角色不同的 AWS 账户中，并且使用默认 AWS 托管密钥进行加密，则无法进行此配置，因为当使用托管密钥加密密钥时，Secrets Manager 不允许跨账户访问。 AWS 
+ 如果密钥存储在不同的账户中并使用 CMK 加密，则 IAM 角色需要对该密钥的 `secretsmanager:GetSecretValue` 权限和对 CMK 的 `kms:Decrypt` 权限。密钥的资源策略和其他账户中的 CMK 策略还需要允许 IAM 角色具有必要的权限。有关更多信息，请参阅[跨账户访问](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_examples_cross.html)。

# 轮换密钥
<a name="secrets-manager-rotate"></a>

*轮换*是指定期更新密钥。您可以配置 AWS Secrets Manager 为按照您指定的时间表自动轮换密钥。这样，您可以将长期密钥替换为短期密钥。这有助于降低泄露的风险。有关更多信息，请参阅《*AWS Secrets Manager 用户指南》*中的[轮换 AWS Secrets Manager 密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html)。