Identidade da função (1.ª geração)

Por motivos de segurança, a maioria das interações entre entidades no Google Cloud requer que cada entidade tenha uma identidade validável, protegida por algum tipo de segredo, como uma palavra-passe ou uma chave. Tal como outras entidades precisam de uma identidade para aceder às funções do Cloud Run, as próprias funções precisam frequentemente de aceder a outros recursos para fazer o seu trabalho. Google Cloud Cada função está associada a uma conta de serviço que serve como identidade quando a função acede a outros recursos. A conta de serviço que uma função usa como identidade também é conhecida como a respetiva conta de serviço de tempo de execução.

Para utilização em produção, a Google recomenda que atribua a cada função uma identidade dedicada, atribuindo-lhe uma conta de serviço gerida pelo utilizador. As contas de serviço geridas pelo utilizador permitem-lhe controlar o acesso concedendo um conjunto mínimo de autorizações através da gestão de identidade e de acesso.

Conta de serviço de tempo de execução

A menos que especifique uma conta de serviço de tempo de execução diferente quando implementar uma função, as funções do Cloud Run usam uma conta de serviço predefinida como identidade para a execução de funções:

Estas contas de serviço predefinidas têm a função de Editor, o que lhes permite um acesso amplo a muitos Google Cloud serviços. Embora seja a forma mais rápida de desenvolver funções, a Google recomenda a utilização da conta de serviço predefinida apenas para testes e desenvolvimento. Para produção, deve conceder à conta de serviço de tempo de execução apenas o conjunto mínimo de autorizações necessárias para atingir o respetivo objetivo.

Para proteger as suas funções em produção:

Alterar autorizações na conta de serviço de tempo de execução predefinida

Consola

  1. Aceda à página IAM na Google Cloud consola:

    Aceda à Google Cloud consola

  2. Selecione a conta de serviço predefinida do App Engine ou a conta de serviço de computação predefinida na tabela.

  3. Clique no ícone de lápis no lado direito da linha para mostrar o separador Editar autorizações.

  4. Adicione ou remova funções no menu pendente Função para conceder acesso com privilégios mínimos.

  5. Clique em Guardar.

gcloud

Remova a função de Editor e, em seguida, use o comando gcloud projects add-iam-policy-binding para adicionar uma nova função:

# Remove the Editor role
gcloud projects remove-iam-policy-binding PROJECT_ID \
--member="SERVICE_ACCOUNT_EMAIL" \
--role="roles/editor"

# Add the desired role
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="SERVICE_ACCOUNT_EMAIL" \
--role="ROLE"

Em que PROJECT_ID é o ID do projeto que está a usar, SERVICE_ACCOUNT_EMAIL é o endereço de email da conta de serviço de tempo de execução predefinida, conforme mostrado anteriormente em Conta de serviço de tempo de execução, e ROLE é a nova função a atribuir à conta de serviço de tempo de execução predefinida.

Usar contas de serviço individuais para as suas funções

Para lhe dar maior flexibilidade no controlo do acesso às suas funções, pode atribuir a cada uma delas a sua própria conta de serviço gerida pelo utilizador.

  1. Crie a sua conta de serviço. Anote o nome.
  2. Conceda-lhe as funções adequadas, com base nos recursos aos quais a função precisa de aceder para fazer o seu trabalho.
  3. Se a conta de serviço e a função estiverem em projetos diferentes, a partir do projeto onde a conta de serviço está localizada:

    1. Configure a conta de serviço para funcionar em vários projetos.
    2. Conceda a função Criador de tokens de conta de serviço (roles/iam.serviceAccountTokenCreator) ao agente de serviço das funções do Cloud Run (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com), em que PROJECT se refere ao projeto no qual a função reside. O agente de serviço das funções do Cloud Run gere o acesso entre projetos para a sua conta de serviço.

    3. Conceda a autorização iam.serviceaccounts.actAs ao agente do serviço das funções do Cloud Run na conta de serviço do projeto diferente.

  4. Conceda à conta de serviço acesso ao recurso. O método para o fazer depende do tipo de recurso.

  5. Associe a conta de serviço à sua função. Pode fazê-lo no momento da implementação ou atualizando uma função implementada anteriormente.

Adicionar uma conta de serviço gerida pelo utilizador na implementação

Consola

  1. Aceda à Google Cloud consola:

    Aceda à Google Cloud consola

  2. Especifique e configure a função da forma que quiser.

  3. Clique em Tempo de execução, compilação… para apresentar definições adicionais.

  4. Selecione o separador Tempo de execução.

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

  6. Clique em Seguinte e Implementar.

gcloud

Quando implementar uma função com gcloud functions deploy, adicione a flag --service-account. Por exemplo:

gcloud functions deploy --no-gen2 FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL

onde FUNCTION_NAME é o nome da função e SERVICE_ACCOUNT_EMAIL é o email da conta de serviço.

Atualizar a conta de serviço de uma função existente

Pode atualizar a conta de serviço de tempo de execução de uma função existente.

Consola

  1. Aceda à Google Cloud consola:

    Aceda à Google Cloud consola

  2. Clique no nome da função pretendida para aceder à respetiva página de detalhes.

  3. Clique no lápis Editar na parte superior da página de detalhes para editar a função.

  4. Clique em Tempo de execução, compilação… para apresentar definições adicionais.

  5. Selecione o separador Tempo de execução.

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

  7. Clique em Seguinte e Implementar.

gcloud

Quando implementar uma função com gcloud functions deploy, adicione a flag --service-account:

gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL

em que FUNCTION_NAME é o nome da função e SERVICE_ACCOUNT_EMAIL é a conta de serviço.

A função reimplementada usa agora a nova conta de serviço de tempo de execução.

Usar o servidor de metadados para adquirir tokens

Embora as contas de serviço definidas pelo IAM sejam o método preferencial para gerir o acesso no Google Cloud, alguns serviços podem exigir outros modos, como uma chave de API, um cliente OAuth 2.0 ou uma chave de conta de serviço. O acesso a um recurso externo também pode exigir métodos alternativos.

Se o seu serviço de destino exigir que apresente um token de ID do OpenID Connect ou um token de acesso do Oauth 2.0, pode usar o servidor de metadados de computação para obter estes tokens em vez de configurar um cliente OAuth completo.

Tokens de identidade

Pode usar o servidor de metadados de computação para obter tokens de ID com um público-alvo específico da seguinte forma:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE" \
  -H "Metadata-Flavor: Google"

Onde AUDIENCE é o destino pedido, por exemplo, o URL de um serviço que está a invocar, como https://service.domain.com, ou o ID de cliente OAuth de um recurso protegido pelo IAP, como 1234567890.apps.googleusercontent.com.

Tokens de acesso

As chaves de acesso de OAuth 2.0 usam âmbitos para definir autorizações de acesso. Por predefinição, as chaves de acesso têm o âmbito cloud-platform. Google Cloud Para aceder a outras APIs Google ou Google Cloud , tem de obter um token de acesso com o âmbito adequado.

Pode usar o servidor de metadados de computação para obter tokens de acesso.

Se precisar de uma chave de acesso com um âmbito específico, pode gerá-la da seguinte forma:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token?scopes=SCOPES" \
  -H "Metadata-Flavor: Google"

Onde SCOPES é uma lista separada por vírgulas de âmbitos do OAuth pedidos, por exemplo: https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets.

Consulte a lista completa de âmbitos de OAuth da Google para saber de que âmbitos precisa.

Passos seguintes

Saiba como autorizar o acesso às suas funções ou autenticar programadores e outras funções para que possam invocar as suas funções.