

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

# 设置 AWS Service Catalog
<a name="setup"></a>

在开始使用之前 AWS Service Catalog，请完成以下任务。

**Topics**
+ [注册获取 AWS 账户](#sign-up-for-aws)
+ [创建具有管理访问权限的用户](#create-an-admin)
+ [向 AWS Service Catalog 管理员授予权限](getstarted-iamadmin.md)
+ [向 AWS Service Catalog 最终用户授予权限](getstarted-iamenduser.md)
+ [安装和配置 Terraform 预配置引擎](install-config-engine.md)

## 注册获取 AWS 账户
<a name="sign-up-for-aws"></a>

如果您没有 AWS 账户，请完成以下步骤来创建一个。

**要注册 AWS 账户**

1. 打开[https://portal.aws.amazon.com/billing/注册。](https://portal.aws.amazon.com/billing/signup)

1. 按照屏幕上的说明操作。

   在注册时，将接到电话或收到短信，要求使用电话键盘输入一个验证码。

   当您注册时 AWS 账户，就会创建*AWS 账户根用户*一个。根用户有权访问该账户中的所有 AWS 服务 和资源。作为最佳安全实践，请为用户分配管理访问权限，并且只使用根用户来执行[需要根用户访问权限的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

AWS 注册过程完成后会向您发送一封确认电子邮件。您可以随时前往 [https://aws.amazon.com/](https://aws.amazon.com/)并选择 “**我的账户”，查看您当前的账户活动并管理您的账户**。

## 创建具有管理访问权限的用户
<a name="create-an-admin"></a>

注册后，请保护您的安全 AWS 账户 AWS 账户根用户 AWS IAM Identity Center，启用并创建管理用户，这样您就不会使用 root 用户执行日常任务。

**保护你的 AWS 账户根用户**

1.  选择 **Root 用户**并输入您的 AWS 账户 电子邮件地址，以账户所有者的身份登录。[AWS 管理控制台](https://console.aws.amazon.com/)在下一页上，输入您的密码。

   要获取使用根用户登录方面的帮助，请参阅《AWS 登录 用户指南》**中的 [Signing in as the root user](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 为您的根用户启用多重身份验证（MFA）。

   有关说明，请参阅 I [A *M* 用户指南中的为 AWS 账户 根用户启用虚拟 MFA 设备（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**创建具有管理访问权限的用户**

1. 启用 IAM Identity Center。

   有关说明，请参阅**《AWS IAM Identity Center 用户指南》中的[启用 AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)。

1. 在 IAM Identity Center 中，为用户授予管理访问权限。

   有关使用 IAM Identity Center 目录 作为身份源的教程，请参阅《[用户*指南》 IAM Identity Center 目录中的使用默认设置配置AWS IAM Identity Center 用户*访问权限](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)。

**以具有管理访问权限的用户身份登录**
+ 要使用您的 IAM Identity Center 用户身份登录，请使用您在创建 IAM Identity Center 用户时发送到您的电子邮件地址的登录 URL。

  有关使用 IAM Identity Center 用户[登录的帮助，请参阅*AWS 登录 用户指南*中的登录 AWS 访问门户](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)。

**将访问权限分配给其他用户**

1. 在 IAM Identity Center 中，创建一个权限集，该权限集遵循应用最低权限的最佳做法。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 将用户分配到一个组，然后为该组分配单点登录访问权限。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Add groups](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。

**Topics**
+ [注册获取 AWS 账户](#sign-up-for-aws)
+ [创建具有管理访问权限的用户](#create-an-admin)
+ [向 AWS Service Catalog 管理员授予权限](getstarted-iamadmin.md)
+ [向 AWS Service Catalog 最终用户授予权限](getstarted-iamenduser.md)
+ [安装和配置 Terraform 预配置引擎](install-config-engine.md)

要提供访问权限，请为您的用户、组或角色添加权限：
+ 中的用户和群组 AWS IAM Identity Center：

  创建权限集合。按照《AWS IAM Identity Center 用户指南》**中[创建权限集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)的说明进行操作。
+ 通过身份提供者在 IAM 中托管的用户：

  创建适用于身份联合验证的角色。按照《IAM 用户指南》**中[针对第三方身份提供者创建角色（联合身份验证）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)的说明进行操作。
+ IAM 用户：
  + 创建您的用户可以担任的角色。按照《IAM 用户指南》**中[为 IAM 用户创建角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)的说明进行操作。
  + （不推荐使用）将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》**中[向用户添加权限（控制台）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)中的说明进行操作。

# 向 AWS Service Catalog 管理员授予权限
<a name="getstarted-iamadmin"></a>

作为目录管理员，您需要访问 AWS Service Catalog 管理员控制台视图和允许您执行以下任务的 IAM 权限：
+ 创建和管理产品组合
+ 创建和管理产品
+ 添加模板约束以控制最终用户在启动产品时可用的选项
+ 添加启动限制以定义最终用户启动产品时所 AWS Service Catalog 扮演的 IAM 角色
+ 授予最终用户对产品的访问权限

您或者管理您 IAM 权限的管理员必须将完成本教程所需的策略附加到您的 IAM 用户、组或角色。

**向目录管理员授予权限**

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

1.  在导航窗格中，展开**访问权限管理**，然后选择**角色**。如果您已创建希望用作目录管理员的 IAM 用户，请选择该用户名，然后选择**添加权限**。否则，请创建一个用户，如下所示：

   1.  选择**添加用户**。

   1.  对于 **User name**，键入 **ServiceCatalogAdmin**。

   1.  选择 **Programmatic access** 和 **AWS 管理控制台 access**。

   1.  选择**下一步：权限**。

1.  选择**直接附上现有策略**。

1.  选择**创建策略**，然后执行以下操作：

   1.  选择 **JSON** 选项卡。

   1.  复制下面的示例策略，然后将其粘贴到**策略文档** 中：

      ```
      {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "ec2:CreateKeyPair",
                      "iam:AddRoleToInstanceProfile",
                      "iam:AddUserToGroup",
                      "iam:AttachGroupPolicy",
                      "iam:CreateAccessKey",
                      "iam:CreateGroup",
                      "iam:CreateInstanceProfile",
                      "iam:CreateLoginProfile",
                      "iam:CreateRole",
                      "iam:CreateUser",
                      "iam:Get*",
                      "iam:List*",
                      "iam:PutRolePolicy",
                      "iam:UpdateAssumeRolePolicy"
                  ],
                  "Resource": [
                      "*"
                  ]
              }
          ]
      }
      ```

   1.  选择**下一步：标签**。

   1.  （可选）选择**添加标签**以便将键值对与资源关联。您最多可添加 50 个标签。
**注意**  
 标签是可以添加到资源的键值对。其可以用于识别、组织和搜索资源。有关更多信息，请参阅《*AWS 一般参考 参考指南》*中的为[AWS 资源添加标签](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html)。

   1.  选择**下一步：审核**。

   1.  对于 **Policy Name**，键入 **ServiceCatalogAdmin-AdditionalPermissions**。
**重要**  
 您必须向管理员 Amazon S3 授予访问 AWS Service Catalog 存储在 Amazon S3 中的模板的权限。有关更多信息，请参阅*《Amazon Simple Storage Service 用户指南》*中的[用户策略示例](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-policies-s3.html)。

   1.  请选择**创建策略**。

1. 返回包含权限页面的浏览器窗口，然后选择 **Refresh**。

1. 在搜索字段中，键入 **ServiceCatalog** 以筛选策略列表。

1. 选择 **`AWSServiceCatalogAdminFullAccess`**、**`ServiceCatalogAdmin-AdditionalPermissions`** 策略的复选框，然后选择**下一步：审核**。

1. 如果您要更新用户，请选择 **Add permissions**。

   如果您要创建用户，请选择 **Create user**。您可以下载或复制凭证，然后选择 **Close**。

1. 要以目录管理员身份登录，请使用账户特定的 URL。要查找此 URL，请在导航窗格中选择 **Dashboard**，然后选择 **Copy Link**。将链接粘贴到您的浏览器中，然后使用您在此过程中创建或更新的 IAM 用户的名称和密码。

# 向 AWS Service Catalog 最终用户授予权限
<a name="getstarted-iamenduser"></a>

在最终用户可以使用之前 AWS Service Catalog，您必须授予对 AWS Service Catalog 最终用户控制台视图的访问权限。要授予访问权限，您需要将策略附加到最终用户所使用的 IAM 用户、用户组或角色。在以下过程中，我们将 ****`AWSServiceCatalogEndUserFullAccess`**** 策略附加到 IAM 用户组。

**向最终用户组授予权限**

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

1. 在导航窗格中，选择**用户组**。

1. 选择**创建组**，然后执行以下操作：

   1. 对于**组名称**，键入 **Endusers**。

   1. 在搜索字段中，键入 **AWSServiceCatalog** 以筛选策略列表。

   1. 选中该 ****`AWSServiceCatalogEndUserFullAccess`**** 策略的复选框。您也可以改而选择 ****`AWSServiceCatalogEndUserReadOnlyAccess`****。

   1. 选择**创建组**。

1. 在导航窗格中，选择 **Users**（用户）。

1. 选择**添加用户**，然后执行以下操作：

   1. 对于**用户名**，为用户键入一个名称。

   1. 选择**密码- AWS 管理控制台访问权限**。

   1. 选择**下一步: 权限**。

   1. 选择 **Add user to group**。

   1. 选中 **Endusers** 组的复选框，选择**下一步：标签**，然后选择**下一步：审核**。

   1. 在**审核**页面上，选择**创建用户**。下载或复制凭证，然后选择**关闭**。

# 安装和配置 Terraform 预配置引擎
<a name="install-config-engine"></a>

要成功使用 Terraform 产品 AWS Service Catalog，您必须在管理 Terraform 产品的同一个账户中安装和配置 Terraform 配置引擎。首先，您可以使用提供的 Terraform 配置引擎 AWS，该引擎安装和配置 Terraform 配置引擎所需的代码和基础架构。 AWS Service Catalog此一次性设置大约需要 30 分钟。 AWS Service Catalog 提供了一个 GitHub 存储库，其中包含有关[安装和配置 Terraform 配置引擎的](https://github.com/aws-samples/service-catalog-engine-for-terraform-os)说明。

## 队列确定
<a name="queue-determination"></a>

当您调用置备操作时， AWS Service Catalog 准备一条有效负载消息以发送到置备引擎中的相关队列。为了为队列构建 ARN， AWS Service Catalog 会进行以下假设：
+ 预配置引擎位于产品所有者的账户中
+ 配置引擎位于进行调用的 AWS Service Catalog 同一区域
+ 预配置引擎队列遵循记录的命名方案，详见下文

例如，如果使用账户 0000000000000 创建的产品`us-east-1`从账户 1111111111 调入，则假定 SQS ARN ProvisionProduct 是正确的。 AWS Service Catalog `arn:aws:sqs:us-east-1:0000000000000:ServiceCatalogTerraformOSProvisionOperationQueue`

同样的逻辑也适用于由 `DescribeProvisioningParameters` 调用的 Lambda 函数。

# 将代理混淆添加到您的 Terraform 预配置引擎中
<a name="confused-deputy-TRFM-engine"></a>

## 端点上的代理混淆上下文密钥用于限制 `lambda:Invoke` 操作的访问权限
<a name="confused-deputy-TRFM-lambda"></a>

 AWS Service Catalog由提供的引擎创建的参数解析器 Lambda 函数具有仅向服务主体授予`lambda:Invoke`跨账户权限的访问策略： AWS Service Catalog 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "servicecatalog.amazonaws.com"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-east-1:111122223333:function:ServiceCatalogTerraformOSParameterParser"
        }
    ]
}
```

------

这应该是与的集成正常运行所必 AWS Service Catalog 需的唯一权限。但是，您可以使用 `aws:SourceAccount` [代理混淆](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy)上下文密钥进一步对其限制。向这些队列 AWS Service Catalog 发送消息时，使用配置账户的 ID AWS Service Catalog 填充密钥。当您打算通过产品组合共享分发产品并希望确保只有特定账户使用您的引擎时，这一点很实用。

例如，您可以使用如下所示的条件将您的引擎限制为仅允许源自 000000000000 和 111111111111 的请求：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "servicecatalog.amazonaws.com"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-east-1:111122223333:function:ServiceCatalogTerraformOSParameterParser",
            "Condition": {
                "StringLike": {
                    "aws:SourceAccount": [
                        "000000000000",
                        "111111111111"
                    ]
                }
            }
        }
    ]
}
```

------

## 端点上的代理混淆上下文密钥用于限制 `sqs:SendMessage` 操作的访问权限
<a name="confused-deputy-TRFM-sqs"></a>

由 AWS Service Catalog提供的引擎创建的配置操作引入 Amazon SQS 队列的访问策略仅向服务主体授予跨账户`sqs:SendMessage`（和关联的 KMS）权限： AWS Service Catalog 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Enable AWS Service Catalog to send messages to the queue",
            "Effect": "Allow",
            "Principal": {
                "Service": "servicecatalog.amazonaws.com"
            },
            "Action": "sqs:SendMessage",
            "Resource": [
                "arn:aws:sqs:us-east-1:111122223333:ServiceCatalogTerraformOSProvisionOperationQueue"
            ]
        },
        {
            "Sid": "Enable AWS Service Catalog encryption/decryption permissions when sending message to queue",
            "Effect": "Allow",
            "Principal": {
                "Service": "servicecatalog.amazonaws.com"
            },
            "Action": [
                "kms:DescribeKey",
                "kms:Decrypt",
                "kms:ReEncryptFrom",
                "kms:ReEncryptTo",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/key_id"
        }
    ]
}
```

------

这应该是与的集成正常运行所必 AWS Service Catalog 需的唯一权限。但是，您可以使用 `aws:SourceAccount` [代理混淆](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy)上下文密钥进一步对其限制。向这些队列 AWS Service Catalog 发送消息时，使用配置账户的 ID AWS Service Catalog 填充密钥。当您打算通过产品组合共享分发产品并希望确保只有特定账户使用您的引擎时，这一点很实用。

例如，您可以使用如下所示的条件将您的引擎限制为仅允许源自 000000000000 和 111111111111 的请求：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Enable AWS Service Catalog to send messages to the queue",
            "Effect": "Allow",
            "Principal": {
                "Service": "servicecatalog.amazonaws.com"
            },
            "Action": "sqs:SendMessage",
            "Resource": [
                "arn:aws:sqs:us-east-1:111122223333:ServiceCatalogTerraformOSProvisionOperationQueue"
            ],
            "Condition": {
                "StringLike": {
                    "aws:SourceAccount": [
                        "000000000000",
                        "111111111111"
                    ]
                }
            }
        },
        {
            "Sid": "Enable AWS Service Catalog encryption/decryption permissions when sending message to queue",
            "Effect": "Allow",
            "Principal": {
                "Service": "servicecatalog.amazonaws.com"
            },
            "Action": [
                "kms:DescribeKey",
                "kms:Decrypt",
                "kms:ReEncryptFrom",
                "kms:ReEncryptTo",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/key_id"
        }
    ]
}
```

------