

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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 자격 증명으로 제품을 시작하고 관리해야 합니다. 이렇게 하려면 제품에 사용되는 CloudFormation AWS 서비스 및에 대한 권한이 있어야 합니다 AWS Service Catalog. 대신에 시작 역할을 사용하여 최종 사용자의 권한을 해당 제품을 사용하기 위해 필요한 최소 권한으로 제한할 수 있습니다. 최종 사용자 권한에 대한 자세한 내용은 [의 자격 증명 및 액세스 관리 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. **새 역할 생성**을 선택합니다.

1. 역할 이름을 입력하고 **다음 단계**를 선택합니다.

1. **AWS Service Catalog** 옆의 **AWS 서비스 역할**에서 **선택**을 선택합니다.

1. **정책 연결** 페이지에서 **다음 단계**를 선택합니다.

1. 역할을 만들려면 **역할 생성**을 선택합니다.

**새 역할에 정책을 연결하려면**

1. 만든 역할을 선택하여 해당 역할의 세부 정보 페이지를 봅니다.

1. **권한** 탭을 선택하고 **인라인 정책** 섹션을 확장합니다. 그런 다음 **여기 클릭**을 선택합니다.

1. **사용자 지정 정책**을 선택한 후 **선책**을 선택합니다.

1. 정책의 이름을 입력한 후 다음을 **정책 설명서** 편집기에 붙여넣습니다.

   ```
     
             "Statement":[
         {
            "Effect":"Allow",
            "Action":[
               "s3:GetObject"
            ],
            "Resource":"*",
            "Condition":{
               "StringEquals":{
                  "s3:ExistingObjectTag/servicecatalog:provisioning":"true"
               }
            }
      ]
   }
   ```
**참고**  
시작 제약에 대한 시작 역할을 구성할 때는 다음 문자열을 사용해야 합니다. `"s3:ExistingObjectTag/servicecatalog:provisioning":"true"` 

1. 제품이 사용하는 각 추가 서비스의 정책에 줄을 추가합니다. 예를 들어 Amazon Relational Database Service(RDS)에 대한 권한을 추가하려면  `Action` 목록의 마지막 줄 끝에 쉼표를 입력한 후 다음 줄을 추가합니다.

   ```
   "rds:*"
   ```

1. **정책 적용**을 선택합니다.

## 시작 제약 조건 적용
<a name="constraints-launch-constraint"></a>

시작 역할을 구성한 후 역할을 시작 제약으로 제품에 할당합니다. 이 작업은 최종 사용자가 제품을 시작할 때 역할을 수임 AWS Service Catalog 하도록에 지시합니다.

**제품에 역할을 할당하려면**

1. Service Quotas 콘솔([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 `보호는 "`arn:<aws-partition>:servicecatalog:<region>:<accountId>:`"와 같은 템플릿 기반 ARNs AWS Service Catalog 만 지원합니다. 특정 리소스 ARNs은 지원하지 않습니다.

## 시작 제약 확인
<a name="constraints-launch-test"></a>

가 역할을 AWS Service Catalog 사용하여 제품을 시작하고 제품을 성공적으로 프로비저닝하는지 확인하려면 AWS Service Catalog 콘솔에서 제품을 시작합니다. 사용자에게 릴리스하기 전에 제약 조건을 테스트하려면 동일한 제품이 들어 있는 테스트 포트폴리오를 만들고 해당 포트폴리오에서 제약 조건을 테스트합니다.

**제품을 시작하려면**

1.  AWS 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. [https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home)에서 Amazon SNS 콘솔을 엽니다.

1. **주제 생성**을 선택합니다.

1. 주제 이름을 입력한 후 **주제 생성**을 선택합니다.

1. **구독 생성**을 선택합니다.

1. **프로토콜**에서 **이메일**을 선택합니다. **엔드포인트**에서 알림을 받을 이메일 주소를 입력합니다. **Create subscription**을 선택합니다.

1. `AWS Notification - Subscription Confirmation`라는 제목을 가진 확인 이메일을 받게 됩니다. 이메일을 열고 지침에 따라 구독을 완료합니다.

다음 절차에 따라 이전 절차에 따라 만든 SNS 주제를 사용하는 알림 제약을 적용합니다.

**제품에 알림 제약을 적용하려면**

1. Service Quotas 콘솔([https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/))을 엽니다.

1. 제품이 들어 있는 포트폴리오를 선택합니다.

1. **제약**을 확장하고 **제약 추가**를 선택합니다.

1. **제품**에서 제품을 선택하고 **제약 유형**을 **알림**으로 설정합니다. **계속**을 선택합니다.

1. **계정에서 주제 선택**을 선택하고 **주제 이름**에서 만든 SNS 주제를 선택합니다.

1. **제출**을 선택합니다.

# AWS Service Catalog 태그 업데이트 제약 조건
<a name="constraints-resourceupdate"></a>

**참고**  
AWS Service Catalog 는 Terraform Open Source 제품에 대한 태그 업데이트 제약 조건을 지원하지 않습니다.

태그 업데이트 제약 조건을 사용하면 AWS Service Catalog 관리자는 최종 사용자가 프로비저닝된 제품과 연결된 리소스의 태그를 업데이트하도록 허용하거나 허용하지 않을 수 있습니다. 태그 업데이트가 허용된 경우 제품 또는 포트폴리오와 연결된 새 태그가 프로비저닝된 제품 업데이트 중에 프로비저닝된 리소스에 적용됩니다.

**제품에 대한 태그 업데이트를 활성화하는 방법**

1. Service Quotas 콘솔([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 Open Source 제품에 대한 스택 세트 제약 조건을 지원하지 않습니다.
AutoTags는 현재 CloudFormation StackSets에서 지원되지 않습니다.

스택 세트 제약을 통해 CloudFormation 스택 세트를 사용한 제품 배포 옵션을 구성할 수 있습니다. 제품 시작에 대하여 여러 계정 및 리전을 지정할 수 있습니다. 최종 사용자는 해당 계정을 관리하고 제품 배포 위치 및 배포 순서를 결정할 수 있습니다.

**제품에 스택 세트 제약을 적용하려면**

1. Service Quotas 콘솔([https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/))을 엽니다.

1. 원하는 제품이 포함된 포트폴리오를 선택합니다.

1. **제약** 탭을 선택하고 **제약 생성**를 선택합니다.

1. **제품**에서 제품을 선택합니다. **제약 유형**에서 **스택 세트**를 선택합니다.

1. 스택 세트 제약에 대한 계정, 리전 및 권한을 구성합니다.
   + **계정 설정**에서 제품을 생성하려는 계정을 식별합니다.
   + **리전 설정**에서 제품을 배포할 지리적 리전과 해당 리전에 제품을 배포할 순서를 선택합니다.
   + **권한**에서 대상 계정 관리에 사용할 IAM 스택 세트 관리자 역할을 선택합니다. 역할을 선택하지 않으면 스택 세트에서 기본 ARN을 사용합니다. [스택 세트 권한 설정에 대해 자세히 알아보십시오.](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html)

1. **생성(Create)**을 선택합니다.

# AWS Service Catalog 템플릿 제약 조건
<a name="catalogs_constraints_template-constraints"></a>

**참고**  
AWS Service Catalog 는 Terraform Open Source 또는 Terraform Cloud 제품에 대한 템플릿 제약 조건을 지원하지 않습니다.

최종 사용자가 제품을 시작할 때 사용할 수 있는 옵션을 제한하려면 템플릿 제약 조건을 적용합니다. 최종 사용자가 조직의 규정 준수 요건을 위반하지 않고 제품을 사용할 수 있도록 템플릿 제약 조건을 적용합니다. AWS Service Catalog 포트폴리오의 제품에 템플릿 제약 조건을 적용합니다. 템플릿 제약 조건을 정의하려면 포트폴리오에 제품이 하나 이상 들어 있어야 합니다.

템플릿 제약 조건은 제품의 기본 CloudFormation 템플릿에 정의된 파라미터의 허용 가능한 값을 좁히는 하나 이상의 규칙으로 구성됩니다. CloudFormation 템플릿의 파라미터는 사용자가 스택을 만들 때 지정할 수 있는 값 세트를 정의합니다. 예를 들어 파라미터는 EC2 인스턴스가 포함된 스택을 시작할 때 사용자가 선택할 수 있는 다양한 인스턴스 유형을 정의할 수 있습니다.

템플릿의 파라미터 값 세트가 포트폴리오의 대상 고객에게 너무 광범위할 경우, 사용자가 제품을 시작할 때 선택할 수 있는 값을 제한하도록 템플릿 제약 조건을 정의할 수 있습니다. 예를 들어 템플릿 파라미터에 스몰 인스턴스 유형(예: `t2.micro` 또는 `t2.small`)만 사용해야 하는 사용자에게 너무 큰 EC2 인스턴스 유형이 있을 경우, 최종 사용자가 선택할 수 있는 인스턴스 유형을 제한하도록 템플릿 제약 조건을 추가할 수 있습니다. CloudFormation 템플릿 파라미터에 대한 자세한 내용은 *CloudFormation 사용 설명서*의 [파라미터를](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html) 참조하세요.

템플릿 제약 조건은 한 포트폴리오 내에만 적용됩니다. 한 포트폴리오의 제품에 템플릿 제약 조건을 적용한 후 다른 포트폴리오의 제품을 포함시킬 경우, 두 번째 포트폴리오의 제품에는 제약 조건이 적용되지 않습니다.

사용자와 이미 공유한 제품에 템플릿 제약 조건을 적용하는 경우, 모든 후속 제품 시작 및 포트폴리오의 모든 제품 버전에 대해 제약 조건이 즉시 활성화됩니다.

규칙 편집기를 사용하거나 AWS Service Catalog 관리자 콘솔에서 규칙을 JSON 텍스트로 작성하여 템플릿 제약 규칙을 정의합니다. 구문 및 예제를 비롯한 규칙에 대한 자세한 내용은 [템플릿 제약 조건 규칙](reference-template_constraint_rules.md)을 참조하십시오.

사용자에게 릴리스하기 전에 제약 조건을 테스트하려면 동일한 제품이 들어 있는 테스트 포트폴리오를 만들고 해당 포트폴리오에서 제약 조건을 테스트합니다.

**제품에 템플릿 제약 조건을 적용하려면**

1. Service Quotas 콘솔([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 사용하여 파라미터 값을 검증합니다.

각 규칙은 규칙 조건(선택 사항)과 어설션(필수)이라는 두 가지 속성으로 구성됩니다. 규칙 조건은 규칙이 적용되는 시기를 결정합니다. 어설션은 사용자가 특정 파라미터에 대해 지정할 수 있는 값을 설명합니다. 규칙 조건을 정의하지 않은 경우, 규칙의 어설션이 항상 적용됩니다. 규칙 조건과 어설션을 정의하려면 템플릿의 `Rules` 섹션에서만 사용할 수 있는 함수인 *규칙 관련 내장 함수*를 사용합니다. 함수를 중첩할 수 있지만, 규칙 조건 또는 어설션의 최종 결과가 true이거나 false여야 합니다.

한 예로 `Parameters` 섹션에서 VPC와 서브넷 파라미터를 선언했다고 가정하겠습니다. 지정된 서브넷이 특정 VPC에 있음을 확인하는 규칙을 만들 수 있습니다. 따라서 사용자가 VPC를 지정하면는 스택을 생성하거나 업데이트하기 전에 어설션을 CloudFormation 평가하여 서브넷 파라미터 값이 해당 VPC에 있는지 확인합니다. 파라미터 값이 유효하지 않으면 CloudFormation 즉시 스택을 생성하거나 업데이트하지 못합니다. 사용자가 VPC를 지정하지 않으면 서브넷 파라미터 값을 확인 CloudFormation 하지 않습니다.

## 구문
<a name="template-constraint-rules-syntax"></a>

템플릿의 `Rules` 섹션은 키 이름 `Rules`와 그 뒤에 이어지는 콜론 하나로 구성됩니다. 중괄호가 모든 규칙 선언을 묶습니다. 규칙을 여러 개 선언할 경우 쉼표로 구분됩니다. 각 규칙에 대해 인용 부호 안의 논리적 이름과 그 뒤에 오는 콜론, 그리고 규칙 조건과 어설션을 묶는 중괄호를 선언합니다.

규칙에는 `RuleCondition` 속성이 포함될 수 있으며, `Assertions` 속성이 포함되어야 합니다. 각 규칙에 대해 규칙 조건을 하나만 정의할 수 있으며, `Assertions` 속성 내에서 하나 이상의 어설션을 정의할 수 있습니다. 다음 가상 템플릿에 나와 있듯이 규칙 관련 내장 함수를 사용하여 규칙 조건과 어설션을 정의합니다.

```
"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"
         }
      ]
   }
}
```

가상 템플릿은 `Rule01` 및 `Rule02`라는 두 개의 규칙이 포함된 `Rules` 섹션을 보여줍니다. `Rule01`에는 규칙 조건 하나와 어설션 두 개가 포함되어 있습니다. 규칙 조건의 함수가 true로 평가되면, 각 어설션의 두 함수가 평가되고 적용됩니다. 규칙 조건이 false이면 규칙이 적용되지 않습니다. `Rule02`에는 규칙 조건이 없기 때문에 항상 적용됩니다. 이는 어설션 하나가 항상 평가되고 적용됨을 뜻합니다.

규칙 조건과 어설션을 정의하는 규칙 관련 내장 함수에 대한 자세한 내용은 *AWS CloudFormation 사용 설명서*의 [AWS 규칙 함수](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-rules.html) 섹션을 참조하십시오.

## 예: 조건부로 파라미터 값 확인
<a name="template-constraint-rules-example"></a>

다음 두 규칙은 `InstanceType` 파라미터의 값을 확인합니다. 환경 파라미터(`test` 또는 `prod`)의 값에 따라 사용자는 `InstanceType` 파라미터에 대해 `m1.small` 또는 `m1.large`를 지정해야 합니다. `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"
      }
    ]
  }
}
```