

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

# 安装和配置 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"
        }
    ]
}
```

------