기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
새 문제 해결 추가
해결 방법은 원하는 워크플로에 따라 적절한 플레이북 파일을 업데이트하여 수동으로 추가하거나 CDK 구문을 통해 솔루션을 프로그래밍 방식으로 확장하여 추가할 수 있습니다.
참고
다음 지침은 솔루션에서 설치한 리소스를 시작점으로 활용합니다. 대부분의 솔루션 리소스 이름에는 ASR 및/또는 SO0111이 포함되어 있어 쉽게 찾고 식별할 수 있습니다.
수동 워크플로 개요
AWS 실행서의 자동 보안 응답은 다음 표준 이름을 따라야 합니다.
ASR-<standard>-<version>-<control>
표준: 보안 표준의 약어입니다. 이는 ASR에서 지원하는 표준과 일치해야 합니다. "CIS", "AFSBP", "PCI", "NIST" 또는 "SC" 중 하나여야 합니다.
버전: 표준의 버전입니다. 다시 말하지만, ASR에서 지원하는 버전과 결과 데이터의 버전과 일치해야 합니다.
제어: 수정할 제어의 제어 ID입니다. 이는 결과 데이터와 일치해야 합니다.
-
멤버 계정(들)에서 실행서를 생성합니다.
-
멤버 계정(들)에서 IAM 역할을 생성합니다.
-
(선택 사항) 관리자 계정에서 자동 문제 해결 규칙을 생성합니다.
1단계. 멤버 계정(들)에서 실행서 생성
-
AWS Systems Manager 콘솔
에 로그인하고 조사 결과 JSON의 예를 가져옵니다. -
결과를 수정하는 자동화 실행서를 생성합니다. 내 소유 탭에서
ASR-문서 탭 아래의 문서를 시작점으로 사용합니다. -
관리자 계정의 AWS Step Functions가 실행서를 실행합니다. 실행서를 호출할 때 전달하려면 실행서에서 문제 해결 역할을 지정해야 합니다.
2단계. 멤버 계정(들)에서 IAM 역할 생성
-
IAM SO0111 역할에서 예제를 가져와 새 역할을 생성합니다. 역할 이름은 SO0111-Remediate-
<standard>-<version>-<control>로 시작해야 합니다. 예를 들어 CIS v1.2.0 컨트롤 5.6을 추가하는 경우 역할은 여야 합니다SO0111-Remediate-CIS-1.2.0-5.6. -
이 예제를 사용하여 수정을 수행하는 데 필요한 API 호출만 허용하는 적절한 범위의 역할을 생성합니다.
이 시점에서 수정은 활성 상태이며 AWS Security Hub의 ASR 사용자 지정 작업에서 자동 수정에 사용할 수 있습니다.
3단계: (선택 사항) 관리자 계정에서 자동 문제 해결 규칙 생성
자동(‘자동’이 아님) 문제 해결은 AWS Security Hub에서 결과를 받는 즉시 문제 해결을 즉시 실행하는 것입니다. 이 옵션을 사용하기 전에 위험을 신중하게 고려하세요.
-
CloudWatch Events에서 동일한 보안 표준에 대한 예제 규칙을 봅니다. 규칙의 이름 지정 표준은 입니다
standard_control_*AutoTrigger*. -
사용할 예제에서 이벤트 패턴을 복사합니다.
-
조사 결과 JSON의
GeneratorId와 일치하도록GeneratorId값을 변경합니다. -
규칙을 저장하고 활성화합니다.
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
개발 단계
-
문제 해결 런북을 생성합니다.
-
컨트롤 런북을 생성합니다.
-
각 컨트롤 런북을 플레이북과 통합합니다.
-
수정 IAM 역할 생성 및 수정 런북 통합
-
단위 테스트 업데이트
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`), ]), }); } }
-
securityControlId는 Security 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
이제 새 수정 사항을 배포할 준비가 되었습니다! 새 변경 사항을 사용하여 솔루션을 빌드하고 배포하는 방법에 대한 지침은 아래 빌드 및 배포 섹션으로 이동합니다.