Etapa 10 (opcional): configurar a Identidade da carga de trabalho no GKE

GKE somente com a Identidade da carga de trabalho: configurar a Identidade da carga de trabalho

Siga estas etapas se você tiver configurado o arquivo de substituições para a Identidade da carga de trabalho no GKE na Etapa 6: configurar o cluster.

Se você não estiver usando a Identidade da carga de trabalho no GKE, continue com a Parte 3, Etapa 1: expor o gateway de entrada da Apigee.

Contas de serviço do Google Cloud e do Kubernetes

Uma conta de serviço do Google Cloud é um tipo especial de conta que pode ser usada para fazer chamadas de API autorizadas por meio da autenticação como a própria conta de serviço. As contas de serviço do Google Cloud podem receber papéis e permissões semelhantes a um usuário individual. Quando um aplicativo é autenticado como uma conta de serviço, ele tem acesso a todos os recursos que ela tem permissão para acessar. Para saber mais sobre as contas de serviço do Google Cloud, consulte Visão geral de contas de serviço.

Você criou contas de serviço do Google Cloud para a instalação híbrida da Apigee na Etapa 4: Criar contas de serviço. A Apigee usa essas 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 em um pod e permite a autenticação no servidor da API de maneira semelhante a um usuário. Para saber mais sobre contas de serviço do Kubernetes, consulte Configurar contas de serviço para pods.

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

Ao configurar a Identidade da carga de trabalho no GKE, você associa as contas de serviço do Google Cloud às contas de serviço do Kubernetes no cluster do Kubernetes. Dessa forma, as contas de serviço do Kubernetes podem representar as contas de serviço do Google Cloud e usar os papéis e permissões atribuídos para a autenticação nos componentes híbridos.

Siga essas instruções para configurar a Identidade da carga de trabalho para seu projeto.

Preparar-se para configurar a Identidade da carga de trabalho

Esses procedimentos usam as seguintes variáveis de ambiente. Verifique se elas estão definidas e configure aquelas que não estiverem:

echo $APIGEECTL_HOME
echo $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $PROJECT_ID
echo $ORG_NAME
  1. Verifique se a configuração gcloud atual está definida como o ID do projeto do Google Cloud com o comando a seguir:
    gcloud config get project
  2. Se necessário, defina a configuração atual da gcloud:

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

    Quando você aplicou sua configuração executando apigeectl apply, o comando criou a maioria das contas de serviço do Kubernetes necessárias para a Identidade da carga de trabalho.

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

    $APIGEECTL_HOME/apigeectl apply -f $HYBRID_FILES/overrides/overrides.yaml --restore
  4. Verifique se a Identidade da carga de trabalho está ativada no cluster do GKE. Quando você criou o cluster na Etapa 1: criar um cluster, a etapa 6 foi ativar a Identidade da carga de trabalho. Confirme se a Identidade da carga de trabalho está ativada 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'

    A saída será semelhante a esta:

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

    Se você vir null nos resultados, execute o seguinte comando a fim de ativar a Identidade da carga de trabalho no 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 da carga de trabalho para cada pool de nós com os comandos a seguir. Essa operação pode levar 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

    Em que NODE_POOL_NAME é o nome de cada pool de nós. Na maioria das instalações da Apigee híbrida, os dois pools de nós padrão são denominados apigee-data e apigee-runtime.

  6. Verifique se a Identidade da carga de trabalho está ativada nos pools de nós 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:"

    A resposta será semelhante a esta:

    ---
    diskSizeGb: 100
    diskType: pd-standard
    ...
    workloadMetadataConfig:
      mode: GKE_METADATA
        
  7. Confira uma lista dos nomes das contas de serviço do Google Cloud para seu projeto. Você precisará desses nomes para associar as contas de serviço do Kubernetes e configurar a Identidade da carga de trabalho. Para instalações de não produção, deve haver apenas uma conta de serviço do Google. Para instalações de produção, é preciso haver oito.

    Use o seguinte comando para acessar a lista de nomes:

    gcloud iam service-accounts list --project $PROJECT_ID

    A resposta será semelhante a esta:

    Sem produção

    Para ambientes que não sejam de produção:

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

    Produção

    Para ambientes que não sejam 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
    
  8. Confira uma lista dos nomes das contas de serviço do Kubernetes. Você precisará dessa lista de nomes para a associação às contas de serviço do Google Cloud posteriormente neste procedimento. Use o comando a seguir:
    kubectl get sa -n $NAMESPACE

    A saída será semelhante a esta: As contas de serviço do Kubernetes em negrito são aquelas que você precisará associar às 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
        

Configurar a Identidade da carga de trabalho

