Este documento descreve como configurar e usar a autenticação de cluster da Identidade da carga de trabalho para o Google Distributed Cloud connected. Em vez de chaves de conta de serviço, a autenticação de cluster da Identidade da carga de trabalho usa tokens de curta duração e a federação de identidade da carga de trabalho para permitir que as cargas de trabalho acessem Google Cloud recursos com segurança. As credenciais de curta duração são tokens de acesso OAuth 2.0. Por padrão, os tokens de acesso expiram após 1 hora.
Com a autenticação de cluster da Identidade da carga de trabalho, as cargas de trabalho podem usar a própria identidade do Kubernetes para acessar Google Cloud recursos diretamente ou representar uma conta de serviço do Google.
A autenticação de cluster da Identidade da carga de trabalho oferece dois benefícios principais em relação ao uso de chaves de conta de serviço:
Segurança aprimorada: as chaves de conta de serviço são um risco de segurança quando não são gerenciadas corretamente. Os tokens OAuth 2.0 e a federação de identidade da carga de trabalho são consideradas as práticas recomendadas para chaves de conta de serviço. Para mais informações sobre tokens de conta de serviço, consulte Credenciais de conta de serviço de curta duração Para mais informações sobre a federação de identidade da carga de trabalho, consulte Federação de identidade da carga de trabalho.
Menor manutenção: as chaves de conta de serviço exigem mais manutenção. A rotação e a proteção regulares dessas chaves podem criar um fardo administrativo.
Esta página é destinada a administradores, arquitetos e operadores que configuram, monitoram e gerenciam o ciclo de vida da infraestrutura de tecnologia subjacente. Para saber mais sobre papéis comuns e tarefas de exemplo referenciados no Google Cloud conteúdo, consulte Papéis e tarefas de usuário comuns do GKE e tarefas.
Gerenciamento de clusters
Este guia aborda a federação de identidade da carga de trabalho para seus aplicativos. A federação de identidade da carga de trabalho no nível do cluster é gerenciada automaticamente para clusters conectados do Distributed Cloud.
Os clusters conectados do Distributed Cloud são criados e gerenciados pelo Google pela
API Distributed Cloud Edge Container,
usando o
gcloud edge-cloud container clusters create
comando ou no Google Cloud console.
Os clusters conectados do Distributed Cloud são registrados automaticamente em uma frota no projeto em que foram criados. Não é necessário fazer nenhum registro manual de frota. O pool de federação de identidade da carga de trabalho fica disponível automaticamente e
segue o formato PROJECT_ID.svc.id.goog.
Antes de começar
Antes de configurar a federação de identidade da carga de trabalho, verifique se as seguintes APIs no seu Google Cloud projeto estão ativadas. Para informações sobre como ativar as APIs, consulte Como ativar serviços:
iam.googleapis.comsts.googleapis.comiamcredentials.googleapis.comgkehub.googleapis.com
Verifique se você tem as seguintes ferramentas de linha de comando instaladas:
- A versão mais recente da Google Cloud CLI, que
inclui
gcloud, a ferramenta de linha de comando para interagir com Google Cloud. kubectl
Se você estiver usando o Cloud Shell como ambiente shell para interagir com Google Cloud, essas ferramentas estarão instaladas.
- A versão mais recente da Google Cloud CLI, que
inclui
Verifique se você inicializou a CLI gcloud para usar com seu projeto.
Verifique se você tem os seguintes papéis do IAM no projeto. Esses papéis são necessários para realizar a configuração:
- Proprietário (
roles/owner) ou - Administrador de segurança do IAM (
roles/iam.securityAdmin) e Administrador da conta de serviço (roles/iam.serviceAccountAdmin)
- Proprietário (
Nas seções a seguir, você cria contas de serviço e concede os papéis necessários para a autenticação de cluster da Identidade da carga de trabalho.
Recomendado: acesso direto a recursos da federação de identidade da carga de trabalho
Com o acesso direto a recursos da federação de identidade da carga de trabalho, você usa a federação de identidade da carga de trabalho para conceder um papel do IAM a uma ServiceAccount do Kubernetes para que ela possa acessar Google Cloud recursos diretamente.
| Identidade | Finalidade | Papéis |
|---|---|---|
| Conta de serviço do Kubernetes |
A identidade do Kubernetes que sua carga de trabalho usa. Conceda a essa identidade os
papéis necessários para acessar os recursos necessários. Google Cloud Este exemplo
concede o papel roles/storage.objectViewer e o
roles/logging.admin papel.
|
roles/storage.objectViewerroles/logging.admin |
Alternativa: identidade temporária de conta de serviço do IAM
Como alternativa, é possível configurar a ServiceAccount do Kubernetes para usar a identidade temporária de conta de serviço do IAM.
| Conta de serviço | Finalidade | Papéis |
|---|---|---|
| Conta de serviço do Google | A conta de serviço do Google que sua carga de trabalho no cluster representa. Conceda a essa conta de serviço os papéis necessários para acessar os recursos necessários Google Cloud. | Depende dos recursos que estão sendo acessados. |
| Conta de serviço do Kubernetes |
Conceda a essa identidade a capacidade de representar a conta de serviço do Google.
Essa concessão usa o papel roles/iam.workloadIdentityUser.
|
roles/iam.workloadIdentityUser
|
Configurar contas de serviço
As seções a seguir contêm instruções para criar a ServiceAccount do Kubernetes necessária e conceder a ela os papéis necessários para a autenticação de cluster da Identidade da carga de trabalho usando o acesso direto a recursos da federação de identidade da carga de trabalho ou a representação de conta de serviço do Google.
Criar uma ServiceAccount do Kubernetes
No cluster, use o
comando kubectl create
para criar uma ServiceAccount do Kubernetes para seus pods. Também é possível usar qualquer ServiceAccount atual, incluindo a ServiceAccount padrão no namespace.
kubectl create serviceaccount KSA_NAME --namespace NAMESPACE
Substitua os seguintes valores:
KSA_NAME: um nome para sua ServiceAccount do KubernetesNAMESPACE: o namespace do cluster
Usar a federação de identidade da carga de trabalho para conceder acesso direto a recursos
Para conceder papéis do Identity and Access Management diretamente à identidade da ServiceAccount do Kubernetes, siga estas etapas.
Use o comando gcloud projects describe para encontrar o número do projeto:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"Substitua
PROJECT_IDpelo ID do seu projeto.Use o comando gcloud projects add-iam-policy-binding para conceder os papéis necessários ao principal da identidade do Kubernetes:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://iam.gserviceaccount.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role=roles/storage.objectViewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://iam.gserviceaccount.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role=roles/logging.adminSubstitua os seguintes valores:
PROJECT_NUMBER: o número do projetoNAMESPACE: o namespace do clusterKSA_NAME: o nome da ServiceAccount do Kubernetes
Alternativa: usar a identidade temporária de conta de serviço do IAM para conceder acesso
Se você preferir que as cargas de trabalho representem uma conta de serviço do Google, siga estas etapas.
Use o comando gcloud iam service-accounts create para criar uma conta de serviço do Google:
gcloud iam service-accounts create my-app-sa \ --project=PROJECT_IDSubstitua
PROJECT_IDpelo ID do seu projeto.Use o comando gcloud projects add-iam-policy-binding para conceder à conta de serviço do Google os papéis necessários:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:my-app-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/storage.objectViewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:my-app-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/logging.adminUse o comando gcloud iam service-accounts add-iam-policy-binding para conceder à ServiceAccount do Kubernetes a capacidade de representar a conta de serviço do Google:
gcloud iam service-accounts add-iam-policy-binding my-app-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]"Substitua os seguintes valores:
NAMESPACE: o namespace do clusterKSA_NAME: o nome da ServiceAccount do Kubernetes
Use o kubectl annotate comando para anotar a ServiceAccount do Kubernetes e vinculá-la à conta de serviço do Google:
kubectl annotate serviceaccount \ --namespace NAMESPACE KSA_NAME \ iam.gke.io/gcp-service-account=my-app-sa@PROJECT_ID.iam.gserviceaccount.com
Configurar a carga de trabalho
Atualize a especificação do pod para usar a ServiceAccount do Kubernetes e montar o volume de token projetado. Como os clusters conectados do Distributed Cloud estão fora do
Google CloudGoogle Cloud, também é necessário fornecer um arquivo de configuração de credenciais e definir a
GOOGLE_APPLICATION_CREDENTIALS variável de ambiente `GOOGLE_APPLICATION_CREDENTIALS` para apontar para esse arquivo.
Google Cloud As bibliotecas de cliente no pod usam essas credenciais para trocar o
token do Kubernetes por um Google Cloud token de acesso pela API Security Token Service.
Gere o arquivo
credential-configuration.json. Escolha o comando com base no uso do acesso direto a recursos da federação de identidade da carga de trabalho ou da identidade temporária de conta de serviço do IAM.Acesso direto a recursos da federação de identidade da carga de trabalho
Use o comando gcloud iam workload-identity-pools create-cred-config:
gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/providers/attestor \ --credential-source-file=/var/run/secrets/tokens/gcp-ksa/token \ --credential-source-type=text \ --output-file=credential-configuration.jsonUsar a identidade temporária de conta de serviço do IAM para conceder acesso
Use o comando gcloud iam workload-identity-pools create-cred-config:
gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/providers/attestor \ --service-account=my-app-sa@PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/secrets/tokens/gcp-ksa/token \ --credential-source-type=text \ --output-file=credential-configuration.jsonSubstitua
PROJECT_NUMBERpelo Google Cloud número do projeto. Para encontrar o número do projeto, executegcloud projects describe PROJECT_ID --format="value(projectNumber)".Use o
kubectl create configmapcomando para criar umConfigMapdo Kubernetes para armazenar o arquivo de configuração:kubectl create configmap CREDENTIAL_CONFIG_MAP \ --namespace NAMESPACE \ --from-file=credential-configuration.jsonSubstitua os seguintes valores:
CREDENTIAL_CONFIG_MAP: um nome para seuConfigMap, que contém o arquivo de configuração de credenciaisNAMESPACE: o namespace do cluster
Atualize a especificação do pod com o seguinte conteúdo YAML:
spec: serviceAccountName: KSA_NAME containers: - name: MY_CONTAINER image: MY_IMAGE env: - name: GOOGLE_APPLICATION_CREDENTIALS value: /var/run/secrets/tokens/gcp-creds/credential-configuration.json volumeMounts: - mountPath: /var/run/secrets/tokens/gcp-ksa name: gcp-ksa - mountPath: /var/run/secrets/tokens/gcp-creds name: gcp-creds readOnly: true volumes: - name: gcp-ksa projected: defaultMode: 0420 sources: - serviceAccountToken: path: token audience: PROJECT_ID.svc.id.goog expirationSeconds: 3600 - name: gcp-creds configMap: name: CREDENTIAL_CONFIG_MAPSubstitua os seguintes valores:
KSA_NAME: um nome para sua ServiceAccount do KubernetesMY_CONTAINER: o nome do contêinerMY_IMAGE: o nome da imagem
Limitações
Os seguintes recursos e capacidades não são compatíveis quando você usa a federação de identidade da carga de trabalho para o Distributed Cloud connected:
- Usar um servidor proxy para o processo de troca de tokens
Para informações sobre como usar a federação de identidade da carga de trabalho com o VPC Service Controls, consulte Configurar a integração do VPC Service Controls.
A seguir
- Implantar cargas de trabalho no Distributed Cloud connected
- Gerenciar serviços
- Aplicar as práticas recomendadas de segurança