Passo 10 (opcional): configure a identidade da carga de trabalho no GKE

GKE apenas com Workload Identity: configure o Workload Identity

Siga estes passos se tiver configurado o ficheiro de substituições para o Workload Identity no GKE no Passo 6: configure o cluster.

Se não estiver a usar a identidade de carga de trabalho no GKE, avance para a Parte 3, Passo 1: exponha o gateway de entrada do Apigee.

Contas de serviço do Google Cloud e contas de serviço do Kubernetes

Uma conta de serviço do Google Cloud é um tipo especial de conta que pode ser usada para fazer chamadas API autorizadas através da autenticação como a própria conta de serviço. As contas de serviço do Google Cloud podem receber funções e autorizações semelhantes às de um utilizador individual. Quando uma aplicação se autentica como uma conta de serviço, tem acesso a todos os recursos aos quais a conta de serviço tem autorização de acesso. Se quiser saber mais sobre as contas de serviço do Google Cloud, consulte o artigo Vista geral das contas de serviço.

Criou contas de serviço do Google Cloud para a sua instalação híbrida do Apigee no Passo 4: crie contas de serviço. O Apigee usa estas contas de serviço para autenticar os componentes híbridos.

As contas de serviço do Kubernetes são semelhantes às contas de serviço do Google Cloud. Uma conta de serviço do Kubernetes fornece uma identidade para processos executados num pod e permite-lhe autenticar-se no servidor da API de forma semelhante a um utilizador. Se quiser saber mais sobre as contas de serviço do Kubernetes, consulte o artigo Configure Service Accounts for Pods (apenas em inglês).

A ferramenta apigeectl criou a maioria das contas de serviço do Kubernetes necessárias para o Apigee Hybrid quando executou apigeectl apply no procedimento anterior.

Quando configura o Workload Identity no GKE, associa as contas de serviço do Google Cloud às contas de serviço do Kubernetes no cluster do Kubernetes. Desta forma, as contas de serviço do Kubernetes podem roubar a identidade das contas de serviço do Google Cloud e usar as respetivas funções e autorizações atribuídas para fazer a autenticação nos componentes híbridos.

Siga estas instruções para configurar o Workload Identity para o seu projeto.

Prepare-se para configurar o Workload Identity

Estes procedimentos usam as seguintes variáveis de ambiente. Verifique se estão definidos e defina os que não estão:

echo $APIGEECTL_HOME
echo $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $PROJECT_ID
echo $ORG_NAME

Onde:

  • APIGEECTL_HOME é o diretório onde instalou o apigeectl.
  • CLUSTER_LOCATION é a região (ou a zona) do seu cluster, por exemplo, us-central1.
  • ENV_NAME é o nome do seu ambiente.
  • HYBRID_FILES é o diretório onde criou os diretórios overrides e certs.
  • NAMESPACE é o seu espaço de nomes do Apigee.
  • PROJECT_ID é o seu projeto do Google Cloud.
  • ORG_NAME é o nome da sua organização do Apigee.

  1. Verifique se a configuração gcloud atual está definida para o ID do projeto do Google Cloud com o seguinte comando:
    gcloud config get project
  2. Se necessário, defina a configuração gcloud atual:

    gcloud config set project $PROJECT_ID
  3. Crie a apigee-cassandra-restore conta de serviço do Kubernetes.

    Quando aplicou a configuração executando apigeectl apply, o comando criou a maioria das contas de serviço do Kubernetes necessárias para a Workload Identity.

    Para criar a conta de serviço do Kubernetes, execute o comando apigeectl apply com a flag --restore:apigee-cassandra-restore

    $APIGEECTL_HOME/apigeectl apply -f $HYBRID_FILES/overrides/overrides.yaml --restore
  4. Verifique se o Workload Identity está ativado para o seu cluster do GKE. Quando criou o cluster no Passo 1: crie um cluster, o passo 6 consistia em ativar o Workload Identity. Pode confirmar se o Workload Identity está ativado executando o seguinte comando:

    Clusters regionais

    gcloud container clusters describe $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    Clusters zonais

    gcloud container clusters describe $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    O resultado deve ter o seguinte aspeto:

      ---
      workloadPool: PROJECT_ID.svc.id.goog

    Se vir null nos resultados, execute o seguinte comando para ativar a identidade da carga de trabalho para o seu cluster:

    Clusters regionais

    gcloud container clusters update $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --project $PROJECT_ID \
      --region $CLUSTER_LOCATION

    Clusters zonais

    gcloud container clusters update  $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID
  5. Ative a identidade de carga de trabalho para cada grupo de nós com os seguintes comandos. Esta operação pode demorar até 30 minutos para cada nó:

    Clusters regionais

    gcloud container node-pools update NODE_POOL_NAME \
      --cluster=$CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    Clusters zonais

    gcloud container node-pools update NODE_POOL_NAME \
      --cluster=$CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    Onde NODE_POOL_NAME é o nome de cada conjunto de nós. Na maioria das instalações do Apigee Hybrid, os dois conjuntos de nós predefinidos têm os nomes apigee-data e apigee-runtime.

  6. Confirme que o Workload Identity está ativado nos seus node pools com os seguintes comandos:

    Clusters regionais

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    Clusters zonais

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    O resultado deve ter um aspeto semelhante ao seguinte:

    ---
    diskSizeGb: 100
    diskType: pd-standard
    ...
    workloadMetadataConfig:
      mode: GKE_METADATA
        
  7. Obtenha uma lista dos nomes das contas de serviço do Google Cloud para o seu projeto. Precisa destes nomes para associar as contas de serviço do Kubernetes para configurar o Workload Identity. Para instalações de não produção, deve existir apenas uma conta de serviço Google. Para instalações de produção, deve haver oito.

    Use o seguinte comando para obter a lista de nomes:

    gcloud iam service-accounts list --project $PROJECT_ID

    O resultado deve ter um aspeto semelhante ao seguinte:

    Não prod

    Para ambientes de não produção:

    DISPLAY NAME         EMAIL                                                      DISABLED
    apigee-non-prod      apigee-non-prod@my_project_id.iam.gserviceaccount.com      False
    

    Produção

    Para ambientes de não 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
    
  8. Obtenha uma lista de nomes das contas de serviço do Kubernetes. Precisa desta lista de nomes para associar às suas contas de serviço do Google Cloud mais tarde neste procedimento. Use o seguinte comando:
    kubectl get sa -n $NAMESPACE

    O resultado deve ter um aspeto semelhante ao seguinte. As contas de serviço do Kubernetes em negrito são as que tem de associar às suas contas de serviço do Google Cloud:

    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
        

