Ativar chaves de criptografia gerenciadas pelo cliente para o Secret Manager

Por padrão, o Secret Manager criptografa o conteúdo do cliente descanso. O Secret Manager processa a criptografia automaticamente parte. Essa opção é chamada de Criptografia padrão do Google.

Se você quiser controlar suas chaves de criptografia, use chaves de criptografia gerenciadas pelo cliente (CMEKs) no Cloud KMS com serviços integrados a CMEK, incluindo o Secret Manager. O uso de chaves do Cloud KMS permite controlar o nível de proteção, o local, a programação de rotação, as permissões de uso e acesso e os limites criptográficos. O uso do Cloud KMS também permite a você monitorar o uso de chaves, visualizar registros de auditoria e controlar ciclos de vida importantes. Em vez de o Google ser proprietário e gerente de chaves de criptografia de chaves (KEKs) simétricas que protegem seus dados, você controla e gerencia essas chaves no Cloud KMS.

Depois de configurar seus recursos com CMEKs, a experiência de acessar seus Os recursos do Secret Manager são semelhantes ao uso da criptografia padrão do Google. Para mais informações sobre suas opções de criptografia, consulte Chaves de criptografia gerenciadas pelo cliente (CMEK).

O Secret Manager oferece ferramentas para armazenar, gerenciar e acessar dados sensíveis nos aplicativos.

CMEK com o Cloud KMS Autokey

É possível criar CMEKs manualmente para proteger seus recursos do Secret Manager ou usar a chave automática do Cloud KMS. Com o Autokey, keyrings e chaves são gerados sob demanda como parte da criação de recursos no Secret Manager. Os agentes de serviço que usam as chaves para operações de criptografia e descriptografia são criados se ainda não existirem e receberem os papéis necessários do Identity and Access Management (IAM). Para mais informações, consulte Visão geral das autokeys.

O Secret Manager é compatível apenas com o Autokey do Cloud KMS ao criar recursos usando o Terraform ou a API REST.

Para aprender a usar criadas manualmente para proteger os recursos do Secret Manager, consulte CMEK com replicação automática e CMEK com usuário replicação gerenciada nesta página.

Para aprender a usar as CMEKs criadas o Autokey do Cloud KMS para proteger os recursos do Secret Manager. consulte Como usar o Autokey com o Secret Manager do Google Cloud.

Como o CMEK funciona no Secret Manager

Antes de gravar uma versão do secret no armazenamento permanente em um local específico, O Secret Manager criptografa os dados com uma chave exclusiva (DEK). Essa DEK é criptografada com uma chave específica da réplica, chamada de chave, chave de criptografia de dados (KEK) que pertence ao serviço Secret Manager.

Ao usar uma CMEK para o Secret Manager, a KEK é chamada de chave CMEK uma chave simétrica que você gerencia no Cloud KMS. A chave CMEK precisa estar no mesmo local do Google Cloud que a réplica da versão secreta que ela criptografa. Também é possível usar uma chave do Cloud EKM na política CMEK para criptografia e descriptografia.

Este guia explica como configurar o Secret Manager para usar a CMEK. Para mais informações gerais sobre a CMEK, incluindo como quando e por que ativar, consulte a documentação do Cloud Key Management Service.

Limitações

A CMEK está disponível apenas no Secret Manager API v1 e Google Cloud CLI.

Antes de começar

É possível armazenar todos os recursos no mesmo projeto ou armazenar segredos e chaves em projetos separados. Leia Separação de tarefas do Cloud KMS para entender melhor essa decisão.

Conclua os pré-requisitos a seguir para configurar o Secret Manager e o Cloud KMS:

  • Secret Manager:

    • Criar ou usar um projeto atual para armazenar o Secret Manager do Google Cloud.
    • Se necessário, conclua as etapas na seção Como configurar o Secret Manager do guia de início rápido do Secret Manager.
  • Cloud KMS:

    • Crie ou use um projeto atual para armazenar seu Cloud KMS do Google Cloud.
    • Se necessário, Ative a API Cloud KMS.

