如何为我的 AWS Private CA 创建 CRL?
我想为我的 AWS Private Certificate Authority 创建证书吊销列表 (CRL)。
简短描述
要为您的 AWS Private CA 创建 CRL,请完成以下步骤:
- 创建新的 Amazon Simple Storage Service (Amazon S3) 存储桶。
- 创建 Amazon CloudFront 分配。
- 创建证书颁发机构 (CA)。
- 为您的 CA 配置 CRL。
- 测试您的 CRL。
- (可选)使用 AWS Key Management Service (AWS KMS) 加密您的 CRL。
解决方法
AWS Private CA 将 CRL 放入您指定的 Amazon S3 存储桶中。使用权限策略来限制对 S3 存储桶的访问。在存储桶策略中,包含 Put 权限,以允许 AWS Private CA 将对象放入存储桶中。要从存储桶检索元数据,请包含 Get 权限。
有关更多信息,请参阅 Amazon S3 中的 CRL 访问策略。
**注意:**当您配置新的 S3 存储桶时,默认会激活屏蔽公共访问权限 (BPA)。
创建新的 Amazon S3 存储桶
完成以下步骤:
- 打开 Amazon S3 控制台。
- 选择 Create bucket(创建存储桶)。
- 对于 Bucket name(存储桶名称),输入您的存储桶的名称。
- 对于 Object Ownership(对象所有权),选择 ACLs disabled(禁用 ACL),然后选择 Create bucket(创建存储桶)。
- 对于 Buckets(存储桶),选择您的存储桶。
- 选择 Permissions(权限)选项卡。
- 在 Bucket policy(存储桶策略)下,选择 Edit(编辑)。
- 对于 Policy(策略),输入以下策略:
**注意:**将 your-crl-storage-bucket 替换为您的存储桶,并将 account 替换为您的 AWS 账户。{ "Version": "2012-10-17", "Statement": [ { "Sid": "PolicyForPcaCrl", "Effect": "Allow", "Principal": { "Service": "acm-pca.amazonaws.com" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::your-crl-storage-bucket/*", "arn:aws:s3:::your-crl-storage-bucket" ], "Condition": { "StringEquals": { "aws:SourceAccount": "account" } } ] }
- 选择 Save changes(保存更改)。
有关详细信息,请参阅创建存储桶。
创建 CloudFront 分配
完成以下步骤:
- 打开 CloudFront 控制台。
- 选择 Create Distribution(创建分配)。
- 对于 Origin domain(源域),选择包含 S3 存储桶的域名。使用以下命名惯例:your-crl-storage-bucket.s3.region.amazonaws.com。
- 对于 Origin access(源访问),选择 Origin access control settings (recommended)(源访问控制设置(推荐))。
- 对于 Origin access controls(源访问控制),选择 Create new OAC(创建新 OAC),然后选择 Create(创建)。
- 对于 Web Application Firewall (WAF)(Web 应用程序防火墙 (WAF)),选择 Do not enable security protections(不启用安全保护)。如果您的用例需要,请开启安全保护。
- 选择 Create distribution(创建分配)。
- 出现“The S3 bucket policy needs to be updated”(需要更新 S3 存储桶策略)横幅后,选择 Copy policy(复制策略)。然后,保存该策略。
策略示例:{ "Version": "2008-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "AllowCloudFrontServicePrincipal", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-crl-storage-bucket/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::account:distribution/DISTRIBUTION_ID" } } } ] }
创建 CA
如果您已经使用 AWS Private CA 创建 CA,请继续为您的 CA 配置 CRL。
完成以下步骤:
- 在您的 AWS 区域中打开 AWS Private CA 控制台。
- 选择 Create a private CA(创建私有 CA)。
- 配置以下 CA 参数:
重要事项:创建 CA 后,您无法更新模式、** CA 类型**、主题专有名称和密钥算法。
对于 Mode(模式),选择 General-purpose(通用)。
对于 CA type options(CA 类型选项),请选择 Root(根)。
对于 Subject distinguished name options(主题专有名称选项),输入 CA 的名称,然后配置其他字段。
对于 Key algorithm options(密钥算法选项),选择 RSA 2048。
对于 Certificate revocation options(证书吊销选项),请清除 CRL 和 OCSP。
对于 CA permissions options(CA 权限选项),请选择 Authorize ACM access to renew certificates requested by this account(授权 ACM 访问权限以续订此账户请求的证书)。 - 选择 Pricing acknowledgement(定价确认),然后选择 Create CA(创建 CA)。
- 验证 CA 的状态是否为 Pending certificate(待处理证书)。
- 在 Actions(操作)下,选择 Install CA certificate(安装 CA 证书)。
- 配置 CA 证书的 Validity(有效性)和 Signature algorithm(签名算法)。
为您的 CA 配置 CRL
**注意:**如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,应确保您使用的是最新版本的 AWS CLI。
完成以下步骤:
- 创建包含以下内容的 CRL 配置 JSON 文件:
**注意:**将 your-crl-storage-bucket 替换为您的存储桶名称。您还可以更新 ExpirationInDays 的值来更改 CRL 的有效期。{ "CrlConfiguration": { "Enabled": true, "ExpirationInDays": 7, "S3ObjectAcl": "BUCKET_OWNER_FULL_CONTROL", "S3BucketName": "your-crl-storage-bucket" } }
- 更新您的存储桶政策,允许 AWS Private CA 在您的存储桶中发布 CRL 文件:
**注意:**将 your-crl-storage-bucket 替换为您的存储桶,将 region 替换为您的区域,将 account 替换为您的账户,将 CA_ID 替换为 CA ID。{ "Version": "2012-10-17", "Statement": [ { "Sid": "PolicyForPcaCrl", "Effect": "Allow", "Principal": { "Service": "acm-pca.amazonaws.com" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::your-crl-storage-bucket/*", "arn:aws:s3:::your-crl-storage-bucket" ], "Condition": { "StringEquals": { "aws:SourceAccount": "account", "aws:SourceArn": "arn:aws:acm-pca:region:account:certificate-authority/CA_ID" } } } ] }
- 更新您在创建 CloudFront 分配时复制的策略,以允许 CloudFront 分配获取 CRL 文件:
**注意:**将 your-crl-storage-bucket 替换为您的存储桶,将 region 替换为您的区域,将 account 替换为您的账户,将 CA_ID 替换为 CA ID,将 DISTRIBUTION_ID 替换为 CloudFront 分配。{ "Version": "2012-10-17", "Statement": [ { "Sid": "PolicyForPcaCrl", "Effect": "Allow", "Principal": { "Service": "acm-pca.amazonaws.com" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::your-crl-storage-bucket/*", "arn:aws:s3:::your-crl-storage-bucket" ], "Condition": { "StringEquals": { "aws:SourceAccount": "account", "aws:SourceArn": "arn:aws:acm-pca:region:account:certificate-authority/CA_ID" } } }, { "Sid": "AllowCloudFrontServicePrincipal", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-crl-storage-bucket/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::account:distribution/DISTRIBUTION_ID" } } } ] }
有关更多信息,请参阅 Amazon S3 中的 CRL 访问策略和授予源访问控制权限以访问 S3 存储桶。 - 要更新 CA 并开启 CRL,请运行 update-certificate-authority 命令:
**注意:**将 region 替换为您的区域,将 account 替换为您的账户,将 CA_ID 替换为您的 CA ID。aws acm-pca update-certificate-authority --certificate-authority-arn arn:aws:acm-pca:region:account:certificate-authority/CA_ID --revocation-configuration file://revoke_config.json
测试您的 CRL
要验证您的 CRL 是否已发布且可访问,请完成以下步骤:
- 打开 ACM 控制台。
- 选择 Request a certificate(申请证书)。
- 选择 Request a private certificate(申请私有证书),然后选择 Next(下一步)。
- 在 Certificate authority(证书颁发机构)下,选择您的 CA。
- 对于Fully qualified domain name(完全限定域名),请输入您的域名。
**注意:**您无需为私有证书执行域验证步骤。 - 选择 I understand that ACM will not be able to renew private certificates issues from this certificate authority without necessary permissions(我明白,如果没有必要的权限,ACM 将无法续订该证书颁发机构颁发的私有证书)。
- 选择 Request(请求)。
- 在私有证书的 Details(详细信息)页面上,确认 Status(状态)为 Issued(已颁发)。
- 记下私有证书序列号。
- 要吊销私有证书,请运行 revoke-certificate 命令:
aws acm-pca revoke-certificate --certificate-authority-arn arn:aws:acm-pca:region:account:certificate-authority/CA_ID --certificate-serial SERIAL --revocation-reason UNSPECIFIED
**注意:**将 region 替换为您的区域,将 account 替换为您的账户,将 CA_ID 替换为您的 CA ID,将 SERIAL 替换为私有证书的序列号。将 UNSPECIFIED 替换为具体的吊销原因。
当您运行此命令时,AWS CloudTrail 会记录一个 RevokeCertificate 事件。
打开 Amazon CloudWatch 控制台。
选择 All metrics(所有指标),然后选择 ACMPrivateCA。
选择 PrivateCAMetrics。
查看 CA 的 CRLGenerated 指标。该指标的数据点是在 RevokeCertificate 事件的 eventTime 之后记录的。
**注意:**CRL 文件会在吊销后大约 30 分钟更新。有关更多信息,请参阅设置证书吊销方法。
使用 CloudFront 分配来访问 CRL 文件。
网址示例:
https://example.cloudfront.net/crl/CA_ID.crl
**注意:**将 example 替换为您的 CloudFront 分配域名,将 CA_ID 替换为您的证书 ID。您可以在 CloudFront 控制台中找到分配的域名。 下载并查看 CRL 文件,以验证已撤销的序列号是否在命令的输出中。
(可选)使用 AWS KMS 加密您的 CRL
您可以在包含 CRL 的存储桶上使用 AWS KMS (SSE-KMS) 来开启服务器端加密。AWS Private CA 不支持 AWS 托管式密钥的 CRL 文件加密。相反,您必须创建客户管理型 KMS 密钥。有关 Amazon S3 中的 SSE-KMS 的更多信息,请参阅使用 AWS KMS 密钥 (SSE-KMS) 来开启服务器端加密。
完成以下步骤:
- 在与您的 S3 存储桶相同的区域中,打开 AWS KMS 控制台。
- 选择 Customer managed key(客户管理型密钥),然后选择 Create key(创建密钥)。
- 在 Configure key(配置密钥)下,保留默认值,然后选择 Next(下一步)。
- 在 Add labels(添加标签)下,对于 Alias(别名),输入密钥别名;对于 Description(描述),输入描述。
- 对于 Define key administrative permissions(定义密钥管理权限),输入您当前的 AWS Identity and Access Management(IAM)用户或角色,然后选择 Next(下一步)。
- 对于 Define key usage permissions(定义密钥使用权限),选择 Next(下一步)。
- 确认您的配置,然后选择 Finish(完成)。
- 在 Customer Managed Keys(客户管理型密钥)下,选择您的 AWS KMS 密钥。
- 在 Key policy(密钥策略)下,选择 Switch to policy view(切换到策略视图)。
- 选择 Edit(编辑)。
- 输入用于 CRL 加密和分配的新密钥策略。
对于激活了存储桶密钥的密钥策略,请输入以下策略:
{ "Id": "key-consolepolicy-bucket-key-enabled", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::account:role/your-role-name", "arn:aws:iam::account:user/your-user-name" ] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion", "kms:RotateKeyOnDemand" ], "Resource": "*" }, { "Sid": "Allow ACM-PCA use of the key", "Effect": "Allow", "Principal": { "Service": "acm-pca.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:aws:s3:arn":"arn:aws:s3:::your-crl-storage-bucket" } } }, { "Sid": "AllowCloudFrontServicePrincipalSSE-KMS", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::account:distribution/DISTRIBUTION_ID" } } } ]
注意:将 account 替换为您的账户,将 your-role-name 替换为您的 IAM 角色,将 your-user-name 替换为您的 IAM 用户,将 your-crl-storage-bucket 替换为您的存储桶,将 DISTRIBUTION_ID 替换为您的 CloudFront 分配。
对于没有激活存储桶密钥的密钥策略,请将 kms:EncryptionContext:aws:s3:arn 条件键的值替换为特定的对象键。
有关更多信息,请参阅加密您的 CRL。
选择 Save changes(保存更改)。
打开 Amazon S3 控制台。
选择您的存储桶,然后选择 Properties(属性)。
在 Default encryption(默认加密)下,选择 Edit(编辑)。
输入以下加密参数:
对于 Encryption type(加密类型),选择 Server-side encryption with AWS Key Management Service keys (SSE-KMS)(使用 AWS Key Management Service keys (SSE-KMS) 的服务器端加密)。
对于 AWS KMS key(AWS KMS 密钥),请输入您的 AWS KMS 密钥的 Amazon Resource Name (ARN)。
对于 Bucket key(存储桶密钥),如果密钥策略激活了存储桶密钥,选择 Enable(启用);如果密钥策略未激活存储桶密钥,选择 Disable(禁用)。
选择 Save changes(保存更改)。
要验证您是否更新了 CRL 文件,请完成测试您的 CRL 部分中的步骤。
要验证 CRL 文件是否已正确加密,请运行 head-object 命令:
aws s3api head-object --bucket your-crl-storage-bucket --key crl/CA_ID.crl
**注意:**将 your-crl-storage-bucket 替换为您的存储桶,将 CA_ID 替换为您的 CA ID。 查看 SSEKMSKeyId 和 BucketKeyEnabled 字段以验证您的加密设置。
相关信息
相关内容
- AWS 官方已更新 4 个月前
- AWS 官方已更新 2 年前
- AWS 官方已更新 10 个月前