

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

# 加密 Amazon ECS Service Connect 流量
<a name="service-connect-tls"></a>

Amazon ECS Service Connect 支援使用 Transport Layer Security (TLS) 憑證，為 Amazon ECS 服務自動加密流量。當您將 Amazon ECS 服務指向 [AWS 私有憑證授權單位 (AWS 私有 CA)](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html) 時，Amazon ECS 會自動佈建 TLS 憑證，以加密 Amazon ECS Service Connect 服務之間的流量。Amazon ECS 會產生、輪換與分發用於流量加密的 TLS 憑證。

Service Connect 的自動流量加密使用業界領先的加密功能來保護服務間通訊，協助您滿足安全需求。它支援使用 AWS 私有憑證授權單位 `256-bit ECDSA`和 `2048-bit RSA`加密的 TLS 憑證。您還可以完全控制私有憑證與簽署金鑰，協助您滿足合規需求。依預設，支援 TLS 1.3，但不支援 TLS 1.0 - 1.2。Service Connect 支援具有下列密碼的 TLS 1.3：
+ `TLS_AES_128_GCM_SHA256`
+ `TLS_AES_256_GCM_SHA384`
+ `TLS_CHACHA20_POLY1305_SHA256`

**注意**  
若要使用 TLS 1.3，必須在目標的接聽程式上將其啟用。  
只有透過 Amazon ECS 代理程式傳遞的傳入與傳出流量才會加密。

## Service Connect 與 Application Load Balancer 運作狀態檢查
<a name="service-connect-tls-alb-healthchecks"></a>

您可以搭配 Application Load Balancer 運作狀態檢查與 TLS 1.3 加密使用 Service Connect。

### Application Load Balancer 組態
<a name="service-connect-tls-alb-config"></a>

使用下列設定來設定 Application Load Balancer：
+ 使用 TLS 1.3 安全政策 (例如 `ELBSecurityPolicy-TLS13-1-2-2021-06`) 設定 TLS 接聽程式。如需詳細資訊，請參閱 [Security policies for your Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/describe-ssl-policies.html)。
+ 使用下列設定來建立目標群組：
  + 將通訊協定設定為 HTTPS
  + 將目標群組連接至 TLS 接聽程式
  + 將運作狀態檢查連接埠設定為符合 Service Connect 服務的容器連接埠需求

### Service Connect 組態
<a name="service-connect-tls-sc-config"></a>

使用下列設定來設定服務：
+ 將服務設定為使用 `awsvpc` 網路模式，因為不支援 `bridge` 網路模式。
+ 為服務啟用 Service Connect。
+ 使用下列設定來設定負載平衡器組態：
  + 指定為 Application Load Balancer 設定的目標群組
  + 將容器連接埠設定為符合 Service Connect TLS 服務的容器連接埠需求
+ 避免為服務設定 `ingressPortOverride`。如需詳細資訊，請參閱 *Amazon Elastic Container Service API Reference* 中的 [ServiceConnectService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ServiceConnectService.html)。

### 考量事項
<a name="service-connect-tls-alb-considerations"></a>

使用 Application Load Balancer、TLS 與 Service Connect 時，請考量下列事項：
+ 搭配 TLS 加密使用 Service Connect 時，需使用 `awsvpc` 網路模式 (而不是 `bridge` 網路模式) 進行 HTTPS 運作狀態檢查。HTTP 運作狀態檢查將繼續使用 `bridge` 模式。
+ 將目標群組運作狀態檢查連接埠設定為符合 Service Connect 服務的容器連接埠 (而不是預設的 HTTPS 連接埠 (443)) 需求。

## AWS 私有憑證授權單位 憑證和 Service Connect
<a name="service-connect-tls-certificates"></a>

您需要擁有基礎結構 IAM 角色。如需有關此角色的詳細資訊，請參閱 [Amazon ECS 基礎結構 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/infrastructure_IAM_role.html                     )。

**AWS 私有憑證授權單位 適用於 Service Connect 的 模式**

AWS 私有憑證授權單位 可以兩種模式執行：一般用途和短期。
+ 一般用途 – 可設定任何過期日期的憑證。
+ 短期 – 有效性上限為七天的憑證。

儘管 Amazon ECS 支援這兩種模式，但建議使用短期憑證。依預設，憑證每五天輪換一次，相較於一般用途模式，在短期模式下執行可大幅節省成本。

Service Connect 不支援撤銷憑證，而是改為利用會頻繁輪換的短期憑證。您有權使用 [Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 中的[受管輪換](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotate-secrets_managed.html)來修改輪換頻率、停用或刪除秘密，但這樣做可能會產生下列後果。
+ 較短的輪換頻率 - 由於 AWS KMS Secrets Manager AWS 私有 CA和 Auto Scaling 的輪換工作負載增加，較短的輪換頻率會產生更高的成本。
+ 較長的輪換頻率 – 如果輪換頻率超過**七天**，應用程式通訊將會失敗。
+ 刪除秘密 – 刪除秘密會導致輪換失敗並影響客戶應用程式通訊。

如果秘密輪換失敗，會在 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) 中發布 `RotationFailed` 事件。您還可以為 `RotationFailed` 設定 [CloudWatch 警示](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)。

**重要**  
請勿將複本區域新增至秘密。這樣做會阻止 Amazon ECS 刪除秘密，因為 Amazon ECS 沒有從複寫中移除區域的許可。若已新增複寫，請執行下列命令。  

