

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

# AWS Service Catalog 启动限制
<a name="constraints-launch"></a>

启动约束指定最终用户启动、更新或终止产品时所扮演的 AWS Identity and Access Management (IAM) 角色。 AWS Service Catalog IAM 角色是用户或 AWS 服务可以临时承担的使用 AWS 服务的权限集合。有关介绍性示例，请参阅：
+ CloudFormation 产品类型:[步骤 6：添加启动约束以分配 IAM 角色](getstarted-launchconstraint.md)
+ Terraform 开源或 Terraform 云产品类型：[步骤 5：创建启动角色](getstarted-launchrole-Terraform.md)

启动约束适用于产品组合中的产品（产品-产品组合关联）。启动约束不适用于产品组合层面，也不适用于跨所有产品组合的某个产品。要将启动约束与产品组合中的所有产品相关联，您必须将启动约束分别应用于每个产品。

如果没有启动约束，最终用户必须使用自己的 IAM 凭证启动和管理产品。为此，他们必须拥有产品使用的 AWS 服务的权限，以及 AWS Service Catalog。 CloudFormation通过使用启动角色，您可改为将最终用户的权限限定为他们对该产品所需的最小权限。有关最终用户权限的更多信息，请参阅[Identity and Access Management AWS Service Catalog](controlling_access.md)。

要创建和分配 IAM 角色，您必须拥有以下 IAM 管理权限：
+ `iam:CreateRole`
+ `iam:PutRolePolicy`
+ `iam:PassRole`
+ `iam:Get*`
+ `iam:List*`

## 配置启动角色
<a name="constraints-launch-role"></a>

您向产品分配的作为启动约束的 IAM 角色必须拥有使用以下项的权限：

**对于 Cloudformation 产品**
+ `arn:aws:iam::aws:policy/AWSCloudFormationFullAccess` CloudFormation 托管策略
+ 产品 AWS CloudFormation 模板中的服务
+ 在服务拥有的 Amazon S3 存储桶中读取 AWS CloudFormation 模板的访问权限。

**对于 Terraform 产品**
+ 产品的 Amazon S3 模板中使用的服务
+ 自服务拥有的 Amazon S3 存储桶中读取 Amazon S3 模板的访问权限。
+ `resource-groups:Tag` 用于在 Amazon EC2 实例中进行标记（Terraform 预配置引擎在执行配置操作时担任）
+ `resource-groups:CreateGroup`用于资源组标记（假设 AWS Service Catalog 用于创建资源组和分配标签） 

