

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS Service Catalog 制約の使用
<a name="constraints"></a>

制約を適用して、エンドユーザーがポートフォリオを起動したときに特定のポートフォリオ内の製品に適用されるルールを制御します。エンドユーザーが製品を起動すると、制約を使用して適用したルールが表示されます。製品をポートフォリオに入れたら、製品に制約を適用できます。制約は、作成するとすぐに有効になり、起動されていない製品の現在のバージョンすべてに適用されます。

**Topics**
+ [起動制約](constraints-launch.md)
+ [通知の制約](constraints-notification.md)
+ [タグの更新の制約](constraints-resourceupdate.md)
+ [スタックセットの制約](constraints-stackset.md)
+ [テンプレート制約](catalogs_constraints_template-constraints.md)

# AWS Service Catalog 起動の制限
<a name="constraints-launch"></a>

起動制約は、エンドユーザーが製品を起動、更新、または終了するときに が AWS Service Catalog 引き受ける AWS Identity and Access Management (IAM) ロールを指定します。IAM ロールは、ユーザーまたは AWS サービスが AWS サービスを使用するために一時的に引き受けることができるアクセス許可のコレクションです。簡単な例については、以下を参照してください。
+ CloudFormation 製品タイプ: [ステップ 6: IAM ロールを割り当てる起動制約を追加する](getstarted-launchconstraint.md)
+ Terraform Open Source または Terraform Cloud 製品タイプ: [ステップ 5: 起動ロールを作成する](getstarted-launchrole-Terraform.md)

起動制約は、ポートフォリオ (製品 - ポートフォリオの関連付け) 内の製品に適用されます。起動制約は、ポートフォリオレベルやすべてのポートフォリオにわたる製品に対して適用されません。起動の制約をポートフォリオ内のすべての製品に関連付けるには、起動の制約を各製品に個別に適用する必要があります。

