¿Cómo concedo permisos de IAM a una función de Lambda mediante una plantilla de AWS SAM?
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:
- El nombre de una política administrada de AWS
- El nombre de una plantilla de política de AWS SAM
- Un documento de política insertada
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:
- El ARN de un rol de ejecución de Lambda al que se adjunta una política de permisos de IAM.
- Una referencia a un recurso de rol que ha definido en la misma plantilla de AWS SAM.
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
AWS Serverless Application Model (AWS SAM) (repositorio de GitHub de AWS SAM)
Policy templates (repositorio de GitHub de AWS SAM)
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace un año