Defina as variáveis a seguir para os IDs dos projetos do Secret Manager e do Cloud KMS.

This is an editable variable. Set it to your Secret Manager project ID and the
value will be used in all commands on this page.
SM_PROJECT_ID

This is an editable variable. Set it to your Cloud KMS project ID and the value
will be used in all commands on this page.
KMS_PROJECT_ID

Faça a autenticação no Google Cloud:

gcloud

Para usar o Secret Manager na linha de comando, primeiro Instale ou faça upgrade para a versão 378.0.0 ou mais recente da Google Cloud CLI. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud auth login

Como criar uma identidade de agente de serviço

Você precisa criar uma identidade de agente de serviço para cada projeto que exige chaves de criptografia gerenciadas pelo cliente.

Para criar uma identidade de serviço com a Google Cloud CLI, execute o seguinte comando:

gcloud

Para usar o Secret Manager na linha de comando, primeiro instale ou faça upgrade para a versão 378.0.0 ou mais recente da CLI do Google Cloud. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud beta services identity create \
    --service "secretmanager.googleapis.com" \
    --project "SM_PROJECT_ID"

Ele retorna um nome de identidade de serviço no seguinte formato:

service-PROJECT_NUMBER@gcp-sa-secretmanager.iam.gserviceaccount.com

Salve o nome da identidade do serviço:

The following variable is editable. Click on it to update the value, and it will
be reflected throughout this documentation page.

SM_SERVICE_IDENTITY

Você concederá a essa identidade de serviço acesso às chaves CMEK do Cloud KMS usados para criptografar e descriptografar seus secrets.

CMEK com replicação automática

Esta seção aborda os segredos configurados por uma política de replicação automática.

Para chaves secretas que usam a política de replicação automática, a chave CMEK precisa estar localizada na multirregião global do Cloud KMS. Se você estiver usando um do Cloud EKM, não é possível configurar o secret para usar replicação porque as chaves do Cloud EKM não estão disponíveis no global na mesma região. Para saber mais sobre o uso de chaves do Cloud EKM, consulte Adicionar uma chave do Cloud EKM a uma política de CMEK.

Criar uma chave simétrica do Cloud KMS no Cloud KMS global região ou usar uma chave atual. Este exemplo cria um novo keyring chamado secret-manager-cmek e cria uma nova chave com o nome my-cmek-key nela.

gcloud

Para usar o Secret Manager na linha de comando, primeiro Instale ou faça upgrade para a versão 378.0.0 ou mais recente da Google Cloud CLI. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "global"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Conceda à identidade do serviço o acesso ao Secret Manager para criptografar e descriptografar usando a chave CMEK. Esse comando concede o papel de criptografador/descriptografador do Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) na chave my-cmek-key do Cloud KMS à identidade de serviço.

gcloud

Para usar o Secret Manager na linha de comando, primeiro instale ou faça upgrade para a versão 378.0.0 ou mais recente da CLI do Google Cloud. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Crie um secret com replicação automática. O nome do recurso da chave CMEK é armazenados como metadados no secret.

gcloud

Para usar o Secret Manager na linha de comando, primeiro Instale ou faça upgrade para a versão 378.0.0 ou mais recente da Google Cloud CLI. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud secrets create "SECRET_ID" \
    --replication-policy "automatic" \
    --kms-key-name "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key" \
    --project "SM_PROJECT_ID"

API

Esses exemplos usam curl para demonstrar o uso da API. É possível gerar tokens de acesso com o gcloud auth print-access-token. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

Defina o valor de replication.automatic.customerManagedEncryption.kmsKeyName ao nome do recurso para a chave CMEK.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets?secretId=SECRET_ID" \
    --request "POST" \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --data-binary @- <<EOF
{
  "replication":{
    "automatic":{
      "customerManagedEncryption":{
        "kmsKeyName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
      }
    }
  }
}
EOF

