¿Cómo concedo permisos de IAM a una función de Lambda mediante una plantilla de AWS SAM?

4 minutos de lectura
0

Quiero conceder permisos a las funciones de AWS Lambda en mi aplicación de AWS Serverless Application Model (AWS SAM). ¿Cómo defino un rol de ejecución de Lambda con permisos limitados en una plantilla de AWS SAM?

Descripción breve

Para definir un rol de ejecución de Lambda en una plantilla de AWS SAM, puede usar las siguientes propiedades de recursos de AWS::Serverless::Function:

  • Policies: le permite crear un nuevo rol de ejecución mediante políticas predefinidas que se pueden aplicar a su función de Lambda.
  • Role: le permite definir un rol de AWS Identity and Access Management (IAM) para utilizarlo como rol de ejecución de la función.
  • PermissionsBoundary: le permite establecer un límite de permisos de IAM para el rol de ejecución que cree.

Nota: Las propiedades Policies y Roles no se pueden usar juntas. El uso de la propiedad Role resulta útil cuando el rol de ejecución requiere permisos demasiado específicos para usar políticas predefinidas.

Resolución

Especificar políticas para un nuevo rol de ejecución de Lambda

Para la propiedad Policies, introduzca cualquier combinación de lo siguiente:

Nota: Las plantillas de políticas de AWS SAM se refieren a recursos de AWS específicos. Consulte Policy template table para obtener una lista de las plantillas de políticas y los permisos que otorgan a las funciones de Lambda.

A continuación se muestran algunos ejemplos de plantillas YAML de AWS SAM con la propiedad Policies definida:

Ejemplo de plantilla YAML de AWS SAM con una política administrada de AWS denominada

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

Ejemplo de plantilla YAML de AWS SAM con una plantilla de política de AWS SAM (SQSPollerPolicy) definida

MyFunction:
  Type: 'AWS::Serverless::Function'
  Properties:
    CodeUri: ${codeuri}
    Handler: hello.handler
    Runtime: python2.7
    Policies:
      - SQSPollerPolicy:
          QueueName:
            !GetAtt MyQueue.QueueName

Ejemplo de plantilla YAML de AWS SAM con un documento de política insertada 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) Especificar un límite de permisos de IAM

Para establecer los permisos máximos permitidos para el rol de ejecución de la función de Lambda, utilice un límite de permisos de IAM.

Para establecer un límite de permisos de IAM, haga lo siguiente en su plantilla YAML de AWS SAM:

Especificar el nombre de recurso de Amazon (ARN) de un límite de permisos

Para la propiedad PermissionsBoundary, introduzca el ARN de un límite de permisos. Por ejemplo:

Properties:
  PermissionsBoundary: arn:aws:iam::123456789012:policy/LambdaBoundaries

Nota: Puede definir PermissionsBoundary solo si está creando un nuevo rol con su plantilla de AWS SAM. No puede establecer un límite de permisos para un rol existente que especifique.

Especificar un rol de ejecución de Lambda

Para la propiedad Role, introduzca una de las siguientes opciones:

Nota: Si no especifica un rol en la plantilla de AWS SAM, se crea un rol de ejecución al implementar la aplicación. Este rol de ejecución incluye cualquier política que defina.

Ejemplo de plantilla YAML de AWS SAM con la propiedad 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

Empaquetar e implementar la aplicación

1.    En la interfaz de línea de comandos de AWS SAM (CLI de AWS SAM), ejecute el comando sam build para crear y empaquetar la aplicación.
Nota: Si recibe errores al ejecutar los comandos de AWS CLI, asegúrese de que está utilizando la versión más reciente de AWS CLI.

2.    Ejecute el comando sam deploy para implementar el paquete de aplicaciones de AWS SAM.

Para obtener más información, consulte Building applications y Deploying serverless applications.


Información relacionada

Getting started with AWS SAM

AWS Serverless Application Model (AWS SAM) (repositorio de GitHub de AWS SAM)

Policy templates (repositorio de GitHub de AWS SAM)

Políticas administradas y políticas insertadas

Validating AWS SAM template files

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 años