

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

# 새 문제 해결 추가
<a name="adding-new-remediations"></a>

해결 방법은 원하는 워크플로에 따라 적절한 플레이북 파일을 업데이트하여 수동으로 추가하거나 CDK 구문을 통해 솔루션을 프로그래밍 방식으로 확장하여 추가할 수 있습니다.

**참고**  
다음 지침은 솔루션에서 설치한 리소스를 시작점으로 활용합니다. 대부분의 솔루션 리소스 이름에는 **ASR** 및/또는 **SO0111**이 포함되어 있어 쉽게 찾고 식별할 수 있습니다.

## 수동 워크플로 개요
<a name="remediation-overview"></a>

AWS 실행서의 자동 보안 응답은 다음 표준 이름을 따라야 합니다.

ASR-{{<standard>}}-{{<version>}}-{{<control>}} 

 **표준**: 보안 표준의 약어입니다. 이는 ASR에서 지원하는 표준과 일치해야 합니다. "CIS", "AFSBP", "PCI", "NIST" 또는 "SC" 중 하나여야 합니다.

 **버전**: 표준의 버전입니다. 다시 말하지만, ASR에서 지원하는 버전과 결과 데이터의 버전과 일치해야 합니다.

 **제어**: 수정할 제어의 제어 ID입니다. 이는 결과 데이터와 일치해야 합니다.

1. 멤버 계정(들)에서 실행서를 생성합니다.

1. 멤버 계정(들)에서 IAM 역할을 생성합니다.

1. (선택 사항) 관리자 계정에서 자동 문제 해결 규칙을 생성합니다.

### 1단계. 멤버 계정(들)에서 실행서 생성
<a name="step-1-create-a-runbook-in-the-member-accounts"></a>

