Usar chaves de encriptação geridas pelo cliente

Por predefinição, o Cloud Run encripta o conteúdo do cliente em repouso. O Cloud Run processa a encriptação por si sem ações adicionais da sua parte. Esta opção chama-se Encriptação predefinida da Google.

Se quiser controlar as suas chaves de encriptação, pode usar chaves de encriptação geridas pelo cliente (CMEK) no Cloud KMS com serviços integrados com CMEK, incluindo o Cloud Run. A utilização de chaves do Cloud KMS dá-lhe controlo sobre o respetivo nível de proteção, localização, programação de rotação, utilização e autorizações de acesso, bem como limites criptográficos. A utilização do Cloud KMS também permite ver registos de auditoria e controlar os ciclos de vida das chaves. Em vez de a Google possuir e gerir as chaves de encriptação de chaves (KEKs) simétricas que protegem os seus dados, controla e gere estas chaves no Cloud KMS.

Depois de configurar os seus recursos com CMEKs, a experiência de acesso aos recursos do Cloud Run é semelhante à utilização da encriptação predefinida da Google. Para mais informações acerca das suas opções de encriptação, consulte o artigo Chaves de encriptação geridas pelo cliente (CMEK).

Para saber como proteger os seus dados com CMEK em funções criadas através de comandos gcloud functions ou da API Cloud Functions v2, consulte o artigo Proteja os seus dados com CMEK.

Tenha em atenção o seguinte:

  • Os metadados dos ficheiros, como o caminho, não são encriptados.
  • Os metadados do serviço do Cloud Run, como o nome ou as variáveis de ambiente, não são encriptados com a chave fornecida, mas com uma Google-owned and Google-managed encryption key.
  • Em tempo de execução, a memória e o conteúdo dos ficheiros não são encriptados.
  • Se uma CMEK estiver desativada, as novas instâncias das revisões do Cloud Run existentes que usam a chave não são iniciadas.
  • Se uma CMEK estiver desativada, a implementação de uma nova revisão do Cloud Run falha, a menos que seja usada uma nova chave válida.

CMEK com chave automática do Cloud KMS

Pode criar CMEKs manualmente para proteger os seus recursos do Cloud Run ou usar a chave automática do Cloud KMS. Com a Autokey, os conjuntos de chaves e as chaves são gerados a pedido como parte da criação de recursos no Cloud Run. Os agentes de serviço que usam as chaves para operações de encriptação e desencriptação são criados se ainda não existirem e recebem as funções de gestão de identidade e de acesso (IAM) necessárias. Para mais informações, consulte o artigo Vista geral do Autokey.

Para configurar as CMEK manualmente, consulte o artigo Configure as CMEK para um serviço do Cloud Run.

Para configurar as CMEK através do Autokey, consulte o artigo Use o Autokey.

O Autokey não está disponível para funções criadas com comandos gcloud functions ou a API Cloud Functions v2.

Quotas do Cloud KMS e Cloud Run

Pode definir a CMEK para um dos níveis de proteção disponíveis para indicar como são realizadas as operações criptográficas. Quando usa CMEK no Cloud Run, os seus projetos podem consumir quotas de pedidos criptográficos do Cloud KMS. Por exemplo, os repositórios encriptados com CMEK podem consumir estas quotas para cada carregamento ou transferência.

As operações de encriptação e desencriptação com chaves CMEK afetam as quotas do Cloud KMS das seguintes formas:

  • Para chaves CMEK de software geradas no Cloud KMS, não é consumida nenhuma quota do Cloud KMS.
  • Para chaves CMEK de hardware, por vezes denominadas chaves do Cloud HSM, as operações de encriptação e desencriptação são contabilizadas para as quotas do Cloud HSM no projeto que contém a chave.
  • Para chaves CMEK externas, por vezes denominadas chaves do Cloud EKM, as operações de encriptação e desencriptação são contabilizadas em função das quotas do Cloud EKM no projeto que contém a chave.

Para mais informações, consulte as quotas do Cloud KMS.

Comportamento do ajuste automático afetado pela CMEK