Cada vez que uma versão do secret é criada nele, a payload é criptografado automaticamente usando a chave antes de ser gravado no o armazenamento permanente, desde que a identidade do serviço tenha acesso à chave CMEK. Se a identidade do serviço perder o acesso ou se a chave ficar indisponível, um tentar criar uma nova versão do secret ou acessar uma existente retornará uma erro.

Adicione uma nova versão do secret. Não é necessário especificar o nome do recurso da chave do Cloud KMS. Ele é lido nos metadados do segredo.

gcloud

Para usar o Secret Manager na linha de comando, primeiro Instale ou faça upgrade para a versão 378.0.0 ou mais recente da Google Cloud CLI. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

echo -n "SECRET_DATA" | gcloud secrets versions add "SECRET_ID" \
    --project "SM_PROJECT_ID" \
    --data-file -

A versão do secret é criada, mesmo que o autor da chamada não tenha acesso direto para usar a chave CMEK. A identidade do serviço do Secret Manager, o autor da chamada, é responsável por criptografar e descriptografar secrets ao ler ou escrevê-las.

Da mesma forma, você não precisa de acesso direto à chave CMEK para acessar o segredo. A identidade do serviço acessa a chave e criptografa ou descriptografa o segredo em seu nome.

Acesse a versão do secret que você acabou de criar:

gcloud

Para usar o Secret Manager na linha de comando, primeiro instale ou faça upgrade para a versão 378.0.0 ou mais recente da CLI do Google Cloud. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud secrets versions access "latest" \
    --project "SM_PROJECT_ID" \
    --secret "SECRET_ID"

Atualizar a configuração do CMEK

Crie uma nova chave KMS simétrica na multirregião global do Cloud KMS.

gcloud

Para usar o Secret Manager na linha de comando, primeiro Instale ou faça upgrade para a versão 378.0.0 ou mais recente da Google Cloud CLI. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Conceda à identidade do serviço o acesso ao Secret Manager para criptografar e descriptografar usando a nova chave CMEK. Esse comando concede ao Cloud KMS Criptografador / Descriptografador (roles/cloudkms.cryptoKeyEncrypterDecrypter) no my-other-key chave do Cloud KMS para a identidade do serviço.

gcloud

Para usar o Secret Manager na linha de comando, primeiro Instale ou faça upgrade para a versão 378.0.0 ou mais recente da Google Cloud CLI. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Modifique a configuração da CMEK em um secret atualizando a replicação no com os novos nomes de recursos de chave do Cloud KMS.

gcloud

Para usar o Secret Manager na linha de comando, primeiro instale ou faça upgrade para a versão 378.0.0 ou mais recente da CLI do Google Cloud. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud secrets replication update "SECRET_ID" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --project "SM_PROJECT_ID"

API

Esses exemplos usam curl para demonstrar o uso da API. É possível gerar tokens de acesso com o gcloud auth print-access-token. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/SECRET_ID?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication": {
    "automatic":{
      "customerManagedEncryption":{
        "kmsKeyName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
      }
    }
  }
}
EOF

CMEK com replicação gerenciada pelo usuário

Nesta seção, abordamos os secrets configurados com uma replicação gerenciada pelo usuário política. Com uma política de replicação gerenciada pelo usuário, você controla o local do Google Cloud em que o secret é armazenado. Os secrets podem ser acessados em todos os locais do Google Cloud.

Secrets com uma política de replicação gerenciada pelo usuário precisam usar chaves do Cloud KMS que mapeiam exatamente para os locais em que as versões de Secrets estão armazenadas. Os exemplos deste guia armazenam um segredo em dois locais separados: us-east1 e us-central1. As solicitações para acessar o secret são encaminhadas para um desses locais.

Em cada uma das duas regiões, crie um keyring e uma chave do Cloud KMS com a finalidade de criptografia ou use uma chave existente. Este exemplo cria uma nova chamado "secret-manager-cmek", e cria uma chave com o nome "my-cmek-key" em cada região.

gcloud

