在 AWS Data Exchange 包含时创建数据授权 APIs - AWS Data Exchange 用户指南

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

在 AWS Data Exchange 包含时创建数据授权 APIs

以下主题描述了创建 REST API 数据集并将其添加到包含 APIs on 的数据授权的过程 AWS Data Exchange。您可以使用 AWS Data Exchange 控制台或 AWS Command Line Interface来完成此过程。

设置 Amazon API Gateway REST API 后,您可以在 AWS Data Exchange中创建新的 API 数据集。然后,您可以创建修订并添加 API 资产。

使用 API 资产创建数据授权,允许向 AWS Data Exchange 终端节点发出的请求代理到您的 API Gateway API。

此过程包含以下步骤:

先决条件

在发布包含以下内容的产品之前 APIs,您必须满足以下先决条件:

  • 在使用任何 AWS 服务(包括)之前 AWS Data Exchange,您必须注册 AWS 并创建管理员用户。有关更多信息,请参阅《AWS IAM Identity Center 用户指南》中的入门

  • 您的 REST API 必须位于 Amazon API Gateway 上,并且其集成应使用适当的请求和响应模型来访问您的数据,例如 Amazon DynamoDB 或 AWS Lambda。有关更多信息,请参阅 Amazon API Gateway 开发者指南中的在 API Gatew ay APIs 中开发 REST API 和使用 REST。

    注意

    仅支持公共 API Gat APIs eway。

  • 您的 API Gateway REST API 必须能够对来自 AWS Data Exchange 服务主体的调用进行身份验证和授权。从您的 API AWS Data Exchange 发出的每个请求都使用使用凭 AWS Data Exchange 据签名的签名版本 4 (Sigv4) 协议。 AWS Data Exchange 适用于自定义域和域密钥映射。

    注意

    AWS Data Exchange 不支持 Amazon Cognito、No-Auth 和授权方。 AWS Lambda

  • 如果您的 API Gateway REST API 使用自定义身份系统进行身份验证和授权,请将其配置为使用 IAM 身份验证并导入描述您的 API 的 OpenAPI 架构。 AWS Data Exchange 将使用自己的服务凭证调用您的 API Gateway REST API,并包含账户 ID 等订阅者信息。

  • 您的 API Gateway REST API 负责与后端集成。为此,请执行以下操作之一:

    • 将一个长期有效的身份验证令牌附加到通过您的 API Gateway REST API 发出的每个请求,以便后端可以对其进行验证。

    • 使用 API Gateway 调用 Lambda 函数,该函数可以生成凭证并调用您的 API。

您的 API 是按照 API 集成请求规范调用的。

有关更多信息,请参阅以下主题:

API 数据集安全性

AWS Data Exchange 使用传输层安全 (TLS) 1.2 对流量进行端到端加密。所有元数据都是静态加密的。 AWS Data Exchange 不会存储订阅者请求或来自您的后端的响应。

API 集成请求规范

API 按原样 AWS Data Exchange 传递客户请求中的所有标头(中列出的标头除外标头转发)、正文、http 方法、路径和查询字符串,并附加以下标头。

// These headers help prevent Confused Deputy attacks. They enable the SourceAccount // and SourceArn variables in IAM policies. 'x-amz-source-account': ACCOUNT_ID, 'x-amz-source-arn': `arn:aws:dataexchange:${REGION}:${OWNER_ACCOUNT_ID}:data-sets/${DATA_SET_ID}/revisions/${REVISION_ID}/assets/${ASSET_ID}`, // These headers identify the API Asset in Data Exchange. 'x-amzn-dataexchange-asset-id': ASSET_ID, 'x-amzn-dataexchange-data-set-id': DATA_SET_ID, 'x-amzn-dataexchange-revision-id': REVISION_ID, // This header identifies the Data Exchange Product. 'x-amzn-dataexchange-product-id': PRODUCT_ID, // This header identifies the caller of Data Exchange. It will contain subscriber // information. 'x-amzn-dataexchange-requester-account-id': REQUESTER_ACCOUNT_ID, // Providers can attach custom metadata in the form of key/value pairs // to a particular subscription. We will send these key/value pairs as stringified // JSON. 'x-amz-dataexchange-subscription-metadata': STRINGIFIED_METADATA,

标头转发

AWS Data Exchange 在将与身份验证或命名空间相关的所有标头转发到数据所有者后端之前,将其移除给 Amazon。具体而言, AWS Data Exchange 删除:

  • Authentication 标头

  • x-amz 开头的任何标头

由于代理的作用,host 标头将被覆盖。

步骤 1:更新 API 资源策略

