기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Cloud Custodian을 사용하여 AmazonRDS에 대한 퍼블릭 액세스 차단
작성자: abhay kumar(AWS) 및 Dwarika Patra(AWS)
환경: 프로덕션 | 기술: 데이터베이스, 보안, 자격 증명, 규정 준수 | 워크로드: 기타 모든 워크로드, 오픈 소스 |
AWS 서비스: Amazon RDS |
요약
많은 조직이 여러 클라우드 공급업체에서 워크로드와 서비스를 실행합니다. 이러한 하이브리드 클라우드 환경에서 클라우드 인프라에는 개별 클라우드 공급자가 제공하는 보안 외에도 엄격한 클라우드 거버넌스가 필요합니다. Amazon Relational Database Service(Amazon )와 같은 클라우드 데이터베이스는 액세스 및 권한 취약성이 있는지 모니터링해야 하는 중요한 서비스 중 하나입니다. RDS 보안 그룹을 구성하여 Amazon RDS 데이터베이스에 대한 액세스를 제한할 수 있지만 두 번째 보호 계층을 추가하여 퍼블릭 액세스와 같은 작업을 금지할 수 있습니다. 퍼블릭 액세스가 차단되도록 하면 일반 데이터 보호 규정(GDPR), 건강보험 이전 및 책임에 관한 법률(HIPAA), 미국 국립표준기술연구소(NIST) 및 결제 카드 산업 데이터 보안 표준(PCIDSS) 규정 준수에 도움이 됩니다.
Cloud Custodian은 Amazon 와 같은 Amazon Web Services(AWS) 리소스에 대한 액세스 제한을 적용하는 데 사용할 수 있는 오픈 소스 규칙 엔진입니다RDS. Cloud Custodian을 사용하면 정의된 보안 및 규정 준수 표준에 따라 환경을 검증하는 규칙을 설정할 수 있습니다. Cloud Custodian을 사용하면 보안 정책, 태그 정책, 미사용 리소스의 가비지 수집 및 비용 관리를 준수하도록 지원하여 클라우드 환경을 관리할 수 있습니다. Cloud Custodian을 사용하면 단일 인터페이스를 사용하여 하이브리드 클라우드 환경에서 거버넌스를 구현할 수 있습니다. 예를 들어 Cloud Custodian 인터페이스를 사용하여 AWS 및 Microsoft Azure와 상호 작용하여 AWS Config, AWS 보안 그룹 및 Azure 정책과 같은 메커니즘을 사용하는 노력을 줄일 수 있습니다.
이 패턴은 에서 Cloud CustodianAWS을 사용하여 Amazon RDS 인스턴스에 대한 퍼블릭 액세스 제한을 적용하는 지침을 제공합니다.
사전 조건 및 제한 사항
사전 조건
활성 AWS 계정
AWS Lambda 설치됨
아키텍처
대상 기술 스택
Amazon RDS
AWS CloudTrail
AWS Lambda
Cloud Custodian
대상 아키텍처
다음 다이어그램은 정책을 Lambda에 배포하고, CreateDBInstance
이벤트를 AWS CloudTrail 시작하고, Amazon 에서 Lambda 함수 설정을 falsePubliclyAccessible
로 설정하는 Cloud Custodian을 보여줍니다RDS.
도구
AWS 서비스
AWS CloudTrail 는 AWS 계정의 거버넌스, 규정 준수 및 운영 위험을 감사하는 데 도움이 됩니다.
AWS 명령줄 인터페이스(AWS CLI)는 명령줄 쉘의 명령을 통해 AWS 서비스와 상호 작용하는 데 도움이 되는 오픈 소스 도구입니다.
AWS Identity and Access Management(IAM)는 AWS 리소스에 대한 액세스를 인증하고 사용할 수 있는 권한을 부여받은 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.
AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
Amazon Relational Database Service(Amazon RDS)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 확장하는 데 도움이 됩니다.
기타 도구
Cloud Custodian
은 많은 조직이 공개 클라우드 계정을 관리하는 데 사용하는 도구와 스크립트를 하나의 오픈소스 도구로 통합합니다. 정책 정의 및 시행에 스테이트리스 규칙 엔진을 사용하고 클라우드 인프라에 대한 지표, 구조화된 결과, 세부 보고 기능을 제공합니다. 서버리스 런타임과 긴밀하게 통합되어 운영 오버헤드를 낮추면서 실시간 수정 및 대응을 제공합니다.
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
AWS 를 설치합니다CLI. | 를 설치하려면 AWS 설명서의 지침을 AWS CLI따릅니다. | AWS 관리자 |
AWS 보안 인증 정보를 설정합니다. | AWS 리전 및 AWS CLI 사용하려는 출력 형식을 AWS포함하여 가 와 상호 작용하는 데 사용하는 설정을 구성합니다.
자세한 내용은 AWS 설명서를 참조하세요. | AWS 관리자 |
IAM 역할을 생성합니다. | Lambda 실행 IAM 역할로 역할을 생성하려면 다음 명령을 실행합니다.
| AWS DevOps |
작업 | 설명 | 필요한 기술 |
---|---|---|
Cloud Custodian을 설치합니다. | 운영 체제 및 환경에 맞게 Cloud Custodian을 설치하려면 Cloud Custodian 설명서 | DevOps 엔지니어 |
Cloud Custodian 스키마를 확인합니다. | 정책을 실행할 수 있는 Amazon RDS 리소스의 전체 목록을 보려면 다음 명령을 사용합니다.
| DevOps 엔지니어 |
Cloud Custodian 정책을 생성합니다. | YAML 확장을 사용하여 추가 정보 섹션의 Cloud Custodian 정책 파일에 있는 코드를 저장합니다. | DevOps 엔지니어 |
공개적으로 액세스할 수 있는 플래그를 변경하기 위한 Cloud Custodian 작업을 정의합니다. |
| DevOps 엔지니어 |
모의 실행을 수행합니다. | (선택 사항) 리소스에 대한 작업을 실행하지 않고 정책으로 식별되는 리소스를 확인하려면 다음 명령을 사용합니다.
| DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
Lambda를 사용하여 정책을 배포합니다. | 정책을 실행할 Lambda 함수를 생성하려면 다음 명령을 사용하십시오.
그러면 AWS CloudTrail 따라서 AWS Lambda는 기준과 일치하는 인스턴스에 대해 공개적으로 액세스할 수 있는 플래그를 false로 설정합니다. | DevOps 엔지니어 |
관련 리소스
추가 정보
클라우드 관리인 정책 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을 AWS Security Hub