如何使用 AWS SAM 模板为 Lambda 函数授予 IAM 权限?
我想在 AWS Serverless Application Model (AWS SAM) 应用程序中为 AWS Lambda 函数授予权限。如何在 AWS SAM 模板中定义具有有限权限的 Lambda 执行角色?
简短描述
要在 AWS SAM 模板中定义 Lambda 执行角色,您可以使用以下 AWS::Serverless::Function 资源属性:
- Policies(策略)— 允许您使用预定义策略创建新的执行角色,其权限范围仅限于 Lambda 函数。
- Role(角色)— 允许您定义要用作函数执行角色的 AWS Identity and Access Management (IAM) 角色。
- PermissionsBoundary — 允许您为创建的执行角色设置 IAM 权限边界。
**注意:**不能同时使用 **Policies(策略)**和 **Roles(角色)**属性。当执行角色需要的权限过于具体而无法使用预定义策略时,使用 **Roles(角色)**属性很有用。
解决方法
为新的 Lambda 执行角色指定策略
对于 **Policies(策略)**属性,请输入以下任意组合:
- AWS 托管策略的名称
- AWS SAM 策略模板的名称
- 一个内联策略文档
**注意:**AWS SAM 策略模板的范围限定为特定的 AWS 资源。有关策略模板列表及其授予 Lambda 函数的权限,请参阅策略模板表。
以下是定义了 **Policies(策略)**的 AWS SAM YAML 模板示例:
带已命名 AWS 托管策略的 AWS SAM YAML 模板示例
AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' b Resources: MyFunction: Type: 'AWS::Serverless::Function' Properties: Handler: index.handler Runtime: nodejs8.10 CodeUri: 's3://my-bucket/function.zip' Policies: # Give the Lambda service access to poll your DynamoDB Stream - AmazonDynamoDBFullAccess
定义了 AWS SAM 策略模板 (SQSPollerPolicy) 的 AWS SAM YAML 模板示例:
MyFunction: Type: 'AWS::Serverless::Function' Properties: CodeUri: ${codeuri} Handler: hello.handler Runtime: python2.7 Policies: - SQSPollerPolicy: QueueName: !GetAtt MyQueue.QueueName
定义了内联策略文档的 AWS SAM YAML 模板示例
AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Resources: MyFunction: Type: 'AWS::Serverless::Function' Properties: Handler: index.handler Runtime: nodejs8.10 CodeUri: 's3://my-bucket/function.zip' Policies: - Statement: - Sid: SSMDescribeParametersPolicy Effect: Allow Action: - ssm:DescribeParameters Resource: '*' - Sid: SSMGetParameterPolicy Effect: Allow Action: - ssm:GetParameters - ssm:GetParameter Resource: '*'
(可选)指定 IAM 权限边界
要设置 Lambda 函数执行角色可具备的最大权限,请使用 IAM 权限边界。
要设置 IAM 权限边界,请在 AWS SAM YAML 模板中执行以下操作:
指定权限边界的 Amazon Resource Name (ARN)
对于 PermissionsBoundary 属性,输入权限边界的 ARN。例如:
Properties: PermissionsBoundary: arn:aws:iam::123456789012:policy/LambdaBoundaries
**注意:**只有在使用 AWS SAM 模板创建新角色时,才可以定义 PermissionsBoundary。您无法为指定的现有 Role 设置权限边界。
指定 Lambda 执行角色
对于 **Role(角色)**属性,请输入以下内容之一:
- 附加了 IAM 权限策略的 Lambda 执行角色的 ARN。
- 对您在同一 AWS SAM 模板中定义的角色资源的引用。
注意:如果未在 AWS SAM 模板中指定 Role,将在部署应用程序时创建一个执行角色。此执行角色包括您定义的任何策略。
定义了角色属性的 AWS SAM YAML 模板示例
AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Resources: MyFunction: Type: 'AWS::Serverless::Function' Properties: Handler: index.handler Runtime: nodejs8.10 CodeUri: 's3://my-bucket/function.zip' Role: arn:aws:iam::111111111111:role/SAMPolicy
打包并部署您的应用程序
1. 在 AWS SAM 命令行界面 (AWS SAM CLI) 中,运行 sam build 命令构建和打包应用程序。
注意:如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI。
2. 运行 sam deploy命令来部署您的 AWS SAM 应用程序包。
有关详细信息,请参阅构建应用程序和部署无服务器应用程序。
相关信息
AWS Serverless Application Model (AWS SAM)(AWS SAM GitHub 存储库)
策略模板(AWS SAM GitHub 存储库)
相关内容
- 已提问 1 个月前lg...
- 已提问 1 个月前lg...
- 已提问 4 个月前lg...
- 已提问 2 个月前lg...
- 已提问 4 个月前lg...
- AWS 官方已更新 10 个月前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前