

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

# 에 사용자 지정 후크 등록 CloudFormation
<a name="registering-hooks"></a>

사용자 지정 후크를 생성한 후에는에 등록해야 사용할 CloudFormation 수 있습니다. 이 섹션에서는에서 사용할 후크를 패키징하고 등록하는 방법을 알아봅니다 AWS 계정.

## 후크 패키징(Java)
<a name="registering-hooks-package"></a>

Java로 후크를 개발한 경우 Maven을 사용하여 후크를 패키징합니다.

후크 프로젝트의 디렉터리에서 다음 명령을 실행하여 후크를 빌드하고, 단위 테스트를 실행하고, 프로젝트를 CloudFormation 레지스트리에 후크를 제출하는 데 사용할 수 있는 `JAR` 파일로 패키징합니다.

```
mvn clean package
```

## 사용자 지정 후크 등록
<a name="registering-hooks-register"></a>

**후크를 등록하려면**

1. (선택 사항) [https://docs.aws.amazon.com/cli/latest/reference/configure/](https://docs.aws.amazon.com/cli/latest/reference/configure/) 작업을 제출하여 기본 AWS 리전 이름을 `us-west-2`로 구성합니다.

   ```
   $ aws configure
   AWS Access Key ID [None]: <Your Access Key ID>
   AWS Secret Access Key [None]: <Your Secret Key>
   Default region name [None]: us-west-2
   Default output format [None]: json
   ```

1. (선택 사항) 다음 명령은 Hook 프로젝트를 등록하지 않고 빌드하고 패키징합니다.

   ```
   $ cfn submit --dry-run
   ```

1. CloudFormation CLI [https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-submit.html](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-submit.html) 작업을 사용하여 후크를 등록합니다.

   ```
   $ cfn submit --set-default
   ```

   이 명령은 다음 명령을 반환합니다.

   ```
   {‘ProgressStatus’: ‘COMPLETE’}
   ```

   *결과*: 후크를 성공적으로 등록했습니다.

## 계정에서 후크에 액세스할 수 있는지 확인
<a name="verifying-hooks"></a>

후크를 제출한 리전 AWS 계정 및에서 후크를 사용할 수 있는지 확인합니다.

1. 후크를 확인하려면 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-types.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-types.html) 명령을 사용하여 새로 등록된 후크를 나열하고 요약 설명을 반환합니다.

   ```
   $ aws cloudformation list-types
   ```

   명령은 다음 출력을 반환하고 AWS 계정 및 리전에서 활성화할 수 있는 공개적으로 사용 가능한 후크도 표시합니다.

   ```
   {
       "TypeSummaries": [
           {
               "Type": "HOOK",
               "TypeName": "MyCompany::Testing::MyTestHook",
               "DefaultVersionId": "00000001",
               "TypeArn": "arn:aws:cloudformation:us-west-2:ACCOUNT_ID/type/hook/MyCompany-Testing-MyTestHook",
               "LastUpdated": "2021-08-04T23:00:03.058000+00:00",
               "Description": "Verifies S3 bucket and SQS queues properties before creating or updating"
           }
       ]
   }
   ```

1. 후크의 `list-type` 출력`TypeArn`에서를 검색하고 저장합니다.

   ```
   export HOOK_TYPE_ARN=arn:aws:cloudformation:us-west-2:ACCOUNT_ID/type/hook/MyCompany-Testing-MyTestHook
   ```

퍼블릭 용도로 후크를 게시하는 방법은 섹션을 참조하세요[퍼블릭 사용을 위한 후크 게시](hooks-publishing.md).

### 후크 구성
<a name="configure-hooks"></a>

