

AWS Marketplace API 参考已重组。有关支持的 API 操作的更多信息，请参阅 [AWS Marketplace API 参考](https://docs.aws.amazon.com/marketplace/latest/APIReference/Welcome.html)。

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

# 的访问控制 AWS Marketplace 发现 API
<a name="discovery-api-access-control"></a>

发现 API 使用 AWS Identity and Access Management (IAM) 进行身份验证和授权。任何 AWS 客户都可以通过配置相应的 IAM 权限来调用 Discovery API。

用户必须具有以下权限才能调用 Discovery API 操作：
+ `GetListing`— 授予检索房源信息的权限。
+ `GetProduct`— 授予检索产品信息的权限。
+ `GetOffer`— 授予检索有关优惠信息的权限。
+ `GetOfferTerms`— 授予检索优惠条款的权限。
+ `GetOfferSet`— 授予检索优惠套餐相关信息的权限。
+ `ListPurchaseOptions`— 授予列出买家可用的购买选项的权限。
+ `ListFulfillmentOptions`— 授予列出商品配送选项的权限。
+ `SearchListings`— 授予搜索产品列表的权限。
+ `SearchFacets`— 授予检索分面值以筛选列表的权限。

## IAM 权限
<a name="discovery-iam-permissions"></a>

要调用 Discovery API 操作，IAM 委托人（用户或角色）必须具有相应的`aws-marketplace`权限。Discovery API 支持资源级权限，因此您可以在 IAM 策略中限制对特定资源类型的访问权限。

以下 IAM 策略授予对所有具有资源级范围的 Discovery API 操作的访问权限：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "aws-marketplace:GetListing",
                "aws-marketplace:GetProduct",
                "aws-marketplace:GetOffer",
                "aws-marketplace:GetOfferTerms",
                "aws-marketplace:GetOfferSet",
                "aws-marketplace:ListPurchaseOptions",
                "aws-marketplace:ListFulfillmentOptions",
                "aws-marketplace:SearchFacets",
                "aws-marketplace:SearchListings"
            ],
            "Resource": [
                "arn:aws:aws-marketplace:::catalog/<catalog-name>/product/*",
                "arn:aws:aws-marketplace:::catalog/<catalog-name>/listing/*",
                "arn:aws:aws-marketplace:::catalog/<catalog-name>/offer/*",
                "arn:aws:aws-marketplace:::catalog/<catalog-name>/offerSet/*",
                "arn:aws:aws-marketplace:::catalog/<catalog-name>/purchaseOption/*"
            ]
        }
    ]
}
```

`<catalog-name>`替换为相应的目录标识符（例如，`AWSMarketplace`）。

### 资源 ARN 格式
<a name="discovery-resource-arn-formats"></a>

下表显示了 Discovery API 操作使用的资源类型及其 ARN 格式：


| 资源类型 | ARN 格式 | 使用者 | 
| --- | --- | --- | 
| 产品 | arn:aws:aws-marketplace:::catalog/{{catalog-name}}/product/{{product-id}} | GetProduct, ListFulfillmentOptions | 
| 产品上架 | arn:aws:aws-marketplace:::catalog/{{catalog-name}}/listing/{{listing-id}} | GetListing, SearchListings, SearchFacets | 
| 优惠 | arn:aws:aws-marketplace:::catalog/{{catalog-name}}/offer/{{offer-id}} | GetOffer, GetOfferTerms | 
| 优惠套装 | arn:aws:aws-marketplace:::catalog/{{catalog-name}}/offerSet/{{offerSet-id}} | GetOfferSet | 
| Purchase Option | arn:aws:aws-marketplace:::catalog/{{catalog-name}}/purchaseOption/{{purchaseOption-id}} | ListPurchaseOptions | 

### 将操作范围限定为特定资源
<a name="discovery-scoping-get-operations"></a>

对于 Get 操作（GetListing GetProduct GetOffer、、 GetOfferTerms、、 GetOfferSet）和 ListFulfillmentOptions 操作，您可以将访问范围缩小到特定的资源 ID，而不必使用通配符。例如，要限制对单个列表的访问权限，请执行以下操作：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "aws-marketplace:GetListing",
            "Resource": "arn:aws:aws-marketplace:::catalog/AWSMarketplace/listing/{{listing-id}}"
        }
    ]
}
```

此模式适用于任何 Get 操作和 ListFulfillmentOptions。相应地替换资源类型和 ID：
+ `arn:aws:aws-marketplace:::catalog/{{catalog-name}}/product/{{product-id}}`
+ `arn:aws:aws-marketplace:::catalog/{{catalog-name}}/listing/{{listing-id}}`
+ `arn:aws:aws-marketplace:::catalog/{{catalog-name}}/offer/{{offer-id}}`
+ `arn:aws:aws-marketplace:::catalog/{{catalog-name}}/offerSet/{{offerSet-id}}`

 SearchListings SearchFacets、和 ListPurchaseOptions 操作不支持将范围限定为单个资源，因为它们可以跨多个项目进行操作。使用以下通配符 ARN 模式进行这些操作：
+ 对于 SearchListings 和 SearchFacets：`arn:aws:aws-marketplace:::catalog/{{catalog-name}}/listing/*`
+ 对于 ListPurchaseOptions：`arn:aws:aws-marketplace:::catalog/{{catalog-name}}/purchaseOption/*`

## Service-linked 角色
<a name="discovery-service-linked-roles"></a>

发现 API 不使用与服务相关的角色。所有访问均通过标准 IAM 策略进行控制。

## Cross-account 访问
<a name="discovery-cross-account-access"></a>

您可以使用 IAM 角色授予对 Discovery API 的跨账户访问权限。在目标账户中创建一个具有相应 Discovery API 权限的角色，然后从源账户中代入该角色。