
cloud-custodian v0.9.52.0
클라우드 보안, 비용 최적화 및 거버넌스를 위한 규칙 엔진, 리소스를 조회, 필터링 및 조치하는 정책을 위한 YAML 기반 DSL
Cloud Custodian (c7n)
Cloud Custodian(c7n이라고도 함)은 퍼블릭 클라우드 계정과 리소스를 관리하기 위한 규칙 엔진입니다. 사용자가 보안 및 비용 최적화가 잘 된 클라우드 인프라를 운영할 수 있도록 정책을 정의할 수 있게 해줍니다. 조직에서 사용하던 여러 임시 스크립트를 통합된 지표 및 보고 기능을 갖춘 가볍고 유연한 도구로 대체합니다.
Custodian은 AWS, Azure, GCP 환경을 관리하여 보안 정책(암호화 및 액세스 요구 사항 등), 태그 정책에 대한 실시간 규정 준수를 보장하고, 사용되지 않는 리소스의 가비지 컬렉션 및 업무 외 시간 리소스 관리를 통한 비용 관리를 수행할 수 있습니다.
Custodian은 또한 코드형 인프라 자산에 대해 정책을 실행하여 개발자 워크스테이션이나 CI 파이프라인 내에서 직접 피드백을 제공할 수 있습니다.
Custodian 정책은 간단한 YAML 구성 파일로 작성되며, 사용자가 리소스 유형(EC2, ASG, Redshift, CosmosDB, PubSub Topic)에 대한 정책을 지정할 수 있도록 하고, 필터와 액션의 어휘로 구성됩니다.
각 클라우드 제공자의 네이티브 서버리스 기능과 통합되어 내장 프로비저닝을 통해 실시간 정책 적용을 제공합니다. 또는 서버에서 간단한 cron 작업으로 실행하여 대규모 기존 자산에 대해 실행할 수도 있습니다.
Cloud Custodian은 CNCF Incubating 프로젝트이며, 수백 명의 기여자 커뮤니티가 이끌고 있습니다.
Features
- 풍부한 액션 및 필터 라이브러리로 퍼블릭 클라우드 서비스 및 리소스를 포괄적으로 지원하여 정책을 구축할 수 있습니다.
- 코드형 인프라(terraform 등) 자산에 대해 정책을 실행할 수 있습니다.
- 중첩 부울 조건을 사용한 리소스 임의 필터링을 지원합니다.
- 모든 정책을 드라이런(dry run)하여 어떤 작업이 수행될지 미리 확인할 수 있습니다.
- 서버리스 함수 및 이벤트 소스(AWS CloudWatchEvents, AWS Config Rules, Azure EventGrid, GCP AuditLog & Pub/Sub 등)를 자동으로 프로비저닝합니다.
- 정책과 일치한 리소스에 대한 클라우드 제공자 네이티브 메트릭 출력
- 정책과 일치한 리소스에 대한 구조화된 출력을 클라우드 네이티브 객체 스토리지에 저장
- API 호출을 최소화하기 위한 지능형 캐시 사용
- 멀티 계정/구독/프로젝트 사용 지원
- 실제 대규모 클라우드 환경에서 프로덕션 수준으로 검증됨
Links
Quick Install
Custodian은 c7n 접두사를 가진 일련의 패키지로 pypi에 게시되어 있으며, Docker 이미지로도 사용할 수 있습니다.
$ python3 -m venv custodian
$ source custodian/bin/activate
(custodian) $ pip install c7n
Usage
Cloud Custodian(c7n)을 사용하는 첫 번째 단계는 실행하려는 정책이 포함된 YAML 파일을 작성하는 것입니다. 각 정책은 정책이 실행될 리소스 유형, 정책에 영향을 받을 리소스를 제어하는 필터 집합, 일치된 리소스에 대해 정책이 수행할 액션, 그리고 정책이 실행되는 방식을 제어하는 모드를 지정합니다.
가장 좋은 시작 가이드는 각 클라우드 제공자별 튜토리얼입니다.
빠른 실습으로, 아래는 AWS 리소스에 대한 몇 가지 샘플 정책입니다.
- S3 버킷에 대해 교차 계정 액세스가 활성화되지 않도록 강제합니다.
- 암호화된 EBS 볼륨이 없는 새로 시작된 EC2 인스턴스를 종료합니다.
- "Environment", "AppId", 그리고 "OwnerContact" 또는 "DeptID" 태그 중 하나가 없는 EC2 인스턴스에 태그를 지정하여 4일 후에 중지되도록 표시합니다.
policies:
- name: s3-cross-account
description: |
S3에서 교차 계정 액세스가 있는 버킷을 검사하고
교차 계정 액세스를 제거합니다.
resource: aws.s3
region: us-east-1
filters:
- type: cross-account
actions:
- type: remove-statements
statement_ids: matched
- name: ec2-require-non-public-and-encrypted-volumes
resource: aws.ec2
description: |
모든 새 인스턴스를 확인하고 암호화되지 않은 볼륨이 있는 인스턴스를
종료하는 Lambda 및 CloudWatch Event 대상을 프로비저닝합니다.
mode:
type: cloudtrail
role: CloudCustodian-QuickStart
events:
- RunInstances
filters:
- type: ebs
key: Encrypted
value: false
actions:
- terminate
- name: tag-compliance
resource: aws.ec2
description: |
태그 규정 준수 정책을 충족하지 않는 리소스를 4일 후에 중지하도록 예약합니다. 실제로 4일 후에 인스턴스를 중지하려면 `marked-for-op` 필터를 사용하는 별도의 정책이 필요합니다.
filters:
- State.Name: running
- "tag:Environment": absent
- "tag:AppId": absent
- or:
- "tag:OwnerContact": absent
- "tag:DeptID": absent
actions:
- type: mark-for-op
op: stop
days: 4
다음 명령어로 예제 정책을 사용하여 Cloud Custodian을 검증, 테스트 및 실행할 수 있습니다.
# 구성 검증 (실행 시 기본적으로 수행됨)
$ custodian validate policy.yml
# 정책 드라이런 (액션은 실행되지 않음)을 통해 각 정책과 일치하는 리소스를 확인합니다.
$ custodian run --dryrun -s out policy.yml
# 정책 실행
$ custodian run -s out policy.yml
Docker를 통해 Cloud Custodian을 실행할 수도 있습니다.
# 이미지 다운로드
$ docker pull cloudcustodian/c7n
$ mkdir output
# 정책 실행
#
# 환경 변수만을 사용하여 인증을 수행합니다.
$ docker run -it \
-v $(pwd)/output:/home/custodian/output \
-v $(pwd)/policy.yml:/home/custodian/policy.yml \
--env-file <(env | grep "^AWS\|^AZURE\|^GOOGLE") \
cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml
# 정책 실행 (STS에서 생성된 AWS 자격 증명 사용)
#
# 참고: 로컬 사용자에게 제공되는 동일한 자격 증명으로 AWS 인증을 지원하기 위해
# ``.aws/credentials`` 및 ``.aws/config`` 디렉토리를 Docker 컨테이너에 마운트합니다.
# STS를 사용하여 인증하는 경우입니다.
$ docker run -it \
-v $(pwd)/output:/home/custodian/output \
-v $(pwd)/policy.yml:/home/custodian/policy.yml \
-v $(cd ~ && pwd)/.aws/credentials:/home/custodian/.aws/credentials \
-v $(cd ~ && pwd)/.aws/config:/home/custodian/.aws/config \
--env-file <(env | grep "^AWS") \
cloudcustodian/c7n run -v -s /home/custodian/output /home/custodian/policy.yml
custodian cask 도구는 일반 custodian cli를 미러링하는 투명한 Docker 프론트엔드를 제공하는 Go 바이너리로, 볼륨 마운트를 자동으로 처리합니다.
추가 정보는 문서를 참조하거나 Gitter에서 문의하세요.
Cloud Provider Specific Help
AWS, Azure 및 GCP에 대한 구체적인 지침은 해당 시작 가이드 페이지를 방문하세요.
Get Involved
- GitHub - (이 페이지)
- Slack - 도움을 원하거나 Custodian에 기여하는 데 관심이 있다면 실시간 채팅!
- Gitter - (이전 실시간 채팅, 곧 이곳에서 이전할 예정입니다)
- Linen.dev - Linen에서 토론을 팔로우하세요
- 메일링 리스트 - 프로젝트 메일링 리스트입니다. 중요한 프로젝트 공지를 위해 구독하고, 질문은 자유롭게 해주세요.
- Reddit - 서브레딧
- StackOverflow - 개발자를 위한 Q&A 사이트,
cloudcustodian태그를 주시하고 있습니다. - YouTube 채널 - 튜토리얼 및 기타 유용한 정보, 미팅 영상을 추가하고 있습니다.
Community Resources
모든 기술 수준의 사용자와 개발자에게 열려 있는 정기적인 커뮤니티 미팅이 있습니다. 메일링 리스트에 가입하면 미팅 초대장이 자동으로 발송됩니다. 미팅 참여에 대한 자세한 기술 정보는 아래 노트를 참조하세요.
- 커뮤니티 미팅 영상
- 커뮤니티 미팅 노트 아카이브
- 예정된 커뮤니티 이벤트
- Cloud Custodian 연례 보고서 2021 - 프로젝트의 상태를 설명하는 CNCF에 제공되는 연례 건강 점검
- Ada Logics 제3자 보안 감사
Additional Tools
Custodian 프로젝트는 또한 다음 위치에서 추가 도구 모음을 개발 및 유지 관리합니다. https://github.com/cloud-custodian/cloud-custodian/tree/main/tools:
-
Org: 멀티 계정 정책 실행.
-
ShiftLeft: Shift Left ~ terraform과 같은 코드형 인프라 자산에 대해 정책 실행.
-
PolicyStream: Git 히스토리를 논리적 정책 변경의 스트림으로 처리.
-
Salactus: 확장 가능한 S3 스캐닝.
-
Mailer: 사용자에게 알림 메시지를 보내는 참조 구현.
-
Trail Creator: CloudTrail을 통해 리소스 생성자를 소급 태깅.
-
TrailDB: 대시보드 작성을 위한 CloudTrail 인덱싱 및 시계열 생성.
-
LogExporter: CloudWatch 로그를 S3로 내보내기.
-
Cask: Docker를 통한 간편한 custodian 실행.
-
Guardian: 자동화된 멀티 계정 Guard Duty 설정.
-
Omni SSM: EC2 Systems Manager 자동화.
-
Mugc: AWS 환경에 배포된 Cloud Custodian Lambda 정책을 정리하는 유틸리티.
Contributing
https://cloudcustodian.io/docs/contribute.html 참조
Security
보안 관련 문제, 취약점 또는 잠재적인 취약점을 발견하셨다면 Custodian 보안 팀에 취약점 세부 정보를 알려주시기 바랍니다. 접수 확인 이메일을 보내드리며, 문제를 긍정적 또는 부정적으로 식별한 후 추가 이메일을 보내드립니다.
Code of Conduct
이 프로젝트는 CNCF 행동 강령을 준수합니다.
참여함으로써 이 규칙을 준수해야 합니다.