A integração entre o Secret Manager e o Google Kubernetes Engine (GKE) permite armazenar dados sensíveis, como senhas e certificados usados pelos clusters do GKE como secrets no Secret Manager.
Nesta página, explicamos como usar o complemento do Secret Manager para acessar os secrets armazenados no Secret Manager como volumes montados em pods do Kubernetes.
Esse processo envolve as seguintes etapas:
- Ative o complemento Secret Manager em um cluster do GKE novo ou atual.
- Configure os aplicativos para autenticação na API Secret Manager.
- Defina quais secrets serão montados em pods do Kubernetes usando um arquivo YAML
SecretProviderClass
. O complemento do Secret Manager é compatível com secrets globais e regionais. - Crie um volume em que os secrets serão montados. Depois que o volume é anexado, os aplicativos no contêiner podem acessar os dados no sistema de arquivos dele.
O complemento do Secret Manager é derivado do driver CSI do Kubernetes Secrets Store (link em inglês) de código aberto e do provedor do Google Secret Manager. Se você estiver usando o driver CSI da Secrets Store de código aberto para acessar secrets, migre para o complemento do Secret Manager. Para mais informações, consulte Migrar do driver CSI da Secrets Store atual.
Vantagens
O complemento do Secret Manager oferece os seguintes benefícios:
- É possível usar uma solução totalmente gerenciada e compatível para acessar secrets do Secret Manager no GKE sem sobrecarga operacional.
- Não é necessário escrever código personalizado para acessar secrets armazenados no Secret Manager.
- É possível armazenar e gerenciar todos os secrets de maneira centralizada no Secret Manager e acessar seletivamente os secrets dos pods do GKE usando o complemento do Secret Manager. Ao fazer isso, você pode usar recursos oferecidos pelo Secret Manager, como criptografia CMEK, controle de acesso refinado, rotação gerenciada, gerenciamento de ciclo de vida e registros de auditoria, além de usar recursos do Kubernetes, como transmissão de secrets para contêineres na forma de volumes montados.
- O complemento do Secret Manager é compatível com clusters Standard e do Autopilot.
- O complemento Secret Manager é compatível com nós que usam imagens de nó do Container-Optimized OS ou do Ubuntu.
Limitações
O complemento do Secret Manager tem as seguintes limitações:
O complemento do Secret Manager não é compatível com o seguinte recurso disponível no driver CSI da Secrets Store de código aberto:
O complemento do Secret Manager não é compatível com nós do Windows Server.
Antes de começar
-
Enable the Secret Manager and Google Kubernetes Engine APIs.
Se você quiser usar a Google Cloud CLI para essa tarefa, instale e inicialize a CLI gcloud. Se você já instalou a CLI gcloud, instale a versão mais recente executando o comando
gcloud components update
.Não é possível configurar manualmente o complemento do Secret Manager usando o SDK Google Cloud ou o console Google Cloud .
Verifique se o cluster executa a versão 1.27.14-gke.1042001 ou posterior do GKE com uma imagem de nó do Linux.
Se você usa um cluster do GKE Standard, verifique se ele tem a federação de identidade da carga de trabalho para o GKE ativada. A federação de identidade da carga de trabalho para o GKE é ativada por padrão em um cluster do Autopilot. Os pods do Kubernetes usam a federação de identidade da carga de trabalho para o GKE para autenticar a API Secret Manager.
Ativar o complemento Secret Manager
É possível ativar o complemento do Secret Manager em clusters Standard e do Autopilot.
Ativar o complemento do Secret Manager em um novo cluster do GKE
Para ativar o complemento do Secret Manager na criação do cluster, faça o seguinte:
Console
-
No console do Google Cloud , acesse a página Google Kubernetes Engine.
Clique em add_boxCriar.
Na caixa de diálogo Criar cluster, clique em Configurar.
No menu de navegação, na seção Cluster, clique em Segurança.
Marque a caixa de seleção Ativar o Secret Manager.
Marque a caixa de seleção Ativar identidade de carga de trabalho.
Continue configurando o cluster e clique em Criar.
gcloud
{ Standard cluster}
Para ativar o complemento do Secret Manager em um novo cluster Standard, execute o seguinte comando:
Antes de usar os dados do comando abaixo, faça estas substituições:
- CLUSTER_NAME: o nome do cluster.
- LOCATION: a região do Compute Engine para o cluster, como
us-central1
. - VERSION: a versão específica do GKE que
você quer usar. Verifique se o cluster executa a versão
1.27.14-gke.1042001 ou posterior do GKE. Se o canal de lançamento padrão não incluir essa versão, use a flag
--release-channel
para escolher um canal de lançamento que inclua. - PROJECT_ID: o ID do seu Google Cloud projeto.
Execute o seguinte comando:
Linux, macOS ou Cloud Shell
gcloud container clusters create CLUSTER_NAME \ --enable-secret-manager \ --location=LOCATION \ --cluster-version=VERSION \ --workload-pool=PROJECT_ID.svc.id.goog
Windows (PowerShell)
gcloud container clusters create CLUSTER_NAME ` --enable-secret-manager ` --location=LOCATION ` --cluster-version=VERSION ` --workload-pool=PROJECT_ID.svc.id.goog
Windows (cmd.exe)
gcloud container clusters create CLUSTER_NAME ^ --enable-secret-manager ^ --location=LOCATION ^ --cluster-version=VERSION ^ --workload-pool=PROJECT_ID.svc.id.goog
{ Autopilot cluster}
Para ativar o complemento do Secret Manager em um novo cluster do Autopilot, execute o seguinte comando:
Antes de usar os dados do comando abaixo, faça estas substituições:
- CLUSTER_NAME: o nome do cluster.
- VERSION: a versão específica do GKE que você quer usar. Verifique se o cluster executa a versão 1.27.14-gke.1042001 ou posterior do GKE. Para definir uma versão específica, consulte Definir a versão e o canal de lançamento de um novo cluster do Autopilot.
- LOCATION: a região do Compute Engine para o cluster, como
us-central1
.
Execute o seguinte comando:
Linux, macOS ou Cloud Shell
gcloud container clusters create-auto CLUSTER_NAME \ --enable-secret-manager \ --cluster-version=VERSION \ --location=LOCATION
Windows (PowerShell)
gcloud container clusters create-auto CLUSTER_NAME ` --enable-secret-manager ` --cluster-version=VERSION ` --location=LOCATION
Windows (cmd.exe)
gcloud container clusters create-auto CLUSTER_NAME ^ --enable-secret-manager ^ --cluster-version=VERSION ^ --location=LOCATION
Depois de ativar o complemento do Secret Manager, você
poderá usar o driver CSI do Secrets Store em volumes do Kubernetes usando o nome do driver
e do provisionador: secrets-store-gke.csi.k8s.io
.
Ativar o complemento Secret Manager em um cluster do GKE
Para ativar o complemento do Secret Manager em um cluster atual, faça o seguinte:
Console
-
No console do Google Cloud , acesse a página Google Kubernetes Engine.
Na lista de clusters, clique no nome do cluster que você quer modificar.
Na página de detalhes do cluster, na seção Segurança, clique em
Secret Manager.Na caixa de diálogo Editar o Secret Manager, marque a caixa de seleção Ativar o Secret Manager.
Clique em Salvar alterações.
gcloud
Antes de usar os dados do comando abaixo, faça estas substituições:
- CLUSTER_NAME: o nome do cluster.
- LOCATION: a região do Compute Engine para o cluster, como
us-central1
Execute o seguinte comando:
Linux, macOS ou Cloud Shell
gcloud container clusters update CLUSTER_NAME \ --enable-secret-manager \ --location=LOCATION \
Windows (PowerShell)
gcloud container clusters update CLUSTER_NAME ` --enable-secret-manager ` --location=LOCATION `
Windows (cmd.exe)
gcloud container clusters update CLUSTER_NAME ^ --enable-secret-manager ^ --location=LOCATION ^
Configurar a rotação automática de secrets
É possível configurar o complemento do Secret Manager para rotacionar automaticamente os secrets. Assim, os secrets atualizados no Secret Manager após a implantação inicial do pod são enviados automaticamente e periodicamente para o pod. Com a rotação automática de secrets montados, os aplicativos recebem automaticamente secrets atualizados sem precisar de reinicialização ou intervenção manual. Esse recurso garante que os aplicativos sempre usem os segredos mais atualizados.
Observe o seguinte sobre a configuração da rotação automática de secrets:
- A rotação automática de secrets é uma configuração opcional.
- É possível configurar esse recurso ao criar um cluster ou atualizar um cluster existente.
- A rotação automática de secrets é compatível com a versão 1.32.2-gke.1059000 ou mais recente do GKE.
Para configurar a rotação automática de secrets, ative o recurso
enable-secret-manager-rotation
e configure o intervalo de rotação definindo
secret-manager-rotation-interval
.
Por exemplo, para configurar a rotação automática em um cluster do GKE atual, use o seguinte comando:
gcloud beta container clusters update CLUSTER_NAME \
--enable-secret-manager \
--location=LOCATION \
--enable-secret-manager-rotation \
--secret-manager-rotation-interval=ROTATION_INTERVAL
Substitua:
CLUSTER_NAME
: o nome do cluster.LOCATION
: o local do cluster, comous-central1
ROTATION_INTERVAL
: o intervalo de rotação em segundos. O intervalo de rotação padrão é de 120 segundos.
Verificar a instalação do complemento do Secret Manager
Para verificar se o complemento do Secret Manager está instalado no cluster do Kubernetes, execute o seguinte comando:
gcloud container clusters describe CLUSTER_NAME --location LOCATION | grep secretManagerConfig -A 4
Substitua:
CLUSTER_NAME
: o nome do cluster.LOCATION
: o local do cluster, comous-central1
.
Configurar aplicativos para autenticação na API Secret Manager
O provedor do Google Secret Manager usa a identidade da carga de trabalho do pod em que um secret é montado ao fazer a autenticação na API Secret Manager. Para permitir que seus aplicativos se autentiquem na API Secret Manager usando a federação de identidade da carga de trabalho do GKE, siga estas etapas:
Crie uma conta de serviço do Kubernetes ou use uma conta de serviço do Kubernetes no mesmo namespace do pod em que você quer ativar o secret.
Crie uma política de permissão do Identity and Access Management (IAM) para o secret no Secret Manager.
Os pods que usam a ServiceAccount do Kubernetes configurada são autenticados automaticamente como o identificador principal do IAM correspondente à ServiceAccount do Kubernetes ao acessar a API Secret Manager.
Criar uma conta de serviço do Kubernetes
Salve o seguinte manifesto como
service-account.yaml
:apiVersion: v1 kind: ServiceAccount metadata: name: KSA_NAME namespace: NAMESPACE
Substitua:
KSA_NAME
: o nome da nova ServiceAccount do KubernetesNAMESPACE
: o nome do namespace do Kubernetes para a ServiceAccount
Aplique o manifesto:
kubectl apply -f service-account.yaml
Crie uma política de permissão do IAM que faça referência à nova ServiceAccount do Kubernetes e conceda a ela permissão para acessar o secret:
gcloud secrets add-iam-policy-binding SECRET_NAME \ --role=roles/secretmanager.secretAccessor \ --member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME
Substitua:
SECRET_NAME
: o nome do secret no Secret ManagerPROJECT_NUMBER
: o número numérico do projeto Google CloudPROJECT_ID
: o ID do projeto do Google Cloud projeto que contém seu cluster do GKENAMESPACE
: o nome do namespace do Kubernetes para a ServiceAccountKSA_NAME
: o nome da sua ServiceAccount do Kubernetes
Usar uma ServiceAccount do Kubernetes
Crie uma política de permissão do IAM que faça referência à ServiceAccount do Kubernetes e conceda a ela permissão para acessar o secret:
gcloud secrets add-iam-policy-binding SECRET_NAME \
--role=roles/secretmanager.secretAccessor \
--member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME
Substitua:
SECRET_NAME
: o nome do secret no Secret ManagerPROJECT_NUMBER
: o número numérico do projeto Google CloudPROJECT_ID
: o ID do projeto do Google Cloud projeto que contém seu cluster do GKENAMESPACE
: o nome do namespace do Kubernetes para a ServiceAccountKSA_NAME
: o nome da sua ServiceAccount do Kubernetes
Definir quais secrets serão montados
Para especificar quais secrets montar como arquivos no pod do Kubernetes, crie um manifesto YAML SecretProviderClass
e liste os secrets a serem montados e o nome do arquivo em que eles serão montados. Siga estas etapas:
Salve o seguinte manifesto como
app-secrets.yaml
:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: SECRET_PROVIDER_CLASS_NAME spec: provider: gke parameters: secrets: | - resourceName: "projects/PROJECT_ID/secrets/SECRET_NAME/versions/SECRET_VERSION" path: "FILENAME.txt"
Substitua:
SECRET_PROVIDER_CLASS_NAME
: o nome do objetoSecretProviderClass
.PROJECT_ID
: o ID do projeto.SECRET_NAME
: o nome do secret.SECRET_VERSION
: a versão do secret.FILENAME.txt
: o nome do arquivo em que o valor do secret será montado. É possível criar vários arquivos usando as variáveisresourceName
epath
.
Para um Secret regional,
resourceName
é o caminho completo para o recurso que inclui o local do Secret regional. Por exemplo, "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_NAME/versions/SECRET_VERSION"Aplique o manifesto:
kubectl apply -f app-secrets.yaml
Verifique se o objeto
SecretProviderClass
foi criado:kubectl get SecretProviderClasses
Configurar um volume em que os secrets serão montados
Salve a configuração a seguir como
my-pod.yaml
:apiVersion: v1 kind: Pod metadata: name: POD_NAME namespace: NAMESPACE spec: serviceAccountName: KSA_NAME containers: - image: IMAGE_NAME imagePullPolicy: IfNotPresent name: POD_NAME resources: requests: cpu: 100m stdin: true stdinOnce: true terminationMessagePath: /dev/termination-log terminationMessagePolicy: File tty: true volumeMounts: - mountPath: "/var/secrets" name: mysecret volumes: - name: mysecret csi: driver: secrets-store-gke.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: SECRET_PROVIDER_CLASS_NAME
Substitua:
POD_NAME
: o nome do pod do Kubernetes em que o secret está montadoNAMESPACE
: o nome do namespace do Kubernetes para a ServiceAccountKSA_NAME
: a conta de serviço do Kubernetes que você configurou na etapa Configurar aplicativos para autenticar na API Secret ManagerIMAGE_NAME
: nome da imagem do contêiner.SECRET_PROVIDER_CLASS_NAME
: o nome do objetoSecretProviderClass
.
Somente em clusters padrão, adicione o seguinte ao campo
template.spec
para colocar os pods em pools de nós que usam a federação de identidade da carga de trabalho para o GKE.Pule esta etapa nos clusters do Autopilot, que rejeitam esse nodeSeletor porque todos os nós usam a federação de identidade da carga de trabalho para o GKE.
spec: nodeSelector: iam.gke.io/gke-metadata-server-enabled: "true"
Aplique a configuração a seu cluster.
kubectl apply -f my-pod.yaml
Esta etapa monta um volume mysecret
em /var/secrets
usando o driver CSI
(secrets-store-gke.csi.k8s.io). Esse volume faz referência ao objeto SecretProviderClass
, que atua como provedor.
Migrar do driver CSI do Secrets Store atual
Se você estiver migrando para o complemento do Secret Manager da sua instalação atual do driver CSI do Secrets Store, atualize o manifesto do pod da seguinte maneira:
Atualize o nome do
SecretProviderClass
e doprovider
conforme descrito no manifesto a seguir:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: app-secrets-gke spec: provider: gke parameters: secrets: | - resourceName: "projects/<project_id>/secrets/<secret_name>/versions/<secret_version>" path: "good1.txt"
Atualize o
driver
e osecretProviderClass
do volume do Kubernetes, conforme descrito no manifesto a seguir:volumes: - name: mysecret csi: driver: secrets-store-gke.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "app-secrets-gke"
Desativar o complemento do Secret Manager
Para desativar o complemento do Secret Manager em um cluster padrão ou do Autopilot, execute o seguinte comando:
Console
-
No console do Google Cloud , acesse a página Google Kubernetes Engine.
Na lista de clusters, clique no nome do cluster que você quer modificar.
Na página de detalhes do cluster, na seção Segurança, clique em
Secret Manager.Na caixa de diálogo Editar o Secret Manager, desmarque a caixa de seleção Ativar o Secret Manager.
Clique em Salvar alterações.
gcloud
Antes de usar os dados do comando abaixo, faça estas substituições:
- CLUSTER_NAME: o nome do cluster.
- REGION: a região do Compute Engine para o cluster, como
us-central1
.
Execute o seguinte comando:
Linux, macOS ou Cloud Shell
gcloud container clusters update CLUSTER_NAME \ --no-enable-secret-manager \ --region=REGION \
Windows (PowerShell)
gcloud container clusters update CLUSTER_NAME ` --no-enable-secret-manager ` --region=REGION `
Windows (cmd.exe)
gcloud container clusters update CLUSTER_NAME ^ --no-enable-secret-manager ^ --region=REGION ^