Neste documento, descrevemos como encontrar e mitigar erros comuns de configuração do CMEK. Também descreve como identificar erros que ocorrem ao configurar as configurações de recursos padrão do Cloud Logging. Essas configurações podem ser definidas para organizações e pastas.
Resolver problemas ao definir o local para novos buckets de registros criados pelo sistema
Para uma organização ou pasta, você tenta atualizar as configurações de recursos padrão do Cloud Logging. Sua atualização é para definir ou modificar a configuração de local. No entanto, o comando falha com um erro semelhante a este:
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 esse erro, defina o local nas configurações de recursos padrão como o local da chave do Cloud Key Management Service.
Resolver problemas do VPC Service Controls e do compartilhamento restrito de domínio
Você configurou as definições de recursos padrão do Cloud Logging para ter uma configuração de CMEK ou criou um bucket de registros com a CMEK ativada. Em seguida, configure o VPC Service Controls. Depois de configurar o VPC Service Controls, restrinja o acesso ao Cloud Key Management Service no VPC Service Controls ou ative o compartilhamento restrito por domínio.
Pelo menos uma das seguintes situações ocorre:
Você recebeu uma notificação do Cloud Logging sobre problemas de acesso à CMEK.
Você percebe que a CMEK não está ativada para os buckets de registros
_Defaulte_Requiredao criar novos projetos Google Cloud na sua organização ou em uma pasta.Você recebe erros ao ler de buckets de registros com a CMEK ativada. Os erros que aparecem são semelhantes a este:
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`Você recebe erros ao criar ou atualizar buckets de registros com a CMEK ativada. Os erros que aparecem são semelhantes a este:
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 se esses problemas são causados pela configuração do VPC Service Controls, faça o seguinte:
Identifique as configurações do Cloud Logging para o recurso que contém a configuração da CMEK. Um recurso pode ser um projeto, uma pasta ou uma organização. Se você criou buckets de registros com a CMEK ativada, selecione o recurso "PROJECT".
PROJETO
gcloud logging settings describe --project=PROJECT_ID
Antes de executar o comando, substitua PROJECT_ID pelo ID do projeto que contém o bucket de registros.
FOLDER
gcloud logging settings describe --folder=FOLDER_ID
Antes de executar o comando, substitua FOLDER_ID pelo ID da pasta.
ORGANIZAÇÃO
gcloud logging settings describe --organization=ORGANIZATION_ID
Antes de executar o comando, substitua ORGANIZATION_ID pelo ID da organização.
O comando anterior retorna informações semelhantes às seguintes:
kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
Para organizações e pastas, o seguinte campo também é retornado:
kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
O valor do campo
kmsKeyNameinclui o projeto Google Cloud que armazena a chave.Determine se você precisa migrar contas de serviço:
Se o valor do campo
kmsServiceAccountIdtiver o prefixoservice-, não será necessário migrar a conta de serviço. Para informações sobre erros de configuração da CMEK, consulte a seção Solução de problemas da CMEK deste documento.Se o valor de
kmsServiceAccountIdtiver o prefixocmek-, prossiga para a próxima etapa.
Confirme que você precisa migrar contas de serviço desativando o compartilhamento restrito de domínio ou removendo o Cloud Key Management Service da lista de serviços restritos do VPC Service Controls.
Se os erros forem resolvidos, para resolver as falhas, migre os recursos afetados para uma nova conta de serviço. Para saber mais sobre essas etapas, consulte a próxima seção.
Migrar contas de serviço da CMEK
O processo a seguir descreve como mudar a conta de serviço que o Cloud Logging usa para acessar as chaves configuradas do Cloud Key Management Service. A mudança na conta de serviço resolve um problema conhecido com o VPC Service Controls e o compartilhamento restrito de domínio.
Identifique o
loggingServiceAccountIddo recurso. Um recurso pode ser um projeto, uma pasta ou uma organização. Se você criou buckets de registros com a CMEK ativada, selecione o recurso "PROJECT".PROJETO
gcloud logging settings describe --project=PROJECT_ID
Antes de executar o comando, substitua PROJECT_ID pelo ID do projeto que contém o bucket de registros.
FOLDER
gcloud logging settings describe --folder=FOLDER_ID
Antes de executar o comando, substitua FOLDER_ID pelo ID da pasta.
ORGANIZAÇÃO
gcloud logging settings describe --organization=ORGANIZATION_ID
Antes de executar o comando, substitua ORGANIZATION_ID pelo ID da organização.
O comando anterior retorna informações semelhantes às seguintes:
kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
Para organizações e pastas, o seguinte campo também é retornado:
kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
O valor do campo
kmsKeyNameinclui o projeto Google Cloud que armazena a chave.Se você configurou as configurações de recursos padrão para o Cloud Logging com as configurações de CMEK na sua organização ou nas pastas, faça o seguinte:
No KMS_PROJECT_ID, conceda o papel Criptografador/Descriptografador de CryptoKey do Cloud Key Management Service à conta de serviço identificada pelo campo
loggingServiceAccountId.Execute o seguinte comando curl, que muda a conta de serviço do Cloud Key Management Service usada pelo recurso.
PROJETO
Não relevante.
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 executar o comando, faça o seguinte:
- Substitua FOLDER_ID pelo ID da pasta.
- Substitua SERVICE_ACCT_NAME pelo
loggingServiceAccountIdidentificado anteriormente.
ORGANIZAÇÃO
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 executar o comando, faça o seguinte:
- Substitua ORGANIZATION_ID pelo ID da organização.
- Substitua SERVICE_ACCT_NAME pelo
loggingServiceAccountIdidentificado anteriormente.
O resultado do comando anterior é semelhante a este:
{ "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 projeto ou pasta Google Cloud que contenha buckets de registros ativados com a CMEK, faça o seguinte:
No projeto ou pasta, para cada bucket de registros ativado com a CMEK, faça o seguinte:
Identifique o projeto Google Cloud que armazena a chave do Cloud Key Management Service:
PROJETO
gcloud logging buckets describe BUCKET_ID --location=LOCATION --project=PROJECT_ID
Antes de executar o comando, faça o seguinte:
- Substitua PROJECT_ID pelo ID do projeto que contém o bucket de registros.
- Substitua LOCATION pelo local do bucket de registros.
FOLDER
gcloud logging buckets describe BUCKET_ID --location=LOCATION --folder=FOLDER_ID
Antes de executar o comando, faça o seguinte:
- Substitua FOLDER_ID pelo ID da pasta.
- Substitua LOCATION pelo local do bucket de registros.
O resultado do comando anterior é semelhante a este:
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'
Acesse o projeto Google Cloud que tem a chave do Cloud Key Management Service, KMS_PROJECT_ID, e conceda o papel Criptografador/Descriptografador de CryptoKey do Cloud Key Management Service à conta de serviço identificada pelo campo
loggingServiceAccountId.
Para o projeto, execute o seguinte comando curl, que muda a conta de serviço do Cloud Key Management Service:
PROJETO
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 executar o comando, faça o seguinte:
- Substitua PROJECT_ID pelo ID do projeto que contém o bucket de registros.
- Substitua SERVICE_ACCT_NAME pelo
loggingServiceAccountIdidentificado anteriormente.
FOLDER
Nenhuma ação é necessária, já que você mudou a conta de serviço do Cloud Key Management Service usada pela pasta em uma etapa anterior.
O resultado do comando anterior é semelhante a este:
{ "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 com a CMEK ativada, faça o seguinte:
Confirme a migração. O recurso pai do bucket de registros determina qual comando da Google Cloud CLI executar. O pai pode ser um projeto, uma pasta ou uma organização.
PROJETO
gcloud logging buckets describe BUCKET_ID --location=LOCATION --project=PROJECT_ID
Antes de executar o comando, faça o seguinte:
- Substitua PROJECT_ID pelo ID do projeto que contém o bucket de registros.
- Substitua LOCATION pelo local do bucket de registros.
FOLDER
gcloud logging buckets describe BUCKET_ID --location=LOCATION --folder=FOLDER_ID
Antes de executar o comando, faça o seguinte:
- Substitua FOLDER_ID pelo ID da pasta.
- Substitua LOCATION pelo local do bucket de registros.
Para um projeto, o resultado do comando anterior é semelhante a este:
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'
Verifique se
serviceAccountIdcorresponde aologgingServiceAccountIdidentificado anteriormente.
Aguarde pelo menos 30 minutos antes de revogar as permissões na conta de serviço anterior. Se você tiver problemas depois de revogar as permissões na conta de serviço anterior, restaure as permissões e entre em contato com o suporte do Cloud.
Resolver problemas da CMEK
Conforme você configura a CMEK, o projeto Google Cloud que contém a chave do Cloud KMS é notificado sobre problemas relacionados. Por exemplo, as atualizações falham quando o KMS_KEY_NAME é inválido, quando a conta de serviço associada não tem o papel Criptografador/descriptografador de CryptoKey do Cloud Key Management Service necessário ou quando o acesso à chave está desativado.
Depois de configurar a CMEK, pelo menos uma das seguintes situações vai ocorrer:
Você recebeu uma notificação do Cloud Logging sobre problemas de acesso à CMEK.
Você percebe que a CMEK não está ativada para os buckets de registros
_Defaulte_Requiredao criar novos projetos Google Cloud na sua organização ou em uma pasta.Você recebe erros ao ler de buckets de registros com a CMEK ativada ou se tentar criar ou atualizar buckets de registros.
A notificação fornece informações sobre a falha e contém que você pode tomar para minimizar o problema:
| Erro | Recomendação |
|---|---|
| Permissão de chave criptográfica negada | A conta de serviço do Logging associada ao seu Google Cloud projeto não tem permissões do IAM suficientes para operar na chave do Cloud KMS especificada. Siga as instruções no erro ou consulte os seguintes documentos:
|
| A chave criptográfica está desativada | A chave do Cloud KMS especificada foi desativada. Siga as instruções no erro para reativar a chave. |
| A chave criptográfica foi destruída | A chave do Cloud KMS especificada foi destruída. Siga as instruções ou consulte os seguintes documentos: |
Identificar o projeto que contém a chave do Cloud KMS
Para identificar o ID do projeto Google Cloud que contém a chave de criptografia usada por um bucket de registros, uma pasta ou uma organização, faça o seguinte:
PROJETO
gcloud logging settings describe --project=PROJECT_ID
Antes de executar o comando, substitua PROJECT_ID pelo ID do projeto que contém o bucket de registros.
FOLDER
gcloud logging settings describe --folder=FOLDER_ID
Antes de executar o comando, substitua FOLDER_ID pelo ID da pasta.
ORGANIZAÇÃO
gcloud logging settings describe --organization=ORGANIZATION_ID
Antes de executar o comando, substitua ORGANIZATION_ID pelo ID da organização.
O comando anterior retorna informações semelhantes às seguintes:
kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
Para organizações e pastas, o seguinte campo também é retornado:
kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
O valor do campo kmsKeyName inclui o projeto Google Cloud que armazena a chave.
Verificar a usabilidade de chaves
Para verificar a usabilidade da chave, execute o seguinte comando para listar todas as chaves:
gcloud kms keys list \ --location=KMS_KEY_LOCATION \ --keyring=KMS_KEY_RING
Esse comando retorna informações sobre cada chave em formato tabular. A primeira linha de saída é uma lista de nomes de coluna:
NAME PURPOSE ...
Verifique se a chave do Cloud KMS está listada na saída do comando como
ENABLED, e se a finalidade da chave é a criptografia simétrica: a coluna
PURPOSE precisa conter ENCRYPT_DECRYPT e a coluna PRIMARY_STATE precisa conter ENABLED.
Se necessário, crie uma nova chave.
Verificar a configuração das permissões
As contas de serviço associadas às configurações da CMEK da organização precisam ter o papel Criptografador/Descriptografador de CryptoKey do Cloud KMS para a chave configurada.
Para listar a política do IAM da chave, execute o seguinte comando :
gcloud kms keys get-iam-policy KMS_KEY_NAME
Se necessário, adicione à conta de serviço que contém o papel Criptografador/Descriptografador de CryptoKey do Cloud KMS para a chave.