A escala automática esperada para o seu serviço do Cloud Run pode ser afetada quando usa chaves de encriptação geridas pelo cliente. Por exemplo, a latência para iniciar novas instâncias pode aumentar devido a atrasos no contacto com sistemas de gestão de chaves externos durante as operações de chaves.

A tabela seguinte mostra as possíveis alterações no comportamento devido à utilização das CMEK:

Operação relacionada com CMEK Comportamento da escala automática
Chave desativada/destruída/revogada As novas instâncias não são iniciadas.
Não é possível contactar o gestor de chaves externo Se for possível tentar novamente o pedido de chave, não são encerradas instâncias durante as novas tentativas e não são iniciadas novas instâncias. O aumento da escala pode parecer mais lento do que o esperado.
Se não for possível repetir o pedido de chave, não são iniciadas novas instâncias e as instâncias em execução são encerradas após um período de espera.
Quota do KMS excedida Se esta quota for excedida, são registados erros RESOURCE_EXHAUSTED e não são iniciadas novas instâncias. Pode pedir quota adicional para corrigir esta situação.

Antes de começar

Permita que o Cloud Run aceda a uma chave

Para usar as CMEK para o Cloud Run, siga estes passos:

  1. Configure o Artifact Registry para usar as CMEK.

  2. Usando o Início rápido do Docker do Artifact Registry como referência, crie um repositório do Docker e envie uma imagem para o mesmo.

  3. Use uma chave simétrica do Cloud KMS existente ou crie uma nova chave simétrica.

  4. Para permitir o acesso do Cloud Run à chave, conceda ao agente de serviço do Cloud Run a função Encriptador/desencriptador de CryptoKey do Cloud KMS:

    Consola

    1. Aceda à página Chaves criptográficas

    2. Clique no porta-chaves da chave para abrir a respetiva página de lista de chaves.

    3. Selecione a chave e, no separador Autorizações do lado direito, clique em Adicionar principal.

    4. No campo Novos membros, copie o email do agente do serviço do Cloud Run. Tem o seguinte sufixo:

      service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com.

    5. No campo Selecionar uma função, selecione Encriptador/desencriptador de CryptoKey do Cloud KMS.

    6. Clique em Guardar.

    gcloud

    Use o seguinte comando:gcloud kms

    gcloud kms keys add-iam-policy-binding KEY_NAME \
    --keyring=KEYRING \
    --location=LOCATION \
    --member serviceAccount:service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \
    --role='roles/cloudkms.cryptoKeyEncrypterDecrypter'

    Substitua o seguinte:

    • KEY_NAME: o nome da sua chave.
    • KEYRING: o nome do seu conjunto de chaves.
    • LOCATION: o nome da sua região.
    • PROJECT_NUMBER: o número do projeto onde pretende implementar o serviço do Cloud Run.

    Precisa de autorização para administrar recursos do Cloud KMS no Google Cloud projeto para conceder a função da IAM roles/cloudkms.cryptoKeyEncrypterDecrypter. Apenas os membros da IAM com as funções de proprietário (roles/owner) ou administrador do Cloud KMS (roles/cloudkms.admin) podem conceder ou revogar o acesso aos recursos do Cloud KMS.

Configure a CMEK para um serviço do Cloud Run

Qualquer alteração de configuração leva à criação de uma nova revisão. As revisões subsequentes também vão receber automaticamente esta definição de configuração, a menos que faça atualizações explícitas para a alterar.

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Selecione Serviços no menu e clique em Implementar contentor para configurar um novo serviço. Se estiver a configurar um serviço existente, clique no serviço e, de seguida, em Editar e implementar nova revisão.

  3. Se estiver a configurar um novo serviço, preencha a página de definições iniciais do serviço e, de seguida, clique em Contentores, volumes, rede, segurança para expandir a página de configuração do serviço.

  4. Clique no separador Segurança.

    imagem

    • Em Encriptação:
      1. Selecione Chave do Cloud KMS.
      2. Em Tipo de chave, selecione Cloud KMS.
      3. No menu Selecionar uma chave do Cloud KMS, escolha uma das seguintes opções:
        • Selecione Mudar de projeto se precisar de usar uma chave de um projeto diferente. Pode fazer referência a uma chave de outro projeto se a conta de serviço do seu projeto puder aceder à chave para operações de encriptação e desencriptação.

        • Selecione Introduzir chave manualmente para introduzir o segredo de um projeto, usando o seguinte formato: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME.

        Para copiar e colar o nome do recurso de outro projeto ao qual tem acesso:

        • Aceda à página Chaves criptográficas.
        • Clique no porta-chaves.
        • Selecione o nome do conjunto de chaves escolhido e clique em Ações.
        • Selecione Copiar nome do recurso no menu e cole-o no campo Nome do recurso da chave do passo anterior.

      4. No menu Ação de revogação de chave, escolha uma das seguintes opções:
        • Impedir nova instância do contentor: não são iniciadas novas instâncias após a revogação da chave CMEK.

        • Encerramento assim que possível: não são iniciadas novas instâncias e as instâncias existentes são encerradas após a revogação da chave CMEK.

        • Atraso de encerramento personalizado: especifique o número de horas antes de o serviço ser encerrado.

  5. Clique em Criar ou Implementar.