```
aws secretsmanager remove-regions-from-replication \
 --secret-id {{SecretId}} \
 --remove-replica-regions {{region-name}}
```

**次級憑證授權機構**  
您可以將任何 AWS 私有 CA根憑證或次級憑證帶到 Service Connect TLS，以發行服務的終端實體憑證。提供的發行者會視為各地的簽署者與信任根。您可以從不同的次級 CA 為應用程式的不同部分發行終端實體憑證。使用 時 AWS CLI，請提供 CA 的 Amazon Resource Name (ARN) 來建立信任鏈。

**內部部署憑證授權機構**  
若要使用內部部署 CA，需要在 AWS 私有憑證授權單位中建立與設定次級 CA。這可確保為 Amazon ECS 工作負載發行的所有 TLS 憑證與在內部部署執行的工作負載共用信任鏈，並且能夠安全地連線。

**重要**  
在 `AmazonECSManaged : true`中新增**必要的**標籤 AWS 私有 CA。

**基礎設施即程式碼**  
搭配基礎結構即程式碼 (IaC) 工具使用 Service Connect TLS 時，務必正確設定相依性以避免問題，例如服務停滯在耗盡狀態。如果 AWS KMS 提供金鑰，則應在 Amazon ECS 服務之後刪除 IAM 角色和 AWS 私有 CA 相依性。

如果用於 Service Connect 的命名空間是共用命名空間，您可以選擇使用共用 AWS 私有 CA 資源。如需詳細資訊，請參閱 *AWS 私有憑證授權單位 User Guide* 中的 [Attach a policy for cross-account access](https://docs.aws.amazon.com/privateca/latest/userguide/pca-ram.html)。

## Service Connect 與 Secrets Manager
<a name="service-connect-asm"></a>

**搭配 TLS 加密使用 Amazon ECS Service Connect 時，服務會透過下列方式與 Secrets Manager 互動：**  
Service Connect 會利用提供的基礎結構角色，在 Secrets Manager 中建立秘密。這些秘密用於儲存 TLS 憑證的關聯私有金鑰，以加密 Service Connect 服務之間的流量。

**警告**  
Service Connect 會自動建立與管理這些秘密，從而簡化為服務實作 TLS 加密的程序。但是，務必注意潛在的安全隱患。具有 Secrets Manager 讀取存取權的其他 IAM 角色可能可以存取這些自動建立的秘密。如果未正確設定存取控制，這可能會向未經授權的一方公開敏感的加密資料。  
若要降低此風險，請遵循下列最佳實務：  
小心管理與限制 Secrets Manager 存取權，尤其是 Service Connect 建立的秘密。
定期稽核 IAM 角色及其許可，確保遵循最低權限原則。

授予 Secrets Manager 讀取存取權時，請考慮排除 Service Connect 建立的 TLS 私有金鑰。為此，您可以透過在 IAM 政策中使用條件，來排除具備符合下列模式之 ARN 的秘密：

```
"arn:aws:secretsmanager:::secret:ecs-sc!"
```

以下是一個 IAM 政策範例，該政策拒絕對所有以 `GetSecretValue` 為字首的秘密執行 `ecs-sc!` 動作：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "secretsmanager:GetSecretValue",
            "Resource": "arn:aws:secretsmanager:*:*:secret:ecs-sc!*"
        }
    ]
}
```

------

**注意**  
這是一般範例，可能需要根據您的特定使用案例和 AWS 帳戶組態進行調整。務必全面測試 IAM 政策，確保它們在維護安全性的同時提供預期的存取權。

透過了解 Service Connect 如何與 Secrets Manager 互動，您可以更好地管理 Amazon ECS 服務的安全性，同時利用自動 TLS 加密的優勢。

## Service Connect 和 AWS Key Management Service
<a name="service-connect-kms"></a>

您可以使用 [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 來加密和解密 Service Connect 資源。 AWS KMS 是一項由 管理的服務，您可以在 AWS 其中建立和管理加密金鑰來保護您的資料。

 AWS KMS 搭配 Service Connect 使用 時，您可以選擇使用 AWS 為您 AWS 管理的 擁有金鑰，也可以選擇現有的 AWS KMS 金鑰。您也可以[建立要使用的新 AWS KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)。

**提供自己的加密金鑰**  
您可以提供自己的金鑰材料，也可以透過將自己的金鑰 AWS Key Management Service 匯入 來使用外部金鑰存放區 AWS KMS，然後在 Amazon ECS Service Connect 中指定該金鑰的 Amazon Resource Name (ARN)。

以下是範例 AWS KMS 政策。將 {{user-input}} 值取代實際值。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "{{id}}",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::{{111122223333}}:role/{{role-name}}"
      },
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:GenerateDataKeyPair"
      ],
      "Resource": "*"
    }
  ]
}
```

------

如需有關金鑰政策的詳細資訊，請參閱 *AWS Key Management Service Developer Guide* 中的 [Creating a key policy](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-overview.html)。

**注意**  
Service Connect 僅支援對稱加密 AWS KMS 金鑰。您無法使用任何其他類型的 AWS KMS 金鑰來加密 Service Connect 資源。如需判斷 AWS KMS 金鑰是否為對稱加密金鑰的說明，請參閱[識別非對稱 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/identify-key-types.html#identify-asymm-keys)。

如需 AWS Key Management Service 對稱加密金鑰的詳細資訊，請參閱《 *AWS Key Management Service 開發人員指南*》中的[對稱加密 AWS KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks)。