

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

# 使用 AWS Secrets Manager 受管外部秘密來管理第三方秘密
<a name="managed-external-secrets"></a>

受管外部秘密是 中的一種新秘密類型 AWS Secrets Manager ，可讓您從整合合作夥伴存放和自動輪換憑證。此功能不需要建立和維護自訂 AWS Lambda 函數來輪換整合合作夥伴秘密。如需所有加入合作夥伴的完整清單，請參閱 [整合合作夥伴](mes-partners.md)。

當您建置應用程式時 AWS，工作負載通常需要透過安全登入資料與第三方應用程式互動，例如 API 金鑰、OAuth 權杖或登入資料對。先前，您必須開發自訂方法來保護和管理這些登入資料，包括建置每個應用程式獨有的複雜輪換 Lambda 函數，以及所需的持續維護。

受管外部秘密提供標準化方法，以每個合作夥伴指定的預先定義格式存放第三方登入資料。此功能包括在秘密建立期間啟用的自動輪換 （預設在主控台上）、秘密管理工作流程的完整透明度和使用者控制，以及 Secrets Manager 提供的完整功能集，包括精細的許可管理、可觀測性、控管、合規、災難復原和監控控制。

## 主要功能
<a name="mes-key-features"></a>

受管外部秘密提供多種關鍵功能，可簡化第三方憑證管理：
+ **不含 Lambda 的受管輪換**可消除建立和管理自訂輪換函數的額外負荷。當您建立外部時，會自動啟用輪換，您的帳戶中不會部署任何 Lambda 函數。
+ **預先定義的秘密格式**可確保秘密可以正確與整合合作夥伴建立關聯，並包含輪換所需的中繼資料。每個合作夥伴都會定義所需的格式。
+ **整合式合作夥伴生態系統**透過標準化的加入程序為多個合作夥伴提供支援。合作夥伴直接與 Secrets Manager 整合，為秘密建立和管理輪換功能提供程式設計指導。
+ **完整的可稽核性**會透過 AWS CloudTrail 記錄所有輪換活動、秘密值更新和管理操作來維持完整的透明度。

# 受管外部秘密合作夥伴
<a name="mes-partners"></a>

Secrets Manager 原生與第三方應用程式整合，以輪換合作夥伴持有的秘密。每個合作夥伴都會定義輪換秘密所需的中繼資料和秘密值欄位。

 秘密值包含與第三方用戶端連線所需的欄位，並在 [CreateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html) 呼叫期間存放。輪換中繼資料會保留用於在輪換期間更新秘密的欄位，並用於 [RotateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_RotateSecret.html) 呼叫。這些欄位將由整合合作夥伴定義，以允許受管輪換流程。

 若要讓輪換正常運作，您必須為 Secrets Manager 提供管理秘密生命週期的特定許可。如需詳細資訊，請參閱[安全性和許可](mes-security.md)

下列主題包含輪換秘密所需的每個中繼資料欄位的說明，以及 Secrets Manager 秘密中輪換所需的每個欄位的說明。


**主題**  

| 整合合作夥伴 | 私密類型 | 
| --- | --- | 
| Salesforce | [SalesforceClientSecret](mes-partner-salesforce.md) | 
| BigID | [BigIDClientSecret](mes-partner-BigId.md) | 
| Snowflake | [SnowflakeKeyPairAuthentication](mes-partner-Snowflake.md) | 

# Salesforce 用戶端秘密
<a name="mes-partner-salesforce"></a>

## 秘密值欄位
<a name="w2aac25c11c13b3"></a>

以下是必須包含在 Secrets Manager 秘密中的欄位：

```
{
  "consumerKey": "client ID", 
  "consumerSecret": "client secret", 
  "baseUri": "https://domain.my.salesforce.com", 
  "appId": "app ID", 
  "consumerId": "consumer ID"
}
```

consumerKey  
取用者金鑰也稱為用戶端 ID，是 OAuth 2.0 登入資料的登入資料識別符。您可以直接從 Salesforce 外部用戶端 App Manager OAuth 設定擷取取用者金鑰。

