最佳实践 - AWS 证书管理器

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

最佳实践

最佳实践是一些建议,可帮助您更有效地使用 AWS Certificate Manager (AWS Certificate Manager)。以下最佳实践基于来自当前 ACM 客户的实际经验。

账户级别隔离

通过在策略中使用账户级别隔离,来控制谁可以在账户级别访问证书。将生产证书与测试和开发证书分别存放在不同的账户中。如果无法使用账户级隔离,则可以通过在策略中拒绝 kms:CreateGrant 操作来限制对特定角色的访问权限。这会限定账户中可以对证书进行高级别签名的角色。有关授权的信息,包括授权术语,请参阅《AWS Key Management Service 开发人员指南》中的 Grants in AWS KMS

如果需要进行更精细的控制而不是按账户限制对 kms:CreateGrant 的使用,则可以使用 kms:EncryptionContext 条件键来限制对特定证书的 kms:CreateGrant 权限。将 arn:aws:acm 指定为键,并指定要限制的 ARN 的值。以下示例策略会禁止使用特定的证书,但允许使用其他证书。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Deny", "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:acm:arn": "arn:aws:acm:us-east-1:111122223333:certificate/b26def74-1234-4321-9876-951d4c07b197" } } } ] }

AWS CloudFormation

利用 AWS CloudFormation,您可以创建一个模板来描述要使用的AWS资源。随后,AWS CloudFormation 将为您预置和配置这些资源。AWS CloudFormation 可以为您预置 ACM 支持的资源,例如 Elastic Load Balancing、Amazon CloudFront 和 Amazon API Gateway。有关更多信息,请参阅 与 ACM 集成的服务

如果您使用 AWS CloudFormation 快速创建和删除多个测试环境,建议您不要为每个环境创建单独的 ACM 证书。这样做会快速耗尽您的证书配额。有关更多信息,请参阅 配额。相反,创建一个涵盖了您用于测试的所有域名的通配符证书。例如,如果您为只有版本号发生变化的域名重复创建 ACM 证书(如 <version>.service.example.com),则改为针对 <*>.service.example.com 创建单个通配符证书。在 AWS CloudFormation 用来创建测试环境的模板中包含通配符证书。

证书固定

证书固定 (有时称作 SSL 固定) 是一个过程,可在应用程序中使用此过程来验证远程主机,方式是将该主机直接与其 X.509 证书或公有密钥而非证书层次结构关联。因此,应用程序使用固定来绕过 SSL/TLS 证书链验证。典型的 SSL 验证过程将检查证书链 (从根证书颁发机构 (CA) 证书到从属 CA 证书 (如果有)) 中的签名。此外,它还检查层次结构底部远程主机的证书。您的应用程序可改为固定到远程主机的证书以指示 该证书 (而非根证书或链中的任何其他证书) 受信任。在应用程序开发过程中,您可以将远程主机的证书或公有密钥添加到应用程序。或者,应用程序也可以在首次连接到主机时添加证书或密钥。

警告

建议您的应用程序固定 ACM 证书。ACM 会执行 AWS Certificate Manager 中的托管式证书续订 以在 Amazon 颁发的 SSL/TLS 证书过期前进行续订这些证书。为了续订证书,ACM 会生成新的公有-私有密钥对。如果您的应用程序固定 ACM 证书,并且已使用新的公有密钥成功续订证书,则应用程序可能无法连接到您的域。

如果您决定固定证书,则以下选项将不会阻止您的应用程序连接到您的域:

  • 将您自己的证书导入到 ACM,然后将您的应用程序固定到导入的证书。ACM 不会尝试自动续订导入的证书。

  • 如果您使用的是公有证书,则将您的应用程序固定到所有可用的 Amazon 根证书。如果您使用的是私有证书,则将您的应用程序固定到 CA 的根证书。

域验证

AWS Certificate Manager (ACM) 必须先确认您拥有或可以控制请求中指定的所有域,然后 Amazon 证书颁发机构 (CA) 才能为网站颁发证书。您可以使用电子邮件或 DNS 执行验证。有关更多信息,请参阅 AWS Certificate Manager DNS 验证AWS Certificate Manager 电子邮件验证

添加或删除域名

您无法在现有 ACM 证书中添加或删除域名。而必须请求包含修订过的域名列表的新证书。例如,如果证书有五个域名,并且需要添加四个域名,则必须请求包含九个域名的新证书。与任何新证书一样,您必须对请求中的所有域名验证所有权,包括之前为原始证书验证过的域名。

