本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon CloudFormation 机制管理 Amazon SAM 权限
要控制对 Amazon 资源的访问权限, Amazon Serverless Application Model (Amazon SAM) 可以使用与相同的机制 Amazon CloudFormation。有关更多信息,请参阅《Amazon CloudFormation 用户指南》中的使用 Amazon Identity and Access Management进行访问控制。
有三个选项可用于向用户授予管理无服务器应用程序的权限。每个选项可为用户提供不同级别的访问控制。
-
授予管理员权限。
-
附加必要的 Amazon 托管策略。
-
授予特定 Amazon Identity and Access Management (IAM) 权限。
根据您选择的选项,用户只能管理包含他们有权访问的 Amazon 资源的无服务器应用程序。
以下部分详细介绍了每个选项。
授予管理员权限
如果您向用户授予管理员权限,则他们可以管理包含任意 Amazon 资源组合的无服务器应用程序。这是最简单的选项,但也会向用户授予最广泛的权限,使得他们能够执行具有巨大影响的操作。
有关向用户授予管理员权限的更多信息,请参阅《用户指南》中的创建您的第一个IAM管理员IAM用户和群组。
附加必要的 Amazon 托管策略
您可以使用 Amazon 托管策略向用户授予部分权限,而不是授予完全管理员权限。如果使用此选项,请确保 Amazon 托管策略集涵盖用户管理的无服务器应用程序所需的所有操作和资源。
例如,以下 Amazon 托管策略足以部署示例 Hello World 应用程序:
-
AWSCloudFormationFullAccess
-
IAMFullAccess
-
AWSLambda_FullAccess
-
mazonAPIGateway管理员
-
亚马逊 3 FullAccess
-
Amazon EC2ContainerRegistryFullAccess
有关为用户附加策略的信息,请参阅《IAM用户指南》中的更改IAM用户权限。IAM
授予特定IAM权限
要获得最精细的访问控制级别,您可以使用策略声明向用户授予特定IAM权限。如果使用此选项,请确保策略声明包含用户管理的无服务器应用程序所需的所有操作和资源。
使用此选项的最佳做法是,拒绝用户创建角色(包括 Lambda 执行角色)的权限,这样他们就无法向自己授予升级权限。因此,作为管理员,您必须先创建 Lambda 执行角色(该角色将在用户要管理的无服务器应用程序中指定)。有关创建 Lambda 执行角色的信息,请参阅在控制台中创建执行角色。IAM
对于示例 Hello World 应用程序,足以运行该应用程序。AWSLambdaBasicExecutionRole创建 Lambda 执行角色后,修改示例 Hello World 应用程序的 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: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:*::*" ] } ] }
注意
本节中的示例策略声明向您授予部署、更新和删除示例 Hello World 应用程序所需的足够权限。如果您向应用程序添加其他资源类型,则需要更新政策声明以包含以下内容:
-
应用程序调用服务操作所需的权限。
-
服务主体(如果对于服务操作是必需的)。
例如,如果您添加 Step Functions 工作流程,则可能需要添加此处所列操作的权限以及 states.amazonaws.com
服务主体。
有关IAM策略的更多信息,请参阅《IAM用户指南》中的管理IAM策略。