consumerSecret  
取用者秘密也稱為用戶端秘密，是與取用者金鑰搭配使用的私有密碼，以使用 OAuth 2.0 用戶端登入資料流程進行驗證。您可以直接從 Salesforce 外部用戶端 App Manager OAuth 設定擷取取用者秘密。

baseUri  
基本 URI 是您 Salesforce Org 用來與 Salesforce APIs互動的基本 URL。這採用以下範例的形式：`https://domainName.my.salesforce.com`。

appId  
應用程式 ID 是 Salesforce 外部用戶端應用程式 (ECA) 的識別符。您可以呼叫 Salesforce OAuth 用量端點來擷取此項目。它必須以 開頭`0x`，且僅包含英數字元。此欄位是指 [Salesforce 輪換指南](https://help.salesforce.com/s/articleView?id=xcloud.eca_stage_oauth_credentials.htm&type=5)中的 external\$1client\$1app\$1identifier。

consumerId  
取用者 ID 是 Salesforce 外部用戶端應用程式 (ECA) 取用者的識別符。您可以呼叫 Salesforce OAuth Credentials by App ID 端點來擷取此項目。此欄位是指 [Salesforce 輪換指南](https://help.salesforce.com/s/articleView?id=xcloud.eca_stage_oauth_credentials.htm&type=5)中的 consumer\$1id。

## 秘密中繼資料欄位
<a name="w2aac25c11c13b5"></a>

以下是輪換 Salesforce 所持有秘密所需的中繼資料欄位。

```
{
  "apiVersion": "v65.0",
  "adminSecretArn": "arn:aws:secretsmanager:us-east-1:111122223333:secret:SalesforceClientSecret"
}
```

apiVersion   
Salesforce API 版本是您 Salesforce 組織的 API 版本。版本應至少為 v65.0。其格式必須是 ，`vXX.X`其中 `X` 是數值字元。

adminSecretArn  
（選用） 管理員秘密 ARN 是秘密的 Amazon Resource Name (ARN)，其中包含用來輪換此 Salesforce 用戶端秘密的管理 OAuth 登入資料。管理員秘密至少應在秘密結構中包含 consumerKey 和 consumerSecret 值。這是選用欄位，如果省略，在輪換期間 Secrets Manager 將使用此秘密中的 OAuth 登入資料來向 Salesforce 進行驗證。

## 用量流程
<a name="w2aac25c11c13b7"></a>

在 中存放 Salesforce Secrets 的客戶 AWS Secrets Manager 可以選擇使用存放在相同秘密中的登入資料來輪換秘密，或使用管理員秘密中的登入資料進行輪換。您可以使用 [CreateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html) 呼叫建立秘密，其中秘密值包含上述欄位，而秘密類型為 SalesforceClientSecret。您可以使用 [RotateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_RotateSecret.html) 呼叫來設定輪換組態。此呼叫需要中繼資料欄位的規格，如上述範例所示 - 如果您選擇使用相同秘密中的登入資料進行輪換，您可以略過 adminSecretArn 欄位。此外，客戶必須在 [RotateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_RotateSecret.html) 呼叫中提供角色 ARN，授予服務輪換秘密所需的許可。如需許可政策的範例，請參閱[安全和許可](mes-security.md)。

對於選擇使用一組單獨的登入資料 （存放在 Admin Secret 中） 輪換秘密的客戶，請務必 AWS Secrets Manager 遵循與消費者秘密完全相同的步驟，在 中建立 Admin Secret。您必須針對您的消費者秘密，在 [RotateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_RotateSecret.html) 呼叫中的輪換中繼資料中提供此 Admin Secret 的 ARN。

輪換邏輯遵循 Salesforce 提供的指引。

# 大 ID 重新整理權杖
<a name="mes-partner-BigId"></a>

## 秘密值欄位
<a name="w2aac25c11c15b3"></a>

以下是必須包含在 Secrets Manager 秘密中的欄位：

```
{
  "hostname": "Host Name",
  "refreshToken": "Refresh Token" 
}
```

hostname  
這是您的 BigID 執行個體託管所在的主機名稱。您必須輸入執行個體的完整網域名稱。

refreshToken  
透過管理 → 存取管理 → 選取使用者 → 產生權杖 → 儲存，在 BigID 主控台中產生的 JWT 使用者重新整理權杖

## 用量流程
<a name="w2aac25c11c15b5"></a>

您可以使用 [CreateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html) 呼叫建立秘密，其中秘密值包含上述欄位，且秘密類型為 BigIDClientSecret。您可以使用 [RotateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_RotateSecret.html) 呼叫來設定輪換組態。您還必須在 [RotateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_RotateSecret.html) 呼叫中提供角色 ARN，授予服務輪換秘密所需的許可。如需許可政策的範例，請參閱[安全和許可](mes-security.md)。請注意，此合作夥伴的輪換中繼資料欄位可以保留空白。

# Snowflake 金鑰對
<a name="mes-partner-Snowflake"></a>

## 秘密值欄位
<a name="w2aac25c11c17b3"></a>

以下是必須包含在 Secrets Manager 秘密中的欄位：

```
{
  "account": "Your Account Identifier",
  "user": "Your user name",
  "privateKey": "Your private Key",
  "publicKey": "Your public Key",
  "passphrase": "Your Passphrase"
}
```

user  
與此金鑰對身分驗證相關聯的 Snowflake 使用者名稱。此使用者必須在 Snowflake 中設定為接受金鑰對身分驗證，且必須將公有金鑰指派給此使用者的設定檔。

帳戶  
用於建立連線的 Snowflake 帳戶識別符。這可以從 Snowflake URL 中擷取 (.snowflakecomputing.com 之前的 部分）

privateKey  
用於身分驗證的 PEM 格式 RSA 私有金鑰。BEGIN/END 標記是選用的。

publicKey  
對應至私有金鑰之 PEM 格式的公有金鑰對等項目。BEGIN/END 標記是選用的。

Passphrase (密碼短語)  
（選用） 此欄位是指用來解密加密私有金鑰的密碼短語。

## 秘密中繼資料欄位
<a name="w2aac25c11c17b5"></a>

以下是 Snowflake 的中繼資料欄位：

```
{
  "cryptographicAlgorithm": "Your Cryptographic algorithm",
  "encryptPrivateKey": "True/False"
}
```

cryptographicAlgorithm  
（選用） 這是指用於產生金鑰的演算法。您可以選擇 3 種演算法：`RS256|RS384|RS512`。此欄位為選用，選擇的預設演算法為 RS256。

encryptPrivateKey  
（選用） 此欄位可用來選擇是否要加密私有金鑰。預設為 false。加密的密碼短語是隨機產生的。

## 用量流程
<a name="w2aac25c11c17b7"></a>

您可以使用 [CreateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html) 呼叫建立秘密，其中秘密值包含上述欄位，秘密類型為 SnowflakeKeyPairAuthentication。您可以使用 [RotateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_RotateSecret.html) 呼叫來設定輪換組態。您可以視需要提供秘密中繼資料欄位 （視您的需求而定）。您還必須在 [RotateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_RotateSecret.html) 呼叫中提供角色 ARN，授予服務輪換秘密所需的許可。如需許可政策的範例，請參閱[安全性與許可](mes-security.md)。請注意，此合作夥伴的輪換中繼資料欄位可以保留空白。

# 安全與許可
<a name="mes-security"></a>

受管外部秘密不需要您共用第三方應用程式帳戶的管理員層級權限 AWS。相反地，輪換程序會使用您提供的登入資料和中繼資料，對第三方應用程式進行授權 API 呼叫，以進行登入資料更新和驗證。

受管外部秘密與其他 Secrets Manager 秘密類型維持相同的安全標準。秘密值會使用 KMS 金鑰進行靜態加密，並使用 TLS 在傳輸中。透過 IAM 政策和以資源為基礎的政策來控制對秘密的存取。使用客戶受管金鑰加密秘密時，您需要更新輪換角色的 IAM 政策以及 CMK 信任政策，以提供必要的許可以確保輪換成功。

若要讓輪換正常運作，您必須為 Secrets Manager 提供管理秘密生命週期的特定許可。這些許可的範圍可以限定為個別秘密，並遵循最低權限原則。您提供的輪換角色會在設定期間驗證，並僅用於輪換操作。

您只能允許秘密所在區域中 EC2 的 [AWS IP 範圍](https://docs.aws.amazon.com/vpc/latest/userguide/aws-ip-ranges.html)，將 IP 輸入限制在您的外部資源。此 IP 範圍清單可能會變更，因此您應該定期重新整理傳入規則。

 AWS Secrets Manager 也提供單一觸控解決方案來建立 IAM 政策，其具有透過 Secrets Manager 主控台建立秘密時管理秘密所需的許可。此角色的許可會針對每個區域中的每個整合合作夥伴縮小範圍。

**範例許可政策：**

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowRotationAccess",
      "Action": [
        "secretsmanager:DescribeSecret",
        "secretsmanager:GetSecretValue",
        "secretsmanager:PutSecretValue",
        "secretsmanager:UpdateSecretVersionStage"
      ],
      "Resource": "*",
      "Effect": "Allow",
      "Condition": {
        "StringEquals": {
          "secretsmanager:resource/Type": "SalesforceClientSecret"
        }
      }
    },
    {
      "Sid": "AllowPasswordGenerationAccess",
      "Action": [
        "secretsmanager:GetRandomPassword"
      ],
      "Resource": "*",
      "Effect": "Allow"
    }
  ]
}
```

注意：可在 [整合合作夥伴](mes-partners.md)中找到可用於 secretsmanager：resource/Type 的秘密類型清單。

**範例信任政策：**

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "SecretsManagerPrincipalAccess",
      "Effect": "Allow",
      "Principal": {
        "Service": "secretsmanager.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "111122223333"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:secretsmanager:us-east-1:111122223333:secret:*"
        }
      }
    }
  ]
}
```

# 監控受管外部秘密並進行疑難排解
<a name="mes-monitor"></a>

受管外部秘密透過 AWS CloudTrail 日誌和 Amazon CloudWatch 指標提供全面的監控功能。所有輪換活動都會記錄，其中包含成功、失敗和程序期間遇到的任何錯誤的詳細資訊。

輪換工作流程中的常見問題包括不正確的角色許可組態或秘密值。如果無法設定這些欄位，整合合作夥伴指定的格式可能會導致輪換失敗，因為服務將無法存取秘密或與整合合作夥伴用戶端連線以更新秘密。其他問題可能是網路連線問題、憑證過期或合作夥伴服務可用性。受管輪換服務包括重試邏輯和錯誤處理，以最大限度地提高可靠性

您可以透過 Amazon CloudWatch 監控輪換排程、成功率和效能指標。您可以透過[事件橋接](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-pattern.html)設定自訂警示，以提醒您輪換失敗或其他需要注意的問題。

# 遷移現有的秘密
<a name="mes-migrating"></a>

您可以選擇將現有的合作夥伴秘密遷移至受管外部秘密。這可以透過 [UpdateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_UpdateSecret.html) 呼叫來完成。您必須更新本指南中提到的秘密值和中繼資料。如果您已為這些秘密設定自訂輪換邏輯，您必須先使用 [CancelRotateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CancelRotateSecret.html) 呼叫取消輪換。

# 限制及考量
<a name="mes-limitations-and-considerations"></a>

受管外部秘密不支援生命週期少於四小時的暫時性秘密。也不支援與公有金鑰基礎設施憑證相關聯的秘密。

 受管外部秘密僅支援已加入的合作夥伴 AWS Secrets Manager。如需完整清單，請參閱[整合合作夥伴](mes-partners.md)。未在清單中看到您的合作夥伴？ [告訴他們加入 AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/mes-onboarding/secrets-manager-mes-onboarding.html) 

如果您直接從 Secrets Manager 輪換引擎之外的合作夥伴用戶端服務更新或輪換秘密值，系統之間的同步可能會中斷。雖然 Secrets Manager 為手動秘密值更新提供主控台警告和程式預防，但您仍可直接在第三方應用程式中修改值。若要在out-of-band更新後重新建立同步，您必須更新秘密值以反映正確的秘密，然後調用 [RotateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_RotateSecret.html) API 以確保持續成功輪換。