

# Amazon ECS Service Connect トラフィックを暗号化する
<a name="service-connect-tls"></a>

Amazon ECS Service Connect は、Amazon ECS サービスの Transport Layer Security (TLS) 証明書による自動トラフィック暗号化をサポートしています。Amazon ECS サービスを [AWS Private Certificate Authority(AWS Private CA)](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html) に向けると、Amazon ECS Service Connect 間のトラフィックを暗号化するための TLS 証明書が Amazon ECS によって自動的にプロビジョニングされます。Amazon ECS は、トラフィックの暗号化に使用される TLS 証明書を生成、ローテーション、および配布します。

Service Connect による自動トラフィック暗号化は、業界をリードする暗号化機能を使用してサービス間の通信を保護し、セキュリティ要件を満たすのに役立ちます。`256-bit ECDSA` および `2048-bit RSA` 暗号化で AWS Private Certificate Authority 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>

Service Connect は、Application Load Balancer のヘルスチェックと TLS 1.3 暗号化を使って使用できます。

### Application Load Balancer の設定
<a name="service-connect-tls-alb-config"></a>

Application Load Balancer を次の設定に従って設定します。
+ TLS 1.3 セキュリティポリシー (「ELBSecurityPolicy-TLS13-1-2-2021-06」など) を使用して TLS リスナーを設定します。詳細については、「[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>

以下の設定を使用してサービスを設定します。
+ `bridge` ネットワークモードはサポートされていないため、`awsvpc` ネットワークモードを使用するようにサービスを設定します。
+ サービスの Service Connect を有効にします。
+ 次の設定を使用してロードバランサー設定をセットアップします。
  + Application Load Balancer 用に設定したターゲットグループを指定します。
  + Service Connect TLS サービスのコンテナポートと一致するようにコンテナポートを設定します。
+ サービスに `ingressPortOverride` を設定しないでください。詳細については、「*Amazon Elastic Container Service API リファレンス*」の「[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 を使用する場合は、次の点を考慮してください。
+ Service Connect を TLS 暗号化で使用するときは、HTTPS ヘルスチェックに `bridge` ネットワークモードの代わりに `awsvpc` ネットワークモードを使用します。HTTP ヘルスチェックは引き続き `bridge` モードで動作します。
+ デフォルトの HTTPS ポート (443) ではなく、Service Connect サービスのコンテナポートと一致するようにターゲットグループのヘルスチェックポートを設定します。

## AWS Private Certificate Authority 証明書および 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                     )」を参照してください。

**Service Connect 用の AWS Private Certificate Authority モード**

AWS Private Certificate Authority は汎用モードと短時間有効モードの 2 つのモードで実行できます。
+ 汎用 — 任意の有効期限を設定できる証明書を発行します。
+ 短い有効期間 — 最大有効期間が 7 日間の証明書。

Amazon ECS は両方のモードをサポートしていますが、有効期間の短い証明書を使用することをお勧めします。デフォルトでは、証明書は 5 日ごとにローテーションされ、短期モードで実行すると一般的な用途に比べてコストを大幅に節約できます。

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 Private CA、AWS KMS および Secrets Manager、Auto Scaling のローテーションのワークロードが増加するため、コストが高くなります。
+ ローテーション頻度が長い - ローテーション頻度が **7** 日を超えると、アプリケーションの通信は失敗します。
+ シークレットの削除 - シークレットを削除するとローテーションが失敗し、お客様のアプリケーション通信に影響があります。

シークレットローテーションに失敗すると、[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 Private CA、ルートまたは下位を Service Connect TLS に導入して、サービスのエンドエンティティ証明書を発行できます。提供された発行者は、あらゆる場所で署名者および信頼の根源として扱われます。エンドエンティティ証明書は、アプリケーションのさまざまな部分について、さまざまな下位 CA から発行できます。AWS CLI を使用する際に、信頼チェーンを確立する CA の Amazon リソースネーム (ARN) を指定します。

**オンプレミス認証機関**  
オンプレミス CA を使用するには、AWS Private Certificate Authority で下位 CA を作成して設定します。これにより、Amazon ECS ワークロード用に発行されたすべての TLS 証明書が、オンプレミスで実行するワークロードとトラストチェーンを共有し、安全に接続できるようになります。

**重要**  
AWS Private CA に**必要な**タグ `AmazonECSManaged : true` を自分に追加してください。

**Infrastructure as Code**  
Infrastructure as Code (IaC) ツールで Service Connect TLS を使用する場合は、サービスがドレイン状態のままになるという問題を避けるため、依存関係を正しく設定することが重要です。AWS KMS キーが提供されている場合は、Amazon ECS サービスを終了した後、IAM ロールと AWS Private CA 依存関係を削除する必要があります。

Service Connect に使用される名前空間が共有名前空間である場合は、共有 AWS Private CA リソースを使用することを選択できます。詳細については、「*AWS Private Certificate Authority ユーザーガイド*」の「[クロスアカウントアクセス許可をアタッチする](https://docs.aws.amazon.com/privateca/latest/userguide/pca-ram.html)」を参照してください。

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

**Amazon ECS Service Connect を TLS 暗号化で使用する場合、サービスは次の方法で Secrets Manager とやり取りします。**  
Service Connect は、提供されたインフラストラクチャロールを使用して Secrets Manager 内にシークレットを作成します。これらのシークレットは、Service Connect サービス間のトラフィックを暗号化するための TLS 証明書の関連するプライベートキーを保存するために使用されます。

**警告**  
Service Connect によるこれらのシークレットの自動作成と管理により、サービスに TLS 暗号化を実装するプロセスが合理化されます。ただし、潜在的なセキュリティへの影響に注意することが重要です。Secrets Manager への読み取りアクセス権を持つ他の IAM ロールは、自動的に作成されたシークレットにアクセスできる場合があります。これにより、アクセスコントロールが適切に設定されていない場合、機密性の高い暗号化マテリアルが権限のない当事者に公開される可能性があります。  
このリスクを軽減するには、次のベストプラクティスに従ってください。  
特に Service Connect によって作成されたシークレットについては、Secrets Manager へのアクセスを慎重に管理および制限します。
IAM ロールとそのアクセス許可を定期的に監査して、最小特権の原則が維持されていることを確認します。

Secrets Manager に読み取りアクセスを許可する場合は、Service Connect によって作成された TLS プライベートキーを除外することを検討してください。これを行うには、IAM ポリシーの条件を使用して、パターンに一致する ARN を持つシークレットを除外します。

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

`ecs-sc!` プレフィックスを持つすべてのシークレットに対する `GetSecretValue` アクションを拒否する IAM ポリシーの例:

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

****  

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

------

**注記**  
これは一般的な例であり、特定のユースケースと AWS アカウント設定に基づいて調整する必要がある場合があります。IAM ポリシーは、セキュリティを維持しながら意図したアクセスを提供するように、常に徹底的なテストを行ってください。

Service Connect が Secrets Manager とやり取りする方法を理解することで、自動 TLS 暗号化の利点を活用しながら、Amazon ECS サービスのセキュリティをより適切に管理できます。

## 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 によってデータを保護する暗号キーを作成および管理できるサービスです。

Service Connect で AWS KMS を使用する場合は、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 リソースネーム (ARN) を指定することもできます。

AWS KMS ポリシーの例を次に示します。すべての {{[ユーザー入力]}} を独自の値に置き換えます。

------
#### [ 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 デベロッパーガイド*」の「[キーポリシーを作成する](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)」を参照してください。