为 CloudFront 分配启用双向 TLS
先决条件和要求
CloudFront 的双向 TLS 验证模式要求所有客户端在 TLS 握手过程中提供有效证书,并拒绝未使用有效证书的连接。在 CloudFront 分配上启用双向 TLS 之前,请确保:
已使用证书颁发机构证书创建信任存储
已将信任存储与 CloudFront 分配关联
所有分配缓存行为都使用仅 HTTPS 查看器协议策略
分配使用的是 HTTP/2(默认设置,HTTP/3 不支持查看器 mTLS)
注意
双向 TLS 身份验证要求在查看器和 CloudFront 之间建立 HTTPS 连接。您无法在具有任何支持 HTTP 连接的缓存行为的分配上启用 mTLS。
启用双向 TLS(控制台)
对于新的分配
在 CloudFront 控制台中创建新分配的过程中,无法配置查看器 mTLS。首先,通过任意方式(控制台、CLI、API)创建分配,然后根据以下现有分配说明操作,编辑分配设置以启用查看器 mTLS。
对于现有分配
登录 Amazon Web Services 管理控制台,并通过以下网址打开 CloudFront 控制台:https://console.amazonaws.cn/cloudfront/v4/home
。 -
从分配列表中,选择要修改的分配。
-
确保将所有缓存行为的查看器协议策略设置为将 HTTP 重定向到 HTTPS 或仅 HTTPS。(您可以选择缓存行为选项卡,查看和更新任何使用 HTTP 协议策略的缓存行为。)
-
选择常规选项卡。
-
在设置部分中,选择编辑。
-
在连接性部分中,找到查看器双向身份验证(mTLS)。
-
将启用双向身份验证切换为“开启”状态。
-
对于客户端证书验证模式,选择必需(所有客户端都必须提供证书)或可选(客户端可以选择性地提供证书)。
-
对于信任存储,选择您之前创建的信任存储。
-
(可选)如果您希望 CloudFront 在 TLS 握手过程中向客户端发送 CA 名称,请切换公布信任存储 CA 名称。
-
(可选)如果您想允许使用到期证书进行连接,请切换忽略证书到期日期。
-
选择保存更改。
启用双向 TLS(Amazon CLI)
对于新的分配
以下示例演示如何创建包含 mTLS 设置的分配配置文件(distribution-config.json):
{ "CallerReference": "cli-example-1", "Origins": { "Quantity": 1, "Items": [ { "Id": "my-origin", "DomainName": "example.com", "CustomOriginConfig": { "HTTPPort": 80, "HTTPSPort": 443, "OriginProtocolPolicy": "https-only" } } ] }, "DefaultCacheBehavior": { "TargetOriginId": "my-origin", "ViewerProtocolPolicy": "https-only", "MinTTL": 0, "ForwardedValues": { "QueryString": false, "Cookies": { "Forward": "none" } } }, "ViewerCertificate": { "CloudFrontDefaultCertificate": true }, "ViewerMtlsConfig": { "Mode": "required", "TrustStoreConfig": { "TrustStoreId": {TRUST_STORE_ID}, "AdvertiseTrustStoreCaNames": true, "IgnoreCertificateExpiry": true } }, "Enabled": true }
使用以下示例命令创建启用了 mTLS 的分配:
aws cloudfront create-distribution --distribution-config file://distribution-config.json
对于现有分配
使用以下示例命令获取当前分配配置:
aws cloudfront get-distribution-config --id E1A2B3C4D5E6F7 --output json > dist-config.json
编辑文件以添加 mTLS 设置。将以下示例部分配置添加到分配配置:
"ViewerMtlsConfig": { "Mode": "required", "TrustStoreConfig": { "TrustStoreId": {TRUST_STORE_ID}, "AdvertiseTrustStoreCaNames": true, "IgnoreCertificateExpiry": true } }
从文件中删除 ETag 字段,但单独保存其值。
使用以下示例命令,以新配置更新分配:
aws cloudfront update-distribution \ --id E1A2B3C4D5E6F7 \ --if-match YOUR-ETAG-VALUE \ --distribution-config file://dist-config.json
查看器协议策略
在使用双向 TLS 时,必须为所有分配缓存行为配置仅 HTTPS 查看器协议策略:
-
将 HTTP 重定向到 HTTPS:在执行证书验证之前将 HTTP 请求重定向到 HTTPS。
-
仅 HTTPS:仅接受 HTTPS 请求并执行证书验证。
注意
由于 HTTP 连接无法执行证书验证,因此双向 TLS 不支持 HTTP 和 HTTPS 查看器协议策略。
后续步骤
在 CloudFront 分配中启用查看器 TLS 后,您可以关联连接函数以实施自定义证书验证逻辑。利用连接函数,您可以通过自定义验证规则、证书吊销检查和日志记录来扩展内置 mTLS 身份验证功能。有关创建和关联连接函数的详细信息,请参阅关联 CloudFront 连接函数。