AWS CLIacm delete-certificate完整指南:删除 ACM 证书的命令、前提条件与底层实现
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
本文基于当前 aws-cli 仓库中的官方示例文档 delete-certificate.rst,深入讲解使用aws acm delete-certificate命令从 AWS Certificate Manager(ACM)账户中删除证书的完整流程。通过本文,你将掌握该命令的唯一参数--certificate-arn的格式规范、删除前的关联检查与使用限制、删除操作的最终一致性行为,以及从源码层面理解 ACM 服务模型对该操作的约束(如禁止删除 ACME 来源证书、私有 CA 计费规则等)。
命令概览:一条命令删除指定证书
根据仓库中的官方示例 delete-certificate.rst,删除证书的命令非常简洁,只需要指定证书的 ARN:
aws acm delete-certificate --certificate-arn arn:aws:acm:region:account:certificate/12345678-1234-1234-1234-123456789012该命令执行成功后默认不返回任何输出。若需要确认删除结果,可以随后调用 list-certificates.rst 中的aws acm list-certificates查看证书列表中是否已不再包含该证书(注意删除是最终一致性的,存在短暂延迟,详见下文)。
参数详解:--certificate-arn
delete-certificate是 ACM 服务中少数只接受单一必填参数的 API。从服务模型文件 service-2.json 中可以确认,DeleteCertificateRequest的定义为:
"DeleteCertificateRequest":{ "type":"structure", "required":["CertificateArn"], "members":{ "CertificateArn":{ "shape":"Arn", "documentation":"<p>String that contains the ARN of the ACM certificate to be deleted. This must be of the form:</p> <p><code>arn:aws:acm:region:123456789012:certificate/12345678-1234-1234-1234-123456789012</code></p>" } } }关键要点:
CertificateArn是必填参数,缺省时命令会直接报参数校验错误(Parameter validation failed),这也是 aws-cli 基于服务模型自动生成参数校验逻辑的体现。- ARN 必须符合标准格式:
arn:aws:acm:region:account:certificate/12345678-1234-1234-1234-123456789012。其中region是证书所在区域,account是 12 位 AWS 账户 ID,末尾是 ACM 为每张证书分配的 UUID 形式标识。 - 该参数底层 shape 为
Arn,在 aws-cli 的 botocore 数据模型 中通过service-2.json描述,这意味着 ARN 的语法校验、序列化与请求签名均由 botocore 自动处理,用户只需确保 ARN 字符串拼写正确。
获取待删除证书的 ARN
实际运维中,证书 ARN 通常通过以下两种方式获得:
- 通过
list-certificates查询:调用 list-certificates.rst 中的命令列出账户中所有证书,从输出中复制目标证书的CertificateArn字段。 - 通过
describe-certificate确认:使用 describe-certificate.rst 查看证书的详细信息(如状态、域名、签发 CA),确认无误后再执行删除,避免误删。
删除前必须检查:证书是否仍被其他服务使用
这是使用delete-certificate时最容易踩坑的地方。根据 service-2.json 中DeleteCertificate操作的官方文档说明:
You cannot delete an ACM certificate that is being used by another Amazon Web Services service. To delete a certificate that is in use, you must first remove the certificate association using the console or the CLI for the associated service.
即:正在被其他 AWS 服务(如 ELB、CloudFront、API Gateway、ECS 等)关联使用的 ACM 证书无法删除。如果尝试删除,API 会抛出ResourceInUseException。
从服务模型中的异常定义 ResourceInUseException 可以看到其语义:
The certificate is in use by another Amazon Web Services service in the caller's account. Remove the association and try again.
因此在执行删除前,应当先在 ELB、CloudFront、API Gateway 等使用该证书的服务中解除证书关联,再执行aws acm delete-certificate。这也是 ACM 控制台删除流程中会反复提示的核心前置条件。
删除操作的三大限制
综合服务模型中的官方文档,delete-certificate存在以下限制,需要在使用前充分了解:
禁止删除
CertificateKeyPairOrigin为ACME的证书:这类通过 ACME 协议签发/管理的证书(包括 external account binding 场景)不允许手动删除,ACM 会在其过期 1 年后自动清理。服务模型中DeleteCertificate的文档明确指出:"You cannot delete a certificate with aCertificateKeyPairOriginofACME. ACM automatically deletes these certificates 1 year after they expire.",同时DeleteAcmeAccount等 ACME 相关操作在 service-2.json 中也被标记为"idempotent":true并带staticContextParams(ServiceType: ACM-ACME),表明 ACME 生态与普通证书删除流程是隔离的。删除私有 CA 签发的证书不影响 CA 本身:若证书由 AWS Private CA 签发,删除该证书不会删除 CA,你仍会持续为 CA 付费,直到显式删除 CA。这提醒我们:清理证书不等于清理成本,需要单独管理 Private CA 资源。
删除不可恢复:
DeleteCertificate会同时删除证书及其关联的私钥("Deletes a certificate and its associated private key")。一旦删除成功,该证书无法恢复,且私钥一并销毁,请务必确认不再需要后再执行。
删除行为的最终一致性
delete-certificate删除成功后,删除操作是**最终一致(eventually consistent)**的。服务模型文档明确说明:
Deleting a certificate is eventually consistent. There may be a short delay before the certificate no longer appears in the list that can be displayed by calling the
ListCertificatesaction or be retrieved by calling theGetCertificateaction.
这意味着删除命令返回成功之后,在极短时间内:
- 调用
aws acm list-certificates可能仍能看到该证书; - 调用
aws acm get-certificate可能仍能取到该证书内容。
这是正常的分布式系统一致性窗口,并非命令执行失败。建议在自动化脚本中,若需要"删除后立即确认",应加入适当的重试与延迟逻辑,而不是严格断言删除命令返回后列表必须立即为空。
异常场景与错误排查
根据 service-2.json 中DeleteCertificate声明的错误列表,该操作可能返回以下 7 类异常:
| 异常类型 | 含义(依据服务模型) |
|---|---|
ResourceInUseException | 证书正被调用者账户中的其他 AWS 服务使用,需先解除关联再重试(源码定义) |
ResourceNotFoundException | 在调用者账户中找不到指定证书,或账户本身无法定位(源码定义) |
InvalidArnException | 提供的 ARN 不指向现有资源,通常是 ARN 拼写错误或区域/账户不匹配(源码定义) |
AccessDeniedException | 当前 IAM 身份缺少acm:DeleteCertificate权限 |
ValidationException | 参数校验失败,如 ARN 格式非法 |
ConflictException | 操作与其他并发操作冲突(如同时进行的 ACME 流程) |
ThrottlingException | 请求过于频繁被限流,可指数退避重试 |
常见的两个实际错误场景及排查建议:
ResourceInUseException:最常见。请在 ELB/CloudFront/API Gateway 等控制台或对应 CLI 中解除证书关联后重试。InvalidArnException或ResourceNotFoundException:核对 ARN 是否与证书所在区域一致(ACM 证书是区域性的,跨区域 ARN 无法匹配)、账户 ID 是否正确、ARN 中的 UUID 段是否完整。可通过aws acm list-certificates --region <region>重新获取准确 ARN。
IAM 权限要求
调用aws acm delete-certificate的 IAM 身份需要具备acm:DeleteCertificate权限。最小化权限策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "acm:DeleteCertificate", "Resource": "arn:aws:acm:region:123456789012:certificate/12345678-1234-1234-1234-123456789012" } ] }将上述策略中的 ARN 替换为实际证书 ARN,即可将删除权限限定到单张证书,避免"删一张全删"的越权风险。
与其他 ACM 命令的协同
delete-certificate是 ACM 证书生命周期管理的收尾环节,与其配套的示例文档位于 awscli/examples/acm 目录下,可串联成完整生命周期:
- 申请:request-certificate.rst — 申请新证书;
- 导入:import-certificate.rst — 导入自有证书;
- 查看:list-certificates.rst 与 describe-certificate.rst — 查询证书列表与详情,获取 ARN;
- 导出/下载:export-certificate.rst、get-certificate.rst — 在删除前备份证书与私钥(注意导出有额外条件);
- 标签管理:add-tags-to-certificate.rst 与 remove-tags-from-certificate.rst;
- 更新:update-certificate-options.rst — 更新证书选项;
- 删除:
delete-certificate— 清理不再使用的证书。
小结
aws acm delete-certificate虽然只有一条命令、一个参数,但其背后涉及的服务模型约束远比表面复杂。总结使用要点:
- 参数:只需
--certificate-arn,且必须符合arn:aws:acm:region:account:certificate/<uuid>格式; - 前置检查:确保证书未被 ELB、CloudFront、API Gateway 等服务关联,否则将触发
ResourceInUseException; - 限制:ACME 来源证书不可手动删除(到期 1 年后由 ACM 自动清理);删除私有 CA 签发的证书不会释放 CA 成本;
- 行为:删除为最终一致性,命令返回成功后列表可能短暂仍可见;
- 不可逆:删除同时销毁证书与私钥,务必提前备份确认。
以上结论均有仓库中官方示例文档 delete-certificate.rst 与 ACM 服务模型 service-2.json 的事实依据,读者可深入对应文件进一步核对细节。
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考