

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

# Amazon Serverless Application Repository 应用程序策略示例
<a name="security_iam_resource-based-policy-examples"></a>

附加到 Amazon Serverless Application Repository 应用程序的权限策略称为*应用程序策略*。应用程序策略决定了指定的委托人或 PrincipalOrg 可以对应用程序执行的 Amazon Serverless Application Repository 操作。

 Amazon Serverless Application Repository *应用程序*是中的主要 Amazon 资源 Amazon Serverless Application Repository。 Amazon Serverless Application Repository 应用程序策略主要由发布者用来向消费者授予部署其应用程序的权限以及相关操作（例如搜索和查看这些应用程序的详细信息）。

发布者可以将应用程序权限设置为以下三个类别：
+ **私有** — 使用同一个账户创建且未与任何其他账户共享的应用程序。只有共享您 Amazon 账户的消费者才有权部署私有应用程序。
+ **私下共享** — 发布者已明确与一组特定 Amazon 帐户或 Amazon 组织中的 Amazon 帐户共享的应用程序。消费者有权部署已与其 Amazon 账户或 Amazon 组织共享的应用程序。有关 Amazon 组织的更多信息，请参阅《*[Amazon Organizations 用户指南》](https://docs.amazonaws.cn/organizations/latest/userguide/)*。
+ **公开共享**-发布者与所有人共享的应用程序。所有使用者都有权部署任何公开共享的应用程序。

**注意**  
对于**私有共享的应用程序**， Amazon Serverless Application Repository 仅支持*Amazon 账户*作为委托人。发布者可以将一个 Amazon 账户中的所有用户作为一个群组授予或拒绝使用某个 Amazon Serverless Application Repository 应用程序。发布者不能授予或拒绝 Amazon 账户内的个人用户使用 Amazon Serverless Application Repository 应用程序。

有关使用设置应用程序权限的说明 Amazon Web Services 管理控制台，请参阅[共享应用程序](serverlessrepo-how-to-publish.md#share-application)。

有关使用 Amazon CLI 和示例设置应用程序权限的说明，请参阅以下各节。

## 应用程序权限（Amazon CLI 和 Amazon SDKs）
<a name="application-permissions"></a>

使用 Amazon CLI 或 Amazon SDKs 为 Amazon Serverless Application Repository 应用程序设置权限时，可以指定以下操作：


****  

| Action | 说明 | 
| --- | --- | 
| GetApplication |  授予查看有关应用程序的信息的权限。  | 
| CreateCloudFormationChangeSet |  授予部署应用程序的权限。 注意：此操作*不会*授予除部署之外的任何其他权限。  | 
| CreateCloudFormationTemplate |  授予为应用程序创建 Amazon CloudFormation 模板的权限。  | 
| ListApplicationVersions | 授予列出应用程序的版本的权限。 | 
| ListApplicationDependencies | 授予列出包含应用程序中嵌套的应用程序的权限。 | 
| SearchApplications | 授予搜索应用程序的权限。 | 
| 部署 |  此操作启用表中前面列出的所有操作。也就是说，它授予查看应用程序、部署应用程序、列出版本以及搜索应用程序的权限。  | 

## 应用程序策略示例
<a name="access-control-resource-based-examples"></a>

以下示例演示如何使用 Amazon CLI授予权限。有关如何使用授予权限的信息 Amazon Web Services 管理控制台，请参阅[共享应用程序](serverlessrepo-how-to-publish.md#share-application)。

本节中的所有示例都使用以下 Amazon CLI 命令来管理与 Amazon Serverless Application Repository 应用程序关联的权限策略：
+ [put-application-policy](https://docs.amazonaws.cn/cli/latest/reference/serverlessrepo/put-application-policy.html)
+ [get-application-policy](https://docs.amazonaws.cn/cli/latest/reference/serverlessrepo/get-application-policy.html)

**Topics**
+ [示例 1：与其他账户共享应用程序](#access-control-resource-based-example-share-with-specific-account)
+ [示例 2：公开共享应用程序](#access-control-resource-based-example-share-publicly)
+ [示例 3：使应用程序成为私有的](#access-control-resource-based-example-make-private)
+ [示例 4：指定多个账户和权限](#access-control-resource-based-example-multiple-permissions)
+ [示例 5：与 Amazon 组织中的所有账户共享应用程序](#access-control-resource-based-example-share-organization)
+ [示例 6：与 Amazon 组织中的某些账户共享应用程序](#access-control-resource-based-example-accounts-in-organization)
+ [示例 7：检索应用程序策略](#access-control-resource-based-example-retrieve-app-policy)
+ [示例 8：允许特定账户嵌套应用程序](#access-control-resource-based-example-nest-app-policy)

### 示例 1：与其他账户共享应用程序
<a name="access-control-resource-based-example-share-with-specific-account"></a>

要与其他特定账户共享应用程序，但不允许与他人共享，请指定要与之共享的 Amazon 账户 ID 作为委托人。这也称为将应用程序设置为*私下共享*。为此，请使用以下 Amazon CLI 命令。

```
aws serverlessrepo put-application-policy \
--region region \
--application-id application-arn \
--statements Principals=account-id,Actions=Deploy
```

**注意**  
*私下共享*的应用程序只能在创建应用程序的同一 Amazon 区域中使用。

### 示例 2：公开共享应用程序
<a name="access-control-resource-based-example-share-publicly"></a>

要使应用程序公开，请通过将“\$1”指定为委托人来与每个人共享应用程序，如以下示例所示。公开共享的应用程序在所有区域中都可用。

```
aws serverlessrepo put-application-policy \
--region region \
--application-id application-arn \
--statements Principals=*,Actions=Deploy
```

**注意**  
要公开共享应用程序，它必须同时设置了 `SemanticVersion` 和 `LicenseUrl` 属性。

### 示例 3：使应用程序成为私有的
<a name="access-control-resource-based-example-make-private"></a>

您可以将应用程序设为私有，这样它就不会与任何人共享，只能由拥有该应用程序的 Amazon 账户进行部署。为此，您需要从策略中清除委托人和操作，该策略还会删除 Amazon 组织内其他账户部署应用程序的权限。

```
aws serverlessrepo put-application-policy \
--region region \
--application-id application-arn \
--statements '[]'
```

**注意**  
*私有*应用程序只能在创建应用程序的同一 Amazon 区域中使用。

### 示例 4：指定多个账户和权限
<a name="access-control-resource-based-example-multiple-permissions"></a>

您可以授予多个权限，也可以一次向多个 Amazon 账户授予这些权限。为此，您可以将列表指定为委托人和操作，如以下示例所示。

```
aws serverlessrepo put-application-policy \
--region region \
--application-id application-arn \
--statements Principals=account-id-1,account-id-2,Actions=GetApplication,CreateCloudFormationChangeSet
```

### 示例 5：与 Amazon 组织中的所有账户共享应用程序
<a name="access-control-resource-based-example-share-organization"></a>

可以向 Amazon 组织内的所有用户授予权限。您可以通过指定组织 ID 来执行此操作，如以下示例所示。

```
aws serverlessrepo put-application-policy \
--region region \
--application-id application-arn \
--statements Principals=*,PrincipalOrgIDs=org-id,Actions=Deploy,UnshareApplication
```

有关 Amazon 组织的更多信息，请参阅《*[Amazon Organizations 用户指南》](https://docs.amazonaws.cn/organizations/latest/userguide/)*。

**注意**  
您只能指定您的 Amazon 账户所属的 Amazon 组织。如果您尝试指定一个您不是其成员的 Amazon 组织，则会出现错误。  
要与您的 Amazon 组织共享您的应用程序，您必须包含`UnshareApplication`操作权限，以防将来需要撤消共享。

### 示例 6：与 Amazon 组织中的某些账户共享应用程序
<a name="access-control-resource-based-example-accounts-in-organization"></a>

可以向 Amazon 组织内的特定账户授予权限。为此，您可以将 Amazon 账户列表指定为委托人，并指定您的组织 ID，如下例所示。

```
aws serverlessrepo put-application-policy \
--region region \
--application-id application-arn \
--statements Principals=account-id-1,account-id-2,PrincipalOrgIDs=org-id,Actions=Deploy,UnshareApplication
```

**注意**  
您只能指定您的 Amazon 账户所属的 Amazon 组织。如果您尝试指定一个您不是其成员的 Amazon 组织，则会出现错误。  
要与您的 Amazon 组织共享您的应用程序，您必须包含`UnshareApplication`操作权限，以防将来需要撤消共享。

### 示例 7：检索应用程序策略
<a name="access-control-resource-based-example-retrieve-app-policy"></a>

要查看应用程序的当前策略，例如，要查看它当前是否共享，您可以使用 `get-application-policy` 命令，如以下示例所示。

```
aws serverlessrepo get-application-policy \
--region region \
--application-id application-arn
```

### 示例 8：允许特定账户嵌套应用程序
<a name="access-control-resource-based-example-nest-app-policy"></a>

允许任何人嵌套公有应用程序。如果您希望只允许特定账户嵌套您的应用程序，则必须设置以下最低权限，如以下示例所示。

```
aws serverlessrepo put-application-policy \
--region region \
--application-id application-arn \
--statements Principals=account-id-1,account-id-2,Actions=GetApplication,CreateCloudFormationTemplate
```