
GCP 인프라에서 권한이 과도한 계정을 대규모로 정리합니다.
CureIAM은 GCP 클라우드 인프라에서 최소 권한 원칙을 적용하기 위한 사용하기 쉽고, 안정적이며, 성능이 뛰어난 엔진입니다. DevOps 및 보안 팀이 GCP 인프라에서 필요한 것보다 더 많은 권한이 부여된 계정을 신속하게 정리할 수 있도록 합니다. CureIAM은 GCP IAM 추천자(Recommender)로부터 권장 사항과 인사이트를 가져와 점수를 매기고, 매일 기본적으로 이러한 권장 사항을 자동으로 적용합니다. 일정 관리 및 대규모로 이러한 적용 작업을 실행하는 다른 모든 측면을 처리합니다. GCP IAM 추천자 API와 Cloudmarker 프레임워크 위에 구축되었습니다.
CureIAM을 확장 가능하고 프로덕션 등급으로 만드는 요소를 알아보세요.
safe_to_apply_score, risk_score, over_privilege_score와 같은 여러 점수가 생성됩니다. 각 점수는 다른 목적을 제공합니다. 예를 들어 safe_to_apply_score는 CureIAM.yaml 설정 파일에 설정된 임계값을 기반으로 자동 기준으로 권장 사항을 적용할 수 있는 기능을 식별합니다.CureIAM은 Python으로 구축되었으므로 다음 명령어로 로컬에서 실행할 수 있습니다. 실행하기 전에 /etc/CureIAM.yaml, ~/.CureIAM.yaml, ~/CureIAM.yaml 또는 CureIAM.yaml 중 하나에 설정 파일이 준비되어 있고, 현재 디렉토리에 서비스 계정 JSON 파일이 cureiamSA.json이라는 이름으로 있어야 합니다(권장). 이 SA 개인 키는 어떤 이름으로든 지정할 수 있지만, Docker 이미지 빌드 시 이 이름을 사용하는 것이 좋습니다. GCP 클라우드에 대해 이 파일을 config에서 참조해야 합니다.
# 필요한 종속성 설치
$ pip install -r requirements.txt
# CureIAM 지금 실행
$ python -m CureIAM -n
# CureIAM 프로세스를 스케줄러로 실행
$ python -m CureIAM
# CureIAM 도움말 확인
$ python -m CureIAM --help
CureIAM은 Docker 환경 내에서도 실행할 수 있습니다. 이는 완전히 선택 사항이며 K8s 클러스터 배포와 함께 CI/CD에 사용할 수 있습니다.
# Dockerfile에서 Docker 이미지 빌드
$ docker build -t cureiam .
# 이미지를 스케줄러로 실행
$ docker run -d cureiam
# 이미지를 지금 실행
$ docker run -f cureiam -m cureiam -n
CureIAM.yaml 설정 파일은 CureIAM 엔진의 핵심입니다. 엔진이 수행하는 모든 작업은 이 설정 파일에 구성된 파이프라인을 기반으로 합니다. 이 설정을 더 간단하게 보이도록 여러 섹션으로 나누어 보겠습니다.
logger:
version: 1
disable_existing_loggers: false
formatters:
verysimple:
format: >-
[%(process)s]
%(name)s:%(lineno)d - %(message)s
datefmt: "%Y-%m-%d %H:%M:%S"
handlers:
rich_console:
class: rich.logging.RichHandler
formatter: verysimple
file:
class: logging.handlers.TimedRotatingFileHandler
formatter: simple
filename: /tmp/CureIAM.log
when: midnight
encoding: utf8
backupCount: 5
loggers:
adal-python:
level: INFO
root:
level: INFO
handlers:
- rich_console
- file
schedule: "16:00"
이 설정 하위 섹션은 Rich 로깅 모듈을 사용하고 CureIAM이 매일 16:00에 실행되도록 예약합니다.
CureIAM.yaml의 plugins 섹션에 속합니다. 이 섹션은 다양한 플러그인에 대한 선언이라고 생각할 수 있습니다. plugins:
gcpCloud:
plugin: CureIAM.plugins.gcp.gcpcloud.GCPCloudIAMRecommendations
params:
key_file_path: cureiamSA.json
filestore:
plugin: CureIAM.plugins.files.filestore.FileStore
gcpIamProcessor:
plugin: CureIAM.plugins.gcp.gcpcloudiam.GCPIAMRecommendationProcessor
params:
mode_scan: true
mode_enforce: true
enforcer:
key_file_path: cureiamSA.json
allowlist_projects:
- alpha
blocklist_projects:
- beta
blocklist_accounts:
- [email protected]
allowlist_account_types:
- user
- group
- serviceAccount
blocklist_account_types:
- None
min_safe_to_apply_score_user: 0
min_safe_to_apply_score_group: 0
min_safe_to_apply_score_SA: 50
esstore:
plugin: CureIAM.plugins.elastic.esstore.EsStore
params:
# Change http to https later if your elastic are using https
scheme: http
host: es-host.com
port: 9200
index: cureiam-stg
username: security
password: securepassword
이러한 각 플러그인 선언은 다음 형식이어야 합니다.
plugins:
<plugin-name>:
plugin: <class-name-as-python-path>
params:
param1: val1
param2: val2
예를 들어, 플러그인 CureIAM.stores.esstore.EsStore는 이 파일이며 클래스는 EsStore입니다. YAML에 정의된 모든 매개변수는 동일한 플러그인 클래스의 __init__() 함수 선언과 일치해야 합니다.
audits:
IAMAudit:
clouds:
- gcpCloud
processors:
- gcpIamProcessor
stores:
- filestore
- esstore
이를 통해 여러 감사(Audit)를 생성할 수 있습니다. 여기서 생성된 것은 IAMAudit이며, gcpCloud, gcpIamProcessor, filestores 및 esstore의 세 가지 플러그인을 사용합니다. 이는 2단계에서 정의된 동일한 플러그인 이름입니다. 다시 말하지만, 이는 파이프라인을 정의하는 것이지 실제로 실행하는 것은 아닙니다. 다음 단계의 정의에 따라 실행이 고려됩니다.
CureIAM에게 이전 단계에서 정의된 감사(Audit)를 실행하도록 지시합니다. run:
- IAMAudits
이것이 CureIAM의 전체 설정입니다. 전체 샘플은 여기에서 확인할 수 있습니다. 이 설정 기반 파이프라인 개념은 Cloudmarker 프레임워크에서 상속되었습니다.
Elasticsearch 저장소 플러그인을 사용하여 Elasticsearch에 인덱싱된 JSON은 Kibana에서 대시보드를 생성하는 데 사용할 수 있습니다.
[부탁드립니다!] CureIAM의 핵심 기능과 문서를 개선하기 위한 모든 종류의 기여를 환영합니다. 의심스러우면 PR을 만들어 주세요!
Gojek 제품 보안 팀 ❤️
<>
=============
이전 버전과의 호환성 문제를 피하기 위해 라이브러리에 버전 추가.
Running docker compose: docker-compose -f docker_compose_es.yaml up
mode_scan: true
mode_enforce: false