Como permitir acesso público (não autenticado)

Há duas maneiras de criar um serviço público do Cloud Run:

  • Desativar a verificação do IAM do invocador do Cloud Run (recomendado).
  • Atribuir o papel do IAM de invocador do Cloud Run ao tipo de membro allUsers.

Funções exigidas

Para desativar ou reativar a verificação do IAM do invocador em um serviço, você precisa ter as seguintes permissões:

  • run.services.create
  • run.services.update
  • run.services.setIamPolicy

Essas permissões estão incluídas no papel de administrador do Cloud Run (roles/run.admin). Confira Papéis do IAM do Cloud Run para ver a lista completa de papéis e permissões associadas.

Desativar a verificação do IAM do invocador do Cloud Run

A maneira recomendada de criar um serviço público é desativar a verificação do IAM do invocador do Cloud Run. O Cloud Run aplica essa verificação por padrão. Use essa solução quando o projeto estiver sujeito à restrição de compartilhamento restrito por domínio em uma política da organização.

Para desativar a verificação:

Console

  1. No Google Cloud console, acesse a página do Cloud Run:

    Acesse o Cloud Run

  2. Clique em Criar serviço se estiver configurando um novo serviço e preencha a página de configurações iniciais do serviço conforme necessário.

    Se você estiver configurando um serviço atual, clique nele e na guia Segurança.

  3. Selecione Permitir acesso público.

  4. Clique em Criar ou Salvar.

gcloud

  • Para um novo serviço, use o comando gcloud run deploy com a flag --no-invoker-iam-check:

    gcloud run deploy SERVICE_NAME --no-invoker-iam-check

    Substitua SERVICE_NAME pelo nome do serviço.

  • Para um serviço atual, use o comando gcloud run services update com a flag --no-invoker-iam-check:

    gcloud run services update SERVICE_NAME --no-invoker-iam-check

Substitua SERVICE_NAME pelo nome do serviço.

YAML

  1. Para visualizar e fazer o download da configuração:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Atualize a anotação run.googleapis.com/invoker-iam-disabled::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
        annotations:
          run.googleapis.com/invoker-iam-disabled: 'true'
        name: SERVICE_NAME

    Substitua SERVICE_NAME pelo nome do serviço do Cloud Run.

  3. Substitua o serviço pela nova configuração usando o seguinte comando:

    gcloud run services replace service.yaml

Terraform

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

Adicione o seguinte a um google_cloud_run_v2_service recurso na configuração do Terraform:
resource "google_cloud_run_v2_service" "default" {
   name     = "SERVICE"
   location = "REGION"
   invoker_iam_disabled = true

   template {
      containers {
      image = "IMAGE_URL"
      }
   }
}

Substitua:

  • SERVICE: o nome do serviço do Cloud Run.
  • REGION: a Google Cloud região, por exemplo, europe-west1.
  • IMAGE_URL: uma referência à imagem do contêiner, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL segue o formato de LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

Verifique se a verificação está desativada após a implantação, navegando até o endpoint HTTPS do serviço.

Ative novamente a verificação do IAM do invocador do Cloud Run.

Para reativar a verificação:

Console

  1. Noconsole, acesse a página Serviços do Cloud Run: Google Cloud

    Acesse o Cloud Run

  2. Clique no serviço e em Segurança.

  3. Selecione Exigir autenticação e Identity and Access Management (IAM).

  4. Clique em Salvar.

gcloud

  • Atualize o serviço transmitindo a flag --invoker-iam-check:

    gcloud run services update SERVICE_NAME --invoker-iam-check

    Substitua SERVICE_NAME pelo nome do serviço.

YAML

  1. Para visualizar e fazer o download da configuração:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Atualize a anotação run.googleapis.com/invoker-iam-disabled::

    apiVersion: serving.knative.dev/v1
     kind: Service
     metadata:
        annotations:
           run.googleapis.com/invoker-iam-disabled: 'false'
        name: SERVICE_NAME

    Substitua SERVICE_NAME pelo nome do serviço do Cloud Run.

