使用 Amazon CloudFormation 机制管理权限 - Amazon Serverless Application Model
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 Amazon CloudFormation 机制管理权限

要控制对 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

  • IAM FullAccess

  • AWSLambda_FullAccess

  • 亚马逊 API GatewayAdministrator

  • 亚马逊 3 FullAccess

  • 亚马逊 EC2 ContainerRegistryFullAccess

有关附加策略到 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 应用程序所需的足够权限。如果您向应用程序添加其他资源类型,则需要更新政策声明以包含以下内容:

  1. 应用程序调用服务操作所需的权限。

  2. 服务主体(如果对于服务操作是必需的)。

例如,如果您添加 Step Functions 工作流程,则可能需要添加此处所列操作的权限以及 states.amazonaws.com 服务主体。

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