如果您的 Amazon API Gateway REST API 符合先决条件,则必须更新您的 API 资源政策,以便能够在订阅者请求获取您的 API 架构时调用您的 API。 AWS Data Exchange

要更新您的 API 资源策略,请按以下步骤操作:
  1. 将以下策略添加到 API 的资源策略中:

    { "Effect": "Allow", "Principal": {"Service": "dataexchange.amazonaws.com"}, "Action": "execute-api:Invoke", "Resource": "*", "Condition": {"StringEquals": {"aws:SourceAccount": "<account-id>"}} }
  2. account-id 替换为将创建 API 数据集的账户。

    拥有 API Gateway 资源的账户不需要与创建数据集的账户相同。

此政策将这些权限限制为 AWS Data Exchange 服务委托人发出的调用,并要求只有您的账户 AWS Data Exchange 才能授权与您的 API 集成。

注意

如果您的资源策略明确拒绝 AWS Data Exchange 执行此次调用,则必须删除或限制此拒绝。

现在,您就可以创建 API 数据集了。

步骤 2:创建 API 数据集

中的数据集 AWS Data Exchange 是动态的,使用修订版本进行版本控制,每个修订版至少包含一个资源。有关更多信息,请参阅 数据输入 AWS Data Exchange

您可以使用 AWS Data Exchange 控制台或 API 数据集 AWS Command Line Interface 来创建 API 数据集:

创建 API 数据集(控制台)

要创建 API 数据集(控制台),请按以下步骤操作:
  1. 打开您的 Web 浏览器,登录到 AWS Data Exchange 控制台

  2. 在左侧导航窗格的我的数据下,选择拥有的数据集

  3. 拥有的数据集中,选择创建数据集,打开数据集创建步骤向导。

  4. 选择数据集类型中,选择 Amazon API Gateway API

  5. 定义数据集中,为您的数据集输入名称描述。有关更多信息,请参阅数据集最佳实践

  6. (可选)在添加标签 - 可选下,添加标签。

  7. 选择创建

现在,您就可以创建修订了。

创建 API 数据集 (AWS CLI)

要创建 API 数据集 (CLI),请按以下步骤操作:
  1. 使用 create-data-set 命令创建 API 数据集:

    $ AWS dataexchange create-data-set \ -\\-asset-type API_GATEWAY_API \ -\\-description 'Data Set Description' \ -\\-name 'Data Set Name' { "Arn": "arn:aws:dataexchange:us-east-1:123456789012:data-sets/$DATA_SET_ID", "AssetType": "API_GATEWAY_API", "CreatedAt": "2021-09-11T00:16:46.349000+00:00", "Description": "Data Set Description", "Id": "$DATA_SET_ID", "Name": "Data Set Name", "Origin": "OWNED", "UpdatedAt": "2021-09-11T00:16:46.349000+00:00" }
  2. 请注意新的资产类型为 API_GATEWAY_API

现在,您就可以创建修订了。

步骤 3:创建修订

在以下步骤中,您将创建数据集,之后再创建修订。有关更多信息,请参阅 修订

您可以使用 AWS Data Exchange 控制台或 AWS Command Line Interface 创建修订版:

创建修订(控制台)

要创建修订(控制台),请按以下步骤操作:
  1. 在数据集详细信息页面的数据集概览部分:

    1. (可选)选择编辑名称,编辑与您的数据集有关的信息。

    2. (可选)选择删除,删除该数据集。

  2. 修订部分,选择创建修订

  3. 定义修订下,为您的修订提供介绍修订目的的可选注释。

  4. (可选)在添加标签 - 可选下,添加与该资源关联的标签。

  5. 选择创建修订

  6. 查看、编辑或删除您在上一步中所做的更改。

现在,您可以将 API 资产添加到修订

创建修订 (AWS CLI)

要创建修订 (AWS CLI),请按以下步骤操作:
  1. 使用 create-revision 命令创建修订:

    $ AWS dataexchange create-revision \ -\\-data-set-id $DATA_SET_ID \ -\\-comment 'First Atlas Revision' { "Arn": "arn:aws:dataexchange:us-east-1:123456789012:data-sets/$DATA_SET_ID/revisions/$REVISION_ID", "Comment": "First Atlas Revision", "CreatedAt": "2021-09-11T00:18:49.160000+00:00", "DataSetId": "$DATA_SET_ID", "Finalized": false, "Id": "$REVISION_ID", "UpdatedAt": "2021-09-11T00:18:49.160000+00:00" }
  2. 将 API 资产添加到修订

    注意

    您需要知道要导入的 API Gateway REST API 的 ID 及阶段。

