Defina públicos-alvo personalizados para serviços (original) (raw)

Esta página descreve como usar públicos-alvo personalizados para autorização.

Os clientes que chamam um serviço do Cloud Run protegido pela gestão de identidade e acesso têm de fornecer um token de ID válido que inclua uma reivindicação de público-alvo (aud) correspondente ao URL *.run.app do serviço de receção. Para clientes que não conhecem este URL, pode usar um valor de público-alvo personalizado.

Compreender os públicos-alvo personalizados

O Cloud Run fornece uma função de invocador (roles/run.invoker) para suportar ocontrolo de acesso com a IAM. O controlo de acesso da IAM usa tokens de ID assinados pela Google, que são incluídos como símbolos da Web JSON (JWTs). Os conteúdos destes tokens estão em conformidade com uma norma OIDC.

Um campo de público-alvo é codificado no token para especificar o destino pretendido que pode usar o token. Isto limita o risco de um ataque de repetição, em que um token intercetado destinado a utilização com um serviço é repetido contra um serviço diferente.

Por convenção, o público-alvo é o URL completo do serviço de destino. Por predefinição, no Cloud Run, este é o URL gerado pela Google para um serviço que termina em run.app.

No entanto, um serviço do Cloud Run pode estar por detrás de um URL que não seja o URL gerado por predefinição, como nos seguintes cenários:

Nestes cenários, tem de configurar um serviço para aceitar valores de públicos-alvo personalizados que permitam alvos adicionais conhecidos por um cliente. O URL gerado pela Google predefinido permanece sempre como um valor de público-alvo aceite.

A definição de públicos-alvo personalizados para o Cloud Run é feita ao nível do serviço e aplica-se a todas as revisões de publicação, de forma semelhante à subscrição de autorização da IAM.

Pode definir vários públicos-alvo personalizados, desde que a codificação JSON dos públicos-alvo como uma lista de strings não exceda 32 768 carateres.

Qualquer alteração de configuração leva à criação de uma nova revisão. As revisões subsequentes também recebem automaticamente esta definição de configuração, a menos que faça atualizações explícitas para a alterar.

gcloud

Pode definir públicos-alvo personalizados num serviço através do seguinte comando:

gcloud run services update SERVICE --add-custom-audiences=AUDIENCE

Substituir

Pode remover todos os públicos-alvo personalizados de um serviço através do seguinte comando:

gcloud run services update SERVICE --clear-custom-audiences

YAML

  1. Se estiver a criar um novo serviço, ignore este passo. Se estiver a atualizar um serviço existente, transfira a respetiva configuração YAML:
    gcloud run services describe SERVICE --format export > service.yaml
  2. Defina a anotação run.googleapis.com/custom-audiences nos metadados do serviço (não nos metadados template):
    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
    name: SERVICE
    annotations:
    run.googleapis.com/custom-audiences: '["AUDIENCE"]'
    spec:
    template:
    ...
    Substituir
    • SERVICE com o nome do seu serviço do Cloud Run
    • AUDIENCE com uma string para o público-alvo personalizado que quer suportar, por exemplo, myservice ou https://myservice.example.com
      Tenha em atenção que o valor do atributo é uma matriz JSON de strings entre aspas, o que requer a utilização de aspas duplas e simples.
  3. Substitua o serviço pela respetiva nova configuração através do seguinte comando:
    gcloud run services replace service.yaml

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

Adicione o seguinte a um recurso google_cloud_run_v2_service na sua configuração do Terraform:

resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE"
  location = "REGION"

  custom_audiences = ["AUDIENCE"]
  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
  }
}

Substituir:

Validar públicos-alvo personalizados

  1. Obtenha um token de ID para uma conta de serviço que tenha autorização da IAM para invocar o serviço. Tenha em atenção a utilização do público-alvo personalizado AUDIENCE.
    export TOKEN=$(gcloud auth print-identity-token --impersonate-service-account SERVICE_ACCOUNT_EMAIL --audiences='AUDIENCE')
    Substituir:
    • SERVICE_ACCOUNT_EMAIL com o email da conta de serviço. Termina com .iam.gserviceaccount.com.
    • AUDIENCE com o valor do público-alvo personalizado que definiu no serviço.
  2. Chame o ponto final do serviço com esse token de ID
    curl -H "Authorization: Bearer ${TOKEN}" ENDPOINT
    Substitua ENDPOINT pelo ponto final para aceder ao seu serviço, por exemplo, o respetivo domínio personalizado ou URL .run.app.
  3. Confirme que o pedido está autorizado e que vê a resposta esperada do seu serviço.