Para usar o Secret Manager na linha de comando, primeiro Instale ou faça upgrade para a versão 378.0.0 ou mais recente da Google Cloud CLI. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"
gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Conceda à identidade do serviço do Secret Manager a permissão para criptografar e descriptografar usando a chave CMEK. Para isso, conceda o papel de criptografador/descriptografador do Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) para cada chave CMEK individualmente ou para todas as chaves no projeto.

gcloud

Para usar o Secret Manager na linha de comando, primeiro Instale ou faça upgrade para a versão 378.0.0 ou mais recente da Google Cloud CLI. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Crie um secret ativado para CMEK com replicação gerenciada pelo usuário. O nome do recurso a chave CMEK é armazenada como metadados no secret.

gcloud

Para usar o Secret Manager na linha de comando, primeiro Instale ou faça upgrade para a versão 378.0.0 ou mais recente da Google Cloud CLI. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

cat <<EOF > ./replication-policy.json
{
  "userManaged":{
    "replicas":[
      {
        "location":"us-east1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
        }
      },
      {
        "location":"us-central1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
        }
      }
    ]
  }
}
EOF
gcloud secrets create "my-ummr-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

API

Esses exemplos usam curl para demonstrar o uso da API. É possível gerar tokens de acesso com o gcloud auth print-access-token. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

Defina o valor de replication.userManaged.replicas.customerManagedEncryption.kmsKeyNameàs nomes de recursos para as chaves CMEK.

curl "https://secretmanager.googleapis.com/v1/projects/SM_PROJECT_ID/secrets?secretId=my-ummr-secret" \
--request "POST" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--data-binary @- <<EOF
{
  "replication":{
    "userManaged":{
      "replicas":[
        {
          "location":"us-east1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
          }
        },
        {
          "location":"us-central1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
          }
        }
      ]
    }
  }
}
EOF

Cada vez que uma versão do secret é criada nele, a payload é criptografado automaticamente usando a chave antes de ser gravado no o armazenamento permanente, desde que a identidade do serviço tenha acesso à chave CMEK. Se a identidade do serviço perder o acesso ou a chave ficar indisponível, um tentar criar uma nova versão do secret ou acessar uma existente retornará uma erro.

Adicione uma nova versão do secret. Não é necessário especificar o nome do recurso da chave do Cloud KMS. Ele é lido nos metadados do segredo.

gcloud

Para usar o Secret Manager na linha de comando, primeiro instale ou faça upgrade para a versão 378.0.0 ou mais recente da CLI do Google Cloud. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

echo -n "SECRET_DATA" | gcloud secrets versions add "my-ummr-secret" \
    --project "SM_PROJECT_ID" \
    --data-file -

A versão do secret é criada, mesmo que o autor da chamada não tenha acesso direto ao use a chave CMEK. A identidade de serviço do Secret Manager, e não o autor da chamada, é responsável por criptografar e descriptografar secrets ao lê-los ou gravá-los.

Da mesma forma, você não precisa de acesso direto à chave CMEK para acessar o segredo. A identidade do serviço acessa a chave e criptografa ou descriptografa o segredo em seu nome.

Acesse a versão do secret que você acabou de criar.

gcloud

Para usar o Secret Manager na linha de comando, primeiro instale ou faça upgrade para a versão 378.0.0 ou mais recente da CLI do Google Cloud. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud secrets versions access "latest" \
    --project "SM_PROJECT_ID" \
    --secret "my-ummr-secret"

Atualizar a configuração do CMEK

Crie duas novas chaves KMS simétricas nas mesmas regiões do secret.

gcloud

Para usar o Secret Manager na linha de comando, primeiro instale ou faça upgrade para a versão 378.0.0 ou mais recente da CLI do Google Cloud. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"
gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Conceda à identidade de serviço o acesso ao Secret Manager para criptografar e descriptografar usando as novas chaves CMEK. Esse comando concede ao Cloud KMS Criptografador / Descriptografador (roles/cloudkms.cryptoKeyEncrypterDecrypter) no my-other-key chaves do Cloud KMS para a identidade do serviço.

gcloud

