Cloud Custodian을 사용하여 Amazon RDS에 대한 퍼블릭 액세스 차단 - AWS 권장 가이드

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

Cloud Custodian을 사용하여 Amazon RDS에 대한 퍼블릭 액세스 차단

작성자: abhay kumar 및 Dwarika Patra

환경: 프로덕션

기술: 데이터베이스, 보안, 자격 증명, 규정 준수

워크로드: 기타 모든 워크로드, 오픈 소스

서비스: Amazon RDS

요약

많은 조직이 여러 클라우드 공급업체에서 워크로드와 서비스를 실행합니다. 이러한 하이브리드 클라우드 환경에서 클라우드 인프라에는 개별 클라우드 공급자가 제공하는 보안 외에도 엄격한 클라우드 거버넌스가 필요합니다. Amazon Relational Database Service(Amazon RDS)와 같은 클라우드 데이터베이스는 액세스 및 권한 취약성을 모니터링해야 하는 중요한 서비스입니다. 보안 그룹을 구성하여 Amazon RDS 데이터베이스에 대한 액세스를 제한할 수 있지만, 두 번째 보호 계층을 추가하여 공개 액세스와 같은 작업을 금지할 수 있습니다. 공개 액세스가 차단되도록 하면 일반 데이터 보호 규정(GDPR), 건강보험 이전과 책임에 관한 법(HIPAA), 미국 국립표준기술연구소(NIST), 지불 카드 보안 표준(PCI DSS) 준수에 도움이 됩니다.

Cloud Custodian은 Amazon Web Services 리소스에 대한 액세스 제한을 적용하는 데 사용할 수 있는 오픈 소스 규칙 엔진입니다. Cloud Custodian을 사용하면 정의된 보안 및 규정 준수 표준에 따라 환경을 검증하는 규칙을 설정할 수 있습니다. Cloud Custodian을 사용하면 보안 정책, 태그 정책, 미사용 리소스의 가비지 수집 및 비용 관리를 준수하도록 지원하여 클라우드 환경을 관리할 수 있습니다. Cloud Custodian을 사용하면 단일 인터페이스를 사용하여 하이브리드 클라우드 환경에서 거버넌스를 구현할 수 있습니다. 예를 들어 Cloud Custodian 인터페이스를 사용하면 Microsoft Azure와 상호 작용하여 구성, 보안 그룹, Azure 정책과 같은 메커니즘을 사용하는 노력을 줄일 수 있습니다.

이 패턴은 Cloud Custodian을 사용하여 Amazon RDS 인스턴스에 대한 공개 액세스 제한을 적용하기 위한 지침을 제공합니다.

사전 조건 및 제한 사항

사전 조건 

  • 활성 상태의 계정

  • 키 페어

  • Lambda가 설치됨

아키텍처

대상 기술 스택

  • Amazon RDS

  • AWS CloudTrail

  • Lambda

  • Cloud Custodian

대상 아키텍처 

다음 다이어그램은 클라우드 관리자가 Lambda에 정책을 배포하고, AWS가 이벤트를 CloudTrail 시작하고, Amazon RDS에서 Lambda 함수를 CreateDBInstance false로 설정하는 것을 보여줍니다. PubliclyAccessible

AWS 기반 Cloud Custodian을 사용하여 Amazon RDS 인스턴스에 대한 퍼블릭 액세스를 제한합니다.

도구

서비스

  • AWS는 AWS 계정의 거버넌스, 규정 준수 및 운영 위험을 감사할 수 있도록 CloudTrail 지원합니다.

  • Command Line Interface(CLI)는 명령줄 쉘에서 명령을 사용하여 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다.

  • Identity and Access Management(IAM)를 사용하면 사용자에 대해 인증 및 권한 부여를 제어함으로써 리소스에 대한 액세스를 안전하게 관리할 수 있습니다.

  • AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.

  • Amazon Relational Database Service(RDS)는 클라우드에서 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.

기타 도구

  • Cloud Custodian은 많은 조직이 공개 클라우드 계정을 관리하는 데 사용하는 도구와 스크립트를 하나의 오픈소스 도구로 통합합니다. 정책 정의 및 시행에 스테이트리스 규칙 엔진을 사용하고 클라우드 인프라에 대한 지표, 구조화된 결과, 세부 보고 기능을 제공합니다. 서버리스 런타임과 긴밀하게 통합되어 운영 오버헤드를 낮추면서 실시간 수정 및 대응을 제공합니다.

에픽

