Administración AWS SAM de 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.

Administración AWS SAM de permisos con AWS CloudFormation mecanismos

Para controlar el acceso a recursos de AWS, AWS Serverless Application Model (AWS SAM) puede usar los mismos mecanismos que AWS CloudFormation. Para obtener más información, consulta 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.

  • Asocie las políticas AWS administradas necesarias.

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

Según la opción que elija, los usuarios solo pueden administrar las aplicaciones sin servidor que contengan recursos de AWS 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 concede permisos de administrador a un usuario, este podrá administrar aplicaciones sin servidor que contengan cualquier combinación de recursos de AWS. 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 acerca de cómo conceder permisos de administrador a un usuario, consulta Creación del primer grupo de usuarios y administradores de IAM en la Guía del usuario de IAM.

Asocie las políticas AWS administradas necesarias.

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

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

  • AWSCloudFormationFullAccess

  • IAMFullAccess

  • AWSLambda_FullAccess

  • AmazonAPIGatewayAdministrator

  • AmazonS3FullAccess

  • AmazonEC2ContainerRegistryFullAccess

Para obtener más información acerca de cómo adjuntar políticas a un usuario de IAM, consulta Cambio de los permisos de un usuario de IAM en la Guía del usuario de IAM.

Conceda permisos específicos de IAM.

Para obtener un nivel de control de acceso más detallado, puede conceder permisos de IAM específicos a los usuarios mediante instrucciones de política. Si usas 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 roles de ejecución de Lambda, consulta Creación de un rol de ejecución en la consola de IAM.

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

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 acerca de las políticas de IAM, consulta Administración de las políticas de IAM en la Guía del usuario de IAM.