Crea certificadores mediante la consola de Google Cloud

En esta página, se explica cómo crear un certificador personalizado en la Autorización Binaria mediante la consola de Google Cloud. Como alternativa, también puedes realizar estos pasos mediante Google Cloud CLI o la API de REST. Esta tarea forma parte de la configuración de Autorización Binaria.

Usuarios de Cloud Build: En su lugar, puedes usar el certificador built-by-cloud-build para implementar solo imágenes compiladas por Cloud Build.

Antes de comenzar

Antes de crear certificadores, haz lo siguiente:

  1. Habilitar la Autorización Binaria

  2. Configura la Autorización Binaria para tu plataforma.

Descripción general

Un certificador es un recurso de Google Cloud que la autorización binaria usa para verificar una certificación. Para obtener más información sobre la autorización binaria, consulta Descripción general de la autorización binaria.

Para crear un certificador, haz lo siguiente:

  • Configura un par de claves que se pueda usar para firmar primero una imagen, crear una certificación y, luego, verificar la imagen cuando se implemente. Los pares de claves PKIX son pares de claves que genera Cloud Key Management Service (Cloud KMS) en formato compatible con PKIX.
  • Crea el certificador en la Autorización Binaria y asocia la clave pública que creaste.

En una configuración de un solo proyecto, debes crear el certificador en el mismo proyecto en el que configuras la política de la autorización binaria. En una configuración de varios proyectos, lo más probable es que tengas un proyecto de implementador en el que se configure la política y un proyecto de certificador independiente en el que se almacenen los certificadores.

Configura claves criptográficas

La Autorización Binaria te permite usar claves de PKIX para firmar una imagen de forma segura y, luego, verificarla. Esto garantiza que solo las partes verificadas puedan autorizar una imagen de contenedor. Para usar la certificación, configuras claves asimétricas, como las claves de infraestructura de clave pública (X.509) (PKIX), para verificar de forma segura la identidad de los certificadores. Cuando se implementa una imagen, la Autorización Binaria verifica la certificación de la imagen, que se firmó con la clave privada, con la clave pública del certificador.

En esta guía, se usa el Algoritmo de firma digital de curva elíptica (ECDSA) recomendado para generar un par de claves de PKIX. También puedes usar las claves de RSA o PGP para firmar. Consulta Algoritmos y propósitos de clave para obtener más información sobre los algoritmos de firma.

Crea un par de claves de PKIX

La Autorización Binaria te permite usar pares de claves de PKIX asimétricos para firmar y verificar una imagen.

Un par de claves de PKIX consta de una clave privada, que el signer usa para firmar de forma digital las certificaciones, y una clave pública, que agregas al certificador. En el momento de la implementación, la autorización binaria usa esta clave pública para verificar la certificación que firma la clave privada.

Los pares de claves asimétricas que se generaron y almacenaron en Cloud KMS son compatibles con el formato PKIX. Para crear una clave de Cloud KMS que se pueda usar con la autorización binaria, consulta Crea claves asimétricas. Asegúrate de elegir la firma asimétrica como propósito de la clave cuando crees la clave.

PKIX (Cloud KMS)

Para crear el par de claves en Cloud KMS, haz lo siguiente:

  1. Configura las variables de entorno necesarias para crear el par de claves.

    KMS_KEY_PROJECT_ID=${PROJECT_ID}
    KMS_KEYRING_NAME=my-binauthz-keyring
    KMS_KEY_NAME=my-binauthz-kms-key-name
    KMS_KEY_LOCATION=global
    KMS_KEY_PURPOSE=asymmetric-signing
    KMS_KEY_ALGORITHM=ec-sign-p256-sha256
    KMS_PROTECTION_LEVEL=software
    KMS_KEY_VERSION=1
    
  2. Crea el llavero de claves.

    gcloud kms keyrings create ${KMS_KEYRING_NAME} \
      --location ${KMS_KEY_LOCATION}
    
  3. Crea la clave:

    gcloud kms keys create ${KMS_KEY_NAME} \
      --location ${KMS_KEY_LOCATION} \
      --keyring ${KMS_KEYRING_NAME}  \
      --purpose ${KMS_KEY_PURPOSE} \
      --default-algorithm ${KMS_KEY_ALGORITHM} \
      --protection-level ${KMS_PROTECTION_LEVEL}
    

PKIX (clave local)

Sigue estos pasos para generar un nuevo par de claves asimétricas local de PKIX y almacenarlo en un archivo:

  1. Genera la clave:

    PRIVATE_KEY_FILE="/tmp/ec_private.pem"
    openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}
    
  2. Dado que este archivo contiene una clave pública y una privada, debes extraer la clave pública en un archivo distinto para poder agregarla al certificador:

    PUBLIC_KEY_FILE="/tmp/ec_public.pem"
    openssl ec -in ${PRIVATE_KEY_FILE} -pubout -out ${PUBLIC_KEY_FILE}
    

Crea el certificador

El siguiente paso es crear el certificador y asociar una nota de Artifact Analysis y una clave pública.

Autorización Binaria usa Artifact Analysis para almacenar los metadatos de confianza que se usan en el proceso de autorización. En cada certificador que creas, se debe crear una nota de Artifact Analysis. Cada certificación se almacena como un caso de esta nota.