gcloud

Para definir uma chave num serviço, use um dos seguintes comandos:

gcloud run deploy SERVICE \
--image IMAGE_URL \
--key KEY \
--post-key-revocation-action-type KEY_REVOCATION_ACTION
--encryption-key-shutdown-hours SHUTDOWN_HOURS
gcloud run services update SERVICE --key KEY
--post-key-revocation-action-type KEY_REVOCATION_ACTION
--encryption-key-shutdown-hours SHUTDOWN_HOURS

Substitua o seguinte:

  • SERVICE: o nome do seu serviço.
  • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • KEY: o nome da chave totalmente qualificado no seguinte formato: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME.
  • KEY_REVOCATION_ACTION: shut-down ou prevent-new, consoante as suas preferências de revogação de chaves.
  • SHUTDOWN_HOURS: o número de horas de atraso antes de o serviço ser encerrado após a revogação.

YAML

  1. Se estiver a criar um novo serviço, ignore este passo. Se estiver a atualizar um serviço existente, transfira a respetiva configuração YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Atualize as seguintes anotações CMEK para os valores pretendidos:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/encryption-key: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME
            run.googleapis.com/post-key-revocation-action-type: KEY_REVOCATION_ACTION
            run.googleapis.com/encryption-key-shutdown-hours: SHUTDOWN_HOURS
          name: REVISION

    Substitua o seguinte:

    • SERVICE: o nome do seu serviço do Cloud Run.
    • PROJECT_NAME: o nome do projeto no qual a chave foi criada.
    • LOCATION: a localização em que a chave foi criada. Tem de corresponder à localização do serviço do Cloud Run.
    • KEYRING_NAME: o nome do conjunto de chaves.
    • KEY_NAME: o nome da chave.
    • KEY_REVOCATION_ACTION: shut-down ou prevent-new, consoante as suas preferências de revogação de chaves.
    • SHUTDOWN_HOURS: o número de horas de atraso antes de o serviço ser encerrado após a revogação.
    • REVISION com um novo nome de revisão ou elimine-o (se existir). Se fornecer um novo nome de revisão, este tem de cumprir os seguintes critérios:
      • Começa com SERVICE-
      • Contém apenas letras minúsculas, números e -
      • Não termina com um -
      • Não exceder 63 carateres
  3. Substitua o serviço pela respetiva nova configuração através do seguinte comando:

    gcloud run services replace service.yaml

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

Adicione o seguinte a um recurso google_cloud_run_v2_service na sua configuração do Terraform.

resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE"
  location = "europe-west1"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    encryption_key = "projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME"
  }
}

Substitua o seguinte:

  • SERVICE: o nome do seu serviço do Cloud Run.
  • PROJECT_NAME: o nome do projeto no qual a chave foi criada.
  • LOCATION: a localização em que a chave foi criada. Tem de corresponder à localização do serviço do Cloud Run.
  • KEYRING_NAME: o nome do conjunto de chaves.
  • KEY_NAME: o nome da chave.

Use o Autokey

Se ainda não o fez, ative a chave automática do Cloud KMS.

