Quero conceder permissões às funções do AWS Lambda na minha aplicação AWS Serverless Application Model (AWS SAM). Como faço para definir um perfil de execução do Lambda com permissões com escopo definido em um modelo do AWS SAM?
Breve descrição
Para definir um perfil de execução do Lambda em um modelo do AWS SAM, você pode usar as seguintes propriedades de recursos da AWS::Serverless::Function:
- Policies: permitem que você crie um novo perfil de execução usando políticas predefinidas que podem ter como escopo sua função do Lambda.
- Role: permite que você defina um perfil do AWS Identity and Access Management (IAM) para usar como perfil de execução da função.
- PermissionsBoundary: permite que você defina um limite de permissões do IAM para o perfil de execução que você cria.
Observação: as propriedades Policies e Roles não podem ser usadas juntas. Usar a propriedade Role é útil quando seu perfil de execução exige permissões muito específicas para usar políticas predefinidas.
Resolução
Especifique políticas para um novo perfil de execução do Lambda
Para a propriedade Policies, insira qualquer combinação das seguintes opções:
Observação: os modelos de políticas do AWS SAM têm como escopo recursos específicos da AWS. Consulte a Tabela de modelos de políticas para obter uma lista de modelos de políticas e as permissões que eles concedem às suas funções do Lambda.
A seguir estão alguns exemplos de modelos YAML do AWS SAM com Policies definidas:
Exemplo de modelo YAML do AWS SAM com uma política gerenciada pela AWS nomeada
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31' b
Resources:
MyFunction:
Type: 'AWS::Serverless::Function'
Properties:
Handler: index.handler
Runtime: nodejs8.10
CodeUri: 's3://my-bucket/function.zip'
Policies:
# Give the Lambda service access to poll your DynamoDB Stream
- AmazonDynamoDBFullAccess
Exemplo de modelo YAML do AWS SAM com um modelo de política do AWS SAM (SQSPollerPolicy) definido
MyFunction:
Type: 'AWS::Serverless::Function'
Properties:
CodeUri: ${codeuri}
Handler: hello.handler
Runtime: python2.7
Policies:
- SQSPollerPolicy:
QueueName:
!GetAtt MyQueue.QueueName
Exemplo de modelo YAML do AWS SAM com um documento de política em linha definido
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
MyFunction:
Type: 'AWS::Serverless::Function'
Properties:
Handler: index.handler
Runtime: nodejs8.10
CodeUri: 's3://my-bucket/function.zip'
Policies:
- Statement:
- Sid: SSMDescribeParametersPolicy
Effect: Allow
Action:
- ssm:DescribeParameters
Resource: '*'
- Sid: SSMGetParameterPolicy
Effect: Allow
Action:
- ssm:GetParameters
- ssm:GetParameter
Resource: '*'
(Opcional) Especifique um limite de permissões do IAM
Para definir as permissões máximas permitidas para o perfil de execução da sua função do Lambda, use um limite de permissões do IAM.
Para definir um limite de permissões do IAM, faça o seguinte em seu modelo YAML do AWS SAM:
Especifique o nome de recurso da Amazon (ARN) de um limite de permissões
Para a propriedade PermissionsBoundary, insira o ARN de um limite de permissões. Por exemplo:
Properties:
PermissionsBoundary: arn:aws:iam::123456789012:policy/LambdaBoundaries
Observação: você pode definir PermissionsBoundary somente se estiver criando uma nova função com seu modelo do AWS SAM. Você não pode definir um limite de permissões para um Role existente que você especificar.
Especificar um perfil de execução do Lambda
Para a propriedade Role, insira uma das seguintes opções:
Observação: se você não especificar um Role no seu modelo do AWS SAM, um perfil de execução será criado quando implantar sua aplicação. Esse perfil de execução inclui todas as Policies que você definir.
Exemplo de modelo YAML do AWS SAM com a propriedade Role definida
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
MyFunction:
Type: 'AWS::Serverless::Function'
Properties:
Handler: index.handler
Runtime: nodejs8.10
CodeUri: 's3://my-bucket/function.zip'
Role: arn:aws:iam::111111111111:role/SAMPolicy
Empacotar e implantar sua aplicação
1.Na interface de linha de comando do AWS SAM (CLI do AWS SAM), execute o comando sam build para criar e empacotar sua aplicação.
Observação: se você receber erros ao executar os comandos da AWS CLI, utilize a versão mais recente da AWS CLI.
2.Execute o comando sam deploy para implantar seu pacote de aplicações do AWS SAM.
Para obter mais informações, consulte Building applications e Deploying serverless applications.
Informações relacionadas
Getting started with AWS SAM
AWS Serverless Application Model (AWS SAM) (repositório do AWS SAM no GitHub)
Policy templates (repositório do AWS SAM no GitHub)
Políticas gerenciadas e em linha
Validating AWS SAM template files