步骤 4:将 API 资产添加到修订

API 资产包含订阅者调用您的 API 所需的信息。有关更多信息,请参阅 资产

在以下步骤中,您将导入数据资产,然后定版修订。

您可以使用 AWS Data Exchange 控制台或 AWS CLI 向修订版中添加资产:

将 API 资产添加到修订(控制台)

要将资产添加到修订(控制台),请按以下步骤操作:
  1. 在数据集详细信息页面的 API 资产部分下,选择添加 API 阶段

  2. 选择 API 阶段下,对于 Amazon API Gateway API,在输入框中输入一个 API,或从下拉列表中选择以下选项之一:

    • 另一个中的 API AWS 账户 — 这是一个跨账户 API,您已获得访问权限。

    • 在这个 AWS 账户 — 这是你的 API AWS 账户。

    1. 如果您在其他选项中选择了 API AWS 账户,请在输入框中输入 API ID 和 API 阶段名称

    2. 如果您选择了 I n th i AWS 账户 s,请从下拉列表中选择 API 阶段名称

    注意

    您可以选择新建并按照在 Amazon API Gateway 上创建新 API 模态中的步骤,创建新的 API 阶段。新阶段创建完毕后,重复步骤 2。

  3. 高级配置 - 可选下,您可以选择连接现有 Amazon API Gateway 使用计划,以使用现有使用计划中定义的节流和配额限制,然后输入 API 密钥

  4. 面向订阅者的文档 API 下,提供有关接收者在接受数据授权后将看到的 API 的相关详细信息。

    1. API 名称中,输入接收者可以用来识别 API 资产的名称。

      注意

      如果选择的是在这个 AWS 账户中,则会自动填充 API 名称,您可以根据需要对其进行修改。

      如果选择的是另一个 AWS 账户中的 API,则 API 名称将会填充为默认名称。您应该修改该默认名称,以便接收者可以轻松了解这个 API 是什么。

    2. 对于 OpenAPI 3.0 规范,您可以:

      1. 输入或复制并粘贴 OpenAPI 3.0 规范文件。

      2. 选择从 .JSON 文件导入,然后从本地计算机中选择要导入的 .json 文件。

        导入的规范即会显示在框中。

      3. 选择从 Amazon API Gateway 导入,然后选择要导入的规范。

        导入的规范即会显示在框中。

    3. 对于其他文档 - 可选,输入任何有助于订阅者了解您的 API 的其他信息。支持 Markdown。

    注意

    在将此资产添加到修订后,您将无法编辑 OpenAPI 规范和其他文档。

    如果您想更新此信息,并且修订尚未定版,则您可以替换该资产。

    如果您想更新此信息,并且修订已定版,则您可以使用更新后的资产创建新修订。

  5. 选择添加 API 阶段

    此时,将您的资产(在此例中,是 API)导入数据集的作业已启动。

    注意

    如果您在 Amazon API Gateway 上没有 API,系统会提示您创建一个。

  6. 作业完成后,作业部分的状态字段将更新为已完成

  7. 如果您还有更多 APIs 要添加,请重复步骤 2。

  8. 修订概览下,查看修订及其资产。

  9. 选择定版

您已成功定版数据集修订。

在将修订添加到数据授权之前,您可以编辑修订删除修订

现在,您可以创建包含以下内容的新数据授权 APIs

将 API 资产添加到修订 (AWS CLI)

您可以通过运行 IMPORT_ASSET_FROM_API_GATEWAY_API 作业来添加 API 资产。

