使用 AWS CloudFormation 机制管理 AWS SAM 权限 - AWS Serverless Application Model

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

使用 AWS CloudFormation 机制管理 AWS SAM 权限

要控制对 AWS 资源的访问权限,AWS Serverless Application Model (AWS SAM) 可以使用与 AWS CloudFormation 相同的机制。有关更多信息,请参阅《AWS CloudFormation 用户指南》中的使用AWS Identity and Access Management进行访问控制

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

  • 授予管理员权限。

  • 附加必要的 AWS 托管策略。

  • 授予特定的 AWS Identity and Access Management (IAM) 权限。

用户只能管理包含其有权访问的 AWS 资源的无服务器应用程序,具体取决于您选择的选项。

以下部分详细介绍了每个选项。

授予管理员权限

如果您向用户授予管理员权限,用户就可以管理包含任意 AWS 资源组合的无服务器应用程序。这是最简单的选项,但也会向用户授予最广泛的权限,使得他们能够执行具有巨大影响的操作。

有关向用户授予管理员权限的详细信息,请参阅 IAM 用户指南中的创建您的第一个 IAM 管理员用户和组

附加必要的 AWS 托管策略

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

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

  • AWSCloudFormationFullAccess

  • IAMFullAccess

  • AWSLambda_FullAccess

  • AmazonAPIGatewayAdministrator

  • AmazonS3FullAccess

  • AmazonEC2ContainerRegistryFullAccess

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

授予特定的 IAM 权限

要实现最精细级别的访问控制,您可以使用策略声明向用户授予特定的 IAM 权限。如果使用此选项,请确保策略声明包含用户管理的无服务器应用程序所需的所有操作和资源。

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

对于示例 Hello World 应用程序AWSLambdaBasicExecutionRole 足以运行此应用程序。创建 Lambda 执行角色后,修改示例 Hello World 应用程序的 AWS 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