En este documento, se describe cómo encontrar y mitigar errores comunes de configuración de CMEK. También se describe cómo identificar los errores que se producen cuando se configuran los parámetros de configuración predeterminados de los recursos para Cloud Logging. Estos parámetros de configuración se pueden establecer para organizaciones y carpetas.
Soluciona problemas relacionados con la configuración de la ubicación de los buckets de registros creados por el sistema
En el caso de una organización o carpeta, intentas actualizar la configuración predeterminada de recursos para Cloud Logging. Tu actualización es para establecer o modificar la configuración de ubicación. Sin embargo, el comando falla con un error similar al siguiente:
ERROR: (gcloud.logging.settings.update) INVALID_ARGUMENT: The KMS key location must match the storage location. Received KMS key location: us-central1, storage location: us-west1
- '@type': type.googleapis.com/google.rpc.DebugInfo
detail: '[ORIGINAL ERROR] generic::invalid_argument: The KMS key location must match
the storage location. Received KMS key location: us-central1, storage location:
us-west1 [google.rpc.error_details_ext] { message: "The KMS key location must
match the storage location. Received KMS key location: us-central1, storage location:
us-west1" }'
Para resolver este error, establece la ubicación en la configuración predeterminada del recurso como la ubicación de la clave de Cloud Key Management Service.
Soluciona problemas relacionados con los Controles del servicio de VPC y el uso compartido restringido por dominio
Configuraste los parámetros de configuración predeterminados de los recursos para que Cloud Logging tenga un parámetro de configuración de CMEK, o bien creaste un bucket de registros con la CMEK habilitada. Luego, configuras los Controles del servicio de VPC. Después de configurar los Controles del servicio de VPC, restringe el acceso a Cloud Key Management Service en los Controles del servicio de VPC o habilita el uso compartido restringido por dominio.
Debe ocurrir al menos una de las siguientes situaciones:
Recibiste una notificación de Cloud Logging sobre problemas de acceso a CMEK.
Observas que CMEK no está habilitada para los buckets de registros
_Defaulty_Requiredcuando creas proyectos Google Cloud nuevos en tu organización o en una carpeta.Recibes errores cuando lees desde buckets de registros con la CMEK habilitada. Los errores que ves son similares al siguiente:
ERROR: (gcloud.logging.read) FAILED_PRECONDITION: service account `cmek-PROJECT_ID@gcp-sa-logging.iam.gserviceaccount.com` must have both encrypt and decrypt access to the CMEK KMS key `projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY`Recibes errores cuando creas o actualizas buckets de registros con la CMEK habilitada. Los errores que ves son similares al siguiente:
ERROR: (gcloud.logging.buckets.create) service account `cmek-PROJECT_ID@gcp-sa-logging.iam.gserviceaccount.com` must have both encrypt and decrypt access to the CMEK KMS key `projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY` - '@type': type.googleapis.com/google.rpc.DebugInfo detail: '[ORIGINAL ERROR] generic::permission_denied: Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: <var>ERRORID</var>;'
Para determinar si estos problemas se deben a la configuración de los Controles del servicio de VPC, haz lo siguiente:
Identifica la configuración de Cloud Logging para el recurso que contiene la configuración de CMEK. Un recurso puede ser un proyecto, una carpeta o una organización. Si creaste buckets de registros con la CMEK habilitada, selecciona el recurso PROJECT.
PROYECTO
gcloud logging settings describe --project=PROJECT_ID
Antes de ejecutar el comando, reemplaza PROJECT_ID por el ID del proyecto que contiene el bucket de registros.
FOLDER
gcloud logging settings describe --folder=FOLDER_ID
Antes de ejecutar el comando, reemplaza FOLDER_ID por el ID de la carpeta.
ORGANIZACIÓN
gcloud logging settings describe --organization=ORGANIZATION_ID
Antes de ejecutar el comando, reemplaza ORGANIZATION_ID por el ID de la organización.
El comando anterior devuelve información similar a la siguiente:
kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
Para las organizaciones y las carpetas, también se devuelve el siguiente campo:
kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
El valor del campo
kmsKeyNameincluye el proyecto Google Cloud que almacena la clave.Determina si necesitas migrar cuentas de servicio:
Si el valor del campo
kmsServiceAccountIdtiene el prefijoservice-, no es necesario que migres tu cuenta de servicio. Para obtener información sobre los errores de configuración de CMEK, consulta la sección Soluciona problemas de CMEK de este documento.Si el valor de
kmsServiceAccountIdtiene el prefijocmek-, continúa con el paso siguiente.
Confirma que debes migrar las cuentas de servicio inhabilitando el uso compartido restringido del dominio o quitando Cloud Key Management Service de la lista de servicios restringidos de los Controles del servicio de VPC.
Si se resuelven los errores, para resolver las fallas, debes migrar los recursos afectados a una nueva cuenta de servicio. Para obtener información sobre estos pasos, consulta la siguiente sección.
Migra cuentas de servicio de CMEK
En el siguiente proceso, se describe cómo cambiar la cuenta de servicio que usa Cloud Logging para acceder a las claves configuradas de Cloud Key Management Service. El cambio en la cuenta de servicio resuelve un problema conocido con los Controles del servicio de VPC y el uso compartido restringido al dominio.
Identifica el
loggingServiceAccountIdde tu recurso. Un recurso puede ser un proyecto, una carpeta o una organización. Si creaste buckets de registros con la CMEK habilitada, selecciona el recurso PROJECT.PROYECTO
gcloud logging settings describe --project=PROJECT_ID
Antes de ejecutar el comando, reemplaza PROJECT_ID por el ID del proyecto que contiene el bucket de registros.
FOLDER
gcloud logging settings describe --folder=FOLDER_ID
Antes de ejecutar el comando, reemplaza FOLDER_ID por el ID de la carpeta.
ORGANIZACIÓN
gcloud logging settings describe --organization=ORGANIZATION_ID
Antes de ejecutar el comando, reemplaza ORGANIZATION_ID por el ID de la organización.
El comando anterior devuelve información similar a la siguiente:
kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
Para las organizaciones y las carpetas, también se devuelve el siguiente campo:
kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
El valor del campo
kmsKeyNameincluye el proyecto Google Cloud que almacena la clave.Si, para tu organización o para las carpetas, configuraste los parámetros de configuración predeterminados de los recursos de Cloud Logging con la configuración de CMEK, haz lo siguiente:
En KMS_PROJECT_ID, otorga el rol de encriptador/desencriptador de CryptoKey de Cloud Key Management Service a la cuenta de servicio identificada por el campo
loggingServiceAccountId.Ejecuta el siguiente comando curl, que cambia la cuenta de servicio de Cloud Key Management Service que usa el recurso.
PROYECTO
No aplicable
FOLDER
curl -X PATCH -H "Authorization: Bearer \"$(gcloud auth print-access-token)\"" -H "Content-Type: application/json; charset=utf-8" -d '{"kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"}' https://logging.googleapis.com/v2/folders/FOLDER_ID/settings?updateMask=kmsServiceAccountIdAntes de ejecutar el comando, haz lo siguiente:
- Reemplaza FOLDER_ID por el ID de la carpeta.
- Reemplaza SERVICE_ACCT_NAME por el
loggingServiceAccountIdidentificado anteriormente.
ORGANIZACIÓN
curl -X PATCH -H "Authorization: Bearer \"$(gcloud auth print-access-token)\"" -H "Content-Type: application/json; charset=utf-8" -d '{"kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"}' https://logging.googleapis.com/v2/organizations/ORGANIZATION_ID/settings?updateMask=kmsServiceAccountIdAntes de ejecutar el comando, haz lo siguiente:
- Reemplaza ORGANIZATION_ID por el ID de la organización.
- Reemplaza SERVICE_ACCT_NAME por el
loggingServiceAccountIdidentificado anteriormente.
El resultado del comando anterior es similar al siguiente:
{ "name": ".../settings", "kmsKeyName": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY", "kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com", "storageLocation": "...", "loggingServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com" }
Para cada proyecto o carpeta Google Cloud que contenga buckets de registros existentes habilitados con CMEK, haz lo siguiente:
En el proyecto o la carpeta, para cada bucket de registros habilitado con CMEK, haz lo siguiente:
Identifica el proyecto Google Cloud que almacena la clave de Cloud Key Management Service:
PROYECTO
gcloud logging buckets describe BUCKET_ID --location=LOCATION --project=PROJECT_ID
Antes de ejecutar el comando, haz lo siguiente:
- Reemplaza PROJECT_ID por el ID del proyecto que contiene el bucket de registros.
- Reemplaza LOCATION por la ubicación del bucket de registros.
FOLDER
gcloud logging buckets describe BUCKET_ID --location=LOCATION --folder=FOLDER_ID
Antes de ejecutar el comando, haz lo siguiente:
- Reemplaza FOLDER_ID por el ID de la carpeta.
- Reemplaza LOCATION por la ubicación del bucket de registros.
El resultado del comando anterior es similar al siguiente:
cmekSettings: kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY kmsKeyVersionName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY/cryptoKeyVersions/1 serviceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com createTime: '2022-10-31T12:00:00.0000000Z' lifecycleState: ACTIVE name: projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_ID retentionDays: 30 createTime: '2022-10-31T13:00:00.0000000Z'
Ve al proyecto Google Cloud que posee la clave de Cloud Key Management Service,KMS_PROJECT_ID, y otorga el rol de encriptador/desencriptador de CryptoKey de Cloud Key Management Service a la cuenta de servicio identificada por el campo
loggingServiceAccountId.
Para el proyecto, ejecuta el siguiente comando curl, que cambia la cuenta de servicio de Cloud Key Management Service:
PROYECTO
curl -X PATCH -H "Authorization: Bearer \"$(gcloud auth print-access-token)\"" -H "Content-Type: application/json; charset=utf-8" -d '{"kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"}' https://logging.googleapis.com/v2/projects/PROJECT_ID/settings?updateMask=kmsServiceAccountIdAntes de ejecutar el comando, haz lo siguiente:
- Reemplaza PROJECT_ID por el ID del proyecto que contiene el bucket de registros.
- Reemplaza SERVICE_ACCT_NAME por el
loggingServiceAccountIdidentificado anteriormente.
FOLDER
No es necesario realizar ninguna acción, ya que cambiaste la cuenta de servicio de Cloud Key Management Service que usa la carpeta en un paso anterior.
El resultado del comando anterior es similar al siguiente:
{ "name": ".../settings", "kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com", "loggingServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com" }
Para cada bucket de registros con la CMEK habilitada, haz lo siguiente:
Confirma la migración. El recurso principal del bucket de registros determina qué comando de Google Cloud CLI se debe ejecutar. El elemento superior puede ser un proyecto, una carpeta o una organización.
PROYECTO
gcloud logging buckets describe BUCKET_ID --location=LOCATION --project=PROJECT_ID
Antes de ejecutar el comando, haz lo siguiente:
- Reemplaza PROJECT_ID por el ID del proyecto que contiene el bucket de registros.
- Reemplaza LOCATION por la ubicación del bucket de registros.
FOLDER
gcloud logging buckets describe BUCKET_ID --location=LOCATION --folder=FOLDER_ID
Antes de ejecutar el comando, haz lo siguiente:
- Reemplaza FOLDER_ID por el ID de la carpeta.
- Reemplaza LOCATION por la ubicación del bucket de registros.
En el caso de un proyecto, el resultado del comando anterior es similar al siguiente:
cmekSettings: kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY kmsKeyVersionName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY/cryptoKeyVersions/1 serviceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com createTime: '2022-10-31T12:00:00.0000000Z' lifecycleState: ACTIVE name: projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_ID retentionDays: 30 createTime: '2022-10-31T13:00:00.0000000Z'
Asegúrate de que
serviceAccountIdcoincida con elloggingServiceAccountIdidentificado anteriormente.
Espera al menos 30 minutos antes de revocar los permisos de la cuenta de servicio anterior. Si tienes algún problema después de revocar los permisos en la cuenta de servicio anterior, restablece los permisos y comunícate con el equipo de asistencia de Cloud.
Soluciona problemas de CMEK
Cuando configuras CMEK, el proyecto Google Cloud que contiene la clave de Cloud KMS recibe una notificación de problemas relacionados. Por ejemplo, las actualizaciones fallan cuando KMS_KEY_NAME no es válido, cuando la cuenta de servicio asociada no tiene el rol de Encriptador/Desencriptador de CryptoKey de Cloud Key Management Service requerido o cuando el acceso a la clave está inhabilitado.
Después de configurar la CMEK, ocurre al menos una de las siguientes situaciones:
Recibiste una notificación de Cloud Logging sobre problemas de acceso a CMEK.
Observas que CMEK no está habilitada para los buckets de registros
_Defaulty_Requiredcuando creas proyectos Google Cloud nuevos en tu organización o en una carpeta.Recibes errores cuando lees buckets de registros con la CMEK habilitada o si intentas crear o actualizar buckets de registros.
La notificación proporciona información sobre el error y contiene los pasos que puedes seguir para mitigar el problema:
| Error | Recomendación |
|---|---|
| Se denegó el permiso para usar claves criptográficas | La cuenta de servicio de Logging asociada a tu proyecto Google Cloud no tiene los permisos de IAM suficientes para operar en la clave de Cloud KMS especificada. Sigue las instrucciones del error o consulta los siguientes documentos:
|
| La clave criptográfica está inhabilitada | Se inhabilitó la clave de Cloud KMS especificada. Sigue las instrucciones del error para volver a habilitar la clave. |
| Se destruyó la clave criptográfica | Se destruyó la clave de Cloud KMS especificada. Sigue las instrucciones o consulta los siguientes documentos: |
Identifica el proyecto que contiene la clave de Cloud KMS
Para identificar el ID del proyecto Google Cloud que contiene la clave de encriptación que usa un bucket de registros, una carpeta o una organización, haz lo siguiente:
PROYECTO
gcloud logging settings describe --project=PROJECT_ID
Antes de ejecutar el comando, reemplaza PROJECT_ID por el ID del proyecto que contiene el bucket de registros.
FOLDER
gcloud logging settings describe --folder=FOLDER_ID
Antes de ejecutar el comando, reemplaza FOLDER_ID por el ID de la carpeta.
ORGANIZACIÓN
gcloud logging settings describe --organization=ORGANIZATION_ID
Antes de ejecutar el comando, reemplaza ORGANIZATION_ID por el ID de la organización.
El comando anterior devuelve información similar a la siguiente:
kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
Para las organizaciones y las carpetas, también se devuelve el siguiente campo:
kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
El valor del campo kmsKeyName incluye el proyecto Google Cloud que almacena la clave.
Verifica la usabilidad de la clave
Si deseas verificar la usabilidad de la clave, ejecuta el siguiente comando para enumerar todas las claves:
gcloud kms keys list \ --location=KMS_KEY_LOCATION \ --keyring=KMS_KEY_RING
Este comando muestra información sobre cada clave en formato tabular. La primera línea del resultado es una lista de nombres de columnas:
NAME PURPOSE ...
Verifica que la clave de Cloud KMS aparezca en el resultado del comando como ENABLED y que el propósito de la clave sea la encriptación simétrica: la columna PURPOSE debe contener ENCRYPT_DECRYPT y la columna PRIMARY_STATE debe contener ENABLED.
Si es necesario, crea una clave nueva.
Verifica la configuración de los permisos
Las cuentas de servicio que están asociadas a la configuración de CMEK de la organización deben tener la función Encriptador/Desencriptador de CryptoKey de Cloud KMS para la clave configurada.
Para enumerar la política de IAM de la clave, ejecuta el siguiente comando:
gcloud kms keys get-iam-policy KMS_KEY_NAME
Si es necesario, agrega la cuenta de servicio que contiene la función Encriptador/Desencriptador de CryptoKey de Cloud KMS a la clave.