

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Amazon Data Firehose AWS Secrets Manager 中使用 驗證
<a name="using-secrets-manager"></a>

Amazon Data Firehose 與 整合 AWS Secrets Manager ，以提供秘密的安全存取，並自動輪換登入資料。此整合可讓 Firehose 在執行時間從 Secrets Manager 擷取秘密，以連線至先前提到的串流目的地，並交付您的資料串流。因此，在 AWS 管理主控台 或 API 參數中的串流建立工作流程期間，您的秘密不會以純文字顯示。它提供安全的實務來管理您的秘密，並讓您免於複雜的登入資料管理活動，例如設定自訂 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>

秘密可以是以加密形式存放在 Secrets Manager 中的一個密碼、一組憑證，例如使用者名稱和密碼、OAuth 字符或其他秘密資訊。

對於每個目的地，您必須以正確的 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、LogicMonitor、Logz.io、MongoDB 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 來存放登入資料或金鑰，以連線至串流目的地，例如 Amazon Redshift、HTTP 端點、Snowflake、Splunk、Coralogix、Datadog、Dynatrace、Elastic、 Honeycomb、LogicMonitor、Logz.io：//、MongoDB Cloud 和 New Relic。

您可以在建立 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 擷取秘密，您可以改用使用者名稱/密碼或 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 受管金鑰加密，則無法進行此組態，因為當秘密使用 AWS 受管金鑰加密時，Secrets Manager 不允許跨帳戶存取。
+ 如果秘密存放在不同的帳戶中並使用 CMK 加密，IAM 角色需要 CMK 秘密和`kms:Decrypt`許可的`secretsmanager:GetSecretValue`許可。秘密的資源政策和另一個帳戶中的 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)。