Gestión de AWS SAM permisos con AWS CloudFormation mecanismos - AWS Serverless Application Model

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Gestión de AWS SAM permisos con AWS CloudFormation mecanismos

Para controlar el acceso a AWS los recursos, el AWS Serverless Application Model (AWS SAM) puede usar los mismos mecanismos que AWS CloudFormation. Para obtener más información, consulte Control de acceso con AWS Identity and Access Management en la Guía del usuario de AWS CloudFormation .

Existen tres opciones principales para conceder a un usuario permiso para administrar aplicaciones sin servidor. Cada opción proporciona a los usuarios diferentes niveles de control de acceso.

  • Concesión de permisos de administrador.

  • Adjunte las políticas AWS gestionadas necesarias.

  • Otorgue permisos específicos AWS Identity and Access Management (IAM).

Según la opción que elija, los usuarios solo pueden administrar las aplicaciones sin servidor que contengan AWS recursos a los que tengan permiso de acceso.

En las siguientes secciones se describe cada proceso de manera detallada.

Concesión de permisos de administrador

Si concedes permisos de administrador a un usuario, este podrá administrar aplicaciones sin servidor que contengan cualquier combinación de AWS recursos. Esta es la opción más sencilla, pero también otorga a los usuarios el conjunto más amplio de permisos, lo que les permite realizar acciones con el mayor impacto.

Para obtener más información sobre la concesión de permisos de administrador a un usuario, consulte Creación del primer usuario y grupo de IAM administradores en la Guía del IAM usuario.

Adjunta las políticas AWS gestionadas necesarias

Puede conceder a los usuarios un subconjunto de permisos mediante políticas AWS administradas, en lugar de conceder permisos de administrador completos. Si usa esta opción, asegúrese de que el conjunto de políticas AWS administradas cubra todas las acciones y los recursos necesarios para las aplicaciones sin servidor que administran los usuarios.

Por ejemplo, las siguientes políticas AWS administradas son suficientes para implementar la aplicación Hello World de ejemplo:

  • AWSCloudFormationFullAccess

  • IAMFullAccess

  • AWSLambda_FullAccess

  • Un mazonAPIGateway administrador

  • Amazon S3 FullAccess

  • Amazon EC2ContainerRegistryFullAccess

Para obtener información sobre cómo adjuntar políticas a un IAM usuario, consulte Cambiar los permisos de un IAM usuario en la Guía del IAM usuario.

Otorgue permisos específicos IAM

Para obtener el nivel más detallado de control de acceso, puedes conceder IAM permisos específicos a los usuarios mediante declaraciones de política. Si usa esta opción, asegúrese de que las instrucciones de políticas cubran todas las acciones y los recursos necesarios para las aplicaciones sin servidor que administran los usuarios.

La mejor práctica con esta opción es denegar a los usuarios el permiso para crear roles, incluidos los roles de ejecución de Lambda, para que no puedan concederse permisos escalados. Por lo tanto, como administrador, primero debe crear rol de ejecución de Lambda que se especificará en las aplicaciones sin servidor que administrarán los usuarios. Para obtener información sobre la creación de funciones de ejecución de Lambda, consulte Creación de una función de ejecución en la IAM consola.

En el caso de la aplicación Hello World de ejemplo, AWSLambdaBasicExecutionRolebasta con ejecutar la aplicación. Tras crear un rol de ejecución de Lambda, modifique el archivo de AWS SAM plantilla de la aplicación Hello World de ejemplo para añadir la siguiente propiedad al AWS::Serverless::Function recurso:

Role: lambda-execution-role-arn

Una vez implementada la aplicación Hello World modificada, la siguiente instrucción de política otorga permisos suficientes para que los usuarios implementen, actualicen y eliminen la aplicación:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudFormationTemplate", "Effect": "Allow", "Action": [ "cloudformation:CreateChangeSet" ], "Resource": [ "arn:aws:cloudformation:*:aws:transform/Serverless-2016-10-31" ] }, { "Sid": "CloudFormationStack", "Effect": "Allow", "Action": [ "cloudformation:CreateChangeSet", "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeChangeSet", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStacks", "cloudformation:ExecuteChangeSet", "cloudformation:GetTemplateSummary", "cloudformation:ListStackResources", "cloudformation:UpdateStack" ], "Resource": [ "arn:aws:cloudformation:*:111122223333:stack/*" ] }, { "Sid": "S3", "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::*/*" ] }, { "Sid": "ECRRepository", "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:CompleteLayerUpload", "ecr:CreateRepository", "ecr:DeleteRepository", "ecr:DescribeImages", "ecr:DescribeRepositories", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:InitiateLayerUpload", "ecr:ListImages", "ecr:PutImage", "ecr:SetRepositoryPolicy", "ecr:UploadLayerPart" ], "Resource": [ "arn:aws:ecr:*:111122223333:repository/*" ] }, { "Sid": "ECRAuthToken", "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken" ], "Resource": [ "*" ] }, { "Sid": "Lambda", "Effect": "Allow", "Action": [ "lambda:AddPermission", "lambda:CreateFunction", "lambda:DeleteFunction", "lambda:GetFunction", "lambda:GetFunctionConfiguration", "lambda:ListTags", "lambda:RemovePermission", "lambda:TagResource", "lambda:UntagResource", "lambda:UpdateFunctionCode", "lambda:UpdateFunctionConfiguration" ], "Resource": [ "arn:aws:lambda:*:111122223333:function:*" ] }, { "Sid": "IAM", "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:AttachRolePolicy", "iam:DeleteRole", "iam:DetachRolePolicy", "iam:GetRole", "iam:TagRole" ], "Resource": [ "arn:aws:iam::111122223333:role/*" ] }, { "Sid": "IAMPassRole", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "lambda.amazonaws.com" } } }, { "Sid": "APIGateway", "Effect": "Allow", "Action": [ "apigateway:DELETE", "apigateway:GET", "apigateway:PATCH", "apigateway:POST", "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:*::*" ] } ] }
nota

El ejemplo de declaración de política de esta sección le otorga el permiso suficiente para implementar, actualizar y eliminar la aplicación Hello World de ejemplo. Si agrega tipos de recursos adicionales a su aplicación, debe actualizar la instrucción de política para incluir lo siguiente:

  1. Permiso para que su aplicación invoque las acciones del servicio.

  2. La entidad principal de servicio, si es necesaria para las acciones del servicio.

Por ejemplo, si agrega un flujo de trabajo de Step Functions, es posible que deba agregar permisos para las acciones que se enumeran aquí y la entidad principal de servicio states.amazonaws.com.

Para obtener más información sobre IAM las políticas, consulte Administración de IAM políticas en la Guía del IAM usuario.