Terraform

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

Adicione o seguinte a um google_cloud_run_v2_service recurso na configuração do Terraform:
resource "google_cloud_run_v2_service" "default" {
   name     = "SERVICE"
   location = "REGION"
   invoker_iam_disabled = false

   template {
      containers {
      image = "IMAGE_URL"
      }
   }
}

Substitua:

  • SERVICE: o nome do serviço do Cloud Run.
  • REGION: a Google Cloud região, por exemplo, europe-west1.
  • IMAGE_URL: uma referência à imagem do contêiner, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL segue o formato de LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

Confira se a verificação foi reativada após a implantação acessando o endpoint HTTPS do serviço.

Configurar a política da organização para a verificação do IAM do invocador do Cloud Run

Se você for administrador, poderá restringir a capacidade de desativar a verificação do IAM do invocador usando a restrição gerenciada constraints/run.managed.requireInvokerIam. Essa restrição não é aplicada por padrão.

Atribuir o papel do IAM de invocador do Cloud Run ao tipo de membro allUsers

É possível permitir o acesso público a um serviço atribuindo o papel do IAM de invocador do Cloud Run ao tipo de membro allUsers.

É preciso ter a permissão run.services.setIamPolicy para configurar a autenticação em um serviço do Cloud Run. Essa permissão está incluída no papel de administrador do Cloud Run. Confira Papéis do IAM do Cloud Run para ver a lista completa de papéis e permissões associadas.

Console

Para um serviço do Cloud Run existente:

  1. Noconsole, acesse a página Serviços do Cloud Run: Google Cloud

    Acessar o Google Cloud console

  2. À esquerda do serviço que você quer tornar público, clique na caixa de seleção. Não clique no serviço em si.

  3. No painel de informações no canto superior direito, clique na guia Permissões. Se o painel de informações não estiver visível, talvez seja necessário clicar em Mostrar painel de informações e em Permissões.

  4. Clique em Adicionar principal.

No campo Novos participantes, insira o valor allUsers.

  1. No menu Selecionar um papel, selecione o papel Invocador do Cloud Run.

  2. Clique em Salvar.

  3. Você vai receber uma solicitação para verificar se quer tornar esse recurso público. Clique em Permitir acesso público para aplicar a mudança às configurações do IAM do serviço.

Para um novo serviço que você está criando, crie o serviço e selecione Permitir acesso público na seção Autenticação para disponibilizar o serviço publicamente. Para tornar um serviço particular, selecione Exigir autenticação.

gcloud

Para tornar um serviço acessível publicamente, use o comando gcloud run services para adicionar o tipo de membro allUsers especial a um serviço e conceder a ele o papel roles/run.invoker:

  gcloud run services add-iam-policy-binding [SERVICE_NAME] \
    --member="allUsers" \
    --role="roles/run.invoker"

Executar o comando gcloud run deploy para tornar seu serviço acessível publicamente ao implantá-lo:

gcloud run deploy [SERVICE_NAME] ... --allow-unauthenticated

YAML

Crie um arquivo chamado policy.yaml com o conteúdo a seguir:

bindings:
- members:
  - allUsers
  role: roles/run.invoker

Permitir acesso público para o SERVICE atual usando:

gcloud run services set-iam-policy SERVICE policy.yaml

Terraform

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

Adicione o seguinte a um google_cloud_run_v2_service recurso na configuração do Terraform:
resource "google_cloud_run_v2_service" "default" {
  name     = "public-service"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

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

Para atualizar a vinculação do IAM do serviço para roles/run.invoker, adicione o seguinte recurso que faz referência ao serviço do Cloud Run:

resource "google_cloud_run_service_iam_binding" "default" {
  location = google_cloud_run_v2_service.default.location
  service  = google_cloud_run_v2_service.default.name
  role     = "roles/run.invoker"
  members = [
    "allUsers"
  ]
}

Essa vinculação só é autoritativa para o papel especificado. Outras vinculações do IAM na política de IAM do serviço são preservadas.