Controla la destrucción de versiones de claves

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

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

Antes de comenzar

En las instrucciones de esta página, se supone que estás familiarizado con el uso de restricciones y que tienes los recursos y las funciones necesarios.

Recursos necesarios

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

  • Una organización.
  • Una carpeta o un recurso de proyecto dentro de tu organización (opcional).

Funciones obligatorias

Si quieres obtener los permisos que necesitas para administrar las políticas de la organización, pídele a tu administrador que te otorgue el rol de IAM de Administrador de políticas de la organización (roles/orgpolicy.policyAdmin) en la organización. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

Este rol predefinido contiene los permisos necesarios para administrar las políticas de la organización. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para administrar las políticas de la organización:

  • 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 o, también, otros roles predefinidos.

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

La restricción Duración mínima programada de la destrucción por clave (constraints/cloudkms.minimumDestroyScheduledDuration) se usa para establecer una longitud mínima de la duración de la destrucción programada para las claves nuevas. Esta restricción anula la duración mínima programada para la destrucción a nivel del proyecto, la organización o la carpeta. Esta restricción reduce la posibilidad de destruir accidentalmente una clave que aún se necesita. Puedes establecer esta restricción en un valor más alto para asegurarte de que tengas tiempo de evitar la destrucción de la clave antes de que se vuelva irreversible.

Usa valores más altos para esta restricción cuando la destrucción de claves no deseada sea más dañina, como en el caso de los datos de producción que están sujetos a requisitos de retención de datos. Usa valores más bajos para esta restricción cuando la destrucción de claves no deseada sea menos dañina, por ejemplo, para entornos de desarrollo o pruebas. También puedes usar valores más bajos para permitir la destrucción criptográfica oportuna. Sin embargo, como valor mínimo, esta restricción no puede garantizar que las claves nuevas se creen con duraciones bajas de destrucción.

Para exigir una duración mínima programada para la destrucción, sigue estos pasos:

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

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

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

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

    La respuesta muestra la política actual de la organización, si existe una. El resultado es 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 establece una política, el comando describe muestra un error NOT_FOUND:

    ERROR: (gcloud.org-policies.describe) NOT_FOUND: Requested entity was not found.
    
  2. Configura la política en la organización con el comando set-policy. Este comando reemplaza cualquier política conectada actualmente 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
      

      Reemplaza lo siguiente:

      • ORGANIZATION_ID: Es el ID numérico de la organización.
      • MINIMUM_DURATION: Es la duración mínima en días del estado de destrucción programada para las claves de esta organización. 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 actual con describe --effective. Este comando muestra la política de la organización como se evalúa en este punto de la jerarquía de recursos con la herencia incluida.

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

    El resultado es similar al siguiente:

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

    Debido a que esta política de la organización se estableció a nivel de la organización, todos los recursos secundarios que permiten la herencia la heredan.

Exigir que se inhabiliten las claves antes de la destrucción

La restricción Restringe la destrucción de claves a claves inhabilitadas (constraints/cloudkms.disableBeforeDestroy) te permite solicitar que se haya inhabilitado una clave para poder programar su destrucción. Inhabilitar una clave antes de destruirla es una práctica recomendada porque te ayuda a validar que la clave no esté en uso. Puedes combinar esta restricción con una política cuidadosa de Identity and Access Management para crear un proceso de destrucción de varios pasos que requiera la cooperación de varias funciones.

Si quieres usar esta restricción para 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 funciones personalizadas.

Para exigir que una clave tenga el estado inhabilitada antes de poder programar su destrucción, sigue estos pasos:

gcloud

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

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

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

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

    La respuesta muestra la política actual de la organización, si existe una. 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 establece una política, el comando describe muestra un error NOT_FOUND:

    ERROR: (gcloud.org-policies.describe) NOT_FOUND: Requested entity was not found.
    
  2. Configura la política en la organización con el comando set-policy. Este comando reemplaza cualquier política que ya esté adjunta 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
      

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

    2. Ejecuta el comando set-policy:

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

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

    El resultado es similar al siguiente:

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

    Debido a que esta política de la organización se estableció a nivel de la organización, todos los recursos secundarios que permiten la herencia la heredan.

¿Qué sigue?