使用 AWS SAM 连接器管理资源权限 - AWS Serverless Application Model

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

使用 AWS SAM 连接器管理资源权限

连接器是一种 AWS Serverless Application Model (AWS SAM) 抽象资源类型,标识为AWS::Serverless::Connector,它在您的无服务器应用程序资源之间提供简单且范围明确的权限。

AWS SAM 连接器的好处

通过在资源之间自动编写适当的访问策略,连接器使您能够编写无服务器应用程序并专注于应用程序架构,而无需在 AWS 授权功能、策略语言和特定于服务的安全设置方面的专业知识。因此,对于可能不熟悉无服务器开发的开发人员或希望提高开发速度的经验丰富的开发人员来说,连接器十分有用。

使用 AWS SAM 连接器

通过将 Connectors 资源属性嵌入到资源中来使用它。然后,定义您的目标资源并描述数据或事件应如何在这些资源之间流动。 AWS SAM 然后制定必要的访问策略,以促进所需的交互。

以下内容概述了此资源属性的编写方式:

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: <source-resource-logical-id>: Type: <resource-type> ... Connectors: <connector-name>: Properties: Destination: <properties-that-identify-destination-resource> Permissions: <permission-types-to-provision> ...

连接器的工作原理

注意

本节介绍连接器如何在幕后提供必要的资源。使用连接器时,这种情况会自动发生。

首先,嵌入的 Connectors 资源属性转换为 AWS::Serverless::Connector 资源类型。它的逻辑 ID 会自动创建为 <source-resource-logical-id><embedded-connector-logical-id>.

例如,这是嵌入式连接器:

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: MyFunction: Type: AWS::Lambda::Function Connectors: MyConn: Properties: Destination: Id: MyTable Permissions: - Read - Write MyTable: Type: AWS::DynamoDB::Table

这将生成以下 AWS::Serverless::Connector 资源:

Transform: AWS::Serverless-2016-10-31 Resources: ... MyFunctionMyConn: Type: AWS::Serverless::Connector Properties: Source: Id: MyFunction Destination: Id: MyTable Permissions: - Read - Write
注意

您也可以使用此语法在 AWS SAM 模板中定义连接器。如果源资源定义于与连接器不同的模板上,则建议使用此方法。

接下来,将自动编写该连接必要的访问策略。有关连接器生成的资源的更多信息,请参阅 在指定了 AWS::Serverless::Connector 的情况下生成的 AWS CloudFormation 资源

连接器示例

以下示例说明如何使用连接器将数据从 AWS Lambda 函数写入 Amazon DynamoDB 表。

Lambda 函数使用 AWS SAM 连接器将数据写入 DynamoDB 表。
Transform: AWS::Serverless-2016-10-31 Resources: MyTable: Type: AWS::Serverless::SimpleTable MyFunction: Type: AWS::Serverless::Function Connectors: MyConn: Properties: Destination: Id: MyTable Permissions: - Write Properties: Runtime: nodejs16.x Handler: index.handler InlineCode: | const AWS = require("aws-sdk"); const docClient = new AWS.DynamoDB.DocumentClient(); exports.handler = async (event, context) => { await docClient.put({ TableName: process.env.TABLE_NAME, Item: { id: context.awsRequestId, event: JSON.stringify(event) } }).promise(); } Environment: Variables: TABLE_NAME: !Ref MyTable

Connectors 资源属性嵌入在 Lambda 函数源资源中。使用 Id 属性将 DynamoDB 表定义为目标资源。连接器将在这两个资源之间提供 Write 权限。

当您将 AWS SAM 模板部署到时 AWS CloudFormation, AWS SAM 将自动编写此连接正常运行所需的必要访问策略。

源资源和目标资源之间支持的连接

连接器支持源和目标资源连接的精选组合之间的 ReadWrite 数据和事件权限类型。例如,连接器支持 AWS::ApiGateway::RestApi 源资源和 AWS::Lambda::Function 目标资源之间的 Write 连接。

可以使用支持的属性的组合来定义源资源和目标资源。属性要求将取决于您正在建立的连接以及资源定义的位置。

注意

连接器可以在支持的无服务器和非无服务器资源类型之间配置权限。

有关支持的资源连接及其属性要求的列表,请参阅 连接器支持的源资源和目的地资源类型

了解更多

有关使用 AWS SAM 连接器的更多信息,请参阅以下主题:

提供反馈

要提供有关连接器的反馈,请在serverless-application-model AWS GitHub存储库中提交新问题