Configura la autenticación para cargas de trabajo administradas

En esta página, se explica cómo configurar las identidades para cargas de trabajo administradas a través de gcloud CLI.

En esta página, también se describe cómo configurar el aprovisionamiento automático y la administración del ciclo de vida de las identidades para cargas de trabajo administradas para Compute Engine. Configura grupos de autoridades certificadoras (AC) para emitir certificados a través de Certificate Authority Service. El servicio de AC es un servicio de Google Cloud escalable y con alta disponibilidad que simplifica y automatiza la implementación, administración y la seguridad de los servicios de AC. Puedes crear instancias de máquinas virtuales (VMs) aprovisionadas con credenciales X.509 del grupo de CA configurado. Estas credenciales se pueden usar para establecer conexiones mTLS entre cargas de trabajo.

Antes de comenzar

  1. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  2. Solicita acceso a la vista previa de las identidades para cargas de trabajo administradas.

  3. Comprende las identidades para cargas de trabajo administradas.

  4. Obtén información sobre la emisión de certificados a través de Certificate Authority Service.

  5. Aprende a autenticar cargas de trabajo de Compute Engine con identidades para cargas de trabajo administradas.

  6. Enable the IAM and Certificate Authority Service APIs:

    gcloud services enable iam.googleapis.com privateca.googleapis.com

  7. Configura Google Cloud CLI para usar el proyecto que se agregó a la lista de entidades permitidas para la facturación y la cuota.

    gcloud config set billing/quota_project PROJECT_ID
    

    Reemplaza PROJECT_ID por el ID del proyecto que se agregó a la lista de entidades permitidas para la vista previa de identidades para cargas de trabajo administradas.

Roles obligatorios

Para obtener los permisos que te permiten crear identidades para cargas de trabajo administradas y aprovisionar certificados de identidad de cargas de trabajo administrados, pídele a tu administrador que te otorgue los siguientes roles de IAM en el proyecto:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

De manera alternativa, el rol básico de propietario de IAM (roles/owner) también incluye permisos para configurar identidades para cargas de trabajo administradas. No deberías otorgar funciones básicas en un entorno de producción, pero puedes otorgarlas en un entorno de desarrollo o de prueba.

Descripción general

Si quieres usar identidades para cargas de trabajo administradas en tus aplicaciones, debes realizar las siguientes tareas:

  1. Administrador de seguridad:

  2. Administrador de Compute:

    Habilita las identidades para cargas de trabajo administradas destinadas a las cargas de trabajo que se ejecutan en Compute Engine:

Crea identidades para cargas de trabajo administradas

Las identidades para cargas de trabajo administradas permiten que Google Cloud aprovisione de forma automática las credenciales para las identidades del grupo de Workload Identity en tus cargas de trabajo. Las identidades para cargas de trabajo se definen dentro de un grupo de identidades para cargas de trabajo y se organizan en límites administrativos llamados espacios de nombres.

Crea un grupo de identidades para cargas de trabajo

Debes crear un grupo en modo TRUST_DOMAIN para crear identidades de carga de trabajo administradas. Si quieres crear un grupo de identidades para cargas de trabajo para identidades de cargas de trabajo administradas, usa el comando workload-identity-pools create.

gcloud iam workload-identity-pools create POOL_ID \
    --location="global" \
    --mode="TRUST_DOMAIN"

Reemplaza lo siguiente:

  • POOL_ID: el ID único para el grupo. El ID debe tener entre 4 y 32 caracteres, solo puede contener guiones y caracteres alfanuméricos en minúscula, y comenzar y terminar con un carácter alfanumérico. Después de crear un grupo de identidades para cargas de trabajo, no puedes cambiar su ID.

Para verificar que tu grupo de identidades para cargas de trabajo se creó en modo TRUST_DOMAIN, usa el comando workload-identity-pools describe.

gcloud iam workload-identity-pools describe POOL_ID \
    --location="global"

El resultado del comando debe ser similar al siguiente:

mode: TRUST_DOMAIN
name: projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID
state: ACTIVE

Si mode: TRUST_DOMAIN no está presente en el resultado del comando, verifica que se haya agregado a la lista de entidades permitidas para la vista previa de identidades para cargas de trabajo administradas y que hayas configurado correctamente tu CLI de gcloud para usar el proyecto correcto para la facturación y la cuota. Es posible que debas actualizar a una versión más reciente de gcloud CLI.

