

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

# 使用 AWS SAM 连接器管理资源权限
<a name="managing-permissions-connectors"></a>

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

## AWS SAM 连接器的好处
<a name="connector-benefits"></a>

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

## 使用 AWS SAM 连接器
<a name="what-are-connectors"></a>

通过将 `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>}}
  ...
```

## 连接器的工作原理
<a name="connectors-work"></a>

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

首先，嵌入的 `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 模板中定义连接器。如果源资源定义于与连接器不同的模板上，则建议使用此方法。

接下来，将自动编写该连接必要的访问策略。有关连接器生成的资源的更多信息，请参阅 [CloudFormation 指定时生成的资源 AWS::Serverless::Connector](sam-specification-generated-resources-connector.md)。

## 连接器示例
<a name="what-are-connectors-example"></a>

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

![Lambda 函数使用 AWS SAM 连接器将数据写入 DynamoDB 表。](http://docs.aws.amazon.com/zh_cn/serverless-application-model/latest/developerguide/images/managing-connectors-example.png)


```
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 模板部署到时 CloudFormation， AWS SAM 将自动编写此连接正常运行所需的必要访问策略。

## 源资源和目标资源之间支持的连接
<a name="supported-connector-resources"></a>

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

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

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

有关支持的资源连接及其属性要求的列表，请参阅 [连接器支持的源资源和目的地资源类型](reference-sam-connector.md#supported-connector-resource-types)。

## 了解详情
<a name="connector-learn-more"></a>

有关使用 AWS SAM 连接器的更多信息，请参阅以下主题：
+ [AWS::Serverless::Connector](sam-resource-connector.md)
+ [在中定义读取和写入权限 AWS SAM](connector-usage-define.md)
+ [使用中其他支持的属性来定义资源 AWS SAM](connector-usage-other-properties.md)
+ [从单一来源创建多个连接器 AWS SAM](connector-usage-single-source.md)
+ [在中创建多目的地连接器 AWS SAM](connector-usage-multi-destination.md)
+ [在中定义读取和写入权限 AWS SAM](connector-usage-define.md)
+ [使用连接器定义资源属性 AWS SAM](connector-usage-resource-attributes.md)

## 提供反馈
<a name="connector-feedback"></a>

要提供有关连接器的反馈，[请在*serverless-application-model AWS GitHub存储库*中提交新问题](https://github.com/aws/serverless-application-model/issues/new?assignees=&labels=area%2Fconnectors,stage%2Fneeds-triage&template=other.md&title=%28Feature%20Request%29)。