Ativar chaves de criptografia gerenciadas pelo cliente para o Secret Manager

Este tópico aborda o suporte para Chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês) no Secret Manager.

Visão geral

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

Por padrão, os secrets armazenados no Secret Manager são criptografados com Criptografia padrão do Google. Com a criptografia padrão do Google, os payloads de secrets criptografados por chaves gerenciadas pelo Google antes de serem gravadas no armazenamento permanente; sem necessidade de configuração.

É possível personalizar a criptografia que o Secret Manager usa nos recursos fornecendo chaves de criptografia de chaves. As chaves de criptografia de chaves não criptografam diretamente seus dados, mas criptografam Chaves geradas pelo Google usadas para criptografar seus dados. É possível criar chaves CMEK diretamente ou use o Autokey do Cloud KMS (Pré-lançamento) para criá-los em seu nome. Para Para mais informações, consulte a Visão geral do Autokey.

Para saber mais sobre as opções de criptografia no Google Cloud, consulte Criptografia padrão em repouso. Para informações específicas sobre a CMEK, incluindo suas vantagens e limitações, consulte Chaves de criptografia gerenciadas pelo cliente.

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 chave de criptografia de dados (DEK, na sigla em inglês). Essa DEK é criptografada com uma chave específica da réplica, chamada de chave, de criptografia de chaves (KEK) que pertence ao serviço do 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 mesmo local do Google Cloud que a réplica da versão do secret criptografada. Você também pode usar uma chave do Cloud EKM na política de 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 a API v1 e a gcloud.

Antes de começar

É possível armazenar todos os recursos no mesmo projeto ou armazenar secrets e chaves em projetos separados. Leia Separação de deveres para melhorar entender 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 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 como os IDs do projeto do Secret Manager e projetos 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

Criação manual ou automatizada de chaves

É possível criar chaves do Cloud KMS manualmente ou usar Autokey do Cloud KMS (Pré-lançamento). O Autokey simplifica a criação e o gerenciamento de chaves do Cloud KMS automatizando e atribuição. Com o Autokey, não é preciso provisionar chaves anéis, chaves e contas de serviço com antecedência. Em vez disso, eles são gerados como parte da criação de recursos do Secret Manager. Para mais mais informações, consulte a Visão geral do Autokey. Para ativar o Autokey para o Secret Manager, consulte Ative o Autokey. Para usar o Autokey com os secrets, consulte Como usar o Autokey com os recursos do Secret Manager.

As instruções nesta página são para a criação e atribuição manual de chaves do Cloud KMS.

Como criar uma identidade de agente de serviço

É necessário 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 Google Cloud CLI. 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

Nesta seção, abordamos os secrets configurados por meio de uma replicação automática política.

Para secrets que usam a política de replicação automática, sua chave CMEK precisa ser localizado 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 região. Para saber mais sobre como usar as chaves do Cloud EKM, consulte Adicione 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. Esse 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 acesso ao Secret Manager para criptografar e usando a chave CMEK. Esse comando concede ao Cloud KMS Encrypter / descriptografador (roles/cloudkms.cryptoKeyEncrypterDecrypter) no my-cmek-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-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 de 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 atual retornará uma erro.

Adicione uma nova versão do secret. Você não especifica o nome de host do Cloud KMS nome de recurso da chave. ele é lido nos metadados 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 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 ao use 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 secret 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 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 "SECRET_ID"

Atualizar a configuração da 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 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 Google Cloud CLI. 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 onde o secret está armazenado. Os secrets sempre podem ser acessados de qualquer local 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. O neste guia armazenam uma senha em dois locais separados: us-east1, us- central1. As solicitações para acessar o secret são encaminhadas para um desses locais.

Em cada uma das regiões, crie um keyring e uma chave do Cloud KMS com para criptografia ou usar uma chave atual. 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 permissão à identidade de serviço do Secret Manager para criptografar e descriptografar usando a chave CMEK concedendo o papel Criptografador do Cloud KMS / Papel descriptografador (roles/cloudkms.cryptoKeyEncrypterDecrypter) para cada um dos Chaves 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.kmsKeyNamea 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 de 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 atual retornará uma erro.

Adicione uma nova versão do secret. Você não especifica o nome de host do Cloud KMS nome de recurso da chave. ele é lido nos metadados 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 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-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 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 secret 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 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-ummr-secret"

Atualizar a configuração da 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 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 "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 do serviç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"

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 Google Cloud CLI. 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 várias chaves em um secret simultaneamente, é 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 Google Cloud CLI. 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

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

Para inspecionar os metadados de uma versão de secret, inclusive se ela está 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 Google Cloud CLI. 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, mostramos como adicionar uma chave do Cloud EKM a uma política de CMEK. Esses permitem que uma chave do Cloud EKM seja usada para criptografar ou descriptografar secrets.

Como o Cloud EKM atualmente não oferece suporte à multirregião global, As chaves do Cloud EKM só podem ser usadas com secrets configurados para o usuário replicação gerenciada.

Crie uma chave simétrica na região us-central1 do Cloud KMS (ou qualquer região, exceto global). Esse 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 Google Cloud CLI. 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 ao Cloud KMS Papel de criptografador / descriptografador (roles/cloudkms.cryptoKeyEncrypterDecrypter) ativado 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 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-ekm-key" \
  --project "KMS_PROJECT_ID" \
  --location "us-central1" \
  --keyring "secret-manager-cmek-ekm" \
  --member "serviceAccount:SM_SERVICE_IDENTITY" \
  --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Criar um secret ativado para CMEK que usa 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 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-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 a chave ficar indisponível, um tentar criar uma nova versão do secret ou acessar uma atual retornará uma erro.

Adicione uma nova versão do secret. O nome de recurso da chave é lido no metadados 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 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 secret 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 Google Cloud CLI. 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.