Para crear el certificador, sigue estos pasos:

  1. Ve a la página Autorización binaria del proyecto del certificador.

    Ve a Autorización binaria

  2. En la pestaña Certificadores (Attestors), haz clic en Crear (Create).

  3. Haz clic en Create New Attestor.

  4. En Nombre del certificador, ingresa un nombre para el certificador (por ejemplo, build-secure o prod-qa).

  5. Para agregar la clave pública al certificador, haz lo siguiente:

    PKIX (clave local)

    1. Haz clic en Add a PKIX Key.
    2. Haz clic en Importar desde archivo.
    3. Navega hasta el archivo de claves de PKIX que guardaste y selecciónalo. Nota: También puedes pegar una clave pública en formato PEM.
    4. Selecciona el Algoritmo de firma. La clave de ejemplo de esta guía se genera con el algoritmo del resumen SHA de curva elíptica P256.

    PKIX (Cloud KMS)

    1. Haz clic en Add a PKIX Key.
    2. Haz clic en Importar desde Cloud KMS.
    3. Ingresa el ID del recurso para la versión de clave en la ventana que se abre. El formato del ID del recurso es el siguiente:

      projects/KMS_KEY_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/KMS_KEYRING_NAME/cryptoKeys/KMS_KEY_NAME/cryptoKeyVersions/KMS_KEY_VERSION
      

      Donde:

      • KMS_KEY_PROJECT_ID es el ID del proyecto en el que se almacenan las claves.
      • KMS_KEY_LOCATION es la ubicación de la clave (global es la configuración predeterminada).
      • KMS_KEYRING_NAME es el nombre del llavero de claves.
      • KMS_KEY_NAME es el nombre de la clave.
      • KMS_KEY_VERSION es la versión de la clave.

      Si creaste un par de claves de Cloud KMS con las variables de entorno de muestra en esta página, puedes ver el ID de recurso con el siguiente comando:

      echo projects/${KMS_KEY_PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION}
      
    4. Haz clic en Enviar.

  6. Si deseas usar una nota existente que creaste antes, expande la sección Configuración avanzada.

    1. Anula la selección de Generar automáticamente una nota de Artifact Analysis.

    2. Ingresa el nombre completamente calificado en el campo ID de la nota de Artifact Analysis. El nombre tiene el formato projects/PROJECT_ID/notes/NOTE_ID.

  7. Haz clic en Crear.

Verifica que se haya creado el certificador

Para verificar que se haya creado el certificador, ejecuta el siguiente comando:

  1. Regresa a la página Autorización Binaria en la consola de Google Cloud.

  2. Abre la pestaña Certificadores (Attestors).

Configuración de varios proyectos

Si usas una configuración de varios proyectos, en la que tienes proyectos de implementador y de certificador diferentes, debes configurar permisos adicionales en el recurso del certificador para que el proyecto de implementador use las certificaciones creadas durante la implementación.

Agrega una vinculación de función de IAM para el proyecto de implementador

Debes agregar una vinculación de función de IAM para la cuenta de servicio del proyecto de implementador al certificador. La autorización binaria usa esta vinculación cuando evalúa una política a fin de determinar si la cuenta tiene permisos para acceder al certificador.

Debes agregar la vinculación de roles de IAM desde la línea de comandos, ya que este paso no es compatible con la consola de Google Cloud.

Para agregar la vinculación de función de IAM, sigue estos pasos:

  1. Configura las variables de entorno para almacenar los nombres y números de tus proyectos.

    DEPLOYER_PROJECT_ID=PROJECT_ID
    DEPLOYER_PROJECT_NUMBER="$(
        gcloud projects describe "${DEPLOYER_PROJECT_ID}" \
          --format="value(projectNumber)"
    )"
    
  2. Configura variables de entorno para almacenar los nombres de las cuentas de servicio de los proyectos:

    DEPLOYER_SERVICE_ACCOUNT="service-${DEPLOYER_PROJECT_NUMBER}@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
    
  3. Agrega la vinculación de función de IAM:

    gcloud --project ATTESTOR_PROJECT_ID \
        beta container binauthz attestors add-iam-policy-binding \
        "projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \
        --member="serviceAccount:${DEPLOYER_SERVICE_ACCOUNT}" \
        --role=roles/binaryauthorization.attestorsVerifier
    

Agrega una vinculación de función de IAM para el usuario que configura la autorización binaria

Debes agregar una vinculación de función de IAM para el usuario que agrega un certificador a la política de autorización binaria en el proyecto de implementador, ya que el usuario debe tener el permiso para ver el certificador que se agregará. Si lo deseas, este permiso se puede revocar de forma segura después de que se agrega el certificador.

También debes agregar la vinculación de función de IAM desde la línea de comandos, ya que este paso no es compatible con la consola de Google Cloud.

Para agregar la vinculación de función de IAM, sigue estos pasos:

gcloud --project ATTESTOR_PROJECT_ID \
    beta container binauthz attestors add-iam-policy-binding \
    "projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \
    --member=ADMIN_EMAIL_ACCOUNT \
    --role=roles/binaryauthorization.attestorsViewer

Para quitar la vinculación de función de IAM después de agregar el certificador, usa este comando:

gcloud --project ATTESTOR_PROJECT_ID \
    beta container binauthz attestors remove-iam-policy-binding \
    "projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \
    --member=ADMIN_EMAIL_ACCOUNT \
    --role=roles/binaryauthorization.attestorsViewer

¿Qué sigue?