1. [AWS Systems Manager 콘솔](https://console.aws.amazon.com/systems-manager/home)에 로그인하고 조사 결과 JSON의 예를 가져옵니다.

1. 결과를 수정하는 자동화 실행서를 생성합니다. **내 소유** 탭에서 `ASR-` 문서 **** 탭 아래의 문서를 시작점으로 사용합니다.

1. 관리자 계정의 AWS Step Functions가 실행서를 실행합니다. 실행서를 호출할 때 전달하려면 실행서에서 문제 해결 역할을 지정해야 합니다.

### 2단계. 멤버 계정(들)에서 IAM 역할 생성
<a name="step-2-create-iam-role-in-the-member-accounts"></a>

1. [AWS Identity and Access Management 콘솔](https://console.aws.amazon.com/iam/home)에 로그인합니다.

1. IAM **SO0111** 역할에서 예제를 가져와 새 역할을 생성합니다. 역할 이름은 SO0111-Remediate-{{<standard>}}-{{<version>}}-{{<control>}}로 시작해야 합니다. 예를 들어 CIS v1.2.0 컨트롤 5.6을 추가하는 경우 역할은 여야 합니다`SO0111-Remediate-CIS-1.2.0-5.6`.

1. 이 예제를 사용하여 수정을 수행하는 데 필요한 API 호출만 허용하는 적절한 범위의 역할을 생성합니다.

이 시점에서 수정은 활성 상태이며 AWS Security Hub의 ASR 사용자 지정 작업에서 자동 수정에 사용할 수 있습니다.

### 3단계: (선택 사항) 관리자 계정에서 자동 문제 해결 규칙 생성
<a name="step-3-create-an-automatio-remediation-rule-in-the-admin-account"></a>

자동(‘자동’이 아님) 문제 해결은 AWS Security Hub에서 결과를 받는 즉시 문제 해결을 즉시 실행하는 것입니다. 이 옵션을 사용하기 전에 위험을 신중하게 고려하세요.

1. CloudWatch Events에서 동일한 보안 표준에 대한 예제 규칙을 봅니다. 규칙의 이름 지정 표준은 입니다`standard_control_*AutoTrigger*`.

1. 사용할 예제에서 이벤트 패턴을 복사합니다.

1. 조사 결과 JSON의 `GeneratorId`와 일치하도록 `GeneratorId` 값을 변경합니다.

1. 규칙을 저장하고 활성화합니다.

## CDK 워크플로 개요
<a name="cdk-remediation-overview"></a>

요약하면 ASR 리포지토리의 다음 파일이 수정되거나 추가됩니다. 이 예제에서는 ElastiCache.2에 대한 새로운 수정 사항이 SC 및 AFSBP 플레이북에 추가되었습니다.

**참고**  
모든 새로운 수정 사항은 ASR에서 사용할 수 있는 모든 수정 사항을 통합하므로 SC 플레이북에 추가해야 합니다. 특정 플레이북 세트(예: AFSBP)만 배포하려는 경우 (1) 의도한 플레이북**에만** 문제 해결을 추가하거나 (2) SC 플레이북 외에도 해당 Security Hub Standard에 있는 모든 플레이북에 문제 해결을 추가할 수 있습니다. 두 번째 옵션은 유연성을 위해 권장됩니다.

이 예제에서는 ElastiCache.2가 다음 Security Hub 표준에 포함되어 있습니다.
+ AFSBP
+ NIST.800-53.r5 SI-2
+ NIST.800-53.r5 SI-2(2)
+ NIST.800-53.r5 SI-2(4)
+ NIST.800-53.r5 SI-2(5)
+ PCI DSS v4.0.1/6.3.3

기본적으로 ASR은 AFSBP 및 NIST.800-53용 플레이북만 구현하므로 SC 외에도 이러한 플레이북에이 새로운 수정 사항을 추가할 예정입니다.

 **Modify** 
+ source/lib/remediation-runbook-stack.ts
+ source/playbooks/AFSBP/lib/[standard name]\_remediations.ts
+ source/playbooks/NIST80053/lib/control\_runbooks-construct.ts
+ source/playbooks/NIST80053/lib/[standard name]\_remediations.ts
+ source/playbooks/SC/lib/control\_runbooks-construct.ts
+ source/playbooks/SC/lib/sc\_remediations.ts
+ source/test/regex\_registry.ts

 **Add** 
+ source/playbooks/SC/ssmdocs/SC\_ElastiCache.2.ts
+ source/playbooks/SC/ssmdocs/descriptions/ElastiCache.2.md
+ source/remediation\_runbooks/EnableElastiCacheVersionUpgrades.yaml

**참고**  
실행서에 대해 선택한 이름은 나머지 변경 사항과 일치하는 한 모든 문자열이 될 수 있습니다.
+ source/playbooks/NIST80053/ssmdocs/NIST80053\_ElastiCache.2.ts
+ source/playbooks/AFSBP/ssmdocs/AFSBP\_ElastiCache.2.yaml

 **개발 단계** 

1. 문제 해결 런북을 생성합니다.

1. 컨트롤 런북을 생성합니다.

1. 각 컨트롤 런북을 플레이북과 통합합니다.

1. 수정 IAM 역할 생성 및 수정 런북 통합

1. 단위 테스트 업데이트

### 1단계: 문제 해결 런북 생성
<a name="step-1-create-the-remediation-runbook"></a>

이 문서는 리소스를 수정하는 데 사용되는 SSM 문서입니다. 여기에는 수정을 실행할 권한이 있는 IAM 역할인 `AutomationAssumeRole` 파라미터가 포함되어야 합니다. 새 문제 해결 실행서를 생성할 때 기존 파일을 참조`source/remediation_runbooks/EnableElastiCacheVersionUpgrades.yaml`로 봅니다.

모든 새 실행서를 `source/remediation_runbooks/` 디렉터리에 추가해야 합니다.

### 2단계: 컨트롤 런북 생성
<a name="step-2-create-the-control-runbook"></a>

컨트롤 런북은 지정된 표준의 결과 데이터를 구문 분석하고 적절한 문제 해결 런북을 실행하는 플레이북별 런북입니다. SC, AFSBP 및 NIST80053 플레이북에 ElastiCache.2 수정 사항을 추가하므로 각각에 대해 새 컨트롤 런북을 생성해야 합니다. 다음 파일이 생성됩니다.
+ source/playbooks/SC/ssmdocs/SC\_ElastiCache.2.ts
+ source/playbooks/NIST80053/ssmdocs/NIST80053\_ElastiCache.2.ts
+ source/playbooks/AFSBP/ssmdocs/AFSBP\_ElastiCache.2.yaml

**Example**  
이러한 파일의 이름은 중요하며 <PLAYBOOK\_NAME>\_<CONTROL.ID>.ts/yaml 형식을 따라야 합니다.

ASR의 일부 플레이북은 TypeScript의 IaC 제어 런북을 지원하는 반면, 다른 플레이북은 원시 YAML로 작성해야 합니다. 각 플레이북의 기존 수정 사항을 예제로 참조하세요. 이 예제에서는 IaC를 사용하는 SC 플레이북을 다룹니다.

SC 플레이북에서 새 컨트롤 런북은 ControlRunbookDocument를 확장하고 문제 해결 런북의 이름과 일치하는 클래스를 내보내야 합니다. 아래 예제를 살펴보십시오.

```
export class EnableElastiCacheVersionUpgrades extends ControlRunbookDocument {
  constructor(scope: Construct, id: string, props: ControlRunbookProps) {
    super(scope, id, {
      ...props,
      securityControlId: 'ElastiCache.2',
      remediationName: 'EnableElastiCacheVersionUpgrades',
      scope: RemediationScope.REGIONAL,
      resourceIdRegex: <Regex>,
      resourceIdName: 'ClusterId',
      updateDescription: new StringFormat('Automatic minor version upgrades enabled for cluster %s.', [
        StringVariable.of(`ParseInput.ClusterId`),
      ]),
    });
  }
}
```
+  `securityControlId`는 [Security Hub의 통합 제어 보기에 정의된 대로 추가하려는 문제 해결에 대한 제어](https://docs.aws.amazon.com/securityhub/latest/userguide/asff-changes-consolidation.html#securityhub-findings-format-changes-ids-titles) ID입니다.
+  `remediationName`는 문제 해결 런북에 대해 선택한 이름입니다.
+  `scope`는 수정하려는 리소스의 범위로, 전역적으로 존재하는지 또는 특정 리전에 존재하는지를 나타냅니다.
+  `resourceIdRegex`는 파라미터로 문제 해결 실행서에 전달하려는 리소스 ID를 캡처하는 데 사용되는 정규식입니다. 하나의 그룹만 캡처해야 하며 다른 모든 그룹은 캡처되지 않아야 합니다. 전체 ARN을 전달하려면이 필드를 생략합니다.
+  `resourceIdName`는를 사용하여 캡처된 리소스 ID에 대해 설정하려는 이름이며`resourceIdRegex`, 이는 문제 해결 실행서의 리소스 ID 파라미터 이름과 일치해야 합니다.
+  `updateDescription`는 문제 해결이 성공하면 Security Hub에서 조사 결과의 "참고" 섹션에 할당하려는 문자열입니다.

클래스의 새 인스턴스를 반환`createControlRunbook`하는 라는 함수도 내보내야 합니다. ElastiCache.2,의 경우 다음과 같습니다.

```
export function createControlRunbook(scope: Construct, id: string, props: PlaybookProps): ControlRunbookDocument {
  return new EnableElastiCacheVersionUpgrades(scope, id, { ...props, controlId: 'ElastiCache.2' });
}
```

여기서 `controlId`는 작동 중인 플레이북과 연결된 보안 표준에 정의된 제어 ID입니다.

Security Hub 컨트롤에 문제 해결 런북에 전달하려는 파라미터가 있는 경우 다음 메서드에 재정의를 추가하여 전달할 수 있습니다. - `getExtraSteps`: Security Hub에서 컨트롤에 대해 구현된 각 파라미터의 기본값을 정의합니다.

**참고**  
Security Hub의 각 파라미터에는 기본값이 부여되어야 합니다.
+  `getInputParamsStepOutput`: 제어 실행서의 GetInputParams 단계에 대한 출력을 정의합니다.
+ 각 출력에는 `name`, `outputType`및가 있습니다`selector`. 는 `getExtraSteps` 메서드 재정의에 사용된 것과 동일한 선택기`selector`여야 합니다.
+  `getRemediationParams`: GetInputParams 단계 출력에서 가져온 문제 해결 실행서에 전달된 파라미터를 정의합니다.

예를 보려면 `source/playbooks/SC/ssmdocs/SC_DynamoDB.1.ts` 파일로 이동합니다.

### 3단계: 각 컨트롤 런북을 플레이북과 통합
<a name="step-3-integrate-each-control-runbook-with-a-playbook"></a>

이전 단계에서 생성한 각 컨트롤 런북에 대해 이제 연결된 플레이북의 인프라 정의와 통합해야 합니다. 각 컨트롤 런북에 대해 아래 단계를 따릅니다.

**중요**  
형식 스크립트 IaC 대신 원시 YAML을 사용하여 제어 실행서를 생성한 경우 다음 섹션으로 건너뜁니다.

새로 생성된 컨트롤 런북 파일을 다음과 같이 `/<playbook_name>/control_runbooks-construct.ts` 가져오기에서:

```
import * as elasticache_2 from '../ssmdocs/SC_ElastiCache.2';
```

다음으로의 배열로 이동합니다.

```
const controlRunbooksRecord: Record<string, any>
```

그리고 컨트롤 ID(플레이북별)를 생성한 `createControlRunbook` 메서드에 매핑하는 새 항목을 추가합니다.

```
'ElastiCache.2': elasticache_2.createControlRunbook,
```

아래와 ` <playbook_name>\_remediations.ts` 같이의 문제 해결 목록에 플레이북별 제어 ID를 추가합니다.

```
{ control: 'ElastiCache.2', versionAdded: '2.3.0' },
```

`versionAdded` 필드는 솔루션의 최신 버전이어야 합니다. 수정을 추가하면 템플릿 크기 제한을 위반하는 경우를 늘립니다`versionAdded`. 의 각 플레이북 멤버 스택에 포함된 문제 해결 수를 조정할 수 있습니다`solution_env.sh`.

### 4단계: 수정 IAM 역할 생성 및 수정 런북 통합
<a name="step-4-create-the-remediation-iam-role-integrate-remediation-runbook"></a>

각 수정에는 수정 실행서를 실행하는 데 필요한 사용자 지정 권한이 있는 자체 IAM 역할이 있습니다. 또한 1단계에서 생성한 문제 해결 실행서를 솔루션의 CloudFormation 템플릿에 추가하려면 `RunbookFactory.createRemediationRunbook` 메서드를 호출해야 합니다.

에서 `remediation-runook-stack.ts`각 수정은 `RemediationRunbookStack` 클래스에 자체 코드 블록이 있습니다. 다음 코드 블록은 ElastiCache.2 문제 해결을 위한 새 IAM 역할 생성 및 문제 해결 런북 통합을 보여줍니다. 

```
    //-----------------------
    // EnableElastiCacheVersionUpgrades
    //
    {
      const remediationName = 'EnableElastiCacheVersionUpgrades'; // should match the name of your remediation runbook
      const inlinePolicy = new Policy(props.roleStack, `ASR-Remediation-Policy-${remediationName}`);

      const remediationPolicy = new PolicyStatement();
      remediationPolicy.addActions('elasticache:ModifyCacheCluster');
      remediationPolicy.effect = Effect.ALLOW;
      remediationPolicy.addResources(`arn:${this.partition}:elasticache:*:${this.account}:cluster:*`);
      inlinePolicy.addStatements(remediationPolicy);

      new SsmRole(props.roleStack, 'RemediationRole ' + remediationName, { // creates the remediation IAM role
        solutionId: props.solutionId,
        ssmDocName: remediationName,
        remediationPolicy: inlinePolicy,
        remediationRoleName: `${remediationRoleNameBase}${remediationName}`,
      });

      RunbookFactory.createRemediationRunbook(this, 'ASR ' + remediationName, { // adds the remediation runbook to the solution's cloudformation templates
        ssmDocName: remediationName,
        ssmDocPath: ssmdocs,
        ssmDocFileName: `${remediationName}.yaml`,
        scriptPath: `${ssmdocs}/scripts`,
        solutionVersion: props.solutionVersion,
        solutionDistBucket: props.solutionDistBucket,
        solutionId: props.solutionId,
        namespace: namespace,
      });
    }
```

### 5단계: 단위 테스트 업데이트
<a name="step-5-update-unit-tests"></a>

새 문제 해결을 추가한 후 단위 테스트를 업데이트하고 실행하는 것이 좋습니다.

먼저 `source/test/regex_registry.ts` 파일에 새 정규식(아직 추가되지 않음)을 추가해야 합니다. 이 파일은 솔루션의 실행서에 포함된 각 새 정규식에 대한 테스트를 적용합니다. ElastiCache 문제 해결에 사용되는 정규식을 테스트하는 데 사용되는 `addElastiCacheClusterTestCases` 함수를 예로 들어 보겠습니다.

마지막으로 각 스택의 스냅샷을 업데이트해야 합니다. 스냅샷은 ASR 인프라의 변경 사항을 추적하는 데 사용되는 버전 관리형 CloudFormation 템플릿 정의입니다. `deployment` 디렉터리에서 다음 명령을 실행하여 이러한 스냅샷 파일을 업데이트할 수 있습니다.

```
./run-unit-tests.sh update
```

이제 새 수정 사항을 배포할 준비가 되었습니다\! 새 변경 사항을 사용하여 솔루션을 **빌드하고 배포**하는 방법에 대한 지침은 아래 빌드 및 배포 섹션으로 이동합니다.