Usar a federação de identidade de cargas de trabalho para o GKE

Saiba como autenticar os seus serviços Knative Serving com a Workload Identity Federation para o GKE para aceder a Google Cloud APIs, como as APIs Compute, Storage e Database, ou as APIs Machine Learning.

Para autenticar os seus serviços de publicação do Knative, tem de:

  1. Ative a federação de identidade da carga de trabalho para o GKE no seu cluster
  2. Configure autorizações
  3. Associe a sua conta de serviço do Kubernetes (KSA) a uma conta de serviço Google (GSA)

Depois de seguir estes passos, pode implementar um novo serviço Knative serving que use a identidade que criou.

Ativar a federação de identidade da carga de trabalho para o GKE no seu cluster

Para configurar a federação de identidades da carga de trabalho para o GKE com o Knative serving, pode configurar a federação de identidades da carga de trabalho da frota em vez de usar um Google Cloud ficheiro JSON da conta de serviço.

Configure as autorizações para ativar todas as métricas

Para ativar métricas, como a contagem de pedidos de relatórios ou a latência de pedidos para o Google Cloud Observability, tem de conceder autorizações de escrita para o Cloud Monitoring. Por exemplo, pode conceder a função de escritor de métricas de monitorização (roles/monitoring.metricWriter) à conta de serviço Google associada ao Knative Serving, uma vez que inclui as autorizações necessárias para escrever dados de monitorização. Consulte o artigo Usar contas de serviço para mais informações sobre como criar contas de serviço Google.

Associar contas de serviço

Tem de configurar uma relação para que uma conta de serviço do Kubernetes (KSA) atue como uma conta de serviço Google (GSA). Qualquer carga de trabalho executada como a KSA que associar é autenticada automaticamente como a GSA quando acede às Google Cloud APIs. O KSA que associa tem de existir no cluster e no espaço de nomes do serviço Knative Serving para o qual quer usar a Workload Identity Federation para o GKE. O GSA pode pertencer a um Google Cloud projeto diferente doGoogle Cloud projeto onde o cluster reside.

  1. Se não existir um GSA, crie um. Caso contrário, avance para o passo seguinte. Pode criar uma ASA para utilização com o Knative Serving em qualquer Google Cloud projeto na sua organização e, em seguida, utilizá-la noGoogle Cloud projeto onde os seus serviços do Knative Serving são executados.

    Para criar um novo GSA, execute o seguinte comando:

    gcloud iam service-accounts create GSA_NAME

    Substitua GSA_NAME pelo nome da nova conta de serviço Google.

    Para mais informações sobre a utilização de contas de serviço Google com os seus serviços de fornecimento do Knative, consulte o artigo Usar contas de serviço.

  2. Certifique-se de que o GSA tem as funções do IAM de que precisa. Pode conceder funções adicionais através do seguinte comando:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
        --role "ROLE_NAME"

    Substituição:

    • PROJECT_ID: com o ID do projeto onde reside a conta de serviço da Google. Google Cloud
    • GSA_NAME com o nome da sua conta de serviço Google.
    • ROLE_NAME com a função de IAM a atribuir ao seu GSA, como roles/monitoring.metricWriter.
  3. Se não existir uma conta de serviço do Kubernetes, crie uma no mesmo espaço de nomes do Kubernetes que o seu serviço Knative serving; caso contrário, avance para o passo seguinte:

    kubectl create serviceaccount --namespace K8S_NAMESPACE KSA_NAME
  4. Associe as contas de serviço do Kubernetes e da Google para criar a identidade e, em seguida, implemente-a no cluster:

    1. Permita que a KSA se faça passar pela GSA criando uma associação da política IAM entre as duas.

      gcloud iam service-accounts add-iam-policy-binding \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:PROJECT_ID.svc.id.goog[K8S_NAMESPACE/KSA_NAME]" \
      GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com

      Substituição:

      • PROJECT_ID com o ID do Google Cloud projeto para o cluster onde residem a sua conta de serviço do Kubernetes e os serviços de fornecimento do Knative.
      • K8S_NAMESPACE/KSA_NAME com o espaço de nomes e o nome da sua conta de serviço do Kubernetes.
      • GSA_NAME@GSA_PROJECT_ID com o nome da sua conta de serviço Google e o ID do Google Cloud projeto. Pode usar qualquer conta de serviço Google na sua organização. Para ver as suas contas de serviço Google, consulte o artigo Listar contas de serviço.
    2. Adicione a anotação iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID à KSA, usando o endereço de email da GSA.

      kubectl annotate serviceaccount \
      --namespace K8S_NAMESPACE KSA_NAME \
       iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com

      Substituição:

      • K8S_NAMESPACE/KSA_NAME com o espaço de nomes e o nome da conta de serviço do Kubernetes para a qual criou uma associação.
      • GSA_NAME@GSA_PROJECT_ID com o nome da sua conta de serviço Google e o ID do projeto para o qual criou uma associação. Google Cloud