Para usar o Secret Manager na linha de comando, primeiro Instale ou faça upgrade para a versão 378.0.0 ou mais recente da Google Cloud CLI. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Para modificar a configuração do CMEK em um secret, atualize a replicação no secret com os novos nomes de recursos da chave do Cloud KMS.

gcloud

Para usar o Secret Manager na linha de comando, primeiro instale ou faça upgrade para a versão 378.0.0 ou mais recente da CLI do Google Cloud. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud secrets replication update "my-ummr-secret" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --location us-east1 \
    --project "SM_PROJECT_ID"
gcloud secrets replication update "my-ummr-secret" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --location us-central1 \
    --project "SM_PROJECT_ID"

Para atualizar simultaneamente várias chaves em um secret, é possível definir a política de replicação com um arquivo.

gcloud

Para usar o Secret Manager na linha de comando, primeiro instale ou faça upgrade para a versão 378.0.0 ou mais recente da CLI do Google Cloud. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud secrets replication get "my-ummr-secret" \
    --project "SM_PROJECT_ID" \
    --format=json > ./replication-policy.json

Atualize o arquivo para refletir a configuração da CMEK desejada de acordo com sua preferência editor. Em seguida, defina a nova política:

gcloud secrets replication set "my-ummr-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

API

Esses exemplos usam curl para demonstrar o uso da API. É possível gerar tokens de acesso com o gcloud auth print-access-token. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/my-ummr-secret?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication":{
    "userManaged":{
      "replicas":[
        {
          "location":"us-east1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
          }
        },
        {
          "location":"us-central1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
          }
        }]
      }
    }
  }
EOF

Conferir a configuração do CMEK da versão do secret

Para inspecionar os metadados de uma versão de secret, inclusive se ela é ativada para CMEK e o nome do recurso da versão da chave de CMEK, confira os metadados.

gcloud

Para usar o Secret Manager na linha de comando, primeiro instale ou faça upgrade para a versão 378.0.0 ou mais recente da CLI do Google Cloud. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud secrets versions describe "latest" \
    --secret "SECRET_ID" \
    --project "SM_PROJECT_ID"

API

Esses exemplos usam curl para demonstrar o uso da API. É possível gerar tokens de acesso com o gcloud auth print-access-token. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/SM_PROJECT_ID/secrets/SECRET_ID/versions/latest" \
    --request "GET" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json"

Isso retorna o nome completo do recurso do Cloud KMS referente à versão da chave usada para criptografar a versão do secret.

{
  "name": "projects/PROJECT_NUMBER/secrets/SECRET_ID/versions/1",
  "createTime": "2021-07-...",
  "state": "ENABLED",
  "replicationStatus": {
    "automatic": {
      "customerManagedEncryption": {
        "kmsKeyVersionName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key/cryptoKeyVersions/1"
      }
    }
  }
}

Adicionar uma chave do Cloud EKM a uma política de CMEK

Nesta seção, você verá como adicionar uma chave do Cloud EKM a uma política de CMEK. Essas etapas permitem que uma chave do Cloud EKM seja usada para criptografar ou descriptografar segredos.

Como o Cloud EKM não oferece suporte à multirregião global no momento, as chaves do Cloud EKM só podem ser usadas com segredos configurados para a replicação gerenciada pelo usuário.

Crie uma chave simétrica na região us-central1 do Cloud KMS (ou qualquer região, exceto global). Este exemplo cria um novo keyring chamado secret-manager-cmek-ekm e cria uma nova chave com o nome my-ekm-key anel

gcloud

Para usar o Secret Manager na linha de comando, primeiro Instale ou faça upgrade para a versão 378.0.0 ou mais recente da Google Cloud CLI. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

Crie um novo keyring:

gcloud kms keyrings create "secret-manager-cmek-ekm" \
  --project "KMS_PROJECT_ID" \
  --location "us-central1"

Crie uma chave nesse keyring:

gcloud kms keys create "my-ekm-key" \
  --keyring "secret-manager-cmek-ekm" \
  --location "us-central1" \
  --purpose "encryption" \
  --protection-level "external" \
  --skip-initial-version-creation \
  --default-algorithm "external-symmetric-encryption"

