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.
Contas de serviço do Google na Apigee híbrida sem a Identidade da carga de trabalho
Sem usar a Identidade da carga de trabalho, é preciso vincular as contas de serviço do Google a cada componente no arquivo overrides.yaml com uma referência a um arquivo de certificado ou a um secret do Kubernetes. Exemplo:
- Arquivos específicos:
watcher: serviceAccountPath: ./apigee-org/my-hybrid-project-apigee-watcher.json
Veja estes tópicos:
- Secret do Kubernetes:
watcher: serviceAccountRef: my-watcher-k8s-secret
Veja estes tópicos:
Variáveis de ambiente usadas nestes procedimentos
Esses procedimentos usam as seguintes variáveis de ambiente. Elas podem ser definidas no shell de comando ou substituídas nas amostras de código por valores reais:
APIGEECTL_HOME
: o diretório em que você instalouapigeectl
.CLUSTER_LOCATION
: a região ou zona do cluster. Por exemplo:us-west1
.ENV_NAME
: nome do ambiente da Apigee.NAMESPACE
: o namespace do Kubernetes que você está usando para a Apigee híbrida. Normalmenteapigee
.HYBRID_FILES
: o diretório de arquivos híbridos. Por exemplo,hybrid-base-directory/hybrid-files
.ORG_NAME
: o nome da organização da Apigee.PROJECT_ID
: o ID do projeto do Google Cloud.
Verifique as variáveis de ambiente:
echo $PROJECT_IDecho $ORG_NAME
echo $ENV_NAME
echo $NAMESPACE
echo $CLUSTER_LOCATION
echo $APIGEECTL_HOME
echo $HYBRID_FILES
Inicialize uma das variáveis necessárias:
export PROJECT_ID=my-project-idexport ORG_NAME=$PROJECT_ID
export ENV_NAME=my-environment-name
export NAMESPACE=apigee
export CLUSTER_LOCATION=my-cluster-location
export APIGEECTL_HOME=hybrid-base-directory/apigeectl
export HYBRID_FILES=hybrid-base-directory/hybrid-files
Identidade da carga de trabalho e arquivos de chave da conta de serviço
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.
Se você fez o download de arquivos de chave de conta de serviço como parte da instalação da Apigee híbrida,
é possível excluí-los depois de ativar a Identidade da carga de trabalho. Na maioria das instalações, elas residem no
diretório hybrid-base-directory/hybrid-files/service-accounts/
.
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.
- Defina o projeto como o projeto que você está modificando:
gcloud config set project $PROJECT_ID
-
Receba as credenciais de
gcloud
do cluster em que você está ativando a Identidade da carga de trabalho com o seguinte comando:gcloud container clusters get-credentials ${CLUSTER_NAME} \ --region ${CLUSTER_LOCATION} \ --project ${PROJECT_ID}
- Verifique se a Identidade da carga de trabalho está ativada no cluster do GKE que executa a Apigee com o seguinte
comando:
gcloud container clusters describe $CLUSTER_NAME --region $CLUSTER_LOCATION --project $PROJECT_ID
A resposta incluirá algo semelhante ao seguinte:
… … status: RUNNING subnetwork: default workloadIdentityConfig: workloadPool: my-project-id.svc.id.goog
Se necessário, ative a Identidade da carga de trabalho no cluster. Esta operação pode levar até 30 minutos.
gcloud container clusters update $CLUSTER_NAME \ --workload-pool=$PROJECT_ID.svc.id.goog \ --project $PROJECT_ID \ --region $CLUSTER_LOCATION
Para mais informações, consulte Ativar a Identidade da carga de trabalho.
- Verifique se a Identidade da carga de trabalho está ativada em cada pool de nós.
- Liste os pools de nós com o seguinte comando:
gcloud container node-pools list \ --cluster $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID
A resposta será semelhante a esta:
NAME MACHINE_TYPE DISK_SIZE_GB NODE_VERSION apigee-runtime e2-standard-4 100 1.23.12-gke.100 apigee-data e2-standard-4 100 1.23.12-gke.100
- Verifique se a Identidade da carga de trabalho está ativada por pool de nós usando o seguinte comando para cada
pool de nós:
gcloud container node-pools update NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --workload-metadata=GKE_METADATA
Em que NODE_POOL_NAME é o nome de cada pool de nós.
- Liste os pools de nós com o seguinte comando:
Verificar ou criar contas de serviço do Google
Contas de serviço do Google são criadas para muitos componentes da Apigee híbrida durante a instalação. Use este procedimento para verificar as contas de serviço do Google e criar as que forem necessárias.
- Verifique os nomes das contas de serviço do Google do seu projeto com o seguinte comando:
gcloud iam service-accounts list --project $PROJECT_ID
A resposta será semelhante a esta:
Prod.
Para ambientes de produção:
DISPLAY NAME EMAIL DISABLED apigee-cassandra apigee-cassandra@my_project_id.iam.gserviceaccount.com False apigee-logger apigee-logger@my_project_id.iam.gserviceaccount.com False apigee-mart apigee-mart@my_project_id.iam.gserviceaccount.com False apigee-metrics apigee-metrics@my_project_id.iam.gserviceaccount.com False apigee-runtime apigee-runtime@my_project_id.iam.gserviceaccount.com False apigee-synchronizer apigee-synchronizer@my_project_id.iam.gserviceaccount.com False apigee-udca apigee-udca@my_project_id.iam.gserviceaccount.com False apigee-watcher apigee-watcher@my_project_id.iam.gserviceaccount.com False
Sem produção
Para ambientes de produção:
DISPLAY NAME EMAIL DISABLED apigee-non-prod apigee-non-prod@my_project_id.iam.gserviceaccount.com False
Se você precisar criar as contas de serviço do Google para seu projeto, poderá usar dois métodos:
- Use a ferramenta
create-service-account
incluída na Apigee no diretórioapigeectl/tools/
. Essa ferramenta cria todas as contas de serviço com um único comando ou permite criá-las individualmente. - Use o comando
gcloud iam service-accounts create
para criar as contas de serviço uma de cada vez e o comandogcloud projects add-iam-policy-binding
para atribuir os papéis apropriados a cada conta de serviço. Esse método requer a criação de cada conta de serviço individualmente, mas permite que você evite fazer o download dos arquivos de chave.
Use o seguinte comando para criar uma conta de serviço do Google por componente:create-service-account
Prod.
Para ambientes de produção:
$APIGEECTL_HOME/tools/create-service-account --env prod --dir $APIGEECTL_HOME/../service-accounts
Esse comando criará as seguintes contas de serviço:
apigee-cassandra
apigee-logger
apigee-mart
apigee-metrics
apigee-runtime
apigee-synchronizer
apigee-udca
apigee-watcher
Sem produção
Para ambientes de produção:
$APIGEECTL_HOME/tools/create-service-account --env non-prod --dir $APIGEECTL_HOME/../service-accounts
Esse comando criará uma única conta de serviço,
apigee-non-prod
, com todos os papéis atribuídos necessários para gerenciar todos os componentes da Apigee.gcloud
Crie as contas de serviço a seguir e atribua papéis a elas.
- Conta de serviço:
apigee-cassandra
, papel :roles/storage.objectAdmin
Crie a conta:
gcloud iam service-accounts create apigee-cassandra \ --display-name="apigee-cassandra" \ --project $PROJECT_ID
Atribua o papel:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-cassandra@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectAdmin"
- Conta de serviço:
apigee-logger
, papel :roles/logging.logWriter
Crie a conta:
gcloud iam service-accounts create apigee-logger \ --display-name="apigee-logger" \ --project $PROJECT_ID
Atribua o papel:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-logger@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/logging.logWriter"
- Conta de serviço:
apigee-mart
, papel :roles/apigeeconnect.Agent
Crie a conta:
gcloud iam service-accounts create apigee-mart \ --display-name="apigee-mart" \ --project $PROJECT_ID
Atribua o papel:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-mart@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigeeconnect.Agent"
- Conta de serviço:
apigee-metrics
, papel :roles/monitoring.metricWriter
Crie a conta:
gcloud iam service-accounts create apigee-metrics \ --display-name="apigee-metrics" \ --project $PROJECT_ID
Atribua o papel:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter"
- Conta de serviço:
apigee-runtime
, role: nenhum papel atribuído.Crie a conta:
gcloud iam service-accounts create apigee-runtime \ --display-name="apigee-runtime" \ --project $PROJECT_ID
- Conta de serviço:
apigee-synchronizer
, papel :roles/apigee.synchronizerManager
Crie a conta:
gcloud iam service-accounts create apigee-synchronizer \ --display-name="apigee-synchronizer" \ --project $PROJECT_ID
Atribua o papel:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-synchronizer@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigee.synchronizerManager"
- Conta de serviço:
apigee-udca
, papel :roles/apigee.analyticsAgent
Crie a conta:
gcloud iam service-accounts create apigee-udca \ --display-name="apigee-udca" \ --project $PROJECT_ID
Atribua o papel:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-udca@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigee.analyticsAgent"
- Conta de serviço:
apigee-watcher
, papel :roles/apigee.runtimeAgent
Crie a conta:
gcloud iam service-accounts create apigee-watcher \ --display-name="apigee-watcher" \ --project $PROJECT_ID
Atribua o papel:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigee.runtimeAgent"
- Use a ferramenta
Definir workloadIdentityEnabled: true
e criar contas de serviço
apigeectl
cria contas de serviço do Kubernetes para cada componente da Apigee híbrida
quando você define workloadIdentityEnabled: true
no arquivo de substituição e aplica as
alterações.
- Adicione a linha destacada abaixo para o arquivo
overrides.yaml
, na estrofegcp
: Isso ativa a Identidade da carga de trabalho para a instalação e acionaapigeectl
para criar as contas de serviço do Kubernetes quando você aplica a configuração:gcp: projectID: "my-project-id" name: "my-project-id" region: "analytics-region" workloadIdentityEnabled: true
- Adicione as linhas destacada abaixo para o arquivo
overrides.yaml
, na estrofecassandra
: Isso aciona a criação da conta de serviço do Kubernetesapigee-cassandra-backup
:cassandra: ... backup: enabled: true
- Aplique as mudanças com
apigeectl
usando o flag--restore
:$APIGEECTL_HOME/apigeectl apply -f overrides/overrides.yaml --restore
- Verifique as contas de serviço com o seguinte comando:
kubectl get sa -n $NAMESPACE
A saída será semelhante a esta: As contas de serviço do Kubernetes em negrito são as que você precisará anotar com as contas de serviço do Google:
NAME SECRETS AGE apigee-cassandra-backup 1 11m apigee-cassandra-restore 1 11m apigee-cassandra-schema-setup-my-project-id-123abcd-sa 1 11m apigee-cassandra-schema-val-my-project-id-123abcd 1 11m apigee-cassandra-user-setup-my-project-id-123abcd-sa 1 11m apigee-connect-agent-my-project-id-123abcd-sa 1 11m apigee-datastore-default-sa 1 11m apigee-ingressgateway 1 11m apigee-ingressgateway-my-project-id-123abcd 1 11m apigee-ingressgateway-manager 1 11m apigee-init 1 11m apigee-mart-my-project-id-123abcd-sa 1 11m apigee-metrics-sa 1 11m apigee-mint-task-scheduler-my-project-id-123abcd-sa 1 11m apigee-redis-default-sa 1 11m apigee-redis-envoy-default-sa 1 11m apigee-runtime-my-project-id-env-name-234bcde-sa 1 11m apigee-synchronizer-my-project-id-env-name-234bcde-sa 1 11m apigee-udca-my-project-id-123abcd-sa 1 11m apigee-udca-my-project-id-env-name-234bcde-sa 1 11m apigee-watcher-my-project-id-123abcd-sa 1 11m default 1 11m
Anotar as contas de serviço do Kubernetes com as contas de serviço do Google
Para cada componente da Apigee, anote as contas de serviço correspondentes do Kubernetes com a conta de serviço do Google para o componente.
Componentes no nível da organização
Você terá apenas uma instância de cada conta de serviço do Kubernetes para a organização da Apigee.
Componente | Conta de serviço do Kubernetes | Conta de serviço do Google |
---|---|---|
Cassandra | apigee-cassandra-backup |
apigee-cassandra |
apigee-cassandra-restore |
apigee-cassandra |
|
apigee-cassandra-schema-setup-my-project-id-num-id1-sa |
apigee-cassandra |
|
apigee-cassandra-schema-val-my-project-id-num-id1 |
apigee-cassandra |
|
apigee-cassandra-user-setup-my-project-id-num-id1-sa |
apigee-cassandra |
|
apigee-datastore-default-sa |
apigee-cassandra |
|
Apigee Connect | apigee-connect-agent-my-project-id-num-id1-sa |
apigee-mart |
MART | apigee-mart-my-project-id-num-id1-sa |
apigee-mart |
Métricas | apigee-metrics-sa |
apigee-metrics |
UDCA (nível organizacional) | apigee-udca-my-project-id-num-id1-sa |
apigee-udca |
Watcher | apigee-watcher-my-project-id-num-id1-sa |
apigee-watcher |
Componentes no nível do ambiente
Você vai ter uma instância de cada conta de serviço do Kubernetes para cada ambiente da Apigee.
Componente | Conta de serviço do Kubernetes | Conta de serviço do Google |
---|---|---|
Ambiente de execução da Apigee: - | apigee-runtime-my-project-id-env-name-num-id2-sa |
apigee-runtime |
Sincronizador | apigee-synchronizer-my-project-id-env-name-num-id2-sa |
apigee-synchronizer |
UDCA (nível do ambiente) | apigee-udca-my-project-id-env-name-num-id2-sa |
apigee-udca |
Nos comandos a seguir, use os nomes de conta de serviço do Kubernetes retornados pelo
comando kubectl get sa -n $NAMESPACE
. Por exemplo:
apigee-cassandra-schema-val-hybrid-example-project-123abcd
.
Neste procedimento, para cada conta de serviço do Kubernetes, você vai:
-
vincular a conta de serviço do Kubernetes e a conta de serviço principal do Google ao
papel do IAM
roles/iam.workloadIdentityUser
; - anotar a conta de serviço do Kubernetes com a conta de serviço do Google;
- vincular os papéis e anotar as contas de serviço.
Componentes no nível da organização
Anotar contas de serviço do Kubernetes para os componentes no nível da organização. É necessário fazer isso uma vez para cada componente na organização da Apigee.
- Cassandra
O componente Cassandra tem seis contas de serviço do Kubernetes associadas:
apigee-cassandra-backup
apigee-cassandra-restore
apigee-cassandra-schema-setup
apigee-cassandra-schema-val
(val
= validação)apigee-cassandra-user-setup
apigee-datastore-default
Prod.
apigee-cassandra-backup
- Defina as variáveis de ambiente
KSA_NAME
eGSA_NAME
:GSA_NAME="apigee-cassandra"
KSA_NAME="apigee-cassandra-backup
" - Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-restore
- Redefina a variável de ambiente
KSA_NAME
:KSA_NAME="apigee-cassandra-restore"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-schema-setup-service-account-name
- Redefina a variável de ambiente
KSA_NAME
:KSA_NAME="apigee-cassandra-schema-setup-service-account-name"
Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-schema-val-service-account-name
- Redefina a variável de ambiente
KSA_NAME
:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-user-setup-service-account-name
- Redefina a variável de ambiente
KSA_NAME
:KSA_NAME="apigee-cassandra-user-setup-service-account-name"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-datastore-default-sa
- Redefina a variável de ambiente
KSA_NAME
:KSA_NAME="apigee-datastore-default-sa"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Sem produção
apigee-cassandra-backup
- Defina as variáveis de ambiente
KSA_NAME
eGSA_NAME
:GSA_NAME="apigee-non-prod"
KSA_NAME="apigee-connect-agent-service-account-name"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-restore
- Redefina a variável de ambiente
KSA_NAME
:KSA_NAME="apigee-cassandra-restore"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-schema-setup-service-account-name
- Redefina a variável de ambiente
KSA_NAME
:KSA_NAME="apigee-cassandra-schema-setup-service-account-name"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-schema-val-service-account-name
- Redefina a variável de ambiente
KSA_NAME
:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-user-setup-service-account-name
- Redefina a variável de ambiente
KSA_NAME
:KSA_NAME="apigee-cassandra-user-setup-service-account-name"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-datastore-default-sa
- Redefina a variável de ambiente
KSA_NAME
:KSA_NAME="apigee-datastore-default-sa"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Apigee Connect
Prod.
- Defina as variáveis de ambiente
KSA_NAME
eGSA_NAME
:GSA_NAME="apigee-mart"
KSA_NAME="apigee-connect-agent-service-account-name
" - Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Sem produção
- Defina a variável de ambiente
KSA_NAME
:KSA_NAME="apigee-connect-agent-service-account-name"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Defina as variáveis de ambiente
- MART
Prod.
- Defina as variáveis de ambiente
KSA_NAME
eGSA_NAME
:GSA_NAME="apigee-mart"
KSA_NAME="apigee-mart-service-account-name"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Sem produção
- Defina a variável de ambiente
KSA_NAME
:KSA_NAME="apigee-mart-service-account-name"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Defina as variáveis de ambiente
- Métricas da Apigee
Prod.
- Defina as variáveis de ambiente
KSA_NAME
eGSA_NAME
:GSA_NAME="apigee-metrics"
KSA_NAME="apigee-metrics-sa"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Sem produção
- Defina a variável de ambiente
KSA_NAME
:KSA_NAME="apigee-metrics-sa"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Defina as variáveis de ambiente
- UDCA (nível organizacional)
Prod.
- Defina as variáveis de ambiente
KSA_NAME
eGSA_NAME
:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-org-level-service-account-name"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Sem produção
- Defina as variáveis de ambiente
KSA_NAME
:KSA_NAME="apigee-udca-org-level-service-account-name"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Defina as variáveis de ambiente
- Apigee Watcher
Prod.
- Defina as variáveis de ambiente
KSA_NAME
eGSA_NAME
:GSA_NAME="apigee-watcher"
KSA_NAME="apigee-watcher-service-account-name"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Sem produção
- Defina a variável de ambiente
KSA_NAME
:KSA_NAME="apigee-watcher-service-account-name"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Defina as variáveis de ambiente
Para cada ambiente:
- Ambiente de execução
Prod.
- Defina as variáveis de ambiente
KSA_NAME
eGSA_NAME
:GSA_NAME="apigee-runtime"
KSA_NAME="apigee-runtime-service-account-name"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Sem produção
- Defina a variável de ambiente
KSA_NAME
:KSA_NAME="apigee-runtime-service-account-name"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Defina as variáveis de ambiente
- Synchronizer
Prod.
- Defina as variáveis de ambiente
KSA_NAME
eGSA_NAME
:GSA_NAME="apigee-synchronizer"
KSA_NAME="apigee-synchronizer-service-account-name"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Sem produção
- Defina a variável de ambiente
KSA_NAME
:KSA_NAME="apigee-synchronizer-service-account-name"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Defina as variáveis de ambiente
- UDCA (nível do ambiente)
Prod.
- Defina as variáveis de ambiente
KSA_NAME
eGSA_NAME
:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-env-level-service-account-name"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Sem produção
- Defina a variável de ambiente
KSA_NAME
:KSA_NAME="apigee-udca-env-level-service-account-name"
- Vincule o papel do IAM:
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
- Anote a conta de serviço:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Defina as variáveis de ambiente
- Cassandra
- Valide se as etapas funcionaram:
gcloud config set project $PROJECT_ID
Selecione uma conta de serviço do Kubernetes a ser testada, por exemplo:
apigee-cassandra-backup
.KSA_NAME="kubernetes-service-account-name"
kubectl run --rm -it --image google/cloud-sdk:slim \ --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
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 --filter "apigee"
DISPLAY NAME EMAIL DISABLED apigee-cassandra apigee-cassandra@PROJECT_ID.iam.gserviceaccount.com False 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:
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 \ --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