控制密钥版本销毁

Google Cloud 提供了两种组织政策限制条件来在整个组织中设置密钥版本销毁政策:

  • constraints/cloudkms.minimumDestroyScheduledDuration 用于为组织内的新密钥设置“已安排销毁”时长下限。
  • constraints/cloudkms.disableBeforeDestroy 用于要求必须先停用密钥版本,然后才能安排将其销毁。

准备工作

本页面中的说明假定您熟悉使用限制条件并拥有所需的资源和角色。

所需的资源

您必须拥有以下资源,然后才能完成本页中的步骤:

  • 组织。
  • 可选:组织中的文件夹或项目资源。

所需的角色

如需获取管理组织政策所需的权限,请让管理员为您授予组织的 Organization Policy Administrator (roles/orgpolicy.policyAdmin) IAM 角色。如需详细了解如何授予角色,请参阅管理访问权限

此预定义角色包含管理组织政策所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需管理组织政策,您必须拥有以下权限:

  • orgpolicy.constraints.list
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set

您也可以使用自定义角色或其他预定义角色来获取这些权限。

要求最短安排销毁时长

每个密钥的最短安排销毁时长限制条件 (constraints/cloudkms.minimumDestroyScheduledDuration) 用于设置新密钥的计划销毁时长下限。此限制条件会覆盖项目、文件夹或组织级层的最短已安排销毁时长。此限制条件可降低意外销毁仍需要的密钥的可能性。您可以将此限制条件设置为更大的值,以确保有时间在密钥销毁变得不可逆转之前防止密钥销毁。

如果不必要的密钥销毁产生的危害更大,例如对于受数据保留要求约束的生产数据,请为此限制使用更高的值。如果不必要的密钥销毁危害较小(例如对于开发或测试环境),请为此限制使用较低的值。您还可以使用较小的值,以便及时进行密钥销毁。但是,作为一个最小值,此限制条件无法保证在计划销毁时长较短的新密钥创建

如需要求最短安排销毁时长,请按以下步骤操作:

  1. 使用 describe 命令获取组织资源的当前政策。此命令会返回直接应用于此资源的政策:

    gcloud org-policies describe \
      constraints/cloudkms.minimumDestroyScheduledDuration \
      --organization=ORGANIZATION_ID
    

    ORGANIZATION_ID 替换为组织资源的唯一标识符。组织 ID 采用十进制数字的格式,不能以零开头。

    您还可以使用 --folder--project 标志以及文件夹 ID项目 ID 查看文件夹或项目的组织政策。

    响应将返回当前的组织政策(如果存在)。输出类似于以下内容:

    name: organizations/ORGANIZATION_ID/policies/cloudkms.minimumDestroyScheduledDuration
    spec:
      etag: COTP+KYGELiCmsoB
      inheritFromParent: true
      rules:
      - values:
          allowedValues:
          - in:7d
      updateTime: '2023-08-17T14:00:04.424051Z'
    

    如果未设置政策,describe 命令将返回 NOT_FOUND 错误:

    ERROR: (gcloud.org-policies.describe) NOT_FOUND: Requested entity was not found.
    
  2. 使用 set-policy 命令针对组织设置政策。此命令会覆盖当前附加至该资源的所有政策。

    1. 创建临时文件 /tmp/policy.yaml 以存储政策:

      name: organizations/ORGANIZATION_ID/policies/cloudkms.minimumDestroyScheduledDuration
      spec:
        rules:
        - values:
            allowedValues:
            - in:MINIMUM_DURATION
      

      请替换以下内容:

      • ORGANIZATION_ID:您的组织的数字 ID。
      • MINIMUM_DURATION:此组织中密钥的已安排销毁状态的最短时长(以天为单位)。必须是以下值之一:7d15d30d60d90d120d
    2. 运行 set-policy 命令:

      gcloud org-policies set-policy /tmp/policy.yaml
      
  3. 使用 describe --effective 查看当前的有效政策。 此命令会返回组织政策,因为此时它是在包含继承政策的资源层次结构中进行评估。

    gcloud org-policies describe \
      constraints/cloudkms.minimumDestroyScheduledDuration --effective \
      --organization=ORGANIZATION_ID
    

    输出类似于以下内容:

    name: organizations/ORGANIZATION_ID/policies/cloudkms.minimumDestroyScheduledDuration
    spec:
      rules:
        - values:
            allowedValues:
            - 30d
            - 15d
            - 90d
            - 60d
            - 7d
            - 120d
    

    由于此组织政策在组织级别设置,因此允许继承的所有子资源都会继承该政策。

要求在销毁前停用密钥

借助仅限已停用的密钥进行销毁限制条件 (constraints/cloudkms.disableBeforeDestroy),您可以要求必须先停用密钥,然后才能安排销毁密钥。在销毁密钥之前将其停用是推荐的最佳做法,因为它有助于您验证密钥是否未被使用。您可以将此限制条件与仔细的 Identity and Access Management 政策结合使用,以创建需要多个角色开展协作的多步骤销毁过程。

如需使用此限制条件创建多步骤销毁过程,请确保没有用户同时具有 cloudkms.cryptoKeyVersions.updatecloudkms.cryptoKeyVersions.destroy 权限。此使用场景要求您使用自定义角色

如需要求必须处于已停用状态才能安排销毁密钥,请按以下步骤操作:

gcloud

  1. 使用 describe 命令获取组织资源的当前政策。此命令会返回直接应用于此资源的政策:

    gcloud org-policies describe \
      constraints/cloudkms.disableBeforeDestroy \
      --organization=ORGANIZATION_ID
    

    ORGANIZATION_ID 替换为组织资源的唯一标识符。组织 ID 采用十进制数字的格式,不能以零开头。

    您还可以使用 --folder--project 标志以及文件夹 ID项目 ID 分别查看文件夹或项目的组织政策。

    响应将返回当前的组织政策(如果存在)。输出类似于以下内容:

    name: organizations/ORGANIZATION_ID/policies/cloudkms.disableBeforeDestroy
    spec:
      etag: CPvY+KYGENDwgxA=
      rules:
      - enforce: true
      updateTime: '2023-08-17T14:19:39.033618Z'
    

    如果未设置政策,describe 命令将返回 NOT_FOUND 错误:

    ERROR: (gcloud.org-policies.describe) NOT_FOUND: Requested entity was not found.
    
  2. 使用 set-policy 命令针对组织设置政策。此命令会覆盖已附加到资源的任何政策。

    1. 创建临时文件 /tmp/policy.yaml 以存储政策:

      name: organizations/ORGANIZATION_ID/policies/cloudkms.disableBeforeDestroy
      spec:
        rules:
        - enforce: true
      

      ORGANIZATION_ID 替换为组织资源的唯一标识符。

    2. 运行 set-policy 命令:

      gcloud org-policies set-policy /tmp/policy.yaml
      
  3. 使用 describe --effective 查看当前的有效政策。 此命令会返回组织政策,因为此时它是在包含继承政策的资源层次结构中进行评估。

    gcloud org-policies describe \
      constraints/cloudkms.disableBeforeDestroy --effective \
      --organization=ORGANIZATION_ID
    

    输出类似于以下内容:

    name: organizations/ORGANIZATION_ID/policies/cloudkms.minimumDestroyScheduledDuration
    spec:
      rules:
      - enforce: true
    

    由于此组织政策在组织级别设置,因此允许继承的所有子资源都会继承该政策。

后续步骤