使用AWS SAM連接器管理資源權限 - AWS Serverless Application Model

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用AWS SAM連接器管理資源權限

什麼是AWS SAM連接器?

連接器是一種 AWS Serverless Application Model (AWS SAM) 抽象資源類型,識別為AWS::Serverless::Connector,可在無伺服器應用程式資源之間提供簡單且適當範圍的權限。透過將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> ...

連接器的範例

在此範例中,我們使用連接器將AWS Lambda函數中的資料寫入 Amazon DynamoDB 表格。

使用連接器將資料寫入 DynamoDB 表格的 Lambda 函數圖表AWS SAM。
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 函數來源資源中。DynamoDB 資料表會定義為使用該屬性的目標資源。Id連接器將佈建這兩個資源之間的Write權限。

當您將AWS SAM範本部署到時AWS CloudFormation,AWS SAM會自動撰寫此連線運作所需的必要存取原則。

來源與目標資源之間的支援連線

連接器支援以Read及來源與目標資源連線的選取組合之間的資Write料和事件權限類型。例如,Write連接器支援來AWS::ApiGateway::RestApi源資源與AWS::Lambda::Function目標資源之間的連線。

您可以使用支援的屬性組合來定義來源和目標資源。屬性需求將取決於您建立的連線以及資源的定義位置。

注意

連接器可以在支援的無伺服器和非伺服器資源類型之間佈建權限。

如需支援的資源連線及其屬性需求的清單,請參閱連接器支援的來源和目標資源類型

使用連接器

定義讀取和寫入權限

ReadWrite權限可以在單一連接器中佈建:

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>

以下是一個範例,使用 a Qualifier 來縮小 Amazon API Gateway 資源的範圍:

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 ...

Type以下是使用支援的Arn和組合來定義另一個範本的目標資源的範例:

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 S3) 儲存貯體和 DynamoDB 表的 Lambda 函數來源資源範例:

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

使用連接器定義資源屬性

您可以為資源定義資源屬性,以指定其他行為和關係。若要進一步瞭解資源屬性,請參閱《AWS CloudFormation使用指南》中的資源屬性參考

您可以將資源屬性新增至內嵌連接器,方法是將資源屬性定義在與連接器內容相同的層級上。當您的AWS 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
注意

您也可以使用此語法在AWS SAM範本中定義連接器。當您的來源資源是在與連接器不同的範本上定義的時候,建議您這麼做。

接下來,會自動構成此連線的必要存取原則。如需有關連接器所產生之資源的詳細資訊,請參閱AWS CloudFormation指定時產生的資源 AWS::Serverless::Connector

AWS SAM連接器的優點

透過在資源之間自動撰寫適當的存取原則,連接器可讓您編寫無伺服器應用程式並專注於應用程式架構,而不需要AWS授權功能、原則語言和服務特定安全性設定方面的專業知識。因此,對於無伺服器開發新手的開發人員或希望提高開發速度的經驗豐富的開發人員來說,連接器是一個很大的好處。

進一步了解

如需使用AWS SAM連接器的詳細資訊,請參閱AWS::Serverless::Connector

提供意見

若要提供有關連接器的意見反應,請在serverless-application-model AWS GitHub儲存庫中提交新問題