Ative chaves de encriptação geridas pelo cliente para o Secret Manager

Por predefinição, o Secret Manager encripta o conteúdo do cliente em repouso. O Secret Manager 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 Secret Manager. 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 monitorizar a utilização das chaves, 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 seus recursos do Secret Manager é 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).

O Secret Manager oferece ferramentas para armazenar, gerir e aceder a dados confidenciais nas suas aplicações.

CMEK com chave automática do Cloud KMS

Pode criar CMEKs manualmente para proteger os seus recursos do Secret Manager 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 Secret Manager. 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.

O Secret Manager só é compatível com a chave automática do Cloud KMS quando cria recursos através do Terraform ou da API REST.

Para saber como usar CMEKs criadas manualmente para proteger os recursos do Secret Manager, consulte CMEK com replicação automática e CMEK com replicação gerida pelo utilizador nesta página.

Para saber como usar CMEKs criadas pela chave automática do Cloud KMS para proteger os seus recursos do Secret Manager, consulte o artigo Usar a chave automática com recursos do Secret Manager.

Como funciona a CMEK no Secret Manager

Antes de escrever uma versão secreta no armazenamento persistente numa determinada localização, o Secret Manager encripta os dados com uma chave de encriptação de dados (DEK) exclusiva. Esta DEK é, em seguida, encriptada com uma chave específica da réplica, denominada chave de encriptação de chaves (KEK), que é propriedade do serviço Secret Manager.

Quando usa a CMEK para o Secret Manager, a KEK é denominada chave CMEK e é uma chave simétrica que gere no Cloud KMS. A chave CMEK tem de estar na mesma Google Cloud localização que a réplica da versão secreta que encripta. Também pode usar uma chave do EKM na política de CMEK para encriptação e desencriptação.

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

Limitações

A CMEK só está disponível na API Secret Manager v1 e na CLI Google Cloud.

Antes de começar

Pode optar por armazenar todos os recursos no mesmo projeto ou armazenar segredos e chaves em projetos separados. Leia o artigo Separação de funções do Cloud KMS para compreender melhor esta decisão.

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

  • Secret Manager:

    • Crie ou use um projeto existente para alojar os seus recursos do Secret Manager.
    • Se necessário, conclua os passos na secção Configurar o Secret Manager do início rápido do Secret Manager.
  • Cloud KMS:

    • Crie ou use um projeto existente para alojar os seus recursos do Cloud KMS.
    • Se necessário, ative a API Cloud KMS.

Defina as seguintes variáveis 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

Autentique-se em Google Cloud:

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito cloud-platform.

gcloud auth login

Criar uma identidade de agente de serviço

Tem de criar uma identidade de agente de serviço para cada projeto que exija chaves de encriptação geridas pelo cliente.

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

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito cloud-platform.

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

Que devolve um nome de identidade do serviço no seguinte formato:

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

Guarde 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

Concede a esta identidade de serviço acesso às chaves do Cloud KMS da CMEK usadas para encriptar e desencriptar os seus segredos.

CMEK com replicação automática

Esta secção aborda segredos configurados através de uma política de replicação automática.

Para segredos que usam a política de replicação automática, a sua chave CMEK tem de estar localizada na multirregião do global Cloud KMS. Se estiver a usar uma chave do EKM na nuvem, não pode configurar o seu segredo para usar a replicação automática, porque as chaves do EKM na nuvem não estão disponíveis na região global. Para saber como usar as chaves do EKM da nuvem, consulte o artigo Adicione uma chave do EKM da nuvem a uma política de CMEK.

Crie uma chave simétrica do Cloud KMS na região do globalCloud KMS ou use uma chave existente. Este exemplo cria um novo conjunto de chaves denominado secret-manager-cmek e, em seguida, cria uma nova chave denominada my-cmek-key no mesmo.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito 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 de serviço do Secret Manager acesso para encriptar e desencriptar através da chave CMEK. Este comando concede a função de encriptar/desencriptar do Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) à identidade de serviço na chave do Cloud KMS my-cmek-key.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito 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 segredo com replicação automática. O nome do recurso da chave CMEK é armazenado como metadados no segredo.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito 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

Estes exemplos usam o curl para demonstrar a utilização da API. Pode gerar chaves de acesso com gcloud auth print-access-token. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito cloud-platform.

