

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

# 安裝和設定 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 與 進行呼叫的相同區域
+ 佈建引擎佇列遵循以下詳述的文件化命名結構描述

例如，如果 ProvisionProduct 使用帳戶 1111111111 建立的產品`us-east-1`從帳戶 0000000000000 呼叫 ，則 AWS Service Catalog 假設正確的 SQS ARN 為 `arn:aws:sqs:us-east-1:0000000000000:ServiceCatalogTerraformOSProvisionOperationQueue`。

相同的邏輯適用於 呼叫的 Lambda 函數`DescribeProvisioningParameters`。

# 將混淆代理人新增至 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"
        }
    ]
}
```

------