

# 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 キーを使用して暗号化されます。このエイリアスに対応するキー ID は、AWS KMS コンソールの **AWS マネージドキー**で確認できます。

API Gateway は ACM リソースに直接アクセスしません。AWS TLS 接続マネージャを使用して、証明書のプライベートキーを保護し、プライベートキーにアクセスします。ACM 証明書を使用してプライベート API の API Gateway カスタムドメイン名を作成すると、API Gateway は証明書をAWS TLS 接続マネージャに関連付けます。**aws/acm** というプレフィックスの AWS マネージドキーに対して AWS KMS で権限を作成して関連付けます。権限はポリシーツールであり、TLS 接続マネージャに暗号化オペレーションでの KMS キーの使用を許可します。この権限により、被付与者のプリンシパル (TLS 接続マネージャ) は指定された権限オペレーションを KMS キーで呼び出し、証明書のプライベートキーを復号化できます。TLS 接続マネージャは、証明書と復号された (プレーンテキストの) プライベートキーを使用して API Gateway サービスのクライアントとの安全な接続 (SSL/TLS セッション) を確立します。証明書がプライベート API の API Gateway カスタムドメイン名から関連付けを解除されると、それらのドメイン名へのアクセスの許可も取り消されます。

KMS キーへのアクセスを削除する場合は、AWS CLI で AWS マネジメントコンソール または `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 接続マネージャで使用すると、API Gateway サービスの名前が保管中のキーの暗号化に使用される暗号化コンテキストに含まれます。証明書とプライベートキーが使用されている API Gateway カスタムドメイン名は、次のセクションに示すように CloudTrail ログの暗号化コンテキストまたは ACM コンソールの **[関連付けられたリソース]** タブで確認できます。

データを復号化するには、そのリクエストに同じ暗号化コンテキストを含めます。API Gateway はすべての AWSKMS 暗号化オペレーションで同じ暗号化コンテキストを使用します。キーは `aws:apigateway:arn` で、値は API Gateway `PrivateDomainName` リソースの Amazon リソースネーム (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 ディストリビューションにセキュリティポリシーを設定できます。

データ保護の詳細については、「[API Gateway で REST API を保護する](rest-api-protect.md)」と *AWS セキュリティブログ*の「[The AWS Shared Responsibility Model and GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/)」を参照してください。