AWS CLI CloudFrontget-managed-certificate-details命令详解:查询托管 ACM 证书状态与 DNS 验证令牌
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
本指南基于 AWS CLI 官方示例 get-managed-certificate-details.rst,完整讲解aws cloudfront get-managed-certificate-details命令的用法:它用于查询 CloudFront 为 distribution tenant 托管的 ACM 证书(CloudFront managed ACM certificate)的颁发状态、证书 ARN,以及证书校验(validation)所需的 DNS 验证令牌。读完本文,你将掌握该命令的参数语义、返回字段含义、两种校验令牌托管模式(cloudfront与self-hosted)的区别,以及它在"创建 tenant → 查询证书 → 配置 DNS → 更新 tenant"完整链路中的位置。
命令概览:一行命令拿到托管证书的"体检报告"
CloudFront 托管证书(managed ACM certificate)是由 CloudFront 服务代你向 AWS Certificate Manager(ACM)申请的 TLS 证书,适用于多租户分发(distribution tenant)场景。当你通过create-distribution-tenant发起带ManagedCertificateRequest的证书申请后,证书并不会立刻可用,它会经历 DNS 校验、ACM 签发等异步流程。此时就需要用本命令查询实时状态。
官方示例给出的完整命令如下:
aws cloudfront get-managed-certificate-details \ --identifier dt_2wjDZi3hD1ivOXf6rpZJOSNE1AB示例输出:
{ "ManagedCertificateDetails": { "CertificateArn": "arn:aws:acm:us-east-1:123456789012:certificate/655dc1fe-6d37-451d-a013-c2db3a034abc", "CertificateStatus": "pending-validation", "ValidationTokenHost": "self-hosted", "ValidationTokenDetails": [ { "Domain": "example.com", "RedirectTo": "validation.us-east-1.acm-validations.aws/123456789012/.well-known/pki-validation/b315c9ae21284e7918bb9f3f422ab1c7.txt", "RedirectFrom": "example.com/.well-known/pki-validation/b315c9ae21284e7918bb9f3f422ac3c7.txt" } ] } }可以看到,一次调用即返回证书 ARN、证书状态、校验令牌托管方式与逐域名的校验令牌细节,足够你在脚本中判断"证书是否已经签发、DNS 是否需要配置"。
参数详解:--identifier到底传什么?
从底层 API 模型 service-2.json 的GetManagedCertificateDetailsRequest定义可以看出:
- 该操作只有一个必填参数
Identifier(required: ["Identifier"]); - 它在 HTTP 层被放入 URI 路径(
"location": "uri"),对应 REST 接口GET /2020-05-31/managed-certificate/{Identifier}; - 模型文档明确说明:"You can specify the ARN, ID, or name of the distribution tenant"——即你可以传入 distribution tenant 的 ARN、ID 或名称三种形式之一。
也就是说,--identifier指向的是distribution tenant(而非分发 ID)。示例中的dt_2wjDZi3hD1ivOXf6rpZJOSNE1AB就是典型的 distribution tenant ID 前缀格式(dt_)。如果你手头只有 tenant 的名称或 ARN(例如arn:aws:cloudfront::123456789012:distribution-tenant/dt_2zhStKrA524GvvTWJX92Ozl1AB),同样可以直接传入。
该操作在服务端可能返回两类错误(见 service-2.json):
| 错误形状 | 含义 |
|---|---|
AccessDenied | 当前凭证无权查看该 tenant 的托管证书信息 |
EntityNotFound | 指定的 tenant(或对应的托管证书)不存在 |
返回结构逐字段拆解:ManagedCertificateDetails
响应体以ManagedCertificateDetails为 payload("payload": "ManagedCertificateDetails"),其结构定义位于 service-2.json,包含四个字段:
| 字段 | 类型 | 说明 |
|---|---|---|
CertificateArn | string | 托管 ACM 证书的 ARN,可用于在 ACM/IAM 策略中引用该证书 |
CertificateStatus | enum | 证书当前状态,取值见下表 |
ValidationTokenHost | enum | 校验令牌的托管方式,取值为cloudfront或self-hosted |
ValidationTokenDetails | list | 校验令牌明细列表,每个元素对应一个需要校验的域名 |
CertificateStatus的全部取值
模型中的ManagedCertificateStatus枚举(service-2.json)定义了证书生命周期中的七种状态:
| 状态值 | 含义(结合文档说明) |
|---|---|
pending-validation | 证书已发起申请,正在等待域名所有权/DNS 校验通过 |
issued | 证书已由 ACM 签发,可以正常用于 TLS 终结 |
inactive | 证书处于未激活状态 |
expired | 证书已过期 |
validation-timed-out | 校验超时(通常在规定时间内未完成 DNS 配置导致) |
revoked | 证书已被吊销 |
failed | 证书申请/校验失败 |
示例输出中的pending-validation正是证书申请刚发起、等待配置 DNS 校验记录时的典型状态。
ValidationTokenHost:两种校验令牌托管模式
ValidationTokenHost枚举定义于 service-2.json,两种取值对应完全不同的运维策略:
cloudfront(CloudFront 托管):CloudFront 会自动对外提供校验令牌。适用于你能立即将域名 DNS 指向 CloudFront 的场景——域名流量切到 CloudFront 后,ACM 即可通过 CloudFront 边缘节点访问到令牌文件并完成校验。self-hosted(自托管):需要你在现有基础设施上自行提供校验令牌文件。适用于在证书签发期间需要维持现有流量不中断的场景:你把令牌文件放到现有 Web 服务器的 well-known 路径下,等 ACM 完成校验并签发证书后,再更新 DNS 指向 CloudFront。
需要特别注意的是(模型文档中的 note):该设置只影响首次证书申请。一旦 DNS 指向 CloudFront,后续所有证书续期(renewal)都会自动由 CloudFront 处理,不再需要你干预。
ValidationTokenDetails:逐域名校验令牌
ValidationTokenDetails是ValidationTokenDetail的列表(ValidationTokenDetailList,见 service-2.json),每个元素(ValidationTokenDetail)包含:
| 字段 | 必填 | 说明 |
|---|---|---|
Domain | 是 | 需要做所有权校验的域名 |
RedirectTo | 否 | ACM 校验系统期望重定向到的目标路径(validation.us-east-1.acm-validations.aws/...下的令牌文件路径) |
RedirectFrom | 否 | 你的域名上应提供的原始路径(example.com/.well-known/pki-validation/...) |
理解RedirectTo/RedirectFrom这对字段是自助配置 DNS/令牌的关键:ACM 的 HTTP 校验会访问RedirectFrom指定的路径,并期望该路径最终重定向到RedirectTo指向的 ACM 托管令牌文件;在self-hosted模式下,你需要按RedirectFrom的路径在自有服务器上放置令牌内容(或配置 302 重定向到RedirectTo),使 ACM 能完成校验。每条ValidationTokenDetail对应一个域名,多域名证书会返回多条记录。
它从哪来:托管证书的生命周期链路
get-managed-certificate-details不是孤立命令,它是 CloudFront distribution tenant 托管证书生命周期中的"查询"环节。围绕它的相关操作同样定义在 service-2.json 中,可以串起完整链路:
发起证书申请:调用
create-distribution-tenant(POST /2020-05-31/distribution-tenant,service-2.json),在请求体的ManagedCertificateRequest中声明证书需求。该结构(service-2.json)包含三个配置项:ValidationTokenHost(必填):选择cloudfront或self-hosted,决定校验令牌的托管方式;PrimaryDomainName:证书的主域名;CertificateTransparencyLoggingPreference:证书透明度日志(CT Logging)开关,可取值enabled/disabled。
查询证书状态:本文主角
get-managed-certificate-details(GET /2020-05-31/managed-certificate/{Identifier})。在pending-validation阶段用它取回ValidationTokenDetails配置 DNS 或放置令牌文件。确认 tenant 状态:
get-distribution-tenant(GET /2020-05-31/distribution-tenant/{Identifier},service-2.json)可查看 tenant 整体信息。更新 tenant:证书状态变化后,如需修改配置可调用
update-distribution-tenant(PUT /2020-05-31/distribution-tenant/{Id},service-2.json)。注意模型文档的提示:你的 distribution tenant 会同步最新的证书状态;调用UpdateDistributionTenant时应使用最新的ETag值,否则会收到PreconditionFailed(该操作可返回的错误之一)。
实战对照:两种ValidationTokenHost的创建示例
仓库中的 create-distribution-tenant.rst 提供了与本命令直接配套的两个创建示例,恰好覆盖两种校验模式:
模式一:CloudFront 托管令牌(示例 3,create-distribution-tenant.rst),在ManagedCertificateRequest中声明"ValidationTokenHost": "cloudfront":
{ "DistributionId": "E2GJ5J9QN12ABC", "Domains": [{"Domain": "example.com"}], "Parameters": [{"Name": "tenantName", "Value": "first-tenant"}], "ConnectionGroupId": "cg_2yQEwpipGFN0hhA0ZemPabOABC", "Enabled": true, "Name": "new-tenant-cf-hosted", "ManagedCertificateRequest": { "ValidationTokenHost": "cloudfront" } }该示例特别提醒:要成功运行,必须配置一条把新域名(example.com)指向 connection group 路由端点(routing endpoint)的 CNAME DNS 记录,且该记录需先完成传播,CloudFront 才能完成请求。
模式二:自托管令牌(示例 4,create-distribution-tenant.rst),将ValidationTokenHost设为self-hosted:
{ "DistributionId": "E2GJ5J9QN12ABC", "Domains": [{"Domain": "example.com"}], "Parameters": [{"Name": "tenantName", "Value": "first-tenant"}], "Enabled": true, "Name": "new-tenant-self-hosted", "ManagedCertificateRequest": { "ValidationTokenHost": "self-hosted" } }示例同样提示:此模式下 tenant 会先以"未校验"状态创建;当你就绪后,需要回头执行校验并配置 DNS——而get-managed-certificate-details正是此时用来读取ValidationTokenDetails(即RedirectFrom/RedirectTo路径)的工具。
典型使用流程与注意事项
把上述内容串起来,一个典型的自助 DNS 校验工作流如下:
- 用
create-distribution-tenant(ManagedCertificateRequest.ValidationTokenHost = self-hosted)创建 tenant; - 用
get-managed-certificate-details --identifier <tenant 的 ARN/ID/名称>查询证书状态与ValidationTokenDetails; - 依据
ValidationTokenDetails中的RedirectFrom路径,在自有 Web 服务器放置校验令牌文件(或将请求重定向到RedirectTo); - 等待 ACM 完成校验,再次执行本命令确认
CertificateStatus变为issued; - 将域名 DNS 指向 CloudFront,之后证书续期由 CloudFront 自动处理;
- 如需修改 tenant 配置,使用
update-distribution-tenant并传入最新ETag。
最后两点提醒:
- 命令输出中的证书状态是异步流程的实时快照,建议在自动化脚本中轮询
CertificateStatus,直到出现issued(成功)或failed/validation-timed-out(失败); - 若使用
--cli-input-json批量创建 tenant(仓库示例create-distribution-tenant均采用file://tenant.json方式),获取到的 tenant ID/ARN 可直接作为本命令的--identifier输入,实现"创建—查询—配置"的脚本闭环。
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考