要将 API 资产添加到修订 (AWS CLI),请按以下步骤操作:
  1. 使用 create-job 命令将 API 资产添加到修订:

    $ AWS dataexchange create-job \ -\\-type IMPORT_ASSET_FROM_API_GATEWAY_API \ -\\-details '{"ImportAssetFromApiGatewayApi":{"DataSetId":"$DATA_SET_ID","RevisionId":"$REVISION_ID","ApiId":"$API_ID","Stage":"$API_STAGE","ProtocolType":"REST"}}' { "Arn": "arn:aws:dataexchange:us-east-1:123456789012:jobs/$JOB_ID", "CreatedAt": "2021-09-11T00:38:19.875000+00:00", "Details": { "ImportAssetFromApiGatewayApi": { "ApiId": "$API_ID", "DataSetId": "$DATA_SET_ID", "ProtocolType": "REST", "RevisionId": "$REVISION_ID", "Stage": "$API_STAGE" } }, "Id": "$JOB_ID", "State": "WAITING", "Type": "IMPORT_ASSET_FROM_API_GATEWAY_API", "UpdatedAt": "2021-09-11T00:38:19.875000+00:00" } $ AWS dataexchange start-job -\\-job-id $JOB_ID $ AWS dataexchange get-job -\\-job-id $JOB_ID { "Arn": "arn:aws:dataexchange:us-east-1:0123456789012:jobs/$JOB_ID", "CreatedAt": "2021-09-11T00:38:19.875000+00:00", "Details": { "ImportAssetFromApiGatewayApi": { "ApiId": "$API_ID", "DataSetId": "$DATA_SET_ID", "ProtocolType": "REST", "RevisionId": "$REVISION_ID", "Stage": "$API_STAGE" "ApiEndpoint": "string", "ApiKey": "string", "ApiName": "string", "ApiDescription": "string", "ApiSpecificationDownloadUrl": "string", "ApiSpecificationDownloadUrlExpiresAt": "string" } }, "Id": "$JOB_ID", "State": "COMPLETED", "Type": "IMPORT_ASSET_FROM_API_GATEWAY_API", "UpdatedAt": "2021-09-11T00:38:52.538000+00:00" }
  2. 使用 list-revision-assets 命令确认新资产是否创建正确:

    $ AWS dataexchange list-revision-assets \ -\\-data-set-id $DATA_SET_ID \ -\\-revision-id $REVISION_ID { "Assets": [ { "Arn": "arn:aws:dataexchange:us-east-1:123456789012:data-sets/$DATA_SET_ID/revisions/$REVISION_ID/assets/$ASSET_ID", "AssetDetails": { "ApiGatewayApiAsset": { "ApiEndpoint": "https://$API_ID.execute-api.us-east-1.amazonaws.com/$API_STAGE", "ApiId": "$API_ID", "ProtocolType": "REST", "Stage": "$API_STAGE" } }, "AssetType": "API_GATEWAY_API", "CreatedAt": "2021-09-11T00:38:52.457000+00:00", "DataSetId": "$DATA_SET_ID", "Id": "$ASSET_ID", "Name": "$ASSET_ID/$API_STAGE", "RevisionId": "$REVISION_ID", "UpdatedAt": "2021-09-11T00:38:52.457000+00:00" } ] }

现在,您已准备好创建包含以下内容的新数据授权 APIs。

编辑修订

要在定版后编辑修订,请按以下步骤操作:
  1. 修订概览上,选择取消定版

    您会看到一条消息,提示修订已不再处于定版状态。

  2. 要编辑修订,请从修订概览中依次选择操作编辑

  3. 进行更改,然后选择更新

  4. 检查更改,然后选择定版

删除修订

要在定版后删除修订,请按以下步骤操作:
  1. 修订概览上,选择删除

  2. 删除修订对话框中,输入 Delete,然后选择删除

警告

此操作将删除修订及其所有资产,此操作无法撤消。

步骤 5:创建包含以下内容的新数据授权 APIs

在创建了至少一个数据集并完成包含资产的修订之后,就可以将该数据集作为数据授权的一部分发布了。

创建新数据授权
  1. 在 AWS Data Exchange 控制台左侧导航窗格的 “交换数据授权” 下,选择 “已发送数据授权”。

  2. 已发送的数据授权中,选择创建数据授权以打开定义数据授权向导。

  3. 选择拥有的数据集部分,选中要添加的数据集旁边的复选框。

    注意

    您选择的数据集必须具有最终修订版。未完成修订版的数据集无法添加到数据授权中。

    与共享的数据产品中包含的数据集不同 AWS Marketplace,添加到数据授权中的数据集没有修订访问规则,这意味着一旦数据授予获得批准,数据授权的接受者将有权访问给定数据集的所有最终修订版(包括在数据授权创建之前完成的历史修订版)。

  4. 授予概览部分中,输入接收者将看到的有关您的数据授权的信息,包括数据授权名称数据授权描述

  5. 选择 “下一步”

  6. 在 “收件人访问信息” 部分的 “AWS 账户 ID” 下,输入应获得数据授予的收款人账户的 AWS 账户 ID。

  7. 此外,在接收者访问信息部分的访问结束日期下,选择数据授权是否应永久运行,如果是,则选择无结束日期;或者是否应具有结束日期,如果是,则选择特定结束日期,然后选择所需的结束日期。

  8. 选择下一步

  9. 审核并发送部分中,审核您的数据授权信息。

  10. 如果您确定要创建数据授权并将其发送给选定的接收者,请选择创建并发送数据授权

您现在已经完成创建数据授权的手动操作部分。数据授权显示在 “已发送数据授权” 页面上的 “已发送数据授权” 选项卡上,其状态为 “待接受”,直到接收者账户接受为止。