Siga este procedimento para ativar a Identidade da carga de trabalho na instalação híbrida:

  1. 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.

    As etapas a seguir usam duas variáveis de ambiente. Você redefinirá os valores dessas variáveis antes de cada conjunto de comandos:

    • GSA_NAME: o nome de uma conta de serviço do Google. Essas são as contas de serviço que você criou com a ferramenta create-service-account na Etapa 4: criar contas de serviço.
    • KSA_NAME: o nome de uma conta de serviço do Kubernetes. Essas são as contas que você listou acima com o comando kubectl get sa -n $NAMESPACE. Por exemplo: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa.
    • Cassandra

      Configure a Identidade da carga de trabalho 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

      Sem produção

      Configure a conta de serviço do Kubernetes apigee-cassandra-backup

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

        A saída precisa ter uma linha descrevendo a anotação, semelhante a:

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

      Configure a conta de serviço do Kubernetes apigee-cassandra-restore

      1. Redefina a variável de ambiente KSA_NAME:

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

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

      1. Redefina a variável de ambiente KSA_NAME:

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

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

      1. Redefina a variável de ambiente KSA_NAME:

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

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

      1. Redefina a variável de ambiente KSA_NAME:

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

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

      1. Redefina a variável de ambiente KSA_NAME:

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

      Produção

      Configure a conta de serviço do Kubernetes apigee-cassandra-backup

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

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

      Configure a conta de serviço do Kubernetes apigee-cassandra-restore

      1. Redefina a variável de ambiente KSA_NAME:

        KSA_NAME="apigee-cassandra-restore"
      2. 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 \
          --project $PROJECT_ID
      3. 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

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

      1. Redefina a variável de ambiente KSA_NAME:

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

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

      1. Redefina a variável de ambiente KSA_NAME:

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

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

      1. Redefina a variável de ambiente KSA_NAME:

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

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

      1. Redefina a variável de ambiente KSA_NAME:

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

      Configure a Identidade da carga de trabalho para o componente Apigee Connect.

      Sem produção

      1. Defina a variável de ambiente KSA_NAME:

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

      Configure a Identidade da carga de trabalho para o componente MART.

      Sem produção

      1. Defina a variável de ambiente KSA_NAME:

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

      Configure a Identidade da carga de trabalho para o componente de métricas da Apigee.

      Sem produção

      1. Defina as variáveis de ambiente KSA_NAME:

        KSA_NAME="apigee-metrics-sa"
      2. 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 \
          --project $PROJECT_ID
      3. 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
      4. Verifique 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. 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 \
        --project $PROJECT_ID
      3. 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
      4. Verifique a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA (nível organizacional)

      Configure a Identidade da carga de trabalho para o componente UDCA no nível da organização.

      O UDCA é implementado nos escopos no nível da organização e do ambiente. Portanto, há duas contas de serviço do Kubernetes separadas para UDCA, uma para cada escopo. É possível diferenciá-las pelo nome da conta. A conta de escopo do ambiente inclui o nome do ambiente no nome da conta de serviço. Exemplo:

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

      Sem produção

      1. Defina as variáveis de ambiente KSA_NAME:

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

      Configure a Identidade da carga de trabalho para o componente Apigee Watcher.

      Sem produção

      1. Defina as variáveis de ambiente KSA_NAME:

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

      Configure a Identidade da carga de trabalho para o componente do ambiente de execução da Apigee.

      Sem produção

      1. Defina as variáveis de ambiente KSA_NAME:

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

      Configure a Identidade da carga de trabalho para o componente do sincronizador.

      Sem produção

      1. Defina as variáveis de ambiente KSA_NAME:

        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        Por exemplo: apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa.
      2. 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 \
          --project $PROJECT_ID
      3. 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
      4. Verifique 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. 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 \
          --project $PROJECT_ID
      3. 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
      4. Verifique a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA (nível do ambiente)

      Configure a Identidade da carga de trabalho para o componente UDCA no nível do ambiente.

      Sem produção

      1. Defina as variáveis de ambiente KSA_NAME:

        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        Por exemplo: apigee-udca-hybrid-example-project-example-env-234bcde-sa.
      2. 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 \
          --project $PROJECT_ID
      3. 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
      4. Verifique 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. 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 \
          --project $PROJECT_ID
      3. 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
      4. Verifique a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
  2. Opcional: exclua os arquivos de chave da conta de serviço transferidos por download.

    Se você criou as contas de serviço do Google com a ferramenta create-service-account, isso pode ter criado chaves de conta de serviço e feito o download dos arquivos de chave .json. Ao usar a Identidade da carga de trabalho no GKE, esses arquivos de chave não são necessários.

    Exclua os arquivos de chave com o seguinte comando:

    rm $HYBRID_FILES/service-accounts/*.json

Verificar a Identidade da carga de trabalho

  1. (Opcional) Veja o status das suas contas de serviço do Kubernetes na página Kubernetes: visão geral das cargas de trabalho no console do Google Cloud.

    Acesse "Cargas de trabalho"

  2. Para verificar o status da implantação novamente com apigeectl check-ready:
    ${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml
(PRÓXIMA) Etapa 1: expor a entrada da Apigee 2