Qualquer alteração de configuração leva à criação de uma nova revisão. As revisões subsequentes também vão receber automaticamente esta definição de configuração, a menos que faça atualizações explícitas para a alterar.

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Selecione Serviços no menu e clique em Implementar contentor para configurar um novo serviço. Se estiver a configurar um serviço existente, clique no serviço e, de seguida, em Editar e implementar nova revisão.

  3. Se estiver a configurar um novo serviço, preencha a página de definições iniciais do serviço e, de seguida, clique em Contentores, volumes, rede, segurança para expandir a página de configuração do serviço.

  4. Clique no separador Segurança.

    imagem

    • Em Encriptação:
      1. No menu Tipo de chave, selecione Cloud KMS com chave automática.
      2. Clique em Pedir uma chave.
      3. Clique em Criar.

        Os detalhes da chave são apresentados após a criação do recurso.

      4. No menu Ação de revogação de chave, escolha uma das seguintes opções:
        • Impedir nova instância do contentor: não são iniciadas novas instâncias após a revogação da CMEK.

        • Encerramento assim que possível: não são iniciadas novas instâncias e as instâncias existentes são encerradas após a revogação das CMEK.

        • Atraso de encerramento personalizado: especifique o número de horas antes de o serviço ser encerrado.

  5. Clique em Criar ou Implementar.

Ver definições de segurança

Para ver as definições de segurança atuais do seu serviço do Cloud Run:

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Clique no serviço que lhe interessa para abrir a página Detalhes do serviço.

  3. Clique no separador Revisões.

  4. No painel de detalhes à direita, a definição de segurança é apresentada no separador Segurança.

gcloud

  1. Use o seguinte comando:

    gcloud run services describe SERVICE
  2. Localize a definição de segurança na configuração devolvida.

Configuração adicional para implementações baseadas na origem

As implementações de origem do Cloud Run e as funções envolvem um passo de compilação adicional. Para garantir a conformidade com as CMEK deste passo, tem de fazer o seguinte:

  1. Crie o seu próprio contentor do Cloud Storage encriptado com CMEK. Para ver detalhes, consulte a documentação da CMEK para o Cloud Storage.

  2. Carregue o código fonte para o contentor de armazenamento encriptado com CMEK como um ficheiro de arquivo comprimido.

  3. Crie o seu próprio repositório do Artifact Registry encriptado com CMEK. Para ver detalhes, consulte a documentação da CMEK para o Artifact Registry. Este repositório armazena artefactos produzidos pelo processo de compilação.

  4. Implemente a função, transmitindo os recursos de compilação através das flags --source e --image.

    gcloud run deploy FUNCTION \
        --key KEY \
        --source CUSTOM_BUCKET_WITH_SOURCE_CODE \
        --image CUSTOM_AR_REPOSITORY \
        --function FUNCTION_ENTRYPOINT \
        --base-image BASE_IMAGE \
        --region REGION

Substitua o seguinte:

  • FUNCTION: o nome da função que está a implementar. Pode omitir este parâmetro por completo, mas é-lhe pedido o nome se o omitir.

  • KEY: o nome da chave totalmente qualificado no seguinte formato: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME.

  • CUSTOM_BUCKET_WITH_SOURCE_CODE: o URI de uma localização do Cloud Storage onde o código fonte está armazenado. Use o seguinte formato: gs://BUCKET_NAME/PATH_TO_SOURCE.

  • CUSTOM_AR_REPOSITORY: o URI de um repositório do Artifact Registry no formato REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME.

  • FUNCTION_ENTRYPOINT: o ponto de entrada para a sua função no código-fonte. Este é o código que o Cloud Run executa quando a sua função é executada. O valor desta flag tem de ser um nome de função ou um nome de classe totalmente qualificado que exista no seu código-fonte.

  • BASE_IMAGE: o ambiente de imagem base para a sua função. Para mais detalhes sobre as imagens base e os pacotes incluídos em cada imagem, consulte o artigo Imagens base de tempos de execução.

  • REGION: a Google Cloud região onde quer implementar a sua função. Por exemplo, europe-west1.

Além disso, se usar o Eventarc para acionar as suas funções, familiarize-se com a configuração da CMEK para o Eventarc. Em particular, a conformidade total nesses casos requer a encriptação dos canais correspondentes aos tipos de eventos que estão a ser usados.

