

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS Serverless Application Repository 應用程式政策範例
<a name="security_iam_resource-based-policy-examples"></a>

連接到 AWS Serverless Application Repository 應用程式的許可政策稱為*應用程式政策*。應用程式政策會決定指定主體或 principalOrg 可在 AWS Serverless Application Repository 應用程式上執行的動作。

 AWS Serverless Application Repository *應用程式*是 中的主要 AWS 資源 AWS Serverless Application Repository。 AWS Serverless Application Repository 應用程式政策主要供發佈者使用，以授予許可給消費者部署其應用程式，以及相關操作，例如搜尋和檢視這些應用程式的詳細資訊。

發佈者可以將應用程式許可設定為下列三種類別：
+ **私有** – 使用相同帳戶建立且尚未與任何其他帳戶共用的應用程式。只有共用您 AWS 帳戶的消費者才具有部署私有應用程式的許可。
+ **私有共用** – 發佈者已明確與一組特定 AWS 帳戶或 AWS AWS 組織中的帳戶共用的應用程式。消費者有權部署已與其 AWS 帳戶或 AWS 組織共用的應用程式。如需 AWS 組織的詳細資訊，請參閱*[AWS Organizations 《 使用者指南](https://docs.aws.amazon.com/organizations/latest/userguide/)*》。
+ **公開共用** – 發佈者已與所有人共用的應用程式。所有使用者都有權部署任何公開共用的應用程式。

**注意**  
對於**私有共用的應用程式**， AWS Serverless Application Repository 僅支援*AWS 帳戶*做為委託人。發佈者可以將 AWS 帳戶內的所有使用者作為單一群組授予或拒絕應用程式 AWS Serverless Application Repository 。發佈者無法將 AWS 帳戶中的個別使用者授予或拒絕給 AWS Serverless Application Repository 應用程式。

如需使用 設定應用程式許可的說明 AWS 管理主控台，請參閱 [共用應用程式](serverlessrepo-how-to-publish.md#share-application)。

如需使用 AWS CLI 和 範例設定應用程式許可的說明，請參閱下列各節。

## 應用程式許可 (AWS CLI and AWS SDKs)
<a name="application-permissions"></a>

當您使用 AWS CLI 或 AWS SDKs AWS Serverless Application Repository 來設定應用程式的許可時，您可以指定下列動作：


****  

| Action | Description | 
| --- | --- | 
| GetApplication |  授予查看應用程式相關資訊的許可。  | 
| CreateCloudFormationChangeSet |  授予部署應用程式的許可。 注意：此動作*不*授予部署除外的任何其他許可。  | 
| CreateCloudFormationTemplate |  准許為應用程式建立 CloudFormation 範本。  | 
| ListApplicationVersions | 授予列出應用程式版本的許可。 | 
| ListApplicationDependencies | 授予列出應用程式內所含巢狀應用程式清單的許可。 | 
| SearchApplications | 授予搜尋應用程式的許可。 | 
| 部署 |  此動作會啟用表格前面列出的所有動作。也就是授予檢視、部署、列出版本及搜尋應用程式的許可。  | 

## 應用程式政策範例
<a name="access-control-resource-based-examples"></a>

以下範例說明如何使用 AWS CLI授予許可。如需如何使用 授予許可的資訊 AWS 管理主控台，請參閱 [共用應用程式](serverlessrepo-how-to-publish.md#share-application)。

本節中的所有範例都使用這些 AWS CLI 命令來管理與 AWS Serverless Application Repository 應用程式相關聯的許可政策：
+ [put-application-policy](https://docs.aws.amazon.com/cli/latest/reference/serverlessrepo/put-application-policy.html)
+ [get-application-policy](https://docs.aws.amazon.com/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：與 AWS 組織中的所有帳戶共用應用程式](#access-control-resource-based-example-share-organization)
+ [範例 6：與 AWS 組織中的某些帳戶共用應用程式](#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>

若要與其他特定帳戶共用應用程式，但避免與他人共用，您可以指定要以委託人身分共用 AWS 的帳戶 ID。這也稱為將應用程式設定為*私人共用*。若要這樣做，請使用下列 AWS CLI 命令。

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

**注意**  
*私有共用*應用程式只能在建立 AWS 應用程式的相同區域中使用。

### 範例 2：公開共用應用程式
<a name="access-control-resource-based-example-share-publicly"></a>

若要公開應用程式，您透過指定「\*」為委託人與每個人共用，如下列範例所示。公開共用的應用程式可在所有區域使用。

```
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>

您可以將應用程式設為私有，因此不會與任何人共用，而且只能由擁有該應用程式 AWS 的帳戶部署。若要執行此作業，請清除政策中的主體和動作，這也會從 AWS 組織內的其他帳戶移除部署應用程式的許可。

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

**注意**  
*私有*應用程式只能在建立應用程式的相同 AWS 區域中使用。

### 範例 4：指定多個帳戶和許可
<a name="access-control-resource-based-example-multiple-permissions"></a>

您可以授予多個許可，也可以一次將它們授予多個 AWS 帳戶。若要這樣做，請指定委託人和動作清單，如下列範例所示。

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

### 範例 5：與 AWS 組織中的所有帳戶共用應用程式
<a name="access-control-resource-based-example-share-organization"></a>

可以將許可授予 AWS 組織內的所有使用者。您可以藉由指定組織 ID 來執行這項操作，如下列範例所示。

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

如需 AWS 組織的詳細資訊，請參閱 *[AWS Organizations 使用者指南](https://docs.aws.amazon.com/organizations/latest/userguide/)*。

**注意**  
您只能指定 AWS 帳戶所屬 AWS 的組織。如果您嘗試指定不是 成員 AWS 的組織，則會產生錯誤。  
若要與您的 AWS 組織共用應用程式，您必須包含 `UnshareApplication`動作的許可，以防未來需要撤銷共用。

### 範例 6：與 AWS 組織中的某些帳戶共用應用程式
<a name="access-control-resource-based-example-accounts-in-organization"></a>

可以將許可授予 AWS 組織內的特定帳戶。做法是將 AWS 帳戶清單指定為委託人，以及您的組織 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
```

**注意**  
您只能指定 AWS 帳戶所屬 AWS 的組織。如果您嘗試指定不是 成員 AWS 的組織，則會產生錯誤。  
若要與您的 AWS 組織共用應用程式，您必須包含 `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
```