使用 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 政策的詳細資訊,請參閱《IAM 使用者指南》中的管理 IAM 政策