Controlar la eliminación de versiones de clave

Google Cloud ofrece dos restricciones de políticas de organización para definir la política de destrucción de versiones de claves en una organización:

  • constraints/cloudkms.minimumDestroyScheduledDuration se usa para definir una longitud mínima de la duración programada para la destrucción de las nuevas claves de la organización.
  • constraints/cloudkms.disableBeforeDestroy se usa para requerir que una versión de clave se haya inhabilitado antes de que se pueda programar su eliminación.

Antes de empezar

En las instrucciones de esta página se presupone que sabes usar restricciones y que tienes los recursos y roles necesarios.

Recursos necesarios

Para completar los pasos de esta página, debes tener los siguientes recursos:

  • Una organización.
  • Opcional: un recurso de carpeta o de proyecto de tu organización.

Roles obligatorios

Para obtener los permisos que necesitas para gestionar las políticas de la organización, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de políticas de la organización (roles/orgpolicy.policyAdmin) en la organización. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para gestionar las políticas de la organización. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Para gestionar las políticas de la organización, se necesitan los siguientes permisos:

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

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Requerir una duración mínima programada para la destrucción

La restricción Duración mínima programada para la eliminación por clave (constraints/cloudkms.minimumDestroyScheduledDuration) se usa para definir una duración mínima de programación para la eliminación de las claves nuevas. Esta restricción anula la duración mínima programada para la destrucción a nivel de proyecto, carpeta u organización. Esta restricción reduce la probabilidad de destruir accidentalmente una clave que aún se necesita. Puedes asignar un valor más alto a esta restricción para asegurarte de que tienes tiempo para evitar la destrucción de la clave antes de que sea irreversible.

Usa valores más altos para esta restricción cuando la destrucción de claves no deseada sea más perjudicial, como en el caso de los datos de producción sujetos a requisitos de conservación de datos. Usa valores más bajos para esta restricción cuando la destrucción de claves no deseada sea menos perjudicial, como en entornos de desarrollo o de prueba. También puedes usar valores más bajos para permitir la destrucción criptográfica a tiempo. Sin embargo, como valor mínimo, esta restricción no puede asegurar que las claves nuevas se creen con duraciones programadas para la destrucción cortas.

Para requerir una duración mínima de programación para la destrucción, sigue estos pasos:

  1. Obtén la política actual del recurso de organización con el comando describe. Este comando devuelve la política aplicada directamente a este recurso:

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

    Sustituye ORGANIZATION_ID por el identificador único del recurso de organización. El ID de organización tiene el formato de números decimales y no puede tener ceros iniciales.

    También puedes ver la política de organización de una carpeta o un proyecto con las marcas --folder o --project y el ID de carpeta o el ID de proyecto, respectivamente.

    La respuesta devuelve la política de la organización actual, si existe. El resultado debería ser similar al siguiente:

    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'
    

    Si no se ha definido ninguna política, el comando describe devuelve un error NOT_FOUND:

    ERROR: (gcloud.org-policies.describe) NOT_FOUND: Requested entity was not found.
    
  2. Define la política en la organización con el comando set-policy. Este comando sobrescribe cualquier política asociada al recurso.

    1. Crea un archivo temporal /tmp/policy.yaml para almacenar la política:

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

      Haz los cambios siguientes:

      • ORGANIZATION_ID: el ID numérico de tu organización.
      • MINIMUM_DURATION: duración mínima del estado programado para eliminación de las claves de esta organización, en días. Debe ser uno de los siguientes valores: 7d, 15d, 30d, 60d, 90d o 120d.
    2. Ejecuta el comando set-policy:

      gcloud org-policies set-policy /tmp/policy.yaml
      
  3. Consulta la política vigente con describe --effective. Este comando devuelve la política de organización tal como se evalúa en este punto de la jerarquía de recursos, incluida la herencia.

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

    El resultado debería ser similar al siguiente:

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

    Como esta política de organización se ha definido a nivel de organización, todos los recursos secundarios que permitan la herencia la heredan.

Requerir que las claves se inhabiliten antes de destruirlas

La restricción Restringir la destrucción de claves a las claves inhabilitadas (constraints/cloudkms.disableBeforeDestroy) te permite requerir que una clave se haya inhabilitado antes de poder programar su destrucción. Se recomienda inhabilitar una clave antes de destruirla, ya que así puedes comprobar que no se está usando. Puedes combinar esta restricción con una política de gestión de identidades y accesos cuidadosa para crear un proceso de destrucción de varios pasos que requiera la cooperación de varios roles.

Para usar esta restricción y crear un proceso de destrucción de varios pasos, asegúrate de que ningún usuario tenga los permisos cloudkms.cryptoKeyVersions.update y cloudkms.cryptoKeyVersions.destroy. Este caso práctico requiere que uses roles personalizados.

Para requerir que una clave esté en el estado inhabilitada antes de poder programar su eliminación, sigue estos pasos:

gcloud

  1. Obtén la política actual del recurso de organización con el comando describe. Este comando devuelve la política aplicada directamente a este recurso:

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

    Sustituye ORGANIZATION_ID por el identificador único del recurso de organización. El ID de organización tiene el formato de números decimales y no puede tener ceros iniciales.

    También puedes ver la política de organización de una carpeta o un proyecto con las marcas --folder o --project y el ID de carpeta o el ID de proyecto, respectivamente.

    La respuesta devuelve la política de la organización actual, si existe. El resultado es similar al siguiente:

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

    Si no se ha definido ninguna política, el comando describe devuelve un error NOT_FOUND:

    ERROR: (gcloud.org-policies.describe) NOT_FOUND: Requested entity was not found.
    
  2. Define la política en la organización con el comando set-policy. Este comando sobrescribe cualquier política que ya esté asociada al recurso.

    1. Crea un archivo temporal /tmp/policy.yaml para almacenar la política:

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

      Sustituye ORGANIZATION_ID por el identificador único del recurso de organización.

    2. Ejecuta el comando set-policy:

      gcloud org-policies set-policy /tmp/policy.yaml
      
  3. Consulta la política vigente con describe --effective. Este comando devuelve la política de organización tal como se evalúa en este punto de la jerarquía de recursos, incluida la herencia.

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

    El resultado debería ser similar al siguiente:

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

    Como esta política de organización se ha definido a nivel de organización, todos los recursos secundarios que permitan la herencia la heredan.

Siguientes pasos