Teste a revogação de CMEK

Para verificar se a proteção CMEK está a funcionar, pode desativar a chave que usou para ativar as CMEK para um serviço e, em seguida, tentar invocar o seu serviço:

  1. Execute o seguinte comando para confirmar que o serviço está acessível:

    curl SERVICE_URL

    Substitua SERVICE_URL pelo URL do serviço. Pode encontrar esta informação na IU da consola após a implementação: o URL do contentor é apresentado junto ao texto URL:.

  2. Desative a versão da chave.

  3. Aguarde o número de SHUTDOWN_HOURS que especificou. Se não especificou o número de horas de encerramento, reative a chave e edite ou volte a implementar o serviço com o valor definido para o mínimo de uma hora. Se implementou o código-fonte, tente ver o código-fonte. A tentativa deve falhar.

  4. Após aguardar a duração de SHUTDOWN_HOURS que definiu, execute novamente o seguinte comando e confirme que o serviço já não está acessível:

     curl SERVICE_URL
     

  5. Depois de verificar que a versão da chave está desativada, ative a chave.

Compreender os registos de auditoria e as mensagens de erro

Se for responsável pela monitorização dos registos de auditoria, uma das suas tarefas pode ser validar as operações de CMEK no seu serviço do Cloud Run. Neste caso, tem de compreender os registos de auditoria relacionados.

Se for responsável por resolver e corrigir erros de tempo de execução do seu serviço do Cloud Run, pode ter de resolver problemas relacionados com erros da CMEK registados durante o funcionamento do serviço do Cloud Run.

As secções seguintes fornecem as informações necessárias para as tarefas anteriores.

Registos de auditoria

Os registos de auditoria do KMS fornecem uma trilha de auditoria para cada operação realizada com uma chave. Para serviços do Cloud Run ativados com CMEK, o Cloud Run adiciona um contexto de autor da chamada específico do Cloud Run que detalha o motivo pelo qual o sistema acedeu à chave do cliente. A tabela seguinte apresenta os contextos que pode ver nos registos de auditoria:

Motivo do acesso à chave Descrição
Decrypting CMEK-encrypted layer during container clone start. Registado sempre que é iniciada uma nova instância.
Encrypting a newly created data-encryption-key w/ the customer-managed-encryption-key. Registado durante a implementação de um serviço com CMEK ativadas, em que a chave de encriptação de dados é envolvida pela CMEK.
Decrypting an existing encrypted data-encryption-key, under the same customer-managed-encryption-key, to be used to encrypt container contents. Registado quando uma nova instância é iniciada, o que requer a desencriptação da imagem.
Performing an encrypt operation on dummy data to check the customer-managed-encryption-key status and access. Registado sempre que existe uma verificação de validação na chave, o que é feito periodicamente.
Performing a decrypt operation on dummy data to check the customer-managed-encryption-key status and access. Registado sempre que existe uma verificação de validação na chave, o que é feito periodicamente.

Para ver detalhes sobre o formato e o conteúdo do registo de auditoria, consulte a página Registo de auditoria do KMS.

Mensagens de erro

Tenha em atenção que as mensagens de erro fornecidas por um gestor de chaves externo são transmitidas diretamente aos registos do Cloud Run do seu serviço.

A tabela seguinte apresenta as mensagens de erro relacionadas com a CMEK que pode ver, juntamente com descrições e possíveis soluções.

Mensagem Descrição
User's service account does not have CMEK decrypter permission. Service account: %s Solução: permita que o serviço aceda à chave
User's KMS operation quota has been exceeded. CMEK key: %s O serviço com CMEK excedeu as quotas do KMS. Solução: peça mais quota do KMS
User's CMEK key has been disabled. CMEK key: %s A CMEK foi revogada. Solução: altere a CMEK do serviço e volte a implementá-lo.
User's CMEK key has been destroyed. CMEK key: %s O CMEK foi eliminado. Solução: altere a CMEK do serviço e volte a implementá-lo.
User's CMEK key has been scheduled for deletion. CMEK Key: %s A CMEK foi agendada para eliminação. Solução: altere a CMEK do serviço e volte a implementá-lo.

O que se segue?