Defina o valor de replication.automatic.customerManagedEncryption.kmsKeyName para o nome do recurso da 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

Agora, sempre que é criada uma versão secreta nesse segredo, a carga útil da versão secreta é automaticamente encriptada através da chave antes de ser escrita no armazenamento persistente, 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, uma tentativa de criar uma nova versão do segredo ou aceder a uma existente devolve um erro.

Adicione uma nova versão do segredo. Tenha em atenção que não especifica o nome do recurso da chave do Cloud KMS. Este é lido a partir dos metadados do segredo.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito cloud-platform.

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

A versão do segredo é criada, mesmo que o autor da chamada não tenha acesso direto à chave CMEK. A identidade do serviço do Secret Manager, em vez do autor da chamada, é responsável por encriptar e desencriptar segredos quando os lê ou escreve.

Da mesma forma, não precisa de acesso direto à chave CMEK para aceder ao segredo. A identidade do serviço acede à chave e encripta ou desencripta o segredo em seu nome.

Aceda à versão do Secret que acabou de criar:

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito cloud-platform.

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

Atualize a configuração de CMEK

Crie novas chaves KMS simétricas na global multirregião do Cloud KMS.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito cloud-platform.

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

Conceda à identidade de serviço do Secret Manager acesso para encriptar e desencriptar através da nova chave CMEK. Este comando concede a função de encriptar / desencriptar (roles/cloudkms.cryptoKeyEncrypterDecrypter) do Cloud KMS à identidade de serviço na chave do Cloud KMS my-other-key.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito 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 num segredo atualizando a replicação no segredo com os novos nomes de recursos de chaves do Cloud KMS.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito 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

Estes exemplos usam o curl para demonstrar a utilização da API. Pode gerar chaves de acesso com gcloud auth print-access-token. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito 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 gerida pelo utilizador

Esta secção aborda os segredos configurados com uma política de replicação gerida pelo utilizador. Com uma política de replicação gerida pelo utilizador, controla a Google Cloud localização onde o Secret é armazenado. Os Secrets estão sempre acessíveis a partir de todas as Google Cloud localizações.

Os segredos com uma política de replicação gerida pelo utilizador têm de usar chaves do Cloud KMS que correspondam exatamente às localizações nas quais as versões secretas estão armazenadas. Os exemplos neste guia armazenam um segredo em duas localizações separadas: us-east1 e us-central1. As solicitações de acesso ao segredo são encaminhadas para uma destas localizações.

Em cada uma das duas regiões, crie um conjunto de chaves e uma chave do Cloud KMS com o objetivo de encriptação ou use uma chave existente. Este exemplo cria um novo conjunto de chaves denominado "secret-manager-cmek" e, em seguida, cria uma chave denominada "my-cmek-key" em cada região.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito 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 de serviço autorização do Secret Manager para encriptar e desencriptar através da chave CMEK, concedendo a função de encriptar/ desencriptar do Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) para cada uma das chaves CMEK individualmente ou para todas as chaves no projeto.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito 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 segredo ativado com CMEK com replicação gerida pelo utilizador. O nome do recurso da chave CMEK é armazenado como metadados no segredo.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito 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

Estes exemplos usam o curl para demonstrar a utilização da API. Pode gerar chaves de acesso com gcloud auth print-access-token. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito cloud-platform.

Defina o valor de replication.userManaged.replicas.customerManagedEncryption.kmsKeyNamepara os nomes dos recursos das 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

Agora, sempre que é criada uma versão secreta nesse segredo, a carga útil da versão secreta é automaticamente encriptada através da chave antes de ser escrita no armazenamento persistente, 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, uma tentativa de criar uma nova versão do segredo ou aceder a uma existente devolve um erro.

Adicione uma nova versão do segredo. Tenha em atenção que não especifica o nome do recurso da chave do Cloud KMS. Este é lido a partir dos metadados do segredo.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito cloud-platform.

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

A versão do segredo é criada, mesmo que o autor da chamada não tenha acesso direto à chave CMEK. A identidade do serviço do Secret Manager, em vez do autor da chamada, é responsável por encriptar e desencriptar segredos quando os lê ou escreve.

Da mesma forma, não precisa de acesso direto à chave CMEK para aceder ao segredo. A identidade do serviço acede à chave e encripta ou desencripta o segredo em seu nome.

