View a markdown version of this page

새 문제 해결 추가 - AWS의 자동 보안 응답

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

새 문제 해결 추가

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

참고

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

수동 워크플로 개요

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

ASR-<standard>-<version>-<control>

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

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

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

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

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

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

1단계. 멤버 계정(들)에서 실행서 생성

  1. AWS Systems Manager 콘솔에 로그인하고 조사 결과 JSON의 예를 가져옵니다.

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

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

2단계. 멤버 계정(들)에서 IAM 역할 생성

  1. AWS Identity and Access Management 콘솔에 로그인합니다.

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

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

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

3단계: (선택 사항) 관리자 계정에서 자동 문제 해결 규칙 생성

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

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

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

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

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

CDK 워크플로 개요

요약하면 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. 문제 해결 런북을 생성합니다.

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

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

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

  5. 단위 테스트 업데이트

1단계: 문제 해결 런북 생성

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

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

2단계: 컨트롤 런북 생성

컨트롤 런북은 지정된 표준의 결과 데이터를 구문 분석하고 적절한 문제 해결 런북을 실행하는 플레이북별 런북입니다. 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

이러한 파일의 이름은 중요하며 <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`), ]), }); } }
  • securityControlIdSecurity Hub의 통합 제어 보기에 정의된 대로 추가하려는 문제 해결에 대한 제어 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단계: 각 컨트롤 런북을 플레이북과 통합

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

중요

형식 스크립트 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 역할 생성 및 수정 런북 통합

각 수정에는 수정 실행서를 실행하는 데 필요한 사용자 지정 권한이 있는 자체 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단계: 단위 테스트 업데이트

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

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

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

./run-unit-tests.sh update

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