Cómo validar una firma de solicitud aprobada

Cada solicitud de aprobación de acceso aprobada se firma con una clave criptográfica asimétrica para validar la aprobación. Las solicitudes aprobadas se pueden firmar con una clave administrada por Google o una clave de Cloud KMS proporcionada por el cliente.

Cuando validas una firma, puedes asegurarte de que la cadena de bytes de la solicitud aprobada serializada sea válida. Para terminar de validar el contenido de la aprobación, debes desserializar el mensaje y compararlo con el contenido de la solicitud aprobada.

Antes de comenzar

Para asegurarte de que la cuenta de servicio de Aprobación de acceso de tu recurso tiene los elementos necesarios permisos para verificar firmas de solicitudes aprobadas, pedirle a tu administrador que te otorgue la cuenta de servicio de Aprobación de acceso de tu recurso el Rol de IAM de firmante/verificador de CryptoKey de Cloud KMS (roles/cloudkms.signerVerifier) en la clave, el llavero de claves o el proyecto de claves. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Es posible que tu administrador también pueda otorgar a la cuenta de servicio de aprobación de acceso de tu recurso los permisos necesarios a través de roles personalizados o con otros roles predefinidos.

Valida una solicitud firmada con una clave administrada por Google

  1. En la consola de Google Cloud, ve a la página Aprobación de acceso.

    Ir a Acceso Aprobación

  2. Busca y selecciona la solicitud de aprobación de acceso aprobada que que deseas validar. Se abrirá la página Detalles de la solicitud.

  3. En Clave pública administrada por Google, haz clic en content_copy Copy.

  4. Abre Cloud Shell y guarda la clave pública como un nuevo archivo llamado public_key:

    echo GOOGLE_MANAGED_PUBLIC_KEY > ./public_key
    

    Reemplaza GOOGLE_MANAGED_PUBLIC_KEY por el contenido del campo Clave pública administrada por Google.

  5. En la consola de Google Cloud, en la página Detalles de la solicitud, en Firma, haz clic en content_copy Copy.

  6. Abre Cloud Shell y, luego, guarda la firma como un archivo nuevo llamado signature.txt:

    echo SIGNATURE > ./signature.txt
    

    Reemplaza SIGNATURE por el contenido del campo Signature.

  7. Decodifica la firma con el comando base64 y guarda el resultado como decoded_signature:

    base64 ./signature.txt -d > ./decoded_signature
    
  8. En la consola de Google Cloud, en la página Detalles de la solicitud, en Solicitud de aprobación serializada, haz clic en content_copy Copy.

  9. Abre Cloud Shell y, luego, guarda la solicitud de aprobación serializada como un archivo nuevo llamado serialized_approval_request.txt:

    echo SERIALIZED_APPROVAL_REQUEST > ./serialized_approval_request.txt
    

    Reemplaza SERIALIZED_APPROVAL_REQUEST por el contenido del campo Solicitud de aprobación serializada.

  10. Decodifica la solicitud de aprobación serializada y guarda el resultado como decoded_serialized_approval_request:

    base64 ./serialized_approval_request.txt -d > ./decoded_serialized_approval_request
    
  11. Usa openssl para verificar la firma:

    openssl dgst \
        -sha256 \
        -verify ./public_key \
        -signature ./decoded_signature \
        ./decoded_serialized_approval_request
    

    Si la firma es válida, el resultado debería ser Verified OK. Esta confirma que la solicitud de aprobación serializada sea válida.

Cómo validar una solicitud firmada con una clave proporcionada por el cliente

  1. En la consola de Google Cloud, ve a la página Aprobación de acceso.

    Ir a Acceso Aprobación

  2. Busca y selecciona la solicitud de Aprobación de acceso aprobada que quieres validar. Se abrirá la página Detalles de la solicitud.

  3. En la consola de Google Cloud, en la página Detalles de la solicitud, en Firma, haz clic en content_copy Copiar.

  4. Abre Cloud Shell y, luego, guarda la firma como un archivo nuevo llamado signature.txt:

    echo SIGNATURE > ./signature.txt
    

    Reemplaza SIGNATURE por el contenido de Signature. .

  5. Decodifica la firma y guarda el resultado como decoded_signature:

    base64 ./signature.txt -d > ./decoded_signature
    
  6. En la consola de Google Cloud, en la página Detalles de la solicitud, en Solicitud de aprobación serializada, haz clic en content_copy Copiar.

  7. Abre Cloud Shell y, luego, guarda la solicitud de aprobación serializada como un archivo nuevo llamado serialized_approval_request.txt:

    echo SERIALIZED_APPROVAL_REQUEST > ./serialized_approval_request.txt
    

    Reemplaza SERIALIZED_APPROVAL_REQUEST por el contenido del campo Solicitud de aprobación serializada.

  8. Decodifica la solicitud de aprobación serializada y guarda el resultado como decoded_serialized_approval_request:

    base64 ./serialized_approval_request.txt -d > ./decoded_serialized_approval_request
    
  9. En Clave administrada por el cliente, toma nota del identificador de recurso de la clave.

  10. Recupera la clave pública de la clave que identificaste en el paso anterior. Guarda la clave pública que descargaste en la PEM como ./public_key.

  11. Usa openssl para verificar la firma:

    openssl dgst \
        -sha256 \
        -verify ./public_key \
        -signature ./decoded_signature \
        ./decoded_serialized_approval_request
    

    Si la firma es válida, el resultado debería ser Verified OK. Esto confirma que la solicitud de aprobación serializada es válida.