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 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 o
controlo 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:
- Quando usar um domínio personalizado para alcançar um serviço em que o cliente não tem conhecimento do URL gerado pela Google.
- Quando implementa vários serviços atrás de um equilibrador de carga em que um cliente não consegue prever a que serviço regional um pedido chega. Os URLs gerados pela Google para serviços são específicos da região, mesmo que o nome do serviço seja o mesmo.
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 predefinido gerado pela Google permanece sempre como um valor de público-alvo aceite.
Defina e atualize públicos-alvo personalizados
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 vão receber 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
- 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
ouhttps://myservice.example.com
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
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
Defina a anotação
run.googleapis.com/custom-audiences
nos metadados do serviço (não nos metadadostemplate
):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
ouhttps://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.
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 recursogoogle_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:
- SERVICE com o nome do seu serviço do Cloud Run.
- REGION com a região Google Cloud . Por exemplo,
europe-west1
. - AUDIENCE com uma string para o público-alvo personalizado que quer
suportar, por exemplo,
myservice
.
Validar públicos-alvo personalizados
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.
- SERVICE_ACCOUNT_EMAIL com o email da conta de serviço. Termina com
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
.Confirme que o pedido está autorizado e que vê a resposta esperada do seu serviço.