

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

# 访问 AWS Marketplace 计量和授权服务 APIs
<a name="saas-integration-metering-and-entitlement-apis"></a>

此部分概述了与 AWS Marketplace Metering Service 或 AWS Marketplace Entitlement Service集成的过程，用于确保您对软件即服务（SaaS）产品的客户用量进行准确计费和报告。假定您提交了已发布为受限状态的 SaaS 订阅产品或 SaaS 合同产品。在受限状态下，您可以使用测试账户来验证具有正确的配置和功能，但您的产品没有公开发布。

**注意**  
如果您的 SaaS 产品与其他以不同方式处理计量的 AWS 托管服务（例如 Amazon G SageMaker round Truth 或 AWS WAF）集成，则您无需与 AWS Marketplace 计量服务集成。您的产品只能在一个系统中进行计量，以避免向客户重复计费。

**Topics**
+ [配置 SaaS 订阅用量的计量](metering-for-usage.md)
+ [使用检查权利 AWS Marketplace Entitlement Service](checking-entitlements.md)
+ [SaaS 产品集成核对清单](aws-marketplace-integration-checklist.md)

 有关设置和凭据的信息 AWS CLI，请参阅[《*AWS Command Line Interface 用户指南*》 AWS CLI中的配置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)。如果你不熟悉 AWS Python SDK，请参阅 Boto 3 [快速入门](https://boto3.readthedocs.io/en/latest/guide/quickstart.html)。

# 配置 SaaS 订阅用量的计量
<a name="metering-for-usage"></a>

对于软件即服务 (SaaS) 订阅，您可以计量所有使用情况，然后 AWS 根据您提供的计量记录向客户计费。对于 SaaS 合同，您只能计量客户合同权利中的用量。以下各节提供有关如何配置 SaaS 产品用量的计量的信息。

当您的应用程序计量客户的使用量时，您的应用程序会 AWS 提供累积的使用量。您的应用程序根据您在创建产品时定义的定价维度进行计量，例如传输的 GB 数据量或者给定小时内扫描的主机数。例如，如果您根据发送到应用程序的数据量收费，则可以测量数据量并每小时发送一次相应的计量记录。 AWS 使用计量数据以及您在创建产品时提供的价格来计算客户的账单。

对于支持并发协议的产品，计量是在许可证级别而不是产品级别进行的。每条使用记录都必须包含一个`LicenseArn`，以确定该使用适用于哪个特定协议。`LicenseArn`是从 SaaS 注册期间的 `ResolveCustomer` API 响应中获得的。这使买家能够为同一产品维护多个有效协议，并根据协议跟踪使用情况并单独计费。

**注意**  
或者，您可以将用量按您跟踪的属性分配。这些属性作为标签展示给买家。这些标签允许买家按标签值查看按用量划分的费用。例如，如果您按用户收费，并且用户具有 `Department` 属性，则可以使用键为 `Department` 的标签创建用量分配，每个值一个分配。这不会更改您报告的价格、维度或总用量，但允许您的客户按与您的产品相应类别查看其成本。有关更多信息，请参阅 [供应商计量标记（可选）](#saas-vendor-metered-tagging)。

**Topics**
+ [按小时计量](#metering-hourly)
+ [将您的产品配置为计量用量](#configure-application-for-meter-usage)
+ [供应商计量标记（可选）](#saas-vendor-metered-tagging)

## 按小时计量
<a name="metering-hourly"></a>

我们建议您以 AWS 每小时为单位向所有客户报告使用情况，每次最多 25 个。这可以让客户尽可能详细地查看其用量和成本。如果您汇总了超过一个小时（例如一天）时段的用量，请注意以下注意事项。
+ AWS 只有在收到您的计量记录后，才能向客户开具产品使用费。您有责任确保已成功发送并收到您的产品的计量记录。您可以使用 AWS CloudTrail 来验证您发送的一条或多条记录是否准确。您还可以使用这些信息来执行一段时间的审计。有关更多信息，请参阅 [使用记录 AWS Marketplace API 调用 AWS CloudTrail](cloudtrail-logging.md)。
+ 如果这是定价模式为“订阅”（不是“合同”或“带有消费产品的合同”定价模式）的 SaaS，则买家可以随时取消订阅。当买家发起取消订阅操作时，卖家将收到 `unsubscribe-pending` [通知](saas-notification.md#saas-sns-subscription-message-body)，并且在收到最终 `unsubscribe-success` 通知之前有 1 小时的时间发送所有未报告的用量。第二个通知发送之后的任何操作都将不会执行。另外两种定价模式根据订阅时间设定了期限，买家无法在这段时间内取消订阅，只能关闭自动续订。如果不是自动续订，则系统将在该期限结束时发送相同的通知。
+ 对于具有并发协议的产品：取消订阅通知和 1 小时时段适用于每份单独的协议，而不是针对每个产品。如果买家取消了多个有效协议中的一个，您可以继续对剩余的有效许可证进行计量。只有已取消的协议的使用必须在收到特定许可证`unsubscribe-pending`通知后的 1 小时内提交。
+ 如果您不按小时发送计量记录，那么当应用程序或网络出现中断时，您的记录将落后于实际用量。如果应用程序或网络中断在订阅到期后恢复正常，可能会导致未报告的用量。
+ 即使没有可报告的用量，您也可以继续每小时发送一次计量记录。如果某个小时没有可报告的用量，则记录的数量为 0。请注意，在您报告买家某个维度的用量（0 或以上）后，您无法修改记录。因此，最佳实践是报告前一小时的用量。在整个账单周期，报告的用量都会显示在买家的 [AWS 账单与成本管理](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-what-is.html)控制台中。该控制台在单独的行项目中显示产品的各个维度，包括在账单周期或迄今为止消耗的总单位数和相应行项目消费的总成本，即使维度价格为每单位 0 美元。如果启用，[AWS 成本和使用情况报告（CUR）](https://docs.aws.amazon.com/cur/latest/userguide/what-is-data-exports.html)将显示这些详细信息，包括单位费率。这些报告不是实时更新的。
+ 在发布期间， AWS Marketplace 运营团队将在允许发布产品之前测试 SaaS 应用程序是否成功发送了计量记录。通常，该团队将模拟注册 SaaS 并确认已收到计量记录。

**注意**  
如果您的 SaaS 产品与其他以不同方式处理计量的 AWS 托管服务（例如 Amazon G SageMaker round Truth 或 AWS WAF）集成，则您无需与 AWS Marketplace 计量服务集成。您的产品只能在一个系统中进行计量，以避免向客户重复计费。请注意， AWS Marketplace 目前并未发布新 AWS WAF 产品。

## 将您的产品配置为计量用量
<a name="configure-application-for-meter-usage"></a>

 您可以在 AWS Marketplace Metering Service 中使用 `BatchMeterUsage` 操作向 AWS提供计量记录。记住以下内容：
+  我们要求卖家通过 `BatchMeterUsage` 操作来使用批处理。
+  我们按小时去除重复的计量请求。
  + 对于非并发协议产品：对请求进行重复数据删除。product/customer/hour/dimension. For Concurrent Agreements products: Requests are deduplicated per license/customer/hour/dimension
  + 您始终可以重试任何请求，但是，如果您计量了不同的数量，将按照原始数量计费。对于并发协议产品：使用相同的方法重试`LicenseArn`是安全的，并且要遵循标准的重复数据删除规则。但是，在同一使用窗口之间切`LicenseArn`换`ProductCode`和切换会导致重复计费。
  +  如果您针对同一请求发送多个请求customer/dimension/hour，则不会对记录进行汇总。
+ 如果买家订阅了您的产品，则卖家可以发送包含最多 6 小时的时间戳的计量记录。如果客户取消订阅，卖家必须在客户取消订阅后的 1 小时内发送计量记录。
+ `BatchMeterUsage` 有效负载不得超过 1MB。选择要在 `BatchMeterUsage` 请求中发送的用量记录数量，这样您就不会超过有效负载的大小。
+  AWS Marketplace 计量服务可在*AWS 一般参考*的[AWS Marketplace 终端节点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-marketplace.html)中 AWS 区域 列出。在您请求产品时，默认为 SaaS 计量产品启用美国东部（弗吉尼亚州北部）区域。如果您打算使用其他区域，请联系 [https://aws.amazon.com/marketplace/management/contact-us/](https://aws.amazon.com/marketplace/management/contact-us/)团队。有关更多信息，请参阅 [BatchMeterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_BatchMeterUsage.html)。
+ 并发协议：单个客户可能有多个针对您的产品的有效协议。每份协议都有其独特性`LicenseArn`，每份许可证的使用情况都单独跟踪。[在此](https://catalog.workshops.aws/mpseller/en-US/saas/integration-for-concurrent-agreements)处查看并发协议的新集成。对于新的实现，每个实现都`UsageRecord`必须包含一个`LicenseArn`字段，用于标识该用法适用于哪个协议。`LicenseArn`是从 `ResolveCustomer` API 响应中获得的。

**注意**  
对于现有实施：从基于产品的计量迁移到基于许可证的计量时，不要在同一小时内向两者`LicenseArn`发送计量记录，也不要向同一客户发送计量记录。`ProductCode`这将导致重复计费。请勿在请求`ProductCode`级别包含。每个`LicenseArn`中的都`UsageRecord`标识了产品和具体协议。

有关代码示例，请参阅 [SaaS 产品集成的代码示例](saas-code-examples.md)。

### 示例：主机扫描
<a name="host-scanning-example"></a>

 您的产品对计算硬件进行分析以查找已知的安全漏洞。客户手动发起或安排对其 Amazon Elastic Compute Cloud (Amazon EC2) 实例进行这些扫描。当产品执行这些扫描时，它会记录每小时扫描的唯一主机数。在此示例中，您的产品使用**主机**类别。您可以为扫描的主机类型声明多个维度。例如，您可以针对小型、中型和大型主机按不同的价格收费。

### 示例：日志分析
<a name="log-analysis-example"></a>

 您的 SaaS 产品会汇总由客户产品生成的日志、报告趋势和异常。当客户将日志上传到您的产品时，您可以测量收到的数据量（度量单位为兆字节、千兆字节或千吉字节）。在每个小时的第 10 分钟，cron 任务读取每位客户在上个小时的这一用量。任务生成批处理报告，并使用 `BatchMeterUsage` 操作将报告发送到 AWS。在此示例中，您的产品使用**数据**别。您的产品也可以按任何给定小时内存储的日志数据量进行计量。在这种情况下，您的产品可以按两个维度进行计量：此小时内收到的数据量和此小时内存储的总数据量。您可以继续计量存储的数据，直到客户删除此数据或数据到期为止。

## 供应商计量标记（可选）
<a name="saas-vendor-metered-tagging"></a>

供应商计量标签可帮助独立软件供应商 (ISVs) 让购买者更精细地了解其软件使用情况，并可以帮助他们进行成本分配。

有许多方法可以标记买家的软件使用情况。一种方法是先询问买家他们希望在成本分配中看到什么。然后，您可以在为买家帐户跟踪的属性之间分配使用情况。属性的示例包括 `Account ID`、`Business Unit`、`Cost Centers`，以及您的产品的其他相关元数据。这些属性作为标签展示给买家。使用标签，买家可以在 AWS 账单控制台（[https://console.aws.amazon.com/costmanagement/](https://console.aws.amazon.com/costmanagement/)）中查看按标签值划分为使用量的费用。供应商计量标记不会更改您报告的价格、维度或总用量。它允许您的客户按您产品的相应类别查看成本。

**注意**  
供应商计量标记 (VMT) 产品目前不支持并发协议许可证级别计量。如果您的产品使用 VMT，请继续使用`ProductCode`基于标准的计量。

在常见情形中，买家会通过一个 AWS 账户订阅您的产品。买家还有许多与同一产品订阅相关的用户。您可以使用具有 `Account ID` 键的标签创建用量分配，然后将用量分配给每个用户。在这种情况下，买家可以在其账单与成本管理控制台中激活 `Account ID` 标签并分析个人用户的使用情况。

### 卖家体验
<a name="saas-vendor-metered-tag-seller"></a>

卖家可以汇总具有相同标签集的资源的计量记录，而不是汇总所有资源的使用情况。例如，卖家可以构造包含不同的 `UsageAllocations` 存储桶的计量记录。每个存储桶代表一组标签的 `UsageQuantity`，例如 `AccountId` 和 `BusinessUnit`。

在下图中，**资源 1** 具有一组唯一的 `AccountId` 和 `BusinessUnit` 标签，并作为单个条目出现在**计量记录**中。

**资源 2** 和**资源 3** 都具有相同的 `AccountId` 标签 `2222` 和相同的 `BusinessUnit` 标签 `Operations`。因此，它们在**计量记录**中合并为一个 `UsageAllocations` 条目。

![\[该图显示了供应商计量标签如何合并用量数据。三个具有不同 AccountIds 和的资源（资源 1、2 和 3）在发送到 M AWS arketplace 计量服务 BusinessUnit 之前，将 UsageAllocations 按分组 AccountId 并整合到单个计量记录中。 BusinessUnits\]](http://docs.aws.amazon.com/zh_cn/marketplace/latest/userguide/images/seller-vendor-meter-tag.png)


卖家还可以将没有标签的资源组合成一个 `UsageAllocation`，然后将其作为 `UsageAllocations` 中的一个条目发送。

限制包括：
+ 标签数 – 5
+ `UsageAllocations`（基数）的大小 – 2500
+ 最大请求大小 – 1 MB 

验证包括：
+ 标签键和值允许使用的字符 — a-zA-Z 0-9\$1-= 。 \$1:\$1 /@
+ `UsageAllocation` 列表中的最大标签数 – 5
+ 两个 `UsageAllocations` 的标签不能相同（也就是说，标签键和值的组合相同）。如果是这样的话，他们必须使用相同的 `UsageAllocation`。
+ `UsageAllocation` 的 `AllocatedUsageQuantity` 之和必须等于 `UsageQuantity`，即聚合用量。
+ 最大有效负载大小不能超过 1 MB。这包括输入属性键（例如，`UsageRecords`、`AllocatedUsageQuantity`、标签）。
**注意**  
为确保您没有违反有效负载限制，请根据业务要求创建具有最大大小的示例请求对象，将该对象转换为 JSON 字符串，然后获取以字节为单位的大小。确保单个 API 调用不会超过 1 MB 的限制。例如。如果一个带有 1 `UsageRecord` 的请求的最大大小为 200 KB，则作为请求的一部分发送的内容不要超过 5 `UsageRecords`（200KB \$1 5 = 1MB）。

### 买家体验
<a name="saas-vendor-metered-tag-buyer"></a>

下表显示了买家激活 `AccountId` 和 `BusinessUnit` 供应商标签后的买家体验示例。

在此示例中，买家可以在其**成本使用报告**中看到分配的用量。供应商计量标签使用前缀 `“aws:marketplace:isv”`。在账单与成本管理中，买家可以再**成本分配标签**下的 **AWS生成的成本分配标签**中激活它们。

**成本使用报告**的第一行和最后一行与卖家向 Metering Service 发送的内容相关（如 [卖家体验](container-metering-meterusage.md#container-vendor-metered-tag-seller) 示例所示）。


**成本使用报告（简化）**  

| ProductCode  | 买家 | UsageDimension | UsageQuantity | `aws:marketplace:isv:AccountId ` | `aws:marketplace:isv:BusinessUnit` | 
| --- | --- | --- | --- | --- | --- | 
| xyz | 111122223333 | 网络：每 (GB) 检查一次  | 70 | 2222 | 运营 | 
| xyz | 111122223333 | 网络：每 (GB) 检查一次  | 30 | 3333 | 财务 | 
| xyz | 111122223333 | 网络：每 (GB) 检查一次  | 20 | 4444 | IT | 
| xyz | 111122223333 | 网络：每 (GB) 检查一次  | 20 | 5555 | 市场营销 | 
| xyz | 111122223333 | 网络：每 (GB) 检查一次  | 30 | 1111 | 市场营销 | 

有关代码示例，请参阅 [带有用量分配标签的 `BatchMeterUsage` 代码示例（可选）](saas-code-examples.md#saas-batchmeterusage-tagging)。

# 使用检查权利 AWS Marketplace Entitlement Service
<a name="checking-entitlements"></a>

 如果您的产品是 SaaS 合同产品，则您的产品会调用， AWS Marketplace Entitlement Service 以使用 [GetEntitlements](https://docs.aws.amazon.com/marketplaceentitlement/latest/APIReference/API_GetEntitlements.html)API 检索客户的权利。您的产品应根据 AWS Marketplace 授权服务验证该账户的后续使用情况。例如，如果客户在账户中预置 10 个用户，则您的产品应检查 AWS Marketplace 授权服务以获取该容量的使用权限。

要验证客户是否有权使用您的产品，请使用 AWS Marketplace 授权服务中的`GetEntitlements`操作。 AWS Marketplace 授权服务仅在美国东部（弗吉尼亚北部）地区提供，可通过`entitlement.marketplace.us-east-1.amazonaws.com`或访问`entitlement-marketplace.us-east-1.api.aws`。

 `GetEntitlements`接受客户 AWS 账户 ID、客户标识符、许可 ARN 和维度作为筛选条件。 `ProductCode`是必填参数。该操作返回权限的分页列表。结果有一个 `ExpirationDate` 字段，显示该权利有效的最短时段。如果客户设置了自动续订，则 ExpirationDate 字段中的日期为续订日期。

有关代码示例，请参阅 [SaaS 产品集成的代码示例](saas-code-examples.md)。

## 检索用户操作权利
<a name="retrieving-entitlement-on-user-actions"></a>

 以下示例可以帮助您更好地了解检索用户操作权利的流程。

### 示例：基于用户的产品
<a name="example-user-based-application"></a>

 您提供的产品允许给定客户拥有一定数量的账户。客户可以访问控制面板来预置新用户（例如，分配凭证）。当客户配置新用户时，您的产品会调用 `GetEntitlements` 来验证容量是否存在。如果不是，您可以致电 AWS Marketplace 计量服务为其他用户开具账单。

### 示例：数据存储产品
<a name="example-data-storage-application"></a>

 您提供的产品让客户能够以加密或未加密格式存储一定量的数据。客户可以查看控制面板，该控制面板显示了您的产品中现有和分配的数据量。您的控制面板通过 `GetEntitlements` 检索分配数量。

# SaaS 产品集成核对清单
<a name="aws-marketplace-integration-checklist"></a>

在推出软件即服务（SaaS）产品之前，您必须验证您是否已完成所需的配置。您可以使用以下 SaaS 集成核对清单来验证您是否已完成所需的配置。


|  **类别**  |  **要求**  | 
| --- | --- | 
| 访问  | 提交了包含所需 AWS 账户的卖家注册表以供 AWS Marketplace 使用。 | 
| 访问  | 完成了卖家注册，包括条款和条件、银行账户以及 W8 或 W9 税务表单。 | 
| 访问  | 为注册账户配置跨 AWS Marketplace 账户角色。 | 
| 产品  | 在 AWS Marketplace 管理门户中完成产品申请表。 | 
| 产品  | 在 AMMP 中创建产品向导的 “备注” 选项卡中提供了测试 AWS 账户 IDs 。 | 
| 产品  | 在产品选项卡中以 .txt 格式提供 EULA 的 URL。 | 
| 产品  | 已收到您的商品代码和 Amazon SNS 主题信息。 AWS Marketplace | 
| 产品  | 订阅 Amazon SNS 主题并创建了 Amazon SQS 队列以订阅 Amazon SNS 主题。 | 
| 计费解决方案  | 经过验证，您可以每小时向BatchMeterUsage运营部门发送计量记录，以获取每位客户的 SaaS 订阅产品的许可证。可以为 SaaS 合同产品，按照每位客户的额外用量发送计量记录。 | 
| 计费解决方案  | 经过验证后，您可以验证 SaaS 合同产品的 AWS Marketplace 授权服务中的客户权利。 | 
| 计费解决方案  | 验证了该成本按预期显示在为测试账户生成的账单上。 | 
| 计费解决方案  | 针对客户无效 IDs 和订阅取消等情况进行了测试。 | 
| 产品  | 已将产品请求提交回以 AWS Marketplace 供发布。 | 
| 注册  | 实现了可接受 HTTP POST 请求的 HTTPS 注册页面。 | 
| 注册  | 验证了您可接受新客户注册。 | 
| 注册  | 验证了您未将注册令牌存储在 cookie 中。 | 
| 注册  | 已验证您正在ResolveCustomer使用该 AWS 令牌获取ProductCodeCustomerAWSAccountId、和LicenseArn。 | 
| 注册  | 经过验证后，您可以毫不延迟地解析收到 AWS 的注册令牌。 | 
| 注册  | 测试了没有阻止如 Gmail 这样的电子邮件服务地址进行注册。 | 
| 注册  | 测试了能接受不完整的注册和多次注册尝试。 | 
| 订阅  | 测试了您可以处理 unsubscribe-pending 和 unsubscribe-success 消息。 | 
| 订阅  |  验证了您发送在一小时内接收 `unsubscribe-pending` 消息的最终计量记录。  | 
| 安全性  | 已验证 AWS 根账户没有 API 密钥、密码强且与硬件多因素身份验证 (MFA) 设备关联。所有管理访问权限均通过使用 AWS Identity and Access Management (IAM) 创建的身份进行。无共享账户。 | 
| 安全性  | 验证了 IAM 角色用于所有编程式 Amazon Elastic Compute Cloud (Amazon EC2) 访问。凭证未硬编码到脚本、标头或源代码中。 | 
| 安全性  | 验证了您维护着全面的日志记录和日志合并。 | 
| 安全性  | 验证了您有明确定义的公有子网和私有子网边界，隔离应用程序服务，以及对数据库和文件系统的访问。区分敏感数据以及分隔公有和私有数据的不同数据类定义。 | 
| 安全性  | 验证了您使用传输中和静态私有数据加密并按计划轮换密钥。 | 
| 安全性  | 验证了您采用了安全事故工具和访问措施，以及定期安排的事件响应演习，以便于及时调查和恢复。 | 
| 可靠性  | 验证了系统可适应不断变化的需求来向上扩展和向下扩展，并采用负载平衡，以确保高性能。系统还根据需要提供基于边缘的缓存。 | 
| 可靠性  | 验证了已指定恢复时间和恢复点目标，并定期安排灾难恢复。组件故障可通过自动触发器和通知自我修复。 | 