IAM 角色的信任策略必须 AWS Service Catalog 允许代入该角色。在以下步骤中，当您选择角色类型时 AWS Service Catalog ，将自动设置信任策略。如果您不使用控制台，请参阅[如何在 IAM 角色中使用*信任策略中的为代入角色的 AWS 服务创建*信任策略](https://aws.amazon.com/blogs/security/how-to-use-trust-policies-with-iam-roles/)部分。

**注意**  
无法在启动角色中分配 `servicecatalog:ProvisionProduct`、`servicecatalog:TerminateProvisionedProduct` 和 `servicecatalog:UpdateProvisionedProduct` 权限。您必须使用 IAM 角色，如[授予 AWS Service Catalog 最终用户权限](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-iamenduser.html)部分中的内联策略步骤所示。

**注意**  
要在 AWS Service Catalog 控制台中查看预配置的 Cloudformation 产品和资源，最终用户需要 CloudFormation 读取权限。在控制台中查看预配置产品和资源**不会**使用启动角色。

**创建启动角色**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

   Terraform 产品需要额外的启动角色配置。有关更多信息，请查看 *Terraform 开源产品入门*中的[步骤 5：创建启动角色](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-launchrole-Terraform)。

1. 选择 **角色**。

1. 选择**创建新角色**。

1. 输入角色名称并选择 **Next Step**。

1. 在 **AWS Service Catalog** 旁边的**AWS 服务角色**下，选择**选择**。

1. 在 **Attach Policy** 页面上，选择 **Next Step**。

1. 要创建角色，请选择 **Create Role**。

**将策略附加到新角色**

1. 选择您创建的角色以查看角色详细信息页面。

1. 选择 **Permissions** 选项卡，展开 **Inline Policies** 部分。然后选择 **click here**。

1. 选择 **Custom Policy**，然后选择 **Select**。

1. 输入策略的名称，然后将以下内容粘贴到 **Policy Document** 编辑器中：

   ```
     
             "Statement":[
         {
            "Effect":"Allow",
            "Action":[
               "s3:GetObject"
            ],
            "Resource":"*",
            "Condition":{
               "StringEquals":{
                  "s3:ExistingObjectTag/servicecatalog:provisioning":"true"
               }
            }
      ]
   }
   ```
**注意**  
为启动约束配置启动角色时，您必须使用以下字符串：`"s3:ExistingObjectTag/servicecatalog:provisioning":"true"`。

1. 为产品使用的每个额外服务的策略添加一行。例如，要为 Amazon Relational Database Service（Amazon RDS）添加权限，请在 `Action` 列表中的最后一行的末尾键入逗号，然后添加以下行：

   ```
   "rds:*"
   ```

1. 选择**应用策略**。

## 应用启动约束
<a name="constraints-launch-constraint"></a>

您配置启动角色后，将该角色作为启动约束分配给产品。此操作指示 AWS Service Catalog 在最终用户启动产品时代入该角色。

**将角色分配给产品**

1. 打开 Service Catalog 控制台，网址为[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)。

1. 选择包含产品的产品组合。

1. 选择**约束**选项卡并选择**创建约束**。

1. 自**产品**中选择产品，然后在**约束类型**下选择**启动**。选择**继续**。

1. 在**启动约束** 部分，您可以从自己的账户中选择 IAM 角色、输入 IAM 角色 ARN 或输入角色名称。

   如果您指定角色名称，当账户使用启动约束时，将使用账户中具有该名称的 IAM 角色。此方法允许使用与账户无关的启动角色约束，因此您可以为每个共享账户创建更少的资源。
**注意**  
在创建启动约束的账户中，以及使用此启动约束启动产品的用户账户中，都必须存在给定的角色名称。

1. 指定 IAM 角色后，选择 **创建**。

## 在启动限制中添加混淆代理
<a name="constraint-confused-deputy"></a>

AWS Service Catalog 支持使用代入角色请求 APIs 的[混乱副](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)手保护。添加启动约束时，您可以使用启动角色信任策略中的 `sourceAccount` 和 `sourceArn` 条件来限制启动角色访问权限。它可确保启动角色由可信来源调用。

在以下示例中， AWS Service Catalog 最终用户属于账户 111111111111。 AWS Service Catalog 管理员为产品创建 `LaunchConstraint` 时，最终用户可以在启动角色信任策略中指定以下条件，将担任角色限制为账户 111111111111。

```
"Condition":{
   "ArnLike":{
      "aws:SourceArn":"arn:aws:servicecatalog:us-east-1:111111111111:*"
   },
   "StringEquals":{
      "aws:SourceAccount":"111111111111"
   }
  
}
```

使用 `LaunchConstraint` 预配置产品的用户必须具有相同的 `AccountId`（111111111111）。否则，为防止滥用启动角色，操作将出现 `AccessDenied` 错误并失败。

以下 AWS Service Catalog APIs 是为了保护混乱的副手：
+ `LaunchConstraint`
+ `ProvisionProduct`
+ `UpdateProvisionedProduct`
+ `TerminateProvisionedProduct`
+ `ExecuteProvisionedProductServiceAction`
+ `CreateProvisionedProductPlan`
+ `ExecuteProvisionedProductPlan`

 AWS Service Catalog 仅对的`sourceArn `保护支持模板化 ARNs，例如 “`arn:<aws-partition>:servicecatalog:<region>:<accountId>:`” 它不支持特定的资源 ARNs。

## 验证启动约束
<a name="constraints-launch-test"></a>

要验证 AWS Service Catalog 使用角色启动产品并成功配置产品，请从 AWS Service Catalog 控制台启动产品。要在将约束发布给用户前对其进行测试，请创建包含相同产品的测试产品组合，并使用该产品组合测试约束。

**启动产品**

1. 在 AWS Service Catalog 控制台的菜单中，选择 S **ervice Catalog**，**最终用户**。

1. 选择产品以打开**产品详细信息**页面。在**启动选项**表中，确认已显示角色的 Amazon 资源名称（ARN）。

1. 选择**启动产品**。

1. 继续执行启动步骤，填入任何所需信息。

1. 确认产品已成功启动。