

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

# Amazon API Gateway 的資料加密
<a name="data-protection-encryption"></a>

資料保護是指保護傳輸中的資料 (即資料往返於 API Gateway 時) 以及靜態資料 (即資料存放在 時AWS

## Amazon API Gateway 的靜態資料加密
<a name="data-protection-at-rest"></a>

如果您選擇為 REST API 啟用快取功能，就可以啟用快取加密。如需進一步了解，請參閱[API Gateway 中 REST API 的快取設定](api-gateway-caching.md)。

如需關於資料保護的詳細資訊，請參閱 *AWS 安全部落格*上的 [AWS 共同責任模型和歐盟《一般資料保護規範》(GDPR)](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 部落格文章。

### 加密和解密憑證的私有金鑰
<a name="private-key"></a>

當您為私有 API 建立自訂網域名稱時，您的 ACM 憑證和私有金鑰會使用具有別名 **aws/acm** 的 AWS 受管 KMS 金鑰進行加密。您可以在 AWS KMS 主控台的 **AWS 受管金鑰**下，檢視具有此別名的金鑰 ID。

API Gateway 不會直接存取您的 ACM 資源。而是使用 AWS TLS Connection Manager 來保護和存取憑證的私有金鑰。當您使用 ACM 憑證為私有 API 建立 APIs Gateway 自訂網域名稱時，API Gateway 會為您的憑證與 AWS TLS Connection Manager 建立關聯。方法是針對具有字首 **aws/acm** 的 AWS 受管金鑰在 AWS KMS 中建立授權。授權是一種政策工具，允許 TLS Connection Manager 使用密碼編譯操作中的 KMS 金鑰。授權可讓承授者主體 (TLS Connection Manager) 呼叫 KMS 金鑰上指定的授予操作，以解密憑證的私有金鑰。TLS Connection Manager 接著會使用憑證和解密的 (純文字) 私有金鑰，與 API Gateway 服務的用戶端建立安全連線 (SSL/TLS 工作階段)。當憑證與私有 API 的 API Gateway 自訂網域名稱取消關聯時，授權即會失效。

如果您想要移除對 KMS 金鑰的存取權，建議您使用 AWS 管理主控台 或 AWS CLI 中的 `update-service` 命令，取代或刪除服務的憑證。

### API Gateway 的加密內容
<a name="encryption-context"></a>

[加密內容](https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html)是選用的一組鍵值對，其中包含有關您的私有金鑰可能用途的情境式內容資訊。AWS KMS 將加密內容與加密資料綁定，並將其用作其他驗證資料，以支援驗證加密。

當您的 TLS 金鑰與 API Gateway 和 TLS Connection Manager 搭配使用時，您的 API Gateway 服務名稱會包含在用來加密靜態金鑰的加密內容中。您可以透過檢視 CloudTrail 日誌中的加密內容，如下一節所示，或查看 ACM 主控台的**關聯的資源**標籤，以驗證憑證和私有金鑰所使用的 API Gateway 自訂網域名稱。

若要解密資料，則必須在請求中包含相同的加密內容。API Gateway 在所有的 AWS KMS 密碼編譯操作中使用相同的加密內容，其中金鑰為 `aws:apigateway:arn`，而值為 API Gateway `PrivateDomainName` 資源的 Amazon Resource Name (ARN)。

下列範例展示操作輸出中的加密內容，例如 `CreateGrant`。

```
"constraints": {
"encryptionContextEquals": {
"aws:acm:arn": "arn:aws:acm:us-west-2:859412291086:certificate/9177097a-f0ae-4be1-93b1-19f911ea4f88",
"aws:apigateway:arn": "arn:aws:apigateway:us-west-2:859412291086:/domainnames/denytest-part1.pdx.sahig.people.aws.dev+cbaeumzjhg"
}
},
"operations": [
"Decrypt"
],
"granteePrincipal": "tlsconnectionmanager.amazonaws.com"
```

## Amazon API Gateway 的傳輸中資料加密
<a name="data-protection-in-transit"></a>

使用 Amazon API Gateway 建立的 API 只會公開 HTTPS 端點。API Gateway 不支援未加密的 (HTTP) 端點。

API Gateway 會管理預設 `execute-api` 端點的憑證。如果您要設定自訂網域名稱，[請指定網域名稱的憑證](how-to-custom-domains.md#custom-domain-names-certificates)。最佳實務是不要[關聯憑證](https://docs.aws.amazon.com/acm/latest/userguide/troubleshooting-pinning.html)。

為了提高安全性，您可以選擇要為 API Gateway 自訂網域強制執行的最低 Transport Layer Security (TLS) 通訊協定版本。WebSocket API 與 HTTP API 僅支援 TLS 1.2 版。如需進一步了解，請參閱[在 API Gateway 中為您的自訂網域選擇安全政策](apigateway-custom-domain-tls-version.md)。

您也可以在帳戶中使用自訂 SSL 憑證來設定 Amazon CloudFront 分佈，並搭配區域 API 使用。接著，您可以根據安全與合規要求來使用 TLS 1.1 以上版本，為 CloudFront 分佈設定安全政策。

如需關於資料保護的詳細資訊，請參閱 *AWS 安全部落格*上的[在 API Gateway 中保護您的 REST API](rest-api-protect.md)及 [AWS 共同責任模型和歐盟《一般資料保護規範》(GDPR) ](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/)部落格文章。