Ao usar recursos como logging, acesso à VPC ou invocação assíncrona, o Function Compute precisa de permissões para acessar outros serviços de nuvem. Por exemplo, para configurar o logging de funções, conceda ao Function Compute permissões de gravação em um Logstore específico para registrar os logs da função.
Para simplificar o processo de autorização, o Function Compute oferece suporte a uma função vinculada ao serviço. As funções usam essa função por padrão, o que permite acessar recursos como logging, acesso à VPC e invocação assíncrona sem configuração adicional.
Se o código da sua função precisar acessar outros serviços de nuvem ou exigir permissões mais granulares, configure uma Function Role. Durante a invocação, o Function Compute assume automaticamente a função configurada.
Como funciona
Com base na função configurada para uma função, o Function Compute obtém credenciais temporárias (um token STS) ao chamar a API AssumeRole e as transmite para sua função por meio do parâmetro Credentials ou credentials no contexto. Essas credenciais temporárias concedem acesso a todos os recursos abrangidos pelas permissões configuradas. Você pode usá-las no código da função para acessar outros serviços da Alibaba Cloud.
As credenciais temporárias têm validade fixa de 36 horas. Como a duração máxima de execução de uma função é de 24 horas, as credenciais não expiram durante a execução.
A localização do parâmetro Credentials ou credentials varia conforme o runtime. Para obter detalhes sobre runtimes específicos, consulte os links a seguir. Em runtimes personalizados e imagens personalizadas, as credenciais temporárias são injetadas nos cabeçalhos de solicitação HTTP.
Exemplo: Conceder acesso ao OSS
Este exemplo demonstra como conceder a uma função permissão para gerenciar o OSS. Crie uma função com permissões de OSS e vincule-a à função.
Pré-requisitos
Procedimento
Etapa 1: Criar uma função e conceder permissões
Faça logon no console RAM. No painel de navegação à esquerda, escolha Roles > Create Role.
Na página Create Role, selecione Cloud Service para Principal Type e Function Compute / FC para Principal Name. Em seguida, clique em OK.
Na caixa de diálogo Create Role exibida, defina o Role Name, como
mytestrole, e clique em OK. Você será redirecionado para a página de detalhes da função.Na aba Permissions, clique em Grant Permission. No painel Grant Permission, siga estas etapas para conceder permissões à função.
-
Selecione o Resource Scope. O Principal é a função de destino por padrão. Na lista de políticas, marque a caixa de seleção ao lado de uma política do sistema ou personalizada para adicioná-la à lista Selected Policies. Depois, clique em OK. Para mais informações, consulte Políticas e exemplos.
Account: As permissões entram em vigor na conta atual da Alibaba Cloud.
Resource Group: As permissões entram em vigor no grupo de recursos especificado. Esta opção está disponível apenas se o serviço de nuvem oferecer suporte a grupos de recursos. Para mais informações, consulte Serviços de nuvem compatíveis com grupos de recursos.
Neste exemplo, para gerenciar o OSS, adicione a política de sistema AliyunOSSFullAccess à nova função.
Etapa 2: Vincular a função à função de destino
Faça logon no console do Function Compute. No painel de navegação à esquerda, escolha .
Na barra de menus superior, selecione uma região. Na página Functions, localize a função de destino e clique em Configuration na coluna Actions.
Na página de detalhes da função, selecione a aba Configuration. Na seção Advanced Settings, clique em Modify. No painel Advanced Settings, expanda a seção Permissions. Para Function Role, selecione a função
mytestrolecriada na Etapa 1. Em seguida, clique em Deploy.
Etapa 3: Testar a função
Verifique se a função associada à função mytestrole possui permissões para gerenciar o OSS.
-
Na página de lista de funções, clique na função de destino. Na aba Code, clique na seta ao lado de Test Function e selecione Configure Test Parameters. Abaixo está um exemplo de evento de teste.
{ "endpoint": "http://oss-cn-hangzhou.aliyuncs.com", "bucket": "web****", "objectName": "myObj", "message": "your-message" }Neste exemplo, substitua o valor de
bucketpelo nome do seu bucket, que deve estar na mesma região da função. -
Na aba Code, insira o código no editor de código e clique em Deploy.
Este exemplo usa o runtime Python. O código usa as credenciais temporárias fornecidas pelo Function Compute para acessar o OSS.
import json import oss2 def handler(event, context): evt = json.loads(event) creds = context.credentials # Use the temporary credentials injected by Function Compute. # Your Alibaba Cloud account AccessKey pair grants full access to all API operations. # We recommend that you use a RAM user for API access and routine O&M. # To prevent security risks, do not hardcode the AccessKey ID and AccessKey secret in your project code. # This example shows how to obtain the AccessKey ID and AccessKey secret from the context. auth = oss2.StsAuth(creds.access_key_id, creds.access_key_secret, creds.security_token) bucket = oss2.Bucket(auth, evt['endpoint'], evt['bucket']) bucket.put_object(evt['objectName'], evt['message']) return 'success' Clique em Test Function. Após a execução bem-sucedida da função, faça logon no console do OSS, localize o bucket de destino e verifique se o conteúdo do objeto de destino foi atualizado para o valor do parâmetro
messagedo evento de teste.
Referências
O Function Compute 3.0 oferece suporte a funções vinculadas ao serviço para autorização de privilégio mínimo. Para obter detalhes sobre a política da função vinculada ao serviço, consulte AliyunServiceRoleForFC.
Para saber como configurar uma função de serviço, consulte Criar uma função.