Permissions - Amazon Serverless Application Model
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Permissions

控制对的对的访问权限Amazon资源,Amazon SAM使用的机制与Amazon CloudFormation. 有关更多信息,请参阅 。使用 控制访问Amazon Identity and Access Management中的Amazon CloudFormation用户指南.

有三个主要选项可用于授予用户管理无服务器应用程序的权限。每个选项都为用户提供了不同级别的访问控制。

  • 授予管理员权限。

  • 附加必要Amazon托管策略。

  • 特定赠款Amazon Identity and Access Management(IAM) 权限。

根据您选择的选项,用户只能管理包含Amazon他们有权访问的资源。

以下各部分对每个选项进行了详述。

授予管理员权限

如果您向用户授予管理员权限,则他们可以管理无服务器应用程序,这些应用程序包含Amazon资源的费用。这是最简单的选项,但它也授予用户最广泛的权限集,因此使用户能够执行影响最大的操作。

有关向用户授予管理员权限的更多信息,请参阅创建您的首个 IAM 管理员用户和组中的IAM 用户指南.

附加必要Amazon托管策略

您可以使用Amazon托管策略,而不是授予完全管理员权限。如果您使用此选项,请确保Amazon托管策略涵盖用户管理的无服务器应用程序所需的所有操作和资源。

例如,以下Amazon托管策略足以部署 Hello World 示例应用程序

  • Amazon 云形式完全访问

  • IAMFullAccess

  • 全面访问

  • AmazonAPIGatewayAdministrator

  • AmazonS3FullAccess

  • AmazonEC2ContainerRegistryFullAccess

有关将策略附加到 IAM 用户的信息,请参阅更改 IAM 用户的权限中的IAM 用户指南.

授予特定 IAM 权限

对于最精细的访问控制级别,您可以使用策略声明. 如果使用此选项,请确保策略语句包含用户管理的无服务器应用程序所需的所有操作和资源。

使用此选项的最佳做法是拒绝用户创建角色(包括 Lambda 执行角色)的权限,以便他们不能授予自己升级的权限。因此,作为管理员,您必须首先创建Lambda 执行角色,这将在用户将管理的无服务器应用程序中指定。有关创建 Lambda 执行角色的信息,请参阅在 IAM 控制台中创建执行角色.

对于Hello World 应用程序例AWSLambdaBasicExecutionRole足以运行该应用程序。创建 Lambda 执行角色之后,修改Amazon SAM模板文件,将以下属性添加到AWS::Serverless::Function资源:

Role: lambda-execution-role-arn

使用修改后的 Hello World 应用程序后,以下策略语句为用户授予足够的权限来部署、更新和删除应用程序:

{ "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:AttachRolePolicy", "iam:DeleteRole", "iam:DetachRolePolicy", "iam:GetRole", "iam:PassRole", "iam:TagRole" ], "Resource": [ "arn:aws:iam::111122223333:role/*" ] }, { "Sid": "APIGateway", "Effect": "Allow", "Action": [ "apigateway:DELETE", "apigateway:GET", "apigateway:PATCH", "apigateway:POST", "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:*::*" ] } ] }

有关 IAM 策略的更多信息,请参阅 IAM 策略管理 IAM 策略中的IAM 用户指南.