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

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

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

什么是Amazon SAM连接器?

连接器是一种Amazon Serverless Application Model (Amazon SAM) 抽象资源类型,标识为AWS::Serverless::Connector,它在您的无服务器应用程序资源之间提供简单且范围明确的权限。通过将Connectors资源属性嵌入到资源中来使用该属性。然后,定义您的目标资源并描述数据或事件应如何在这些资源之间流动。 Amazon 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> ...

连接器的示例

在此示例中,我们使用连接器将数据从Amazon Lambda函数写入 Amazon DynamoDB 表。


        Lambda 函数使用Amazon 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权限。

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

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

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

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

注意

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

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

使用连接器

定义读取和写入权限

Read并且可以在单个连接器中配置Write权限:

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

使用其他支持的属性定义资源

对于源资源和目标资源,在同一个模板中定义时,使用Id属性。或者,Qualifier可以添加以缩小已定义资源的范围。当资源不在同一个模板中时,请组合使用支持的属性。

当您使用以外的属性定义源资源时Id,请使用该SourceReference属性。

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

以下是使用缩小Amazon API Gateway 资源范围的示例:Qualifier

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: MyApi: Type: AWS::Serverless::Api Connectors: ApiToLambdaConn: Properties: SourceReference: Qualifier: Prod/GET/foobar Destination: Id: MyFunction Permissions: - Write ...

以下是一个示例,使用支持的Arn和组合Type来定义另一个模板中的目标资源:

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: MyFunction: Type: AWS::Serverless::Function Connectors: TableConn: Properties: Destination: Type: AWS::DynamoDB::Table Arn: !GetAtt MyTable.Arn ...

从单一来源创建多个连接器

在源资源中,您可以定义多个连接器,每个连接器具有不同的目标资源。

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: MyFunction: Type: AWS::Serverless::Function Connectors: BucketConn: Properties: Destination: Id: MyBucket Permissions: - Read - Write SQSConn: Properties: Destination: Id: MyQueue Permissions: - Read - Write TableConn: Properties: Destination: Id: MyTable Permissions: - Read - Write TableConnWithTableArn: Properties: Destination: Type: AWS::DynamoDB::Table Arn: !GetAtt MyTable.Arn Permissions: - Read - Write ...

创建多目的地连接器

在源资源中,您可以定义具有多个目标资源的单个连接器。以下是连接到 Amazon Simple Storage Service (Amazon S3) 存储桶和 DynLambda oDB 表的 Lambddddddda 源资源的示例:

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: MyFunction: Type: AWS::Serverless::Function Connectors: WriteAccessConn: Properties: Destination: - Id: OutputBucket - Id: CredentialTable Permissions: - Write ... OutputBucket: Type: AWS::S3::Bucket CredentialTable: Type: AWS::DynamoDB::Table

使用连接器定义资源属性

可以为资源定义资源属性以指定其他行为和关系。要了解有关资源属性的更多信息,请参阅Amazon CloudFormation用户指南中的资源属性参考

您可以通过在与连接器属性相同的级别上定义资源属性来向嵌入式连接器添加资源属性。在部署时转换Amazon SAM模板时,属性将传递到生成的资源。

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: MyFunction: Type: AWS::Serverless::Function Connectors: MyConn: DeletionPolicy: Retain DependsOn: AnotherFunction Properties: ...

连接器的工作原理

注意

本节介绍连接器如何在后台配置必要的资源。使用连接器时,这会自动发生在你身上。

首先,将嵌入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
注意

您也可以使用此语法在Amazon SAM模板中定义连接器。当您的源资源是在与连接器不同的模板上定义时,建议使用此方法。

接下来,将自动制定此连接所需的访问策略。有关连接器生成的资源的更多信息,请参阅Amazon CloudFormation指定时生成的资源AWS::Serverless::Connector

Amazon SAM连接器的好处

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

了解更多信息

有关使用Amazon SAM连接器的更多信息,请参阅AWS::Serverless::Connector

提供反馈

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