Crear un espacio de nombres

El comando workload-identity-pools namespaces create te permite crear un espacio de nombres en un grupo de identidades para cargas de trabajo.

gcloud iam workload-identity-pools namespaces create NAMESPACE_ID \
    --workload-identity-pool="POOL_ID" \
    --location="global"

Reemplaza lo siguiente:

  • NAMESPACE_ID: el ID único para el espacio de nombres. El ID debe tener entre 2 y 63 caracteres, contener solo guiones y caracteres alfanuméricos en minúscula, y comenzar y terminar con un carácter alfanumérico. Después de crear un espacio de nombres, no puedes cambiar su ID.
  • POOL_ID: Es el ID del grupo de identidades para cargas de trabajo que creaste antes.

Crea una identidad para una carga de trabajo administrada

El comando workload-identity-pools managed-identities create te permite crear una identidad de carga de trabajo administrada en un grupo de identidades para cargas de trabajo.

gcloud iam workload-identity-pools managed-identities create MANAGED_IDENTITY_ID \
    --namespace="NAMESPACE_ID" \
    --workload-identity-pool="POOL_ID" \
    --location="global"

Reemplaza lo siguiente:

  • MANAGED_IDENTITY_ID: Es el ID único para la identidad administrada El ID debe tener entre 2 y 63 caracteres, contener solo guiones y caracteres alfanuméricos en minúscula, y comenzar y terminar con un carácter alfanumérico. Después de crear una identidad para cargas de trabajo administradas, no puedes cambiar su ID.
  • NAMESPACE_ID: Es el ID del espacio de nombres que creaste antes.
  • POOL_ID: Es el ID del grupo de identidades para cargas de trabajo que creaste antes.

El ID de tu identidad de carga de trabajo administrada es el identificador SPIFFE, que tiene el siguiente formato:

spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

Define la política de certificación de cargas de trabajo

Una política de certificación para cargas de trabajos garantiza que solo las cargas de trabajo de confianza puedan usar la identidad administrada.

Cuando se ejecuta la carga de trabajo y solicita una credencial para el ID de identidad de la carga de trabajo administrada, Google Cloud IAM usa el atributo que tú defines en la política de certificación para verificar la instancia de Compute Engine. La verificación se basa en uno de los siguientes atributos de la carga de trabajo:

  • ID de la instancia de VM
  • Dirección de correo electrónico de la cuenta de servicio adjunta

Después de la verificación, la carga de trabajo recibe una credencial.

Para crear una política de certificación que use tu cuenta de servicio como el selector de un solo atributo para tu identidad administrada, ejecuta el siguiente comando:

gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

Reemplaza lo siguiente:

  • SERVICE_ACCOUNT_NAME: Es el nombre de la cuenta de servicio

Para crear una política de certificación de carga de trabajo que permita que tus cargas de trabajo con la cuenta de servicio adjunta reciban credenciales para la identidad de trabajo administrada, ejecuta el comando:

gcloud iam workload-identity-pools managed-identities workload-sources create \
    project-WORKLOAD_PROJECT_NUMBER \
    --single-attribute-selectors="compute.googleapis.com/Instance.attached_service_account.email=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
    --managed-identity=MANAGED_IDENTITY_ID \
    --namespace=NAMESPACE_ID \
    --workload-identity-pool=POOL_ID \
    --location="global"

Reemplaza lo siguiente:

  • SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio
  • WORKLOAD_PROJECT_NUMBER: el número del proyecto que contiene tu carga de trabajo. La política permite que las cargas de trabajo dentro de este proyecto usen la identidad para cargas de trabajo administradas.
  • PROJECT_ID: Es el ID del proyecto que contiene la cuenta de servicio.
  • MANAGED_IDENTITY_ID: Es el ID único para la identidad administrada
  • NAMESPACE_ID: el ID del espacio de nombres que creaste antes.
  • POOL_ID: Es el ID del grupo de identidades para cargas de trabajo que creaste antes.

Para un grupo de Workload Identity determinado, puedes definir un máximo de 50 selectores de atributos únicos para tu proyecto de carga de trabajo.