Configure o Workload Identity

Use o procedimento seguinte para ativar o Workload Identity para a sua instalação híbrida:

  1. Para cada componente do Apigee, anote as contas de serviço do Kubernetes correspondentes com a conta de serviço Google para o componente.

    Os passos seguintes usam duas variáveis de ambiente. Repõe os valores destas variáveis antes de cada conjunto de comandos:

    • GSA_NAME: o nome de uma conta de serviço Google. Estas são as contas de serviço que criou com a ferramenta create-service-account no passo 4: crie contas de serviço.
    • KSA_NAME: O nome de uma conta de serviço do Kubernetes. Estas são as contas que indicou acima com o comando kubectl get sa -n $NAMESPACE, por exemplo: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa.
    • Cassandra

      Configure o Workload Identity para o componente 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

      Não prod

      Configure a apigee-cassandra-backupconta de serviço do Kubernetes

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:
        GSA_NAME="apigee-non-prod"
        KSA_NAME="apigee-cassandra-backup"
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

        A saída deve ter uma linha que descreva a anotação, semelhante a:

        Annotations:         iam.gke.io/gcp-service-account: apigee-non-prod@my-project-id.iam.gserviceaccount.com

      Configure a apigee-cassandra-restoreconta de serviço do Kubernetes

      1. Redefina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-cassandra-restore"
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configure a apigee-cassandra-schema-setupconta de serviço do Kubernetes

      1. Redefina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        por exemplo: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa.
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configure a apigee-cassandra-schema-valconta de serviço do Kubernetes

      1. Redefina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        por exemplo: apigee-cassandra-schema-val-hybrid-example-project-123abcd.
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configure a apigee-cassandra-user-setupconta de serviço do Kubernetes

      1. Redefina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        por exemplo: apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa.
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configure a apigee-datastore-default-saconta de serviço do Kubernetes

      1. Redefina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-datastore-default-sa"
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produção

      Configure a apigee-cassandra-backupconta de serviço do Kubernetes

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:
        GSA_NAME="apigee-cassandra"
        KSA_NAME="apigee-cassandra-backup"
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
      5. A saída deve ter uma linha que descreva a anotação, semelhante a:

        Annotations:         iam.gke.io/gcp-service-account: apigee-cassandra@my-project-id.iam.gserviceaccount.com
      6. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configure a apigee-cassandra-restoreconta de serviço do Kubernetes

      1. Redefina a variável de ambiente KSA_NAME:

        KSA_NAME="apigee-cassandra-restore"
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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

      Configure a apigee-cassandra-schema-setupconta de serviço do Kubernetes

      1. Redefina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        por exemplo: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa.
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configure a apigee-cassandra-schema-valconta de serviço do Kubernetes

      1. Redefina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        por exemplo: apigee-cassandra-schema-val-hybrid-example-project-123abcd.
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configure a apigee-cassandra-user-setupconta de serviço do Kubernetes

      1. Redefina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        por exemplo: apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa.
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configure a apigee-datastore-default-saconta de serviço do Kubernetes

      1. Redefina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-datastore-default-sa"
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Connect

      Configure o Workload Identity para o componente Apigee Connect.

      Não prod

      1. Defina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        por exemplo: apigee-connect-agent-hybrid-example-project-123abcd-sa.
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produção

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:
        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        por exemplo: apigee-connect-agent-hybrid-example-project-123abcd-sa.
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • MART

      Configure o Workload Identity para o componente MART.

      Não prod

      1. Defina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-mart-service-account-name-sa"
        por exemplo: apigee-mart-hybrid-example-project-123abcd-sa.
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produção

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-mart-service-account-name-sa"
        por exemplo: apigee-mart-hybrid-example-project-123abcd-sa.
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Métricas do Apigee

      Configure o Workload Identity para o componente de métricas do Apigee.

      Não prod

      1. Defina as KSA_NAMEvariáveis de ambiente:

        KSA_NAME="apigee-metrics-sa"
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produção

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-metrics"
        KSA_NAME="apigee-metrics-sa"
      2. Associe a função de 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 \
        --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA (org-level)

      Configure o Workload Identity para o componente UDCA ao nível da organização.

      A UDCA é implementada nos âmbitos ao nível da organização e do ambiente. Por conseguinte, existem duas contas de serviço do Kubernetes separadas para o UDCA, uma para cada âmbito. Pode distinguir as contas pelo nome. A conta com âmbito de ambiente inclui o nome do ambiente no nome da conta de serviço. Por exemplo:

      • Nível da organização: apigee-udca-my-project-id-123abcd-sa onde my-project-id é o ID do projeto do nome.
      • Env-level: apigee-udca-my-project-id-my-env-234bcde-sa em que my-env é o nome do ambiente.

      Não prod

      1. Defina as KSA_NAMEvariáveis de ambiente:

        KSA_NAME="apigee-udca-service-account-name-sa"
        por exemplo: apigee-udca-hybrid-example-project-123abcd-sa.
      2. Associe a função de 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 \
            --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produção

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-service-account-name-sa"
        por exemplo: apigee-udca-hybrid-example-project-123abcd-sa.
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Watcher

      Configure a identidade de carga de trabalho para o componente Apigee Watcher.

      Não prod

      1. Defina as KSA_NAMEvariáveis de ambiente:

        KSA_NAME="apigee-watcher-service-account-name-sa"
        por exemplo: apigee-watcher-hybrid-example-project-123abcd-sa.
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produção

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-watcher"
        KSA_NAME="apigee-watcher-service-account-name-sa"
        por exemplo: apigee-watcher-hybrid-example-project-123abcd-sa.
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Runtime

      Configure o Workload Identity para o componente Apigee Runtime.

      Não prod

      1. Defina as KSA_NAMEvariáveis de ambiente:

        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        por exemplo: apigee-runtime-hybrid-example-project-example-env-234bcde-sa.
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produção

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-runtime"
        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        por exemplo: apigee-runtime-hybrid-example-project-example-env-234bcde-sa.
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Synchronizer

      Configure o Workload Identity para o componente Synchronizer.

      Não prod

      1. Defina as KSA_NAMEvariáveis de ambiente:

        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        por exemplo: apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa.
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produção

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-synchronizer"
        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        por exemplo: apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa.
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA (env-level)

      Configure o Workload Identity para o componente UDCA ao nível do ambiente.

      Não prod

      1. Defina as KSA_NAMEvariáveis de ambiente:

        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        por exemplo: apigee-udca-hybrid-example-project-example-env-234bcde-sa.
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produção

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        por exemplo: apigee-udca-hybrid-example-project-example-env-234bcde-sa.
      2. Associe a função de 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 \
          --project $PROJECT_ID
      3. Anotar 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
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
  2. Opcional: elimine os ficheiros de chaves da conta de serviço transferidos.

    Se criou as contas de serviço Google com a ferramenta create-service-account, pode ter criado chaves de contas de serviço e transferido os ficheiros de chaves .json. Quando usa o Workload Identity no GKE, não precisa destes ficheiros de chaves.

    Pode eliminar os ficheiros de chaves com o seguinte comando:

    rm $HYBRID_FILES/service-accounts/*.json

Valide o Workload Identity

  1. (Opcional) Pode ver o estado das suas contas de serviço do Kubernetes na página Kubernetes: Vista geral das cargas de trabalho no Google Cloud console.

    Aceda a Cargas de trabalho

  2. Para verificar novamente o estado da implementação com apigeectl check-ready:
    ${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml
(NEXT) Passo 1: exponha a entrada do Apigee 2