如何为我的 AWS Private CA 创建 CRL?

6 分钟阅读
0

我想为我的 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 存储桶

完成以下步骤:

  1. 打开 Amazon S3 控制台
  2. 选择 Create bucket(创建存储桶)。
  3. 对于 Bucket name(存储桶名称),输入您的存储桶的名称。
  4. 对于 Object Ownership(对象所有权),选择 ACLs disabled(禁用 ACL),然后选择 Create bucket(创建存储桶)。
  5. 对于 Buckets(存储桶),选择您的存储桶。
  6. 选择 Permissions(权限)选项卡。
  7. Bucket policy(存储桶策略)下,选择 Edit(编辑)。
  8. 对于 Policy(策略),输入以下策略:
    {  "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"
          }
        }
      ]
    }
    **注意:**将 your-crl-storage-bucket 替换为您的存储桶,并将 account 替换为您的 AWS 账户。
  9. 选择 Save changes(保存更改)。

有关详细信息,请参阅创建存储桶

创建 CloudFront 分配

完成以下步骤:

  1. 打开 CloudFront 控制台
  2. 选择 Create Distribution(创建分配)。
  3. 对于 Origin domain(源域),选择包含 S3 存储桶的域名。使用以下命名惯例:your-crl-storage-bucket.s3.region.amazonaws.com
  4. 对于 Origin access(源访问),选择 Origin access control settings (recommended)(源访问控制设置(推荐))。
  5. 对于 Origin access controls(源访问控制),选择 Create new OAC(创建新 OAC),然后选择 Create(创建)。
  6. 对于 Web Application Firewall (WAF)(Web 应用程序防火墙 (WAF)),选择 Do not enable security protections(不启用安全保护)。如果您的用例需要,请开启安全保护。
  7. 选择 Create distribution(创建分配)。
  8. 出现“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

完成以下步骤:

  1. 在您的 AWS 区域中打开 AWS Private CA 控制台
  2. 选择 Create a private CA(创建私有 CA)。
  3. 配置以下 CA 参数:
    重要事项:创建 CA 后,您无法更新模式、** CA 类型**、主题专有名称密钥算法
    对于 Mode(模式),选择 General-purpose(通用)。
    对于 CA type options(CA 类型选项),请选择 Root(根)。
    对于 Subject distinguished name options(主题专有名称选项),输入 CA 的名称,然后配置其他字段。
    对于 Key algorithm options(密钥算法选项),选择 RSA 2048
    对于 Certificate revocation options(证书吊销选项),请清除 CRLOCSP
    对于 CA permissions options(CA 权限选项),请选择 Authorize ACM access to renew certificates requested by this account(授权 ACM 访问权限以续订此账户请求的证书)。
  4. 选择 Pricing acknowledgement(定价确认),然后选择 Create CA(创建 CA)。
  5. 验证 CA 的状态是否为 Pending certificate(待处理证书)。
  6. Actions(操作)下,选择 Install CA certificate(安装 CA 证书)。
  7. 配置 CA 证书的 Validity(有效性)和 Signature algorithm(签名算法)。

为您的 CA 配置 CRL

**注意:**如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,应确保您使用的是最新版本的 AWS CLI

完成以下步骤:

  1. 创建包含以下内容的 CRL 配置 JSON 文件:
    {
      "CrlConfiguration": {
        "Enabled": true,
        "ExpirationInDays": 7,
        "S3ObjectAcl": "BUCKET_OWNER_FULL_CONTROL",
        "S3BucketName": "your-crl-storage-bucket"
      }
    }
    **注意:**将 your-crl-storage-bucket 替换为您的存储桶名称。您还可以更新 ExpirationInDays 的值来更改 CRL 的有效期
  2. 更新您的存储桶政策,允许 AWS Private CA 在您的存储桶中发布 CRL 文件:
    {
      "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"
            }
          }
        }
      ]
    }
    **注意:**将 your-crl-storage-bucket 替换为您的存储桶,将 region 替换为您的区域,将 account 替换为您的账户,将 CA_ID 替换为 CA ID。
  3. 更新您在创建 CloudFront 分配时复制的策略,以允许 CloudFront 分配获取 CRL 文件:
    {
      "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"
            }
          }
        }
      ]
    }
    **注意:**将 your-crl-storage-bucket 替换为您的存储桶,将 region 替换为您的区域,将 account 替换为您的账户,将 CA_ID 替换为 CA ID,将 DISTRIBUTION_ID 替换为 CloudFront 分配。
    有关更多信息,请参阅 Amazon S3 中的 CRL 访问策略授予源访问控制权限以访问 S3 存储桶
  4. 要更新 CA 并开启 CRL,请运行 update-certificate-authority 命令:
    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
    **注意:**将 region 替换为您的区域,将 account 替换为您的账户,将 CA_ID 替换为您的 CA ID。

测试您的 CRL

要验证您的 CRL 是否已发布且可访问,请完成以下步骤:

  1. 打开 ACM 控制台
  2. 选择 Request a certificate(申请证书)。
  3. 选择 Request a private certificate(申请私有证书),然后选择 Next(下一步)。
  4. Certificate authority(证书颁发机构)下,选择您的 CA。
  5. 对于Fully qualified domain name(完全限定域名),请输入您的域名。
    **注意:**您无需为私有证书执行域验证步骤。
  6. 选择 I understand that ACM will not be able to renew private certificates issues from this certificate authority without necessary permissions(我明白,如果没有必要的权限,ACM 将无法续订该证书颁发机构颁发的私有证书)。
  7. 选择 Request(请求)。
  8. 在私有证书的 Details(详细信息)页面上,确认 Status(状态)为 Issued(已颁发)。
  9. 记下私有证书序列号。
  10. 要吊销私有证书,请运行 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) 来开启服务器端加密

完成以下步骤:

  1. 在与您的 S3 存储桶相同的区域中,打开 AWS KMS 控制台
  2. 选择 Customer managed key(客户管理型密钥),然后选择 Create key(创建密钥)。
  3. Configure key(配置密钥)下,保留默认值,然后选择 Next(下一步)。
  4. Add labels(添加标签)下,对于 Alias(别名),输入密钥别名;对于 Description(描述),输入描述。
  5. 对于 Define key administrative permissions(定义密钥管理权限),输入您当前的 AWS Identity and Access Management(IAM)用户或角色,然后选择 Next(下一步)。
  6. 对于 Define key usage permissions(定义密钥使用权限),选择 Next(下一步)。
  7. 确认您的配置,然后选择 Finish(完成)。
  8. Customer Managed Keys(客户管理型密钥)下,选择您的 AWS KMS 密钥。
  9. Key policy(密钥策略)下,选择 Switch to policy view(切换到策略视图)。
  10. 选择 Edit(编辑)。
  11. 输入用于 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。 查看 SSEKMSKeyIdBucketKeyEnabled 字段以验证您的加密设置。

相关信息

规划证书吊销列表 (CRL)

如何安全地为 ACM Private CA 创建和存储 CRL

Amazon S3 的安全防护最佳实践

ACM Private CA 最佳实践

AWS 官方
AWS 官方已更新 4 个月前