Para obtener información sobre cómo actualizar o borrar una política de certificación, ejecuta el siguiente comando:

gcloud iam workload-identity-pools managed-identities workload-sources --help

Configura Certificate Authority Service para emitir certificados destinados a identidades para cargas de trabajo administradas

Crea la configuración recomendada para las autoridades certificadoras (AC) raíz y subordinadas a través de grupos de Certificate Authority Service. El grupo de AC subordinado emite los certificados de identidad de carga de trabajo X.509 a las VMs.

Después de configurar los grupos de AC, autoriza a las identidades para cargas de trabajo administradas para que soliciten y reciban los certificados firmados de los grupos de AC.

Configura el grupo de AC raíz

Usa la interfaz de Google Cloud CLI para Certificate Authority Service para configurar un grupo de AC raíz.

gcloud

Crea el grupo de AC raíz.

  1. Crea el grupo de AC raíz en el nivel Enterprise, que está destinado a la emisión de certificados de larga duración y bajo volumen a través del comando gcloud privateca pools create. .

    gcloud privateca pools create ROOT_CA_POOL_ID \
       --location=REGION \
       --tier=enterprise
    

    Reemplaza lo siguiente:

    • ROOT_CA_POOL_ID: Es un ID único para el grupo de AC raíz. El ID puede tener hasta 64 caracteres y debe contener solo caracteres alfanuméricos en minúscula y mayúscula, guiones bajos o guiones. El ID del grupo debe ser único dentro de la región.
    • REGION: Es la región en la que se encuentra el grupo de AC raíz.

    Para obtener más información, consulta Crea grupos de AC.

  2. Crea una AC raíz en el grupo de AC raíz con el comando gcloud privateca roots create. Es posible que se te solicite habilitar la AC raíz si esta es la única en el grupo de AC raíz.

    Por ejemplo, puedes usar un comando similar al siguiente para crear una AC raíz.

    gcloud privateca roots create ROOT_CA_ID \
       --pool=ROOT_CA_POOL_ID \
       --subject "CN=ROOT_CA_CN, O=ROOT_CA_ORGANIZATION" \
       --key-algorithm="ec-p256-sha256" \
       --max-chain-length=1 \
       --location=REGION
    

    Reemplaza lo siguiente:

    • ROOT_CA_ID: Es un nombre único para la AC raíz. El nombre de la AC puede tener hasta 64 caracteres y debe contener solo caracteres alfanuméricos en minúscula y mayúscula, guiones bajos o guiones. El nombre de la AC debe ser único dentro de la región.
    • ROOT_CA_POOL_ID: Es el ID del grupo de AC raíz.
    • ROOT_CA_CN: Es el nombre de la AC raíz
    • ROOT_CA_ORGANIZATION: Es la organización de la AC raíz.
    • REGION: Es la región en la que se encuentra el grupo de AC raíz.

    Para obtener más información, consulta Crea una autoridad de certificación raíz. Para obtener más información sobre los campos subject de la AC, consulta Asunto.

  3. Opcional: Repite los pasos anteriores para crear una AC raíz adicional en el grupo de AC raíz. Esto puede ser útil para la rotación de AC raíz.

Configura las AC subordinadas

Usa la interfaz de Google Cloud CLI para Certificate Authority Service para crear un grupo de AC subordinado y una AC subordinada.

Si tienes varias situaciones de emisión de certificados, puedes crear una AC subordinada para cada una. Además, agregar varias AC subordinadas en un grupo de AC te ayuda a lograr un mejor balanceo de cargas de solicitudes de certificado.

gcloud