起動制約がない場合、エンドユーザーは各自の IAM 認証情報を使用して製品を起動し、管理する必要があります。そのためには、製品で使用する AWS サービス CloudFormation、および に対するアクセス許可が必要です AWS Service Catalog。起動ロールを使用することにより、エンドユーザーのアクセス権限をその製品に必要な最小限のものに制限することができます。エンドユーザーのアクセス権限の管理の詳細については、「[での 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 テンプレートへの読み取りアクセス。
+ Amazon EC2 インスタンスでの `resource-groups:Tag` タグ付け用 (プロビジョニング操作の実行時に 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/](https://aws.amazon.com/blogs/security/how-to-use-trust-policies-with-iam-roles/)

**注記**  
`servicecatalog:ProvisionProduct`、`servicecatalog:TerminateProvisionedProduct`、`servicecatalog:UpdateProvisionedProduct` のアクセス権限を起動ロールで割り当てることはできません。「[AWS Service Catalog エンドユーザーにアクセス許可を付与する](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-iamenduser.html)」セクションのインラインポリシーの手順に示されているように、IAM ロールを使用する必要があります。

**注記**  
 AWS Service Catalog コンソールでプロビジョニングされた Cloudformation 製品とリソースを表示するには、エンドユーザーに CloudFormation 読み取りアクセスが必要です。プロビジョニングされた製品とリソースをコンソールで表示しても、起動ロールは**使用されません**。

**起動ロールを作成するには**

1. IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

   Terraform 製品には追加の起動ロール設定が必要です。詳細については、Terraform Open Source 製品入門の「[ステップ 5: 起動ロールの作成](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-launchrole-Terraform)」を参照してください。

1. **[ロール]** を選択します。

1. [**Create New Role (新しいロールを作成)**] を選択します。

1. ロール名を入力し、[**Next Step**] を選択します。

1. [**AWS Service Catalog**] の隣の [**AWS サービスロール**] で、[**選択**] を選択します。

1. [**Attach Policy**] ページで、[**Next Step**] を選択します。

1. ロールを作成するには、[**Create Role**] を選択します。

**ポリシーを新しいロールにアタッチするには**

1. 作成したロールを選択して、[role details] ページを表示します。

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`

`sourceArn `の保護は、ARNs `arn:<aws-partition>:servicecatalog:<region>:<accountId>:` AWS Service Catalog のみをサポートします。特定のリソース ARNsはサポートされていません。

## 起動制約の検証
<a name="constraints-launch-test"></a>

が ロール AWS Service Catalog を使用して製品を起動し、製品を正常にプロビジョニングすることを確認するには、 AWS Service Catalog コンソールから製品を起動します。ユーザーに公開する前に制約をテストするには、同じ製品を含むテストポートフォリオを作成し、そのポートフォリオで制約をテストします。

**製品を起動するには**

1.  AWS Service Catalog コンソールのメニューで、**Service Catalog**、**エンドユーザー**を選択します。

1. 製品を選択して、[**製品の詳細**] ページを開きます。[**起動オプション**] テーブルで、ロールの Amazon リソースネーム (ARN) が表示されることを確認します。

1. [**製品の起動**] を選択します。

1. 起動手順を続行して必要な情報を入力します。

1. 製品が正常に起動することを確認します。

# AWS Service Catalog 通知の制限
<a name="constraints-notification"></a>

**注記**  
AWS Service Catalog は、Terraform Open Source または Terraform Cloud 製品の通知制約をサポートしていません。

通知制約は、スタックのイベントに関する通知を受ける Amazon SNS トピックを指定します。

以下の手順を使用して、SNS トピックを作成しそれをサブスクライブします。

**SNS トピックを作成しサブスクリプションするには**

1. Amazon SNS コンソール ([https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home)) を開きます。

1. **[トピックを作成]** を選択します。

1. トピック名を入力し、[**Create topic**] を選択します。

1. **[サブスクリプションの作成]** を選択します。

1. [**Protocol**] で [**Email**] を選択します。[**Endpoint**] では、通知を受信するために使用できる E メールアドレスを入力します。**[サブスクリプションの作成]** を選択します。

1. `AWS Notification - Subscription Confirmation` という件名の確認用 E メールを受信します。E メールを開き、指示に従ってサブスクリプションを完了します。

次の手順を使用して、前の手順で作成された SNS トピックを使用する通知の制約を適用します。

**製品に通知の制約を適用するには**

1. Service Catalog コンソール ([https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)) を開きます。

1. 製品を含むポートフォリオを選択します。

1. **[制約]** を展開し、**[制約を追加]** を選択します。

1. [**製品**] で製品を選択し、[**制約タイプ**] を [**通知**] に設定します。**[続行]** を選択します。

1. [**Choose a topic from your account**] を選択して、[**Topic Name**] から作成した SNS トピックを選択します。

1. **[送信]** を選択します。

# AWS Service Catalog タグ更新の制限
<a name="constraints-resourceupdate"></a>

**注記**  
AWS Service Catalog は、Terraform オープンソース製品のタグ更新制約をサポートしていません。

タグ更新の制約により、 AWS Service Catalog 管理者はプロビジョニング済み製品に関連付けられたリソースのタグをエンドユーザーが更新することを許可または禁止できます。タグの更新が許可されている場合、 製品またはポートフォリオに関連付けられた新しいタグは、プロビジョニング済み製品の更新中にプロビジョニングされたリソースに適用されます。

**製品に対するタグの更新を有効にするには**

1. Service Catalog コンソール ([https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)) を開きます。

1. 更新する製品を含むポートフォリオを選択します。

1. [**制約**] タブを選択して、[**制約の追加**] を選択します。

1. [**制約タイプ**] で、[**タグの更新**] を選択します。

1. [**製品**] から製品を選択して、[**続行**] を選択します。

1. [**タグの更新ページ**] で、[**タグの更新を有効にする**] を選択します。

1. **[送信]** を選択します。

# AWS Service Catalog スタックセットの制限
<a name="constraints-stackset"></a>

**注記**  
AWS Service Catalog は、Terraform オープンソース製品のスタックセット制約をサポートしていません。
AutoTags は現在、 CloudFormation StackSets ではサポートされていません。

スタックセットの制約では、 CloudFormation StackSets を使用して製品のデプロイオプションを設定できます。製品の起動で複数のアカウントおよびリージョンを指定できます。エンドユーザーは、これらのアカウントを管理し、製品のデプロイ場所とデプロイ順序を決定できます。

**製品にスタックセットの制約を適用するには**

1. Service Catalog コンソール ([https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)) を開きます。

1. 必要な製品を含むポートフォリオを選択します。

1. [**制約**] タブを選択して、[**制約の作成**] を選択します。

1. [**製品**] で、製品を選択します。[**制約タイプ]** で、[**スタックセット**] を選択します。

1. スタックセットの制約のアカウント、リージョン、およびアクセス許可を設定します。
   + [**アカウント設定**] で、製品を作成するアカウントを指定します。
   + [**リージョンの設定**] で、製品をデプロイする地理的リージョンと、それらの製品をそれらのリージョンにデプロイする順序を選択します。
   + [**Permissions**] で、ターゲットアカウントを管理するために使用する IAM StackSet 管理者ロールを選択します。ロールを選択しない場合、StackSets はデフォルトの ARN を使用します。[スタックセットのアクセス許可の設定の詳細については、こちらを参照してください](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html)。

1. **[作成]** を選択します。

# AWS Service Catalog テンプレートの制限
<a name="catalogs_constraints_template-constraints"></a>

**注記**  
AWS Service Catalog は、Terraform Open Source または Terraform Cloud 製品のテンプレート制約をサポートしていません。

ユーザーが製品を起動するときに使用可能なオプションを制限するには、テンプレート制約を適用します。テンプレート制約を適用し、エンドユーザーが組織のコンプライアンス要件に違反することなく製品を使用できるようにします。 AWS Service Catalog ポートフォリオ内の製品にテンプレート制約を適用します。テンプレート制約を定義するには、ポートフォリオに 1 つ以上の製品が含まれている必要があります。

テンプレート制約は、製品の基盤となる CloudFormation テンプレートで定義されているパラメータの許容値を絞り込む 1 つ以上のルールで構成されます。 CloudFormation テンプレートのパラメータでは、スタックを作成するときにユーザーが指定できる値のセットを定義します。たとえば、パラメータで、EC2 インスタンスを含むスタックを起動するときにユーザーが選択できるさまざまなインスタンスタイプを定義します。

テンプレートのパラメータ値のセットが、ポートフォリオの対象者に対して広範囲すぎる場合、製品を起動するときにユーザーが選択できる値を制限するようテンプレート制約を定義できます。たとえば、テンプレートパラメータに、スモールインスタンスタイプ (`t2.micro` や `t2.small` など) のみを使用するユーザーにとって大きすぎる EC2 インスタンスタイプが含まれている場合は、エンドユーザーが選択できるインスタンスタイプを制限するテンプレート制約を追加できます。 CloudFormation テンプレートパラメータの詳細については、 *CloudFormation ユーザーガイド*の[「パラメータ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html)」を参照してください。

テンプレート制約はポートフォリオ内にバインドされます。1 つのポートフォリオで製品にテンプレート制約を適用し、別のポートフォリオに製品を含める場合、制約は 2 番目のポートフォリオの製品には適用されません。

既にユーザーと共有されている製品にテンプレート制約を適用する場合、制約は後続のすべての製品の起動と、ポートフォリオ内の製品のすべてのバージョンに対してすぐに有効になります。

テンプレート制約ルールを定義するには、ルールエディタを使用するか、 AWS Service Catalog 管理者コンソールでルールを JSON テキストとして記述します。構文と例を含むルールの詳細については、「[テンプレート制約のルール](reference-template_constraint_rules.md)」を参照してください。

ユーザーに公開する前に制約をテストするには、同じ製品を含むテストポートフォリオを作成し、そのポートフォリオで制約をテストします。

**製品にテンプレート制約を適用するには**

1. Service Catalog コンソール ([https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)) を開きます。

1. [**ポートフォリオ**] ページで、テンプレート制約を適用する製品を含むポートフォリオを選択します。

1. [**制約**] セクションを展開し、[**制約の追加**] を選択します。

1. [**商品とタイプの選択**] ウィンドウの [**製品**] で、テンプレート制約を定義する製品を選択します。次に、[**制約タイプ**]で、[**テンプレート**] を選択します。**[続行]** を選択します。

1. [**テンプレート制約ビルダー**] ページで、JSON エディタまたはルールビルダーのインターフェイスを使用して制約ルールを編集します。
   + ルールの JSON コードを編集するには、[**制約テキストエディタ**] タブを選択します。このタブには、使用を開始するためにいくつかの例が含まれています。

     ルールビルダーのインターフェイスを使用してルールを構築するには、[**ルールビルダー**] タブを選択します。このタブで、製品向けにテンプレートで指定される任意のパラメータを選択し、そのパラメータで許可される値を指定できます。パラメータの種類に応じて、チェックリストで項目を選択する、数を指定する、またはカンマ区切りリストで値のセットを指定することで、許可される値を指定します。

     ルールの構築を終了したら、[**ルールの追加**] を選択します。[**ルールビルダー**] タブのテーブルにルールが表示されます。JSON 出力を確認して編集するには、[**制約テキストビルダー**] タブを選択します。

1. 制約のルールの編集を終了したら、[**送信**] を選択します。制約を表示するには、ポートフォリオの詳細ページに移動し、[**制約**] を展開します。

# テンプレート制約のルール
<a name="reference-template_constraint_rules"></a>

 AWS Service Catalog ポートフォリオでテンプレート制約を定義するルールでは、エンドユーザーがテンプレートを使用できるタイミングと、使用しようとしている製品の作成に使用される CloudFormation テンプレートで宣言されたパラメータに指定できる値について説明します。ルールは、エンドユーザーが意図せずに不適切な値を指定することを防ぐために役立ちます。たとえば、エンドユーザーが特定の VPC で有効なサブネットを指定したか、テスト環境に`m1.small`インスタンスタイプを使用したかを検証するルールを追加できます。 は、製品のリソースを作成する前に、ルール CloudFormation を使用してパラメータ値を検証します。

各ルールは、ルール条件 (オプション) とアサーション (必須) の 2 つのプロパティで構成されます。ルール条件では、ルールがいつ有効になるかを決定します。アサーションでは、特定のパラメータにユーザーが指定できる値を示します。ルール条件を定義しない場合、ルールのアサーションが常に有効になります。ルール条件とアサーションを定義するには、ルール固有の組み込み関数を使用します。これは、テンプレートの `Rules` セクションでのみ使用できる関数です。関数をネストすることができますが、ルール条件またはアサーションの最終結果は、true または false である必要があります。

例として、`Parameters` セクションで VPC とサブネットパラメータを宣言したとします。特定のサブネットが特定の VPC 内にあることを検証するルールを作成できます。したがって、ユーザーが VPC を指定すると、 はアサーション CloudFormation を評価して、スタックを作成または更新する前にサブネットパラメータ値がその VPC にあるかどうかを確認します。パラメータ値が無効の場合、 CloudFormation すぐにスタックの作成または更新に失敗します。ユーザーが VPC を指定しない場合、サブネットパラメータ値はチェック CloudFormation されません。

## 構文
<a name="template-constraint-rules-syntax"></a>

テンプレートの `Rules` セクションは、キーの名前 `Rules` とそれに続く単一のコロンで構成されます。ルールの宣言全体を中括弧で囲みます。複数のルールを宣言する場合は、カンマで区切ります。ルールごとに、引用符で囲んだ論理名、単一のコロン、およびルール条件とアサーションを囲む中括弧から成る形式で宣言します。

ルールには `RuleCondition` プロパティを含めることができ、`Assertions` プロパティを含める必要があります。ルールごとに、1 つのルール条件のみを定義できます。`Assertions` プロパティ内に 1 つ以上のアサーションを定義できます。次の擬似テンプレートに示すように、ルール固有の組み込み関数を使用してルール条件とアサーションを定義します。

```
"Rules":{
   "Rule01":{
      "RuleCondition":{
         "Rule-specific intrinsic function"
      },
      "Assertions":[
         {
            "Assert":{
               "Rule-specific intrinsic function"
            },
            "AssertDescription":"Information about this assert"
         },
         {
            "Assert":{
               "Rule-specific intrinsic function"
            },
            "AssertDescription":"Information about this assert"
         }
      ]
   },
   "Rule02":{
      "Assertions":[
         {
            "Assert":{
               "Rule-specific intrinsic function"
            },
            "AssertDescription":"Information about this assert"
         }
      ]
   }
}
```

擬似テンプレートには、`Rules` および `Rule01` という 2 つのルールを含む `Rule02` セクションが表示されます。`Rule01`​ には、ルール条件と 2 つのアサーションが含まれます。ルール条件の関数が true に評価される場合、各アサーションの両方の関数が評価および適用されます。ルール条件が false の場合、ルールは有効になりません。`Rule02` にはルール条件がないため、常に有効になります。つまり、1 つのアサーションが常に評価および適用されます。

ルール条件とアサーションを定義するルール固有の組み込み関数については、「AWS CloudFormation ユーザーガイド」の「[AWS ルール関数](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-rules.html)」を参照してください。

## 例: パラメータ値の条件付きの確認
<a name="template-constraint-rules-example"></a>

次の 2 つのルールでは、`InstanceType` パラメータの値を確認します。Environment パラメータの値 (`test` または `prod`) に応じて、ユーザーは `m1.small` パラメータに対して `m1.large` または `InstanceType` を指定する必要があります。`InstanceType` および `Environment` パラメータは、同じテンプレートの `Parameters` セクションで宣言する必要があります。

```
"Rules" : {
  "testInstanceType" : {
    "RuleCondition" : {"Fn::Equals":[{"Ref":"Environment"}, "test"]},
    "Assertions" : [
      {
        "Assert" :  { "Fn::Contains" : [ ["m1.small"], {"Ref" : "InstanceType"} ] },
        "AssertDescription" : "For the test environment, the instance type must be m1.small"
      }
    ]
  },
  "prodInstanceType" : {
    "RuleCondition" : {"Fn::Equals":[{"Ref":"Environment"}, "prod"]},
    "Assertions" : [
      {
        "Assert" :  { "Fn::Contains" : [ ["m1.large"], {"Ref" : "InstanceType"} ] },
        "AssertDescription" : "For the prod environment, the instance type must be m1.large"
      }
    ]
  }
}
```