Aceda à versão do Secret que acabou de criar.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito cloud-platform.

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

Atualize a configuração de CMEK

Crie duas novas chaves KMS simétricas nas mesmas regiões que o segredo.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito 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 do Secret Manager acesso para encriptar e desencriptar através das novas chaves CMEK. Este comando concede a função de encriptar / desencriptar (roles/cloudkms.cryptoKeyEncrypterDecrypter) do Cloud KMS às chaves do Cloud KMS my-other-key à identidade do serviço.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito 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 num segredo atualizando a replicação no segredo com os novos nomes de recursos de chaves do Cloud KMS.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito 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 num segredo em simultâneo, pode obter e definir a política de replicação através de um ficheiro.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito cloud-platform.

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

Atualize o ficheiro para refletir a configuração CMEK pretendida no seu editor preferido. 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

Estes exemplos usam o curl para demonstrar a utilização da API. Pode gerar chaves de acesso com gcloud auth print-access-token. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito 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

Veja a configuração CMEK da versão secreta

Para inspecionar os metadados de uma versão secreta, incluindo se a versão secreta tem a CMEK ativada e o nome do recurso da versão da chave CMEK, veja os respetivos metadados.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito cloud-platform.

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

API

Estes exemplos usam o curl para demonstrar a utilização da API. Pode gerar chaves de acesso com gcloud auth print-access-token. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito 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"

Isto devolve o nome do recurso do Cloud KMS completo da versão da chave usada para encriptar a versão do segredo.

{
  "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"
      }
    }
  }
}

Adicione uma chave do Cloud EKM a uma política CMEK

Esta secção aborda a adição de uma chave do Cloud EKM a uma política de CMEK. Estes passos permitem usar uma chave do EKM do Google Cloud para encriptar ou desencriptar segredos.

Uma vez que o EKM na nuvem não suporta atualmente a globalmultirregião, as chaves do EKM na nuvem só podem ser usadas com segredos configurados para replicação gerida pelo utilizador.

Crie uma chave simétrica na região do us-central1 Cloud KMS (ou em qualquer região, exceto global). Este exemplo cria um novo conjunto de chaves denominado secret-manager-cmek-ekm e, em seguida, cria uma nova chave denominada my-ekm-key no conjunto de chaves.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito cloud-platform.

Crie um novo conjunto de chaves:

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

Crie uma chave nesse conjunto de chaves:

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 do my-ekm-key com o URI externo da chave. Para mais informações sobre os URIs externos das chaves do Cloud EKM, consulte o artigo Crie uma chave externa.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito 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 para o Secret Manager acesso para encriptar e desencriptar através da chave externa. Este comando concede a função de encriptar / desencriptar (roles/cloudkms.cryptoKeyEncrypterDecrypter) do Cloud KMS à identidade do serviço.my-ekm-key

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito 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 segredo ativado com CMEK que use uma chave do Cloud EKM.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito 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"

Agora, sempre que é criada uma versão secreta em my-ekm-secret, a carga útil da versão secreta é automaticamente encriptada através da chave do Cloud EKM antes de ser escrita no armazenamento persistente, 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 segredo ou aceder a uma existente devolve um erro.

Adicione uma nova versão do segredo. Tenha em atenção que o nome do recurso da chave é lido a partir dos metadados do segredo.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito 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 para usar a chave. A identidade do serviço do Secret Manager, em vez do autor da chamada, é responsável por encriptar e desencriptar segredos quando os lê ou escreve.

Aceda à versão do Secret que acabou de criar. É aqui que a identidade do serviço acede à chave e encripta ou desencripta o segredo em seu nome.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito cloud-platform.

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

Desative as CMEK

Remova a configuração da CMEK de um segredo atualizando a política de replicação.

gcloud

Para usar o Secret Manager na linha de comandos, primeiro instale ou atualize para a versão 378.0.0 ou superior da CLI Google Cloud. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito cloud-platform.

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

API

Estes exemplos usam o curl para demonstrar a utilização da API. Pode gerar chaves de acesso com gcloud auth print-access-token. No Compute Engine ou no GKE, tem de autenticar-se com o âmbito 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

O que se segue?

  • Saiba mais acerca das CMEK.