Usa el comando gcloud privateca pools create para crear un grupo de AC subordinado.

  1. Crea el grupo de AC subordinado en el nivel DevOps, que está destinado a la emisión de certificados de corta duración y gran volumen .

    gcloud privateca pools create SUBORDINATE_CA_POOL_ID \
       --location=REGION \
       --tier=devops
    

    Reemplaza lo siguiente:

    • SUBORDINATE_CA_POOL_ID: Es un ID único para el grupo de AC subordinado. El ID puede tener hasta 64 caracteres y debe contener solo caracteres alfanuméricos en minúscula y mayúscula, guiones bajos o guiones. El ID del grupo debe ser único dentro de la región.
    • REGION: Es la región en la que se creará el grupo de AC subordinado.

    Para obtener más información, consulta Crea grupos de AC.

  2. Crea una CA subordinada en el grupo de AC subordinado con el comando gcloud privateca subordinates create. No cambies el modo de emisión basado en la configuración predeterminado.

    Por ejemplo, puedes usar un comando similar al siguiente para crear una AC subordinada.

    gcloud privateca subordinates create SUBORDINATE_CA_ID \
       --pool=SUBORDINATE_CA_POOL_ID \
       --location=REGION \
       --issuer-pool=ROOT_CA_POOL_ID \
       --issuer-location=REGION \
       --subject="CN=SUBORDINATE_CA_CN, O=SUBORDINATE_CA_ORGANIZATION" \
       --key-algorithm="ec-p256-sha256" \
       --use-preset-profile=subordinate_mtls_pathlen_0
    

    Reemplaza lo siguiente:

    • SUBORDINATE_CA_ID: Es un nombre único para la AC subordinada. El nombre puede tener hasta 64 caracteres y debe contener solo caracteres alfanuméricos en minúscula y mayúscula, guiones bajos o guiones. El nombre del grupo debe ser único dentro de la región.
    • SUBORDINATE_CA_POOL_ID: Es el nombre del grupo de AC subordinado.
    • REGION: Es la región en la que se encuentra el grupo de AC subordinado.
    • ROOT_CA_POOL_ID: Es el ID del grupo de AC raíz.
    • REGION: Es la región del grupo de AC raíz.
    • SUBORDINATE_CA_CN: Es el nombre común de la AC subordinada.
    • SUBORDINATE_CA_ORGANIZATION: Es el nombre de la organización emisora de AC subordinada.

    Para obtener más información, consulta Crea grupos de AC. Para obtener más información sobre los campos subject de la AC, consulta Asunto.

Autoriza identidades para cargas de trabajo administradas que permitan solicitar certificados del grupo de AC

Las identidades para cargas de trabajo administradas requieren permisos para solicitar certificados del servicio de AC y obtener los certificados públicos.

gcloud

  1. Otorga el rol de IAM Solicitante de certificados de cargas de trabajo del servicio de AC (roles/privateca.workloadCertificateRequester) en cada grupo de AC subordinado a la identidad de carga de trabajo administrada. El siguiente comando gcloud privateca pools add-iam-policy-binding autoriza a la identidad de la carga de trabajo administrada para solicitar certificados de las cadenas de certificados del servicio de AC.

    gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \
     --location=REGION \
     --role=roles/privateca.workloadCertificateRequester \
     --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*"
    

    Reemplaza lo siguiente:

    • SUBORDINATE_CA_POOL_ID: Es el ID del grupo de AC subordinado.
    • REGION: la región del grupo de AC subordinado.
    • PROJECT_NUMBER: el número del proyecto que contiene el grupo de Workload Identity.
    • POOL_ID: Es el ID del grupo de identidades para cargas de trabajo
  2. Otorga el rol de IAM Lector de grupos de servicios de CA (roles/privateca.poolReader) en los grupos de AC subordinados a la identidad para cargas de trabajo administradas. Esto autoriza a la identidad para cargas de trabajo administradas a obtener los certificados X.509 firmados de las cadenas de certificados de la CA.

    gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \
     --location=REGION \
     --role=roles/privateca.poolReader \
     --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*"
    

    Reemplaza lo siguiente:

    • SUBORDINATE_CA_POOL_ID: Es el ID del grupo de AC subordinado.
    • REGION: la región del grupo de AC subordinado.
    • PROJECT_NUMBER: el número del proyecto que contiene el grupo de Workload Identity.
    • POOL_ID: Es el ID del grupo de identidades para cargas de trabajo

Define la configuración de confianza y emisión de certificados

Usa esta información para crear un archivo JSON que se suba como datos de socios cuando crees una VM.

Define la configuración de emisión de certificados

Se requiere la siguiente configuración de emisión de certificado para habilitar identidades de cargas de trabajo administradas para Compute Engine.

{
  "primary_certificate_authority_config": {
    "certificate_authority_config": {
      "ca_pool": "projects/SUBORDINATE_CA_POOL_PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
    }
  },
  "key_algorithm": "ALGORITHM",
  "workload_certificate_lifetime_seconds": DURATION,
  "rotation_window_percentage": ROTATION_WINDOW_PERCENTAGE
}