후크를 개발하고 등록한 후 레지스트리에 게시 AWS 계정 하여에서 후크를 구성할 수 있습니다.
+ 계정에서 후크를 구성하려면 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html) 작업을 사용합니다. 이 작업은 후크의 스키마 `properties` 섹션에 정의된 후크의 속성을 활성화합니다. 다음 예제에서는 구성에서 `minBuckets` 속성이 `1` 로 설정됩니다.
**참고**  
계정에서 후크를 활성화하면 후크가의 정의된 권한을 사용하도록 승인하는 것입니다 AWS 계정. CloudFormation은 사용자의 권한을 후크에 전달하기 전에 필요하지 않은 권한을 제거합니다. CloudFormation에서는 고객 또는 후크 사용자에게 계정에서 후크를 활성화하기 전에 후크 권한을 검토하고 후크가 허용되는 권한을 인식할 것을 권장합니다.

  동일한 계정 및에서 등록된 후크 확장에 대한 구성 데이터를 지정합니다 AWS 리전.

  ```
  $ aws cloudformation set-type-configuration --region us-west-2 
    --configuration '{"CloudFormationConfiguration":{"HookConfiguration":{"HookInvocationStatus":"ENABLED","FailureMode":"FAIL","Properties":{"minBuckets": "1","minQueues": "1", "encryptionAlgorithm": "aws:kms"}}}}'
    --type-arn $HOOK_TYPE_ARN
  ```
**중요**  
후크가 스택의 구성을 사전에 검사할 수 있도록 하려면 계정에 후크를 등록하고 활성화한 후 `ENABLED` `HookConfiguration` 섹션에서를 `HookInvocationStatus`로 설정해야 합니다.

## 핸들러에서 AWS APIs
<a name="accessing-apis-in-handlers"></a>

후크가 핸들러에서 AWS API를 사용하는 경우 CFN-CLI는 IAM 실행 역할 템플릿인를 자동으로 생성합니다`hook-role.yaml`. `hook-role.yaml` 템플릿은 후크 스키마의 핸들러 섹션에 있는 각 핸들러에 지정된 권한을 기반으로 합니다. [https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-generate.html](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-generate.html) 작업 중에 `--role-arn` 플래그를 사용하지 않으면이 스택의 역할이 프로비저닝되어 후크의 실행 역할로 사용됩니다.

자세한 내용은 [리소스 유형에서 AWS APIs 액세스를 참조하세요.](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-develop.html#resource-type-develop-executionrole)

### hook-role.yaml 템플릿
<a name="resource-role.yaml"></a>

**참고**  
자체 실행 역할을 생성하기로 선택한 경우 `hooks.cloudformation.amazonaws.com` 및 만 허용하여 최소 권한 원칙을 연습하는 것이 좋습니다`resources.cloudformation.amazonaws.com`.

다음 템플릿은 IAM, Amazon S3 및 Amazon SQS 권한을 사용합니다.

```
AWSTemplateFormatVersion: 2010-09-09
Description: >
  This CloudFormation template creates a role assumed by CloudFormation during
  Hook operations on behalf of the customer.
Resources:
  ExecutionRole:
    Type: 'AWS::IAM::Role'
    Properties:
      MaxSessionDuration: 8400
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - resources.cloudformation.amazonaws.com
                - hooks.cloudformation.amazonaws.com
            Action: 'sts:AssumeRole'
            Condition:
              StringEquals:
                aws:SourceAccount: !Ref AWS::AccountId
              StringLike:
                aws:SourceArn: !Sub arn:${AWS::Partition}:cloudformation:${AWS::Region}:${AWS::AccountId}:type/hook/MyCompany-Testing-MyTestHook/*
      Path: /
      Policies:
        - PolicyName: HookTypePolicy
          PolicyDocument:
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Action:
                  - 's3:GetEncryptionConfiguration'
                  - 's3:ListBucket'
                  - 's3:ListAllMyBuckets'
                  - 'sqs:GetQueueAttributes'
                  - 'sqs:GetQueueUrl'
                  - 'sqs:ListQueues'
                Resource: '*'
Outputs:
  ExecutionRoleArn:
    Value: !GetAtt 
      - ExecutionRole
      - Arn
```