AWS SAM コネクタによるリソースに対するアクセス許可の管理 - AWS Serverless Application Model

AWS SAM コネクタによるリソースに対するアクセス許可の管理

コネクタは、AWS::Serverless::Connector として識別される AWS Serverless Application Model (AWS SAM) 抽象リソースタイプであり、サーバーレスアプリケーションリソース間で単純かつ適切な範囲の許可を提供します。

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 を指定したときに生成された CloudFormation リソース」を参照してください。

コネクタの例

次の例では、コネクタを使用して AWS Lambda 関数から Amazon DynamoDB テーブルにデータを書き込む方法を示します。

AWS SAM コネクタを使用して DynamoDB テーブルにデータを書き込む Lambda 関数。
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 プロパティを使用して送信先リソースとして定義されます。コネクタは、これら 2 つのリソース間の Write 許可をプロビジョニングします。

AWS SAM テンプレートを CloudFormation にデプロイすると、AWS SAM は、この接続が機能するために必要なアクセスポリシーを自動的に作成します。

送信元リソースと送信先リソースの間でサポートされている接続

コネクタは、ソースと送信先のリソース接続の選択された組み合わせの間におけるデータとイベントの Read および Write 許可タイプをサポートします。例えば、コネクタは AWS::ApiGateway::RestApi ソースリソースと AWS::Lambda::Function 送信先リソースの間の Write 接続をサポートします。

ソースリソースと送信先リソースは、サポートされているプロパティを組み合わせて定義できます。プロパティの要件は、使用する接続と、リソースが定義されている場所によって異なります。

注記

コネクタは、サポートされているサーバーレスリソースタイプと非サーバーレスリソースタイプの間の許可をプロビジョニングできます。

サポートされているリソース接続とそのプロパティの要件のリストについては、「コネクタに対してサポートされている送信元リソースと送信先リソースのタイプ」を参照してください。

詳細

AWS SAM コネクタの使用の詳細については、以下のトピックを参照してください。

フィードバックを送信する

コネクタに関するフィードバックを提供するには、serverless-application-model AWS GitHub リポジトリ新しい問題を送信してください。