Em seguida, crie uma nova versão de my-ekm-key usando o URI externo da chave. Para saber mais sobre URIs externos para chaves do Cloud EKM, consulte Criar uma chave externa.

gcloud

Para usar o Secret Manager na linha de comando, primeiro instale ou faça upgrade para a versão 378.0.0 ou mais recente da CLI do Google Cloud. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud kms keys versions create \
  --key "my-ekm-key" \
  --keyring "secret-manager-cmek-ekm" \
  --location "us-central1" \
  --external-key-uri EXTERNAL_KEY_URI \
  --primary

Conceda à identidade do serviço acesso ao Secret Manager para criptografar e descriptografar usando a chave externa. Esse comando concede o papel de criptografador/descriptografador do Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) em my-ekm-key à identidade do serviço.

gcloud

Para usar o Secret Manager na linha de comando, primeiro instale ou faça upgrade para a versão 378.0.0 ou mais recente da CLI do Google Cloud. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud kms keys add-iam-policy-binding "my-ekm-key" \
  --project "KMS_PROJECT_ID" \
  --location "us-central1" \
  --keyring "secret-manager-cmek-ekm" \
  --member "serviceAccount:SM_SERVICE_IDENTITY" \
  --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Crie um secret ativado para CMEK que use uma chave do Cloud EKM.

gcloud

Para usar o Secret Manager na linha de comando, primeiro instale ou faça upgrade para a versão 378.0.0 ou mais recente da CLI do Google Cloud. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

cat <<EOF > ./replication-policy.json
{
  "userManaged":{
    "replicas":[
      {
        "location":"us-central1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek-ekm/cryptoKeys/my-ekm-key"
        }
      }
    ]
  }
}
EOF
gcloud secrets create "my-ekm-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

Cada vez que uma versão do secret é criada no my-ekm-secret, o estado payload é criptografado automaticamente usando a chave do Cloud EKM antes de ser gravado o armazenamento permanente, desde que a identidade do serviço tenha acesso à chave. Se a identidade do serviço perder o acesso ou se a chave ficar indisponível, uma tentativa de criar uma nova versão do secret ou acessar uma versão atual vai retornar um erro.

Adicione uma nova versão do secret. O nome do recurso da chave é lido dos metadados do segredo.

gcloud

Para usar o Secret Manager na linha de comando, primeiro Instale ou faça upgrade para a versão 378.0.0 ou mais recente da Google Cloud CLI. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

echo -n "SECRET_DATA" | gcloud secrets versions add "my-ekm-secret" \
    --project "SM_PROJECT_ID" \
    --data-file -

A versão do secret é criada, mesmo que o autor da chamada não tenha acesso direto ao use a chave. A identidade do serviço do Secret Manager, é responsável por criptografar e descriptografar secrets ao ler ou escrevê-las.

Acesse a versão do secret que você acabou de criar. É aqui que a identidade do serviço acessa a chave e criptografa ou descriptografa o segredo em seu nome.

gcloud

Para usar o Secret Manager na linha de comando, primeiro Instale ou faça upgrade para a versão 378.0.0 ou mais recente da Google Cloud CLI. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud secrets versions access "latest" \
  --project "SM_PROJECT_ID" \
  --secret "my-ekm-secret"

Desativar a CMEK

Atualize a política de replicação para remover a configuração de CMEK de um secret.

gcloud

Para usar o Secret Manager na linha de comando, primeiro instale ou faça upgrade para a versão 378.0.0 ou mais recente da CLI do Google Cloud. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

gcloud secrets replication update "SECRET_ID" --remove-cmek \
    --project "SM_PROJECT_ID"

API

Esses exemplos usam curl para demonstrar o uso da API. É possível gerar tokens de acesso com o gcloud auth print-access-token. No Compute Engine ou no GKE, você precisa fazer a autenticação com o escopo do cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/SECRET_ID?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication":{
    "automatic":{}
  }
}
EOF

A seguir

  • Saiba mais sobre o CMEK.