Neste tópico, explicamos como ativar a Identidade da carga de trabalho para a Apigee híbrida.
Visão geral
A Identidade da carga de trabalho é uma maneira de aplicativos em execução no GKE (Google Kubernetes Engine) acessarem os serviços do Google Cloud. Para visões gerais da Identidade da carga de trabalho, consulte:
- Introdução à Identidade da carga de trabalho: autenticação aprimorada para seus aplicativos do GKE
- Como usar a Identidade da carga de trabalho
Uma conta de serviço do Google Cloud IAM é uma identidade que um aplicativo pode usar para fazer solicitações às APIs do Google. Essas contas de serviço são chamadas de GSA (Contas de serviço do Google) no documento. Para mais informações sobre os GSAs, consulte Contas de serviço.
Separadamente, o Kubernetes também tem o conceito de contas de serviço. Uma conta de serviço fornece uma identidade para processos executados em um pod. As contas de serviço do Kubernetes são recursos do Kubernetes, enquanto as contas de serviço do Google são específicas do Google Cloud. Para informações sobre as contas de serviço do Kubernetes, consulte Configurar contas de serviço para pods na documentação do Kubernetes.
Com a Apigee híbrida 1.4 e posterior, a Apigee cria e usa uma conta de serviço do Kubernetes para cada tipo de componente. A ativação da Identidade da carga de trabalho permite que os componentes híbridos se conectem com as contas de serviço do Kubernetes.
Pré-requisitos
Antes de ativar a Identidade da carga de trabalho para a Apigee híbrida, a Identidade da carga de trabalho precisa ser ativada para o cluster do GKE que executa a Apigee.
Se você tiver seguido as instruções do Anthos Service Mesh (ASM), a Identidade da carga de trabalho já estará ativada para o cluster.
Confirme se a Identidade da carga de trabalho está ativada executando o seguinte comando:
gcloud container clusters describe $CLUSTER_NAME
A resposta incluirá algo semelhante ao seguinte:
… … status: RUNNING subnetwork: default workloadIdentityConfig: workloadPool: PROJECT_ID.svc.id.goog
Ao executar a Apigee híbrida no GKE, a prática padrão é criar e fazer o download de chaves
privadas (arquivos .json
) para cada uma das contas de serviço. Ao usar a Identidade da carga de trabalho,
você não precisa fazer o download de chaves privadas de contas de serviço e adicioná-las a Clusters do GKE.
Ativar a Identidade da carga de trabalho para a Apigee híbrida
Para começar, siga as instruções em Como se preparar para ativar a Identidade da carga de trabalho para atualizar pools de nós e inicializar variáveis antes de ativar a Identidade da carga de trabalho.
Em seguida, siga uma destas seções, dependendo das etapas que você estiver realizando:- Ative a Identidade da carga de trabalho para uma nova instalação. Siga estas instruções para uma nova instalação da Apigee híbrida ou se ainda não tiver instalado o ASM na instalação híbrida.
- Faça upgrade de uma instalação para usar a Identidade da carga de trabalho. Siga estas instruções para ativar a Identidade da carga de trabalho na instalação da Apigee híbrida.
Prepare-se para ativar a Identidade da carga de trabalho.
Antes de iniciar o processo de instalação, siga as etapas nesta seção.
Inicialize as variáveis
Inicialize (ou verifique) as seguintes variáveis:
export PROJECT_ID=my-project-idexport ORG_NAME=$PROJECT_ID
export ENV_NAME=my-environment-name
export NAMESPACE=apigee #the namespace where apigee is installed
Defina o projeto como o projeto que você está modificando:
gcloud config set project $PROJECT_ID
Atualize os pools de nós
Verifique se a Identidade da carga de trabalho está ativada por pool de nós com o seguinte comando:
gcloud container node-pools update $NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --workload-metadata=GKE_METADATA
Ative a Identidade da carga de trabalho para uma nova instalação
Siga estas instruções ao ativar a Identidade da carga de trabalho durante uma nova instalação híbrida.
- Adicione a linha destacada abaixo para o arquivo
overrides.yaml
, na estrofegcp
:gcp: projectID: "my-project" name: "my-project" region: "us-west1" workloadIdentityEnabled: true
- Crie contas de serviço do Google. É possível usar dois métodos:
- Use a ferramenta
create-service-account
para criar uma conta de serviço do Google por componente com o seguinte comando:$APIGEECTL_HOME/tools/create-service-account --env prod --dir $APIGEECTL_HOME/../service-accounts
Esse comando criará as seguintes contas de serviço:
apigee-logger
apigee-metrics
apigee-cassandra
apigee-udca
apigee-synchronizer
apigee-mart
apigee-watcher
apigee-distributed-trace
As instruções a seguir pressupõem que você usou a ferramenta
create-service-account
para gerar as contas de serviço. - Definir convenções de nomenclatura personalizadas e contas de serviço por ambiente (para usuários avançados).
- Use a ferramenta
- Criar as contas de serviço do Kubernetes.
Para componentes no nível da organização:
- Cassandra
kubectl create sa -n $NAMESPACE apigee-cassandra-schema-setup-$(apigeectl encode --org $ORG_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-cassandra,org=$ORG_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-cassandra-schema-setup-$(apigeectl encode --org $ORG_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
kubectl create sa -n $NAMESPACE apigee-cassandra-user-setup-$(apigeectl encode --org $ORG_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-cassandra,org=$ORG_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-cassandra-user-setup-$(apigeectl encode --org $ORG_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- MART
kubectl create sa -n $NAMESPACE apigee-mart-$(apigeectl encode --org $ORG_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-mart,org=$ORG_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-mart-$(apigeectl encode --org $ORG_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Apigee Connect
kubectl create sa -n $NAMESPACE apigee-connect-$(apigeectl encode --org $ORG_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-connect,org=$ORG_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-connect-$(apigeectl encode --org $ORG_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Apigee Watcher
kubectl create sa -n $NAMESPACE apigee-watcher-$(apigeectl encode --org $ORG_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-watcher,org=$ORG_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-watcher-$(apigeectl encode --org $ORG_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Métricas da Apigee
kubectl create sa -n $NAMESPACE apigee-metrics-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-metrics,org=$ORG_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-metrics-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Para cada ambiente:
- Ambiente de execução
kubectl create sa -n $NAMESPACE apigee-runtime-$(apigeectl encode --org $ORG_NAME --env $ENV_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-runtime,org=$ORG_NAME,env=$ENV_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-runtime-$(apigeectl encode --org $ORG_NAME --env $ENV_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- UDCA
kubectl create sa -n $NAMESPACE apigee-udca-$(apigeectl encode --org $ORG_NAME --env $ENV_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-udca,org=$ORG_NAME,emv=$ENV_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-udca-$(apigeectl encode --org $ORG_NAME --env $ENV_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Sincronizador
kubectl create sa -n $NAMESPACE apigee-synchronizer-$(apigeectl encode --org $ORG_NAME --env $ENV_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-synchronizer,org=$ORG_NAME,env=$ENV_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-synchronizer-$(apigeectl encode --org $ORG_NAME --env $ENV_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Cassandra
- Continue instalando a Apigee híbrida normalmente.
Como fazer upgrade de uma instalação para usar a Identidade da carga de trabalho
Siga estas instruções para adicionar a Identidade da carga de trabalho a uma instalação híbrida atual.
Veja um exemplo que mostra as contas de serviço do Google (GSA) criadas para a Apigee:
gcloud iam service-accounts list | grep apigee
apigee-connect apigee-connect@$PROJECT_ID.iam.gserviceaccount.com False apigee-runtime apigee-runtime@$PROJECT_ID.iam.gserviceaccount.com False apigee-metrics apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com False apigee-mart apigee-mart@$PROJECT_ID.iam.gserviceaccount.com False apigee-watcher apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com False apigee-sync apigee-sync@$PROJECT_ID.iam.gserviceaccount.com False apigee-udca apigee-udca@$PROJECT_ID.iam.gserviceaccount.com False
Veja um exemplo de contas de serviço do Kubernetes (KSA) criadas para a Apigee (supondo que a Apigee híbrida 1.4 ou posterior esteja instalada):
kubectl get sa -n $NAMESPACE
apigee-cassandra-schema-setup-ORG_NAME
-cb84b88-sa 1 xxd apigee-cassandra-user-setup-ORG_NAME
-cb84b88-sa 1 xxd apigee-connect-agent-ORG_NAME
-cb84b88-sa 1 xxd apigee-init 1 xxd apigee-mart-ORG_NAME
-cb84b88-sa 1 xxd apigee-metrics-apigee-telemetry 1 xxd apigee-runtime-ORG_NAME-ENV_NAME
-1d0dc5e-sa 1 xxd apigee-synchronizer-ORG_NAME-ENV_NAME
-1d0dc5e-sa 1 xxd apigee-udca-ORG_NAME-ENV_NAME
-1d0dc5e-sa 1 xxd apigee-watcher-ORG_NAME
-cb84b88 1 xxd
- Adicione o papel de Identidade da carga de trabalho a cada conta de serviço:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Por exemplo, se você estiver definindo as permissões do Synchronizer da Apigee, execute:
export KSA_NAME=$(kubectl get sa -n apigee -l app=apigee-synchronizer,env=$ENV_NAME,org=$ORG_NAME --output=jsonpath={.items..metadata.name})
gcloud iam service-accounts add-iam-policy-binding --role roles/iam.workloadIdentityUser --member "serviceAccount:$PROJECT_ID.svc.id.goog[apigee/$KSA_NAME]" apigee-sync@$PROJECT_ID.iam.gserviceaccount.com
- Anote cada KSA com os detalhes do GSA:
kubectl annotate serviceaccount \ --namespace $NAMESPACE \ $KSA_NAME \ iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Por exemplo, se você estiver definindo as permissões do Synchronizer da Apigee, execute:
export KSA_NAME=$(kubectl get sa -n apigee -l app=apigee-synchronizer,env=$ENV_NAME,org=$ORG_NAME --output=jsonpath={.items..metadata.name})
kubectl annotate serviceaccount --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-sync@$PROJECT_ID.iam.gserviceaccount.com
- Valide se as etapas funcionaram:
gcloud config set project $PROJECT_ID
kubectl run --rm -it --image google/cloud-sdk:slim --serviceaccount $KSA_NAME --namespace $NAMESPACE workload-identity-test -- gcloud auth list
Caso o prompt de comando não seja exibido, pressione Enter.
Se as etapas tiverem sido executadas corretamente, você verá uma resposta como esta:
Credentialed Accounts ACTIVE ACCOUNT * GSA@PROJECT_ID.iam.gserviceaccount.com
- Se estiver fazendo upgrade de uma instalação anterior, limpe os secrets que continham chaves privadas de conta de serviço:
kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}')
- Verifique os registros:
kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer