Resolva problemas de erros de CMEK e de predefinições

Este documento descreve como encontrar e mitigar erros comuns de configuração da CMEK e como identificar erros que ocorrem ao definir a localização de recursos predefinida.

Resolva problemas ao predefinir a localização do recurso

Tenta atualizar a localização de armazenamento predefinida de uma organização ou uma pasta, mas o comando falha com um erro semelhante ao seguinte:

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 erro, defina a localização de armazenamento predefinida da organização ou da pasta de forma a corresponder à localização da chave do Cloud Key Management Service da organização ou da pasta.

Resolva problemas dos VPC Service Controls e da partilha restrita de domínios

Configurou a CMEK como uma predefinição de recurso para a sua organização ou para uma pasta, ou criou um contentor de registos com a CMEK ativada. Em seguida, configure o VPC Service Controls. Depois de configurar os VPC Service Controls, restringe o acesso ao Cloud Key Management Service nos VPC Service Controls ou ativa a partilha restrita de domínios.

Ocorre, pelo menos, uma das seguintes situações:

  • Recebeu uma notificação do Cloud Logging sobre problemas de acesso à CMEK.

  • Repara que a CMEK não está ativada para os contentores de registos _Default e _Required quando cria novos Google Cloud projetos na sua organização Google Cloud ou numa pasta.

  • Recebe erros quando lê a partir de contentores de registos com a CMEK ativada. Os erros que vê são semelhantes ao seguinte erro:

    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`
    
  • Recebe erros quando cria ou atualiza contentores de registos com a CMEK ativada. Os erros que vê são semelhantes ao seguinte erro:

    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 estes problemas se devem à configuração do VPC Service Controls, faça o seguinte:

  1. Identifique as definiçõ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 criou contentores de registos com a CMEK ativada, selecione o recurso PROJECT.

    PROJECT

    gcloud logging settings describe --project=PROJECT_ID
    

    Antes de executar o comando, substitua PROJECT_ID pelo ID do projeto que contém o contentor de registos.

    FOLDER

    gcloud logging settings describe --folder=FOLDER_ID
    

    Antes de executar o comando, substitua FOLDER_ID pelo ID da pasta.

    ENTIDADE

    gcloud logging settings describe --organization=ORGANIZATION_ID
    

    Antes de executar o comando, substitua ORGANIZATION_ID pelo ID da organização.

    O comando anterior devolve 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, também é devolvido o seguinte campo:

    kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
    

    O valor do campo kmsKeyName inclui o projeto que armazena a chave. Google Cloud

  2. Determine se precisa de migrar contas de serviço:

    • Se o valor do campo kmsServiceAccountId tiver o prefixo service-, não precisa de migrar a sua conta de serviço. Para obter informações sobre erros de configuração da CMEK, consulte a secção Resolva problemas da CMEK deste documento.

    • Se o valor de kmsServiceAccountId tiver o prefixo cmek-, avance para o passo seguinte.

  3. Confirme que tem de migrar as contas de serviço desativando a partilha restrita de domínios ou removendo o Cloud Key Management Service da lista de serviços restritos dos VPC Service Controls.

    Se os erros forem resolvidos, para resolver as falhas, tem de migrar os recursos afetados para uma nova conta de serviço. Para obter informações sobre estes passos, consulte a secção seguinte.

Migre contas de serviço CMEK

O processo seguinte descreve como alterar a conta de serviço que o Cloud Logging usa para aceder às chaves do Cloud Key Management Service configuradas. A alteração na conta de serviço resolve um problema conhecido com os VPC Service Controls e a partilha restrita de domínios.

  1. Identifique o loggingServiceAccountId para o seu recurso. Um recurso pode ser um projeto, uma pasta ou uma organização. Se criou contentores de registos com a CMEK ativada, selecione o recurso PROJECT.

    PROJECT

    gcloud logging settings describe --project=PROJECT_ID
    

    Antes de executar o comando, substitua PROJECT_ID pelo ID do projeto que contém o contentor de registos.

    FOLDER

    gcloud logging settings describe --folder=FOLDER_ID
    

    Antes de executar o comando, substitua FOLDER_ID pelo ID da pasta.

    ENTIDADE

    gcloud logging settings describe --organization=ORGANIZATION_ID
    

    Antes de executar o comando, substitua ORGANIZATION_ID pelo ID da organização.

    O comando anterior devolve 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, também é devolvido o seguinte campo:

    kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
    

    O valor do campo kmsKeyName inclui o projeto que armazena a chave. Google Cloud

  2. Se configurou uma predefinição de recursos para a sua organização ou para pastas, faça o seguinte:

    1. No KMS_PROJECT_ID, conceda a função encriptar/desencriptar do CryptoKey do Cloud Key Management Service à conta de serviço identificada pelo campo loggingServiceAccountId.

    2. Execute o seguinte comando curl, que altera a conta de serviço do Cloud Key Management Service usada pelo recurso.

      PROJECT

      Não aplicável.

      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=kmsServiceAccountId
      

      Antes de executar o comando, faça o seguinte:

      • Substitua FOLDER_ID pelo ID da pasta.
      • Substitua SERVICE_ACCT_NAME pelas loggingServiceAccountId identificadas anteriormente.

      ENTIDADE

      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=kmsServiceAccountId
      

      Antes de executar o comando, faça o seguinte:

      • Substitua ORGANIZATION_ID pelo ID da organização.
      • Substitua SERVICE_ACCT_NAME pelas loggingServiceAccountId identificadas anteriormente.

      O resultado do comando anterior é semelhante ao seguinte:

      {
        "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"
      }
      
  3. Para cada Google Cloud projeto ou pasta que contenha contentores de registos existentes ativados com CMEK, faça o seguinte:

    1. No projeto ou na pasta, para cada contentor de registos ativado com CMEK, faça o seguinte:

      1. Identifique o Google Cloud projeto que armazena a chave do Cloud Key Management Service:

        PROJECT

        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 contentor de registos.
        • Substitua LOCATION pela localização do contentor de registos.

        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 pela localização do contentor de registos.

        O resultado do comando anterior é semelhante ao seguinte:

        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'
        
      2. Aceda ao Google Cloud projeto proprietário da chave do Cloud Key Management Service, KMS_PROJECT_ID e conceda a função encriptar/desencriptar do CryptoKey do Cloud Key Management Service à conta de serviço identificada pelo campo loggingServiceAccountId.

    2. Para o projeto, execute o seguinte comando curl, que altera a conta de serviço do Cloud Key Management Service:

      PROJECT

      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=kmsServiceAccountId
      

      Antes de executar o comando, faça o seguinte:

      • Substitua PROJECT_ID pelo ID do projeto que contém o contentor de registos.
      • Substitua SERVICE_ACCT_NAME pelas loggingServiceAccountId identificadas anteriormente.

      FOLDER

      Não é necessária nenhuma ação, uma vez que alterou a conta de serviço do Cloud Key Management Service usada pela pasta num passo anterior.

      O resultado do comando anterior é semelhante ao seguinte:

      {
        "name": ".../settings",
        "kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com",
        "loggingServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"
      }
      
  4. Para cada contentor de registos com as CMEK ativadas, faça o seguinte:

    1. Alterne a chave do Cloud KMS.

    2. Confirme a migração. O recurso principal do contentor de registos determina que comando da CLI do Google Cloud executar. O elemento principal pode ser um projeto, uma pasta ou uma organização.

      PROJECT

      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 contentor de registos.
      • Substitua LOCATION pela localização do contentor de registos.

      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 pela localização do contentor de registos.

      Para um projeto, o resultado do comando anterior é semelhante ao seguinte:

      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'
      

      Certifique-se de que serviceAccountId corresponde à loggingServiceAccountId identificada anteriormente.

  5. Aguarde, pelo menos, 30 minutos antes de revogar as autorizações na conta de serviço anterior. Se tiver problemas depois de revogar as autorizações na conta de serviço anterior, restaure as autorizações e contacte o apoio técnico da Cloud.

Resolva problemas com as CMEK

À medida que configura a CMEK, o Google Cloud projeto que contém a chave do Cloud KMS é notificado de 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 a função encriptar/desencriptar do CryptoKey do Cloud Key Management Service necessária ou quando o acesso à chave está desativado.

Depois de configurar a CMEK, ocorre, pelo menos, uma das seguintes situações:

  • Recebeu uma notificação do Cloud Logging sobre problemas de acesso à CMEK.

  • Repara que a CMEK não está ativada para os contentores de registos _Default e _Required quando cria novos Google Cloud projetos na sua organização Google Cloud ou numa pasta.

  • Recebe erros quando lê a partir de contentores de registos com a CMEK ativada ou se tentar criar ou atualizar contentores de registos.

A notificação fornece informações sobre a falha e contém que pode tomar para mitigar o problema:

Erro Recomendação
Autorização da chave criptográfica recusada

A conta de serviço do Logging associada ao seu Google Cloud projeto não tem autorizações da 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:

Identifique o projeto que contém a chave do Cloud KMS

Para identificar o ID do Google Cloud projeto que contém a chave de encriptação usada por um contentor de registos, uma pasta ou uma organização, faça o seguinte:

PROJECT

gcloud logging settings describe --project=PROJECT_ID

Antes de executar o comando, substitua PROJECT_ID pelo ID do projeto que contém o contentor de registos.

FOLDER

gcloud logging settings describe --folder=FOLDER_ID

Antes de executar o comando, substitua FOLDER_ID pelo ID da pasta.

ENTIDADE

gcloud logging settings describe --organization=ORGANIZATION_ID

Antes de executar o comando, substitua ORGANIZATION_ID pelo ID da organização.

O comando anterior devolve 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, também é devolvido o seguinte campo:

kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY

O valor do campo kmsKeyName inclui o projeto que armazena a chave. Google Cloud

Valide a usabilidade da chave

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

Este comando devolve informações sobre cada chave num formato tabular. A primeira linha da saída é uma lista de nomes das colunas:

NAME PURPOSE ...

Verifique se a chave do Cloud KMS está listada no resultado do comando como ENABLED e se a finalidade da chave é a encriptação simétrica: a coluna PURPOSE tem de conter ENCRYPT_DECRYPT e a coluna PRIMARY_STATE tem de conter ENABLED.

Se necessário, crie uma nova chave.

Valide a configuração das autorizações

As contas de serviço associadas às definições de CMEK da organização têm de ter a função Encriptador/desencriptador de CryptoKey do Cloud KMS para a chave configurada.

Para apresentar a política IAM da chave, execute o seguinte comando:

gcloud kms keys get-iam-policy KMS_KEY_NAME

Se necessário, adicione a conta de serviço que contém a função de encriptar/desencriptar do CryptoKey do Cloud KMS à chave.