如果使用电子邮件验证,则对于每个域,您最多将收到 8 封验证电子邮件,并且您必须在 72 小时之内至少根据其中 1 封邮件执行操作。例如,如果请求包含五个域名的证书,您最多将收到 40 封验证电子邮件,并且您必须在 72 小时之内至少根据其中 5 封执行操作。随着证书请求中域名数量的增加,使用电子邮件来验证域所有权所需的工作量也会增加。

如果改为使用 DNS 验证,则必须为需要验证的 FQDN 向数据库写入一条新 DNS 记录。ACM 会向您发送要创建的记录,并在稍后查询数据库以确定是否已添加该记录。添加该记录即声明您拥有或可以控制该域。在前面的示例中,如果请求包含五个域名的证书,则必须创建五条 DNS 记录。建议您尽量使用 DNS 验证。

选择退出证书透明度日志记录

重要

无论您采取何种操作退出证书透明度日志记录,您的证书都可能仍被任何有权访问您将证书绑定到的公共或私有终端节点的客户端或个人所记录。不过,证书将不会包含已签名证书时间戳 (SCT)。只有发布证书的 CA 才能将 SCT 嵌入到证书中。

从 2018 年 4 月 30 日开始,Google Chrome 不再信任未在证书透明度日志中记录的公有 SSL/TLS 证书。因此,从 2018 年 4 月 24 日起,Amazon CA 已开始在至少两个公有日志中发布所有新证书和续订。证书一旦记录,便无法删除。有关更多信息,请参阅 证书透明度日志

当您请求证书或续订证书时,会自动执行日志记录,但您可以选择退出。这样做的常见原因包括对安全和隐私的疑虑。例如,记录内部主机域名会向潜在的攻击者提供有关内部网络的信息,否则将不会公开。此外,日志记录还可能会泄露新的或未发布的产品和网站的名称。

要在请求证书时停止使用透明度日志记录,请使用 request-certificate AWS CLI 命令的 options 参数或 RequestCertificate API 操作。如果您的证书是在 2018 年 4 月 24 日之前颁发的,并且您希望确保在续订过程中不记录它,则可以调用 update-certificate-options 命令或 UpdateCertificateOptions API 操作以选择退出。

限制
  • 您无法使用控制台启用或禁用透明度日志记录。

  • 在证书进入续订期(通常在证书过期前 60 天)后,您无法更改日志记录状态。在状态更改失败时不会生成错误消息。

证书一旦记录,便无法从日志中删除。在该时间点选择退出将不起作用。如果您在请求证书时选择退出日志记录,然后在稍后再选择回来,则您的证书将不会被记录,直到续订它为止。如果您希望证书被立即记录,我们建议您发布一个新的证书。

以下示例向您展示了在请求新的证书时如何使用 request-certificate 命令禁用证书透明度。

aws acm request-certificate \ --domain-name www.example.com \ --validation-method DNS \ --options CertificateTransparencyLoggingPreference=DISABLED \

上述命令输出新证书的 ARN。

{ "CertificateArn": "arn:aws:acm:region:account:certificate/certificate_ID" }

如果您已有一个证书,并且您不希望在续订它时记录它,请使用 update-certificate-options 命令。此命令不返回值。

aws acm update-certificate-options \ --certificate-arn arn:aws:acm:region:account:\ certificate/certificate_ID \ --options CertificateTransparencyLoggingPreference=DISABLED

启用 AWS CloudTrail

在开始使用 ACM 之前,请先启用 CloudTrail 日志记录。利用 CloudTrail,您可以通过检索账户的 AWS API 调用历史记录来监控您的 AWS 部署,包括通过 AWS 管理控制台、AWS 开发工具包、AWS Command Line Interface 以及更高级的 Amazon Web Services 执行的 API 调用。您还可以确定哪些用户和账户调用了 ACM API、发出调用的源 IP 地址以及发生调用的时间。您可以使用 API 将 CloudTrail 集成到应用程序、为您的企业自动创建跟踪、检查跟踪的状态和控制管理员启用和关闭 CloudTrail 日志记录的方式。有关更多信息,请参阅创建跟踪。转到 CloudTrail 与一起使用 AWS Certificate Manager 以查看 ACM 操作的示例跟踪记录。