
cloud-custodian v0.9.52.0
클라우드 보안, 비용 최적화 및 거버넌스를 위한 규칙 엔진, 리소스를 조회, 필터링 및 조치하는 정책을 위한 YAML 기반 DSL
Cloud Custodian (c7n)
Cloud Custodian는 c7n으로도 알려져 있으며, 퍼블릭 클라우드 계정과 리소스를 관리하기 위한 규칙 엔진입니다. 사용자는 보안이 확보되고 비용이 최적화된, 잘 관리된 클라우드 인프라를 구현할 수 있도록 정책을 정의할 수 있습니다. 이 도구는 조직이 보유한 많은 임시 스크립트를 통합된 지표와 보고 기능을 갖춘 가볍고 유연한 도구로 통합합니다.
Custodian은 보안 정책(예: 암호화 및 접근 요구 사항), 태그 정책, 그리고 사용하지 않는 리소스의 정리 및 비업무 시간 리소스 관리를 통한 비용 관리에 대한 실시간 준수를 보장함으로써 AWS, Azure, GCP 환경을 관리하는 데 사용할 수 있습니다.
Custodian은 또한 infrastructure as code 자산에 대해 정책을 실행하여 개발자 워크스테이션이나 CI 파이프라인 내에서 직접 피드백을 제공하는 것도 지원합니다.
Custodian 정책은 간단한 YAML 구성 파일로 작성되며, 사용자가 리소스 유형(EC2, ASG, Redshift, CosmosDB, PubSub Topic)에 대한 정책을 지정할 수 있게 하고, 필터와 액션의 어휘로 구성됩니다.
각 공급자의 클라우드 네이티브 서버리스 기능과 통합되어 내장 프로비저닝을 통해 정책을 실시간으로 시행할 수 있습니다. 또는 서버에서 간단한 cron 작업으로 실행하여 대규모의 기존 자원 집합에 대해 실행할 수도 있습니다.
Cloud Custodian은 수백 명의 기여자 커뮤니티가 이끄는 CNCF Incubating 프로젝트입니다.
기능
- 정책을 구축할 수 있는 풍부한 액션 및 필터 라이브러리를 갖춘 퍼블릭 클라우드 서비스 및 리소스에 대한 포괄적인 지원.
- infrastructure as code(terraform 등) 자산에 대해 정책을 실행합니다.
- 중첩된 불리언 조건을 사용한 리소스에 대한 임의 필터링을 지원합니다.
- 모든 정책을 드라이 런하여 어떤 동작을 할지 확인할 수 있습니다.
- 서버리스 함수와 이벤트 소스(AWS CloudWatchEvents, AWS Config Rules, Azure EventGrid, GCP AuditLog & Pub/Sub 등)를 자동으로 프로비저닝합니다.
- 정책과 일치한 리소스에 대한 클라우드 공급자 네이티브 지표 출력
- 정책과 일치한 리소스에 대한 클라우드 네이티브 객체 스토리지로의 구조화된 출력.
- API 호출을 최소화하기 위한 지능형 캐시 사용.
- 다중 계정/구독/프로젝트 사용 지원.
- 실전 검증 완료 - 일부 매우 큰 클라우드 환경의 프로덕션에서 사용 중.
링크
빠른 설치
Custodian은 c7n 접두사를 가진 일련의 패키지로 pypi에 게시되어 있으며, docker 이미지로도 사용할 수 있습니다.
$ python3 -m venv custodian
$ source custodian/bin/activate
(custodian) $ pip install c7n
사용법
Cloud Custodian(c7n)을 사용하는 첫 단계는 실행하려는 정책을 담은 YAML 파일을 작성하는 것입니다. 각 정책은 정책이 실행될 리소스 유형, 이 정책의 영향을 받을 리소스를 제어하는 필터 집합, 정책이 일치하는 리소스에 수행할 작업, 그리고 정책의 실행 방식을 제어하는 모드를 지정합니다.
가장 좋은 시작 가이드는 클라우드 제공자별 튜토리얼입니다.
간단한 둘러보기로, 아래는 AWS 리소스에 대한 몇 가지 샘플 정책입니다.
- 교차 계정 액세스가 활성화된 S3 버킷이 없도록 강제합니다.
- 암호화된 EBS 볼륨이 없는 새로 시작된 EC2 인스턴스를 종료합니다.
- 다음 태그 "Environment", "AppId", 그리고 "OwnerContact" 또는 "DeptID" 중 하나를 갖지 않는 EC2 인스턴스에 4일 후 중지되도록 태그를 지정합니다.
policies:
- name: s3-cross-account
description: |
Checks S3 for buckets with cross-account access and
removes the cross-account access.
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: |
Provision a lambda and cloud watch event target
that looks at all new instances and terminates those with
unencrypted volumes.
mode:
type: cloudtrail
role: CloudCustodian-QuickStart
events:
- RunInstances
filters:
- type: ebs
key: Encrypted
value: false
actions:
- terminate
- name: tag-compliance
resource: aws.ec2
description: |
Schedule a resource that does not meet tag compliance policies to be stopped in four days. Note a separate policy using the`marked-for-op` filter is required to actually stop the instances after four days.
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을 예제 정책과 함께 검증, 테스트, 실행하려면 다음 명령을 사용할 수 있습니다:
# Validate the configuration (note this happens by default on run)
$ custodian validate policy.yml
# Dryrun on the policies (no actions executed) to see what resources
# match each policy.
$ custodian run --dryrun -s out policy.yml
# Run the policy
$ custodian run -s out policy.yml
Docker를 통해서도 Cloud Custodian을 실행할 수 있습니다:
# Download the image
$ docker pull cloudcustodian/c7n
$ mkdir output
# Run the policy
#
# This will run the policy using only the environment variables for authentication
$ 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
# Run the policy (using AWS's generated credentials from STS)
#
# NOTE: We mount the ``.aws/credentials`` and ``.aws/config`` directories to
# the docker container to support authentication to AWS using the same credentials
# credentials that are available to the local user if authenticating with 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 도구는 docker에 대한 투명한 프런트 엔드를 제공하는 Go 바이너리로, 일반 custodian CLI를 그대로 반영하지만 볼륨 마운트를 자동으로 처리합니다.
추가 정보는 문서를 참고하거나 gitter에서 문의하세요.
클라우드 공급자별 도움말
AWS, Azure, GCP에 대한 구체적인 지침은 해당 시작하기 페이지를 방문하세요.
참여하기
- GitHub - (이 페이지)
- Slack - 도움이 필요하거나 Custodian에 기여하는 데 관심이 있다면 실시간 채팅을 이용하세요!
- Gitter - (이전 실시간 채팅, 이쪽에서 이전할 예정입니다)
- Linen.dev - Linen에서 진행되는 논의를 팔로우하세요
- 메일링 리스트 - 프로젝트 메일링 리스트로, 중요한 프로젝트 공지 사항을 받아보려면 여기에서 구독하세요. 질문은 자유롭게 해주세요
- Reddit - 서브레딧
- StackOverflow - 개발자를 위한 Q&A 사이트로,
cloudcustodian태그를 주시하고 있습니다 - YouTube 채널 - 튜토리얼과 기타 유용한 정보, 회의 영상을 추가하는 작업을 진행 중입니다
커뮤니티 리소스
모든 사용자와 모든 숙련도 수준의 개발자에게 열려 있는 정기 커뮤니티 회의가 있습니다. 메일링 리스트에 가입하면 회의 초대가 자동으로 발송됩니다. 회의 참여에 대한 보다 기술적인 정보는 아래 노트를 참고하세요.