Implementar um novo serviço para usar a federação de identidade da carga de trabalho para o GKE

Implemente um novo serviço de publicação do Knative que use a Workload Identity Federation para o GKE que criou.

Consola

  1. Aceda ao Knative serving na Google Cloud consola:

    Aceda ao Knative serving

  2. Clique em Criar serviço se estiver a configurar um novo serviço para o qual está a implementar. Se estiver a configurar um serviço existente, clique no serviço e, de seguida, em Editar e implementar nova revisão.

  3. Em Definições avançadas, clique em Contentor.

  4. Clique no menu pendente Conta de serviço e selecione a conta de serviço pretendida.

  5. Clique em Seguinte para continuar para a secção seguinte.

  6. Na secção Configure como este serviço é acionado, selecione a conetividade que quer usar para invocar o serviço.

  7. Clique em Criar para implementar a imagem no Knative Serving e aguarde que a implementação termine.

Linha de comandos

  • Para serviços existentes, defina a conta de serviço do Kubernetes executando o comando gcloud run services update com os seguintes parâmetros:

    gcloud run services update SERVICE --service-account KSA_NAME

    Substituição:

    • SERVICE com o nome do seu serviço Knative serving.
    • KSA_NAME com a conta de serviço do Kubernetes que usou para criar a identidade da carga de trabalho.
  • Para novos serviços, defina a conta de serviço do Kubernetes executando o comando gcloud run deploy com o parâmetro --service-account:

    gcloud run deploy --image IMAGE_URL --service-account KSA_NAME

    Substituição:

    • IMAGE_URL com uma referência à imagem do contentor, por exemplo, gcr.io/cloudrun/hello.
    • KSA_NAME com a conta de serviço do Kubernetes que usou para criar a identidade da carga de trabalho.

YAML

Pode transferir a configuração de um serviço existente para um ficheiro YAML com o comando gcloud run services describe usando a flag --format=export. Em seguida, pode modificar esse ficheiro YAML e implementar essas alterações com o comando gcloud run services replace. Tem de garantir que modifica apenas os atributos especificados.

  1. Transfira a configuração do seu serviço para um ficheiro denominado service.yaml no espaço de trabalho local:

    gcloud run services describe SERVICE --format export > service.yaml

    Substitua SERVICE pelo nome do seu serviço de fornecimento do Knative.

  2. No ficheiro local, atualize o atributo serviceAccountName::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          serviceAccountName: KSA_NAME

    Substituir

    • SERVICE com o nome do seu serviço Knative serving.
    • KSA_NAME com a conta de serviço do Kubernetes que usou para criar a identidade da carga de trabalho.
  3. Implemente a configuração no seu serviço Knative Serving executando o seguinte comando:

    gcloud run services replace service.yaml

Migrar serviços existentes para usar a federação de identidades da carga de trabalho para o GKE

Se ativou a Workload Identity Federation para o GKE num cluster existente, cada serviço nesse cluster para o qual quer usar a Workload Identity Federation para o GKE tem de ser migrado. Saiba como migrar serviços existentes.

Passos seguintes

Saiba como gerir o acesso aos seus serviços.