Reemplaza lo siguiente:

  • SUBORDINATE_CA_POOL_PROJECT_ID: es el ID del proyecto que contiene el grupo de AC subordinado.
  • REGION: es la región en la que se encuentra el grupo de AC subordinado.
  • SUBORDINATE_CA_POOL_ID: Es el nombre del grupo de AC subordinado
  • ALGORITHM: Es el algoritmo de encriptación que se usa para generar la clave privada. Los valores válidos son rsa-2048 (predeterminado), rsa-3072, rsa-4096, ecdsa-p256 y ecdsa-p384.
  • DURATION: Es la duración del certificado de hoja, en segundos (opcional). El valor debe ser de entre 3,600 and 315,360,000. Si no se especifica, se usa el valor predeterminado de 86,400. La validez real del certificado emitido también depende de la AC que lo emite, ya que puede restringir su vida útil.
  • ROTATION_WINDOW_PERCENTAGE: El porcentaje de vida útil del certificado en el que se activa una renovación (opcional). Debes seleccionar un valor entre 1 y 60. El valor predeterminado es del 66%. Debes configurar el porcentaje del período de rotación en relación con la vida útil del certificado para que la renovación del certificado se realice al menos 7 días después de que se haya emitido y al menos 7 días antes de que venza.

Define la configuración de confianza

La configuración de confianza contiene el conjunto de anclas de confianza para validar certificados de intercambio de tráfico. Estos son algunos de ellos:

  • URI de recursos del grupo de AC de confianza: Es un conjunto de URI de recursos del grupo de AC de confianza para emitir certificados en el mismo dominio de confianza que las VMs a las que pertenecen.
  • Certificados de AC con formato PEM: Un conjunto de certificados de AC con formato PEM que se confía en la emisión de certificados en el mismo dominio de confianza al que pertenecen las VMs.
{
  "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
    "trust_anchors": [
      {
        "ca_pool": "projects/SUBORDINATE_CA_POOL_PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
      },
      {
        "pem_certificate": "PEM_ENCODED_CERTIFICATE"
      }
    ]
  }
}

Reemplaza lo siguiente:

  • POOL_ID: El ID del grupo de Workload Identity
  • PROJECT_NUMBER: Es el número del proyecto que contiene el grupo de identidades para cargas de trabajo.
  • SUBORDINATE_CA_POOL_PROJECT_ID: es el ID del proyecto que contiene el grupo de AC subordinado.
  • REGION: Es la región en la que se encuentra el grupo de AC subordinado
  • SUBORDINATE_CA_POOL_ID: el ID del grupo de AC subordinado
  • PEM_ENCODED_CERTIFICATE: Opcional: es un conjunto de certificados de la AC con formato PEM adicionales y de confianza para emitir certificados en el mismo dominio de confianza al que pertenecen las VMs (opcional). Estos certificados se agregarán a la lista de entidades de confianza del grupo de AC subordinado. El siguiente comando se puede usar para codificar un archivo trust-anchor.pem con formato PEM en una cadena de una línea:

    cat trust-anchor.pem | sed 's/^[ ]*//g' | sed -z '$ s/\n$//' | tr '\n' $ | sed 's/\$/\\n/g'
    

Crea un archivo de configuración para subir los metadatos del socio para una VM

Crea un archivo JSON que contenga la siguiente información:

Guarda este archivo como CONFIGS.json. Este archivo se usa cuando se crean VMs para ejecutar aplicaciones que usan identidades para cargas de trabajo administradas.

Tu archivo CONFIGS.json debería ser similar al siguiente:

  {
  "wc.compute.googleapis.com": {
     "entries": {
        "certificate-issuance-config": {
           "primary_certificate_authority_config": {
              "certificate_authority_config": {
                 "ca_pool": "projects/PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
              }
           },
           "key_algorithm": "ALGORITHM"
        },
        "trust-config": {
           "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
               "trust_anchors": [{
                  "ca_pool": "projects/PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
                }]
           }
     }
  }
  },
  "iam.googleapis.com": {
     "entries": {
        "workload-identity": "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID"
     }
  }
  }
  

¿Qué sigue?

Pruébalo tú mismo

Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.

Comenzar gratis