작업설명필요한 기술

CLI를 설치합니다.

CLI를 설치하려면 설명서의 지침을 따르십시오.

관리자

보안 인증을 설정합니다.

리전 및 사용하려는 출력 형식을 포함하여 CLI가 상호 작용하는 데 사용하는 설정을 구성합니다.

$>aws configure AWS Access Key ID [None]: <your_access_key_id> AWS Secret Access Key [None]: <your_secret_access_key> Default region name [None]: Default output format [None]:

자세한 내용은 설명서를 참조하십시오.

관리자

IAM 역할을 생성합니다.

Lambda 실행 역할을 사용하여 IAM 역할을 생성하려면 다음 명령을 실행합니다.

aws iam create-role --role-name lambda-ex --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}
AWS DevOps
작업설명필요한 기술

Cloud Custodian을 설치합니다.

운영 체제 및 환경에 맞게 Cloud Custodian을 설치하려면 Cloud Custodian 설명서의 지침을 따르십시오.

DevOps 엔지니어

Cloud Custodian 스키마를 확인합니다.

정책을 실행할 수 있는 Amazon RDS 리소스의 전체 목록을 보려면 다음 명령을 사용하십시오.

custodian schema aws.rds
DevOps 엔지니어

Cloud Custodian 정책을 생성합니다.

YAML 확장을 사용하여 추가 정보 섹션의 Cloud Custodian 정책 파일에 있는 코드를 저장합니다.

DevOps 엔지니어

공개적으로 액세스할 수 있는 플래그를 변경하기 위한 Cloud Custodian 작업을 정의합니다.

  1. 관리자 코드(예: /Users/abcd/custodian/lib/python3.9/site-packages/c7n/resources/rds.py)를 찾습니다.

  2. 추가 정보 섹션의 c7n 리소스 rds.py 파일에 있는 코드를 사용하여 rds.py에서 RDSSetPublicAvailability 클래스를 찾고 이 클래스를 수정합니다.

DevOps 엔지니어

모의 실행을 수행합니다.

(선택 사항) 리소스에 대한 작업을 실행하지 않고 정책으로 식별되는 리소스를 확인하려면 다음 명령을 사용합니다.

custodian run -dryrun <policy_name>.yaml -s <output_directory>
DevOps 엔지니어
작업설명필요한 기술

Lambda를 사용하여 정책을 배포합니다.

정책을 실행할 Lambda 함수를 생성하려면 다음 명령을 사용하십시오.

custodian run -s policy.yaml

그러면 AWS CloudTrail CreateDBInstance 이벤트가 이 정책을 시작합니다.

그 결과, Lambda는 기준에 맞는 인스턴스에 대해 공개적으로 액세스할 수 있는 플래그를 거짓으로 설정합니다.

DevOps 엔지니어

관련 리소스

추가 정보

Cloud Custodian 정책 YAML 파일

policies: - name: "block-public-access" resource: rds description: | This Enforcement blocks public access for RDS instances. mode: type: cloudtrail events: - event: CreateDBInstance # Create RDS instance cloudtrail event source: rds.amazonaws.com ids: requestParameters.dBInstanceIdentifier role: arn:aws:iam::1234567890:role/Custodian-compliance-role filters: - type: event key: 'detail.requestParameters.publiclyAccessible' value: true actions: - type: set-public-access state: false

c7n 리소스 rds.py 파일

@actions.register('set-public-access') class RDSSetPublicAvailability(BaseAction): schema = type_schema( "set-public-access", state={'type': 'boolean'}) permissions = ('rds:ModifyDBInstance',) def set_accessibility(self, r): client = local_session(self.manager.session_factory).client('rds') waiter = client.get_waiter('db_instance_available') waiter.wait(DBInstanceIdentifier=r['DBInstanceIdentifier']) client.modify_db_instance( DBInstanceIdentifier=r['DBInstanceIdentifier'], PubliclyAccessible=self.data.get('state', False)) def process(self, rds): with self.executor_factory(max_workers=2) as w: futures = {w.submit(self.set_accessibility, r): r for r in rds} for f in as_completed(futures): if f.exception(): self.log.error( "Exception setting public access on %s \n %s", futures[f]['DBInstanceIdentifier'], f.exception()) return rds

Security Hub 통합

Cloud Custodian을 Security Hub와 통합하여 보안 조사 결과를 전송하고 수정 조치를 시도할 수 있습니다. 자세한 내용은 Security Hub와의 클라우드 관리 통합 발표를 참고하십시오.