En esta página se explica cómo configurar el plano de control de tu clúster de Google Kubernetes Engine (GKE) con autoridades de certificación (CAs) y claves que tú gestionas. Estas directrices están dirigidas a los administradores de seguridad que tengan requisitos de cumplimiento o de políticas específicos de la organización para controlar la emisión y la firma de credenciales.
En esta página se describe una parte de un conjunto de funciones opcionales del plano de control de GKE que te permiten realizar tareas como verificar el estado de seguridad del plano de control o configurar el cifrado y la firma de credenciales en el plano de control mediante claves que tú gestionas. Para obtener más información, consulta el artículo Acerca de la autoridad del plano de control de GKE.
De forma predeterminada, Google Cloud aplica varias medidas de seguridad al plano de control gestionado. En esta página se describen las funciones opcionales que le ofrecen más visibilidad o control sobre el plano de control de GKE.
Ya deberías conocer los siguientes conceptos:
- Solicitudes de firma de certificados (CSRs)
- Autoridades de certificación (CAs)
- etcd
- Arquitectura de clústeres de GKE
Componentes de credenciales del plano de control
Los clústeres de GKE usan CAs y claves específicas para emitir credenciales en el clúster, como certificados X.509 o tokens de ServiceAccount. Puedes crear claves en Cloud Key Management Service (Cloud KMS) y autoridades de certificación en Servicio de Autoridades de Certificación (CA Service) y configurar tus clústeres para que usen estos recursos en lugar de las autoridades de certificación y las claves gestionadas por Google Cloud.
Para obtener más información sobre los componentes específicos que creas, consulta Autoridades de certificación y claves autogestionadas.
Uso con otras funciones de autoridad del plano de control de GKE
La autoridad del plano de control de GKE ofrece las siguientes funciones relacionadas con las claves autogestionadas:
- Gestionar tus propias autoridades de certificación (CAs) y claves (esta página)
- Cifrar componentes del plano de control
Preparar el entorno
En esta sección, identificará los proyectos que usará en este tutorial y creará un conjunto de claves en Cloud KMS para almacenar sus claves. Google Cloud
Identificar proyectos
Te recomendamos que uses proyectos de Google Cloud independientes de la siguiente manera:
- Proyecto clave: contiene todas las claves y las autoridades de certificación.
- Proyecto de clúster: contiene tus clústeres de GKE.
También puedes usar el mismo proyecto para tus claves, CAs y clústeres de GKE, pero te recomendamos que uses proyectos independientes para que los equipos que gestionan las operaciones criptográficas de tu organización estén separados de los equipos que gestionan las operaciones de los clústeres.
Crear un conjunto de claves
Crea un conjunto de claves en el proyecto de claves para almacenar todas las claves de un clúster específico. Debes crear el conjunto de claves en la misma ubicación que tu clúster de GKE.
Ejecuta el siguiente comando:
gcloud kms keyrings create KEY_RING_NAME \
--location=LOCATION \
--project=KEY_PROJECT_ID
Haz los cambios siguientes:
KEY_RING_NAME
: el nombre del conjunto de claves.KEY_PROJECT_ID
: el ID de proyecto de tu proyecto de clave.LOCATION
: la Google Cloud región en la que quieres crear el conjunto de claves. Debe ser la misma región en la que se encuentre tu clúster de GKE.
Crear claves
Para cada una de las autoridades de credenciales, como las claves de cuentas de servicio y las autoridades de certificación, crea una clave con Cloud KMS. En esta sección se explica cómo crear las claves que usa GKE para firmar y verificar las credenciales del clúster.
Puedes especificar tus propias propiedades para estas claves en función de las necesidades de tu organización. Para obtener más información, consulta la página Crear una clave y la referencia de la API projects.locations.keyRings.cryptoKeys
.
Ten en cuenta lo siguiente al crear estos recursos en Cloud KMS:
- Si tienes un conjunto de claves en tu proyecto de claves, puedes usarlo para almacenar todas las claves que crees para usar con tu clúster.
- El conjunto de claves debe estar en la misma Google Cloud ubicación que el clúster para minimizar la latencia.
- Las claves deben especificar
asymmetric-signing
como finalidad de la clave. - Usa los siguientes algoritmos en función del tipo de clave:
- Claves de firma de cuentas de servicio: un algoritmo PKCS1 de firma RSA seguro, como
rsa-sign-pkcs1-4096-sha256
orsa-sign-pkcs1-3072-sha256
. - Claves de autoridad de certificación: un algoritmo seguro, como
ec-sign-p256-sha256
.
- Claves de firma de cuentas de servicio: un algoritmo PKCS1 de firma RSA seguro, como
- Se admiten las claves de hardware de Cloud HSM, pero el
software
nivel de protección es suficiente para la mayoría de los casos prácticos. Para obtener información sobre las llaves de hardware, consulta Cloud HSM. - No modifiques la duración predeterminada para la eliminación de claves.
- GKE no te impide eliminar claves de Cloud KMS, incluidas las claves de servicio de CA, que esté usando el clúster. Antes de eliminar claves o ACs, asegúrate de que los recursos no se estén usando.
Para crear las claves, ejecuta los siguientes comandos:
Crea la clave de firma de la cuenta de servicio de Kubernetes, que también especificarás como clave de verificación de la cuenta de servicio durante la creación del clúster:
gcloud kms keys create sa-signing-key \ --keyring=KEY_RING_NAME \ --location=LOCATION \ --purpose="asymmetric-signing" \ --protection-level=hsm \ --default-algorithm=rsa-sign-pkcs1-4096-sha256 \ --project=KEY_PROJECT_ID
Sustituye
KEY_PROJECT_ID
por el ID del proyecto de tu clave dedicada.Crea la clave de la CA raíz del clúster:
gcloud kms keys create cluster-ca-key \ --keyring=KEY_RING_NAME \ --location=LOCATION \ --purpose="asymmetric-signing" \ --protection-level=hsm \ --default-algorithm=ec-sign-p256-sha256 \ --project=KEY_PROJECT_ID
Crea la clave de CA raíz de par de etcd:
gcloud kms keys create etcd-peer-ca-key \ --keyring=KEY_RING_NAME \ --location=LOCATION \ --purpose="asymmetric-signing" \ --protection-level=hsm \ --default-algorithm=ec-sign-p256-sha256 \ --project=KEY_PROJECT_ID
Crea la clave de CA raíz de la API de etcd:
gcloud kms keys create etcd-api-ca-key \ --keyring=KEY_RING_NAME \ --location=LOCATION \ --purpose="asymmetric-signing" \ --protection-level=hsm \ --default-algorithm=ec-sign-p256-sha256 \ --project=KEY_PROJECT_ID
Crea la clave de la CA raíz de agregación:
gcloud kms keys create aggregation-ca-key \ --keyring=KEY_RING_NAME \ --location=LOCATION \ --purpose="asymmetric-signing" \ --protection-level=hsm \ --default-algorithm=ec-sign-p256-sha256 \ --project=KEY_PROJECT_ID
Crear las autoridades de certificación
Después de crear las claves de cada una de las funciones del plano de control, usa cada clave para crear los grupos de CAs y las CAs raíz correspondientes mediante el servicio de CAs:
Crea el grupo de autoridades de certificación del clúster:
gcloud privateca pools create cluster-ca-pool \ --location=LOCATION \ --tier=enterprise \ --project=KEY_PROJECT_ID \ --no-publish-crl --no-publish-ca-cert
Las marcas
--no-publish-crl
y--no-publish-ca-cert
son opcionales. Si se omiten estas marcas, los certificados se publicarán en un segmento de Cloud Storage. Para obtener más información, consulta Habilitar la publicación de certificados de CA y CRLs para las CAs de un grupo de CAs.Crea la CA raíz del clúster:
gcloud privateca roots create cluster-root-ca \ --pool=cluster-ca-pool \ --location=LOCATION \ --kms-key-version=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/cluster-ca-key/cryptoKeyVersions/1 \ --subject="CN=cluster-ca, O=ORGANIZATION" \ --project=KEY_PROJECT_ID \ --auto-enable
Sustituye
ORGANIZATION
por el nombre de tu organización.Crea el grupo de autoridades de certificación de los peers de etcd:
gcloud privateca pools create etcd-peer-ca-pool \ --location=LOCATION \ --tier=enterprise \ --project=KEY_PROJECT_ID \ --no-publish-crl --no-publish-ca-cert
Crea la AC raíz de par de etcd:
gcloud privateca roots create etcd-peer-root-ca \ --pool=etcd-peer-ca-pool \ --location=LOCATION \ --kms-key-version=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/etcd-peer-ca-key/cryptoKeyVersions/1 \ --subject="CN=etcd-peer-ca, O=ORGANIZATION" \ --project=KEY_PROJECT_ID \ --auto-enable
Crea el grupo de autoridades de certificación de la API etcd:
gcloud privateca pools create etcd-api-ca-pool \ --location=LOCATION \ --tier=enterprise \ --project=KEY_PROJECT_ID \ --no-publish-crl --no-publish-ca-cert
Crea la AC raíz de la API de etcd:
gcloud privateca roots create etcd-api-root-ca \ --pool=etcd-api-ca-pool \ --location=LOCATION \ --kms-key-version=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/etcd-api-ca-key/cryptoKeyVersions/1 \ --subject="CN=etcd-api-ca, O=ORGANIZATION" \ --project=KEY_PROJECT_ID \ --auto-enable
Crea el grupo de AC de agregación:
gcloud privateca pools create aggregation-ca-pool \ --location=LOCATION \ --tier=enterprise \ --project=KEY_PROJECT_ID \ --no-publish-crl --no-publish-ca-cert
Crea la CA raíz de agregación:
gcloud privateca roots create aggregation-root-ca \ --pool=aggregation-ca-pool \ --location=LOCATION \ --kms-key-version=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/aggregation-ca-key/cryptoKeyVersions/1 \ --subject="CN=aggregation-ca, O=ORGANIZATION" \ --project=KEY_PROJECT_ID \ --auto-enable
Conceder roles de IAM al agente de servicio de GKE
El agente de servicio de GKE necesita acceso a los recursos que has creado en Cloud KMS y en el servicio de CA. El agente de servicio usa estos recursos para firmar, verificar y emitir credenciales en el clúster. Puede usar los siguientes roles de gestión de identidades y accesos predefinidos:
- Usuario de clave criptográfica de KMS de Kubernetes Engine
(
roles/container.cloudKmsKeyUser
) - Administrador de certificados del Servicio de Autoridades de Certificación
(
roles/privateca.certificateManager
)
Para conceder estos roles al agente de servicio de GKE, haz lo siguiente:
Busca el número de proyecto de tu proyecto de clúster:
gcloud projects describe CLUSTER_PROJECT_ID \ --format='value(projectNumber)'
Sustituye
CLUSTER_PROJECT_ID
por el ID del proyecto de tu clúster.Asigna el rol de usuario de clave criptográfica de KMS de Kubernetes Engine a la cuenta de servicio de la clave de firma que has creado en Crear claves:
gcloud kms keys add-iam-policy-binding sa-signing-key \ --location=LOCATION \ --keyring=KEY_RING_NAME \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/container.cloudKmsKeyUser \ --project=KEY_PROJECT_ID
Sustituye
CLUSTER_PROJECT_NUMBER
por el número del proyecto del clúster.Asigna el rol Administrador de certificados del Servicio de Autoridades de Certificación a los grupos de autoridades de certificación que hayas creado en Crear las autoridades de certificación:
gcloud privateca pools add-iam-policy-binding cluster-ca-pool \ --location=LOCATION \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/privateca.certificateManager \ --project=KEY_PROJECT_ID gcloud privateca pools add-iam-policy-binding etcd-peer-ca-pool \ --location=LOCATION \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/privateca.certificateManager \ --project=KEY_PROJECT_ID gcloud privateca pools add-iam-policy-binding etcd-api-ca-pool \ --location=LOCATION \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/privateca.certificateManager \ --project=KEY_PROJECT_ID gcloud privateca pools add-iam-policy-binding aggregation-ca-pool \ --location=LOCATION \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/privateca.certificateManager \ --project=KEY_PROJECT_ID
Otorgar roles adicionales cuando no se usa gcloud CLI
En esta sección se describen los pasos de configuración adicionales que debe seguir si tiene previsto configurar sus CAs y claves mediante un cliente como Terraform o la consola de Google Cloud en lugar de usar la CLI de gcloud. Si usas la CLI de gcloud, salta esta sección y ve a la sección Configurar CAs y claves en un clúster nuevo.
Cuando usas la CLI de gcloud para configurar tus ACs y claves, tal como se describe en esta página, la CLI de gcloud crea y configura automáticamente un agente de servicio para el servicio de ACs y le asigna roles de gestión de identidades y accesos. Sin embargo, si usas un cliente como Terraform o la consola Google Cloud para configurar tu entorno Google Cloud, debes seguir estos pasos de configuración manualmente para tu proyecto de clave:
Activa la creación del agente de servicio del servicio de CA.
gcloud beta services identity create --service=privateca.googleapis.com \ --project=KEY_PROJECT_ID
Busca el número de proyecto de tu proyecto de clave:
gcloud projects describe KEY_PROJECT_ID \ --format='value(projectNumber)'
Asigna el rol Lector (
roles/viewer
) y el rol Firmante/Verificador de CryptoKey de Cloud KMS (roles/cloudkms.signerVerifier
) a todas las claves de CA raíz que hayas creado en la sección Crear claves:for key in cluster-ca-key etcd-peer-ca-key etcd-api-ca-key aggregation-ca-key do gcloud kms keys add-iam-policy-binding $key \ --keyring=KEY_RING_NAME \ --location=LOCATION \ --role=roles/viewer \ --member="serviceAccount:service-KEY_PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com" \ --project=KEY_PROJECT_ID gcloud kms keys add-iam-policy-binding $key \ --keyring=KEY_RING_NAME \ --location=LOCATION \ --role=roles/cloudkms.signerVerifier \ --member="serviceAccount:service-KEY_PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com" \ --project=KEY_PROJECT_ID done
Sustituye
KEY_PROJECT_NUMBER
por el número del proyecto de la clave de la salida del paso anterior.Este comando es un bucle
for
que itera a través de las claves de la CA raíz y otorga a cada rol de esa clave al agente de servicio de CA Service. Si has usado nombres diferentes para las claves de la CA raíz, ejecuta estos comandos manualmente para cada clave.
Configurar CAs y claves en un clúster nuevo
Después de crear las claves, los grupos de ACs y las ACs raíz, y de asignar roles de gestión de identidades y accesos al agente de servicio de GKE, crea un clúster que use estos recursos.
Las marcas que especifiques en el comando de creación de clústeres requieren las siguientes rutas de recursos como valores:
- Ruta a una versión de clave de Cloud KMS para la clave de firma de la cuenta de servicio que has creado en Crear claves. Puedes especificar esta ruta para las marcas
service-account-signing-keys
yservice-account-verification-keys
. - Ruta a cada uno de los grupos de autoridades de certificación que ha creado en Crear las autoridades de certificación.
Para configurar un nuevo clúster de forma que use tus claves y CAs, sigue estos pasos:
Busca la ruta a la versión más reciente de la clave de firma de la cuenta de servicio habilitada:
gcloud kms keys versions list \ --key=sa-signing-key \ --keyring=KEY_RING_NAME \ --location=LOCATION \ --project=KEY_PROJECT_ID \ --filter="STATE=ENABLED" --sort-by=~ --format="value(name)" | sed 1q
Sustituye
KEY_PROJECT_ID
por el ID del proyecto de la clave.El resultado debería ser similar al siguiente:
projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1
Busca las rutas de cada uno de los grupos de autoridades de certificación que has creado:
gcloud privateca pools list --format="get(name)" \ --project=KEY_PROJECT_ID
El resultado debería ser similar al siguiente:
projects/KEY_PROJECT_ID/locations/LOCATION/caPools/cluster-ca-pool projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-peer-ca-pool projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-api-ca-pool projects/KEY_PROJECT_ID/locations/LOCATION/caPools/aggregation-ca-pool
Asegúrate de que el resultado contenga todos los grupos de AC que hayas creado para GKE.
Crear un clúster
En esta sección, creará un clúster con diferentes opciones especificadas en función de las funciones de autoridad del plano de control de GKE que quiera configurar. Solo puedes configurar estas funciones en un clúster durante la creación del clúster. Los siguientes comandos crean clústeres en modo estándar. Para crear clústeres en modo Autopilot, usa las mismas marcas con el comando gcloud container clusters create-auto
.
Para configurar solo las autoridades de certificación y las claves que has creado en este tutorial, ejecuta el siguiente comando:
gcloud container clusters create example-cluster \ --location=LOCATION \ --project=CLUSTER_PROJECT_ID \ --cluster-version=VERSION \ --service-account-signing-keys=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1 \ --service-account-verification-keys=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1 \ --cluster-ca=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/cluster-ca-pool \ --etcd-peer-ca=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-peer-ca-pool \ --etcd-api-ca=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-api-ca-pool \ --aggregation-ca=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/aggregation-ca-pool
Haz los cambios siguientes:
CLUSTER_PROJECT_ID
: el ID de proyecto del clúster proyecto.VERSION
: la versión de GKE del clúster. Debe ser 1.31.1-gke.1846000 o una versión posterior.
Para configurar las CAs y las claves, así como el cifrado del disco de arranque del plano de control y el cifrado de etcd, haz lo siguiente:
- Sigue todos los pasos de configuración de claves que se indican en Cifrar los discos de arranque de etcd y del plano de control.
- Para encontrar las rutas de cada una de las claves, sigue las instrucciones que se indican en Usar claves de cifrado en un clúster.
Para crear un clúster, sigue estos pasos:
gcloud container clusters create example-cluster \ --location=LOCATION \ --project=CLUSTER_PROJECT_ID \ --cluster-version=VERSION \ --service-account-signing-keys=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1 \ --service-account-verification-keys=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1 \ --cluster-ca=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/cluster-ca-pool \ --etcd-peer-ca=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-peer-ca-pool \ --etcd-api-ca=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-api-ca-pool \ --aggregation-ca=projects/KEY_PROJECT_ID/locations/LOCATION/caPools/aggregation-ca-pool \ --control-plane-disk-encryption-key=PATH_TO_DISK_KEY \ --gkeops-etcd-backup-encryption-key=PATH_TO_ETCD_BACKUP_KEY
Haz los cambios siguientes:
CLUSTER_PROJECT_ID
: el ID del proyecto del clúster.VERSION
: la versión de GKE del clúster. Debe ser 1.31.1-gke.1846000 o una versión posterior.PATH_TO_DISK_KEY
: la ruta a la clave de cifrado de tu disco.PATH_TO_ETCD_BACKUP_KEY
: la ruta a tu clave de cifrado de copia de seguridad interna de etcd.
También puedes usar estas marcas al crear un clúster en modo estándar.
Verifica que el clúster usa las claves y las autoridades de certificación que has especificado
En esta sección se explica cómo verificar las claves y las autoridades de certificación que se usaron durante la creación del clúster. Puedes realizar esta verificación con Cloud Logging o con la CLI de Google Cloud.
Usar Logging para verificar claves y CAs
Para verificar las claves y las autoridades certificadoras mediante Logging, haz lo siguiente:
En la Google Cloud consola, ve a la página Explorador de registros:
Especifica la siguiente consulta:
resource.type="gke_cluster" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.location="CLUSTER_LOCATION" protoPayload.serviceName="container.googleapis.com" protoPayload.methodName=~"google.container.v(1|1alpha1|1beta1).ClusterManager.CreateCluster" protoPayload.request.cluster.userManagedKeysConfig:*
protoPayload.request.cluster.userManagedKeysConfig:*
filtra los resultados de los registros de creación de clústeres que incluyen claves y CAs que gestionas.Haz clic en Realizar una consulta.
En los resultados, despliega el registro de creación del clúster. Verifica que las rutas a las claves y a las autoridades de certificación sean las mismas que las que has creado para ese clúster, como en el siguiente ejemplo:
# lines omitted for clarity
userManagedKeysConfig: {
aggregationCa: "projects/KEY_PROJECT_ID/locations/LOCATION/caPools/aggregation-ca-pool"
clusterCa: "projects/KEY_PROJECT_ID/locations/LOCATION/caPools/cluster-ca-pool"
etcdApiCa: "projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-api-ca-pool"
etcdPeerCa: "projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-peer-ca-pool"
serviceAccountSigningKeys: [
0: "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1"
]
serviceAccountVerificationKeys: [
0: "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1"
]
}
Usar la CLI de gcloud para verificar claves y CAs
Para verificar que el clúster usa las CAs y las claves que has creado, ejecuta el siguiente comando:
gcloud container clusters describe example-cluster \
--location=LOCATION \
--project=CLUSTER_PROJECT_ID
El resultado debe incluir el campo userManagedKeysConfig
, como en el siguiente ejemplo:
# lines omitted for clarity
userManagedKeysConfig:
sa-signing-key: projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1
sa-verification-key: projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/sa-signing-key/cryptoKeyVersions/1
cluster-ca: projects/KEY_PROJECT_ID/locations/LOCATION/caPools/cluster-ca-pool
etcd-peer-ca: projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-peer-ca-pool
etcd-api-ca: projects/KEY_PROJECT_ID/locations/LOCATION/caPools/etcd-api-ca-pool
aggregation-ca: projects/KEY_PROJECT_ID/locations/LOCATION/caPools/aggregation-ca-pool