Gerenciando AWS SAM permissões com AWS CloudFormation mecanismos - AWS Serverless Application Model

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Gerenciando AWS SAM permissões com AWS CloudFormation mecanismos

Para controlar o acesso aos AWS recursos, o AWS Serverless Application Model (AWS SAM) pode usar os mesmos mecanismos que AWS CloudFormation. Para obter mais informações, consulte Controlar o acesso com o AWS Identity and Access Management no Guia do usuário do AWS CloudFormation .

Há três opções principais para conceder permissão ao usuário para gerenciar aplicativos sem servidor. Cada opção fornece aos usuários diferentes níveis de controle de acesso.

  • Conceder permissões de administrador.

  • Anexe as políticas AWS gerenciadas necessárias.

  • Conceda permissões específicas AWS Identity and Access Management (IAM).

Dependendo da opção escolhida, os usuários podem gerenciar somente aplicativos sem servidor que contenham AWS recursos que eles tenham permissão para acessar.

As seções a seguir descrevem essa opção em mais detalhes.

Conceder permissões de administrador

Se você conceder permissões de administrador a um usuário, ele poderá gerenciar aplicativos sem servidor que contenham qualquer combinação de AWS recursos. Essa é a opção mais simples, mas também concede aos usuários o conjunto mais amplo de permissões, o que lhes permite realizar ações com o maior impacto.

Para obter mais informações sobre como conceder permissões de administrador a um usuário, consulte Criar seu primeiro usuário e grupo administrador do IAM no Guia do usuário do IAM.

Anexe as políticas AWS gerenciadas necessárias

Você pode conceder aos usuários um subconjunto de permissões usando as políticas gerenciadas pela AWS, em vez de conceder permissões completas de administrador. Se você usar essa opção, verifique se o conjunto de políticas AWS gerenciadas abrange todas as ações e recursos necessários para os aplicativos sem servidor que os usuários gerenciam.

Por exemplo, as seguintes políticas AWS gerenciadas são suficientes para implantar o aplicativo Hello World de amostra:

  • AWSCloudFormationFullAccess

  • IAMFullAcesso

  • AWSLambda_FullAccess

  • APIGatewayAdministrador da Amazon

  • Amazon S3 FullAccess

  • Amazon EC2 ContainerRegistryFullAccess

Para obter informações sobre como anexar políticas a um usuário do IAM, consulte Alterar permissões para um usuário do IAM no Guia do usuário do IAM.

Conceda permissões específicas do IAM

Para obter o nível mais granular de controle de acesso, você pode conceder permissões específicas do IAM aos usuários usando declarações de política. Se você usar essa opção, certifique-se de que a declaração de política inclua todas as ações e recursos necessários para os aplicativos sem servidor que os usuários gerenciam.

A melhor prática com essa opção é negar aos usuários a permissão para criar funções, incluindo funções de execução do Lambda, para que eles não possam conceder a si mesmos permissões escalonadas. Portanto, você, como administrador, deve primeiro criar uma função de execução do Lambda que será especificada nos aplicativos sem servidor que os usuários gerenciarão. Para obter informações sobre a criação de funções de execução do Lambda, consulte Criação de uma função de execução no console do IAM.

Para o aplicativo Hello World de amostra, AWSLambdaBasicExecutionRoleé suficiente para executar o aplicativo. Depois de criar uma função de execução do Lambda, modifique o arquivo de AWS SAM modelo do aplicativo Hello World de amostra para adicionar a seguinte propriedade ao AWS::Serverless::Function recurso:

Role: lambda-execution-role-arn

Com o aplicativo Hello World modificado em vigor, a declaração de política a seguir concede permissões suficientes para que os usuários implantem, atualizem e excluam o aplicativo:

{ "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

O exemplo de declaração de política nesta seção concede permissão suficiente para você implantar, atualizar e excluir a amostra do aplicativo Hello World. Se você adicionar outros tipos de recursos ao seu aplicativo, precisará atualizar a declaração de política para incluir o seguinte:

  1. Permissão para que seu aplicativo chame as ações do serviço.

  2. O diretor do serviço, se necessário para as ações do serviço.

Por exemplo, se você adicionar um fluxo de trabalho do Step Functions, talvez seja necessário adicionar permissões para as ações listadas aqui e para o responsável pelo serviço principalstates.amazonaws.com.

Para obter mais informações sobre o gerenciamento de políticas, consulte Gerenciar políticas do IAM no Guia do usuário do IAM.