책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/sangkeon/opabook
요약
OPA(Open Policy Agent)는 클라우드 네이티브 애플리케이션과 마이크로서비스 환경에 최적화된 정책 엔진이다. OPA는 현재 존재하는 기술 중에서는 Policy as Code 개념을 가장 잘 구현할 수 있는 수단이며, Policy as Code 개념을 구현하면 정책을 애플리케이션의 다른 부분과 독립적으로 개발 및 유지 보수할 수 있고 빠른 요구사항의 변화에도 용이하게 대응할 수 있다. OPA는 이미 4~5년 전에 등장해 많은 프로젝트에 적용되고 있지만 처음 배우기는 생소하고 어렵다.
한 권 전체를 OPA에 집중하는 최초의 책으로 좀 더 쉽게 OPA를 접할 수 있기를 기대하고 쓴 책이다. 이 책을 통해 OPA를 라이브러리나 별도 서버로 애플리케이션에 통합하는 방법, OPA의 정책 언어 Rego를 활용해 정책을 작성하는 방법, 쿠버네티스 환경 및 마이크로서비스 환경에서 OPA를 적용하는 데 사용할 수 있는 다양한 기술과 사례 등을 배울 수 있다.
이 책에서 다루는 내용
■ OPA와 관련 기술 이해
■ OPA의 정책 언어인 Rego의 문법 및 OPA 규칙 작성법
■ OPA에서 제공하는 내장 함수
■ OPA 정책 번들 생성 및 서명 등 정책을 패키징하고 관리하는 방법
■ Go 클라이언트 라이브러리와 REST 서버를 통해 OPA를 통합하는 방법
■ OPA를 통해 API 권한 관리 시나리오를 구현하고 점진적으로 개선해 나가는 과정
■ 웹어셈블리 SDK를 통해 Go 이외의 다양한 언어(특히 자바)에서 OPA를 내장하는 방법
■ 플러그인과 내장함수를 구현해 OPA를 확장하는 방법
이 책의 대상 독자
■ 쿠버네티스 기반 클라우드 네이티브 환경과 마이크로서비스 아키텍처와 관련된 업무를 수행하는 개발자, 아키텍트, 컨설턴트 등 실무자
■ 애플리케이션의 정책과 권한을 유지보수가 용이하고 테스트하기 쉽게 설계하는 방법을 알고 싶은 독자
■ Policy as Code 개념이 어떻게 구현되는지 구체적으로 알고 싶은 독자
목차
목차
- 1장. OPA 소개
- OPA 개요
 - OPA의 특징
- OPA의 장점
- 정책을 코드로 통합
 - 형식의 유연성
 - REPL 및 플레이그라운드 지원
 - 테스트 및 성능 측정의 용이성
 - 정책 번들 지원
 - 많은 프로젝트에 적용돼 검증됨
 - 빠른 기능 개발 속도
 - 문서화의 범위가 넓음
 
 - OPA의 단점
- 전용 정책 언어 Rego의 생소함
 - 프로그래밍 언어 지원의 제약
 - 데이터베이스 등 외부 저장소 미지원
 - 문서화의 디테일 부족
 
 
 - OPA의 장점
 - OPA 사용 사례
- 사용자 권한 관리
 - 시스템 정책 및 제약사항 관리
 - API 게이트웨이 보안
 - CI/CD 자동화를 위한 검사 도구
 - 서비스 수준 정책 관리
 - 정책의 통합 관리
 
 - OPA 관련 기술 및 개념 정리
- 인증
 - 권한 부여 혹은 인가
 - 감사
 - RBAC
 - ABAC
 - JWT
 - OAuth 2.0
 - OpenID Connect 1.0
 
 - OPA 사용해 보기
 - 정리
 
 - 2장. OPA 설치 및 사용
- OPA 설치
- 리눅스 환경
 - 맥 OS 환경
 - 윈도우 환경
 - 설치 확인
 
 - Visual Studio Code 및 OPA 플러그인 설치
- Visual Studio Code 설치
 - vscode-opa 플러그인 설치
 
 - 기본적인 vscode-opa 사용 방법
 - 정리
 
 - OPA 설치
 - 3장. Rego
- Rego 개요
 - Rego 언어 문법 개요
 - 레일로드 다이어그램
 - Rego 모듈
- 모듈
 - 패키지
 - 임포트
 - 정책
 
 - 기본 요소
- 스칼라값
- 숫자
 - 문자열
 
 - 복합값
- 객체
 - 배열
 - 집합
 
 - 포괄식
- 객체 포괄식
 - 집합 포괄식
 - 배열 포괄식
 
 
 - 스칼라값
 - 변수 및 참조
- 변수
 - 참조
 - 순회
 
 - 규칙
- 값 할당
 - 값 할당의 특성
 - 완전한 규칙
 - 규칙 집합
 - else문
 - 규칙의 기본값
 - 규칙의 예
 - 부분 규칙
 - 함수
 - 구문
 - some문
 - with문
 - 표현식
 - not문
 - 중위 연산자 및 중위 연산자 포함식
 - 집합 연산자
 - 동등성 연산자
- 할당 연산자
 - 비교 연산자
 - 단일화 연산자
 
 - 주석
 - 예약된 이름
 
 - 그렇다면 main은?
 - 정리
 
 - 4장. 내장 함수
- 숫자 관련 함수
- 반올림, 내림, 올림
 - 절댓값
 - 특정 범위의 정수 배열 생성
 
 - 비트 연산
 - 타입 관련 함수
- 타입 이름
 - 타입 확인
 - 타입 변환
 
 - 집계 함수
- count 함수
 - sum, product, max, min 함수
 - all, any 함수
 
 - 복합값 관련 함수
- 배열 관련 함수
 - 집합 관련 함수
 - 객체 관련 함수
- object.get
 - object.remove
 - object.union
 - object.filter
 - json.filter
 - json.remove
 
 
 - 문자열 관련 함수
- 문자열 검사
- contains
 - indexof
 - startswith, endswith
 
 - 문자열 포맷
- sprintf
 - format_int
 - 대소문자 변환
 
 - 문자열 조작
- concat
 - split
 - substring
 - replace
 - strings.replace_n
 
 - 문자열 공백 제거
- trim_space
 - trim, trimleft, trimright
 - trimprefix, trimsuffix
 
 
 - 문자열 검사
 - 정규식 관련 함수
- regex.is_valid
 - regex.match
 - regex.split
 - regex.globs_match
 - regex.template_match
 - regex.find_n
 - regex.findallstringsubmatchn
 
 - Glob 관련 함수
- Glob 패턴
 - Glob 매칭
 - 이스케이프 처리
 
 - HTTP 관련 함수
 - JWT 관련 함수
- JWT 디코딩 함수
 - JWT 서명 검증
 
 - 정리
 
 - 숫자 관련 함수
 - 5장. OPA를 사용한 정책 구현
- 기본 시나리오
- 시스템 정의
 - 입력 스키마 정의
 - 데이터 정의
 - 정책 작성
 - 정책 테스트
 - 디버깅을 위한 쿼리 추적
 
 - API가 다중 권한을 요구하는 시나리오
- 데이터 정의
 - 정책 작성
 - 정책 테스트
 
 - 공개 API를 추가한 시나리오
- 데이터 정의
 - 정책 작성
 - 정책 테스트
 
 - 권한 계층 구조를 지원하는 시나리오
- 데이터 정의
 - 정책 작성
 - 정책 테스트
 
 - API 계층 구조를 지원하는 시나리오
- 데이터 정의
 - 정책 작성
 - 정책 테스트
 
 - 정리
 
 - 기본 시나리오
 - 6장. OPA 번들
- OPA 번들 생성
- OPA 번들 수동 생성
 - OPA 번들 도구
 
 - OPA 번들의 서명
- HMAC을 이용한 번들 서명 및 검증
 - 비대칭 키 서명을 이용한 번들 서명 및 검증
 - 번들 서명 파일만 생성
 
 - 정리
 
 - OPA 번들 생성
 - 7장. OPA 통합
- OPA REST API 서버
- HTTPS로 OPA 서버 실행
 
 - OPA REST API 서버 설정
- OPA 설정 파일의 구조
 - REST 서버 시작 시 OPA 설정 적용
 
 - 도커 및 쿠버네티스 환경에서 실행
- 도커 환경에서 실행
 - 쿠버네티스 환경에서 실행
 
 - Go 클라이언트 라이브러리로 애플리케이션에 통합
 - OPA와 외부 데이터를 연동하는 방법
- JWT에 기반한 방법
 - Input 오버로딩
 - 번들
 - 푸시
 - 평가 시 폴링
 - 데이터베이스를 활용해서 정책 정보 관리하기
 
 - 정리
 
 - OPA REST API 서버
 - 8장. 모니터링
- 프로메테우스를 통한 OPA 서버 모니터링
- OPA에서 제공하는 메트릭 정보
 - 프로메테우스를 통한 모니터링
 - 단일 쿼리 성능 모니터링
 
 - OPA 서버 헬스체크
 - OPA 서버 상태 정보 및 결정 로그
- OPA 상태 정보
 - OPA 결정 로그
 - OPA 결정 로그 마스킹
 - 상태 정보 및 결정 로그 수집을 위한 서버 구현
 - 상태 정보 및 결정 로그 파티션 설정
 
 - 정리
 
 - 프로메테우스를 통한 OPA 서버 모니터링
 - 9장. 쿠버네티스 환경에서 OPA 활용
- OPA 게이트키퍼
- OPA 게이트키퍼 개요
 - OPA 게이트키퍼 설치 및 제거 방법
 - OPA 게이트키퍼 제약사항 템플릿
 - OPA 게이트키퍼 제약사항
 - OPA 게이트키퍼 동작 확인
 - OPA 게이트키퍼 CRD 관련 명령
 
 - OPA 게이트키퍼 정책 라이브러리
- 일반 템플릿
 - PSP 템플릿
 
 - OPA 게이트키퍼 설정
- 데이터 복제 설정
 - 네임스페이스 열외 처리
 - 웹훅 설정
 
 - 쿠버네티스 환경에서 사용 가능한 그 외의 도구들
- Conftest
 - 테라폼에서 OPA 활용
 - opa-kafka-plugin
 - opa-envoy-plugin
 
 - 정리
 
 - OPA 게이트키퍼
 - 10장. OPA 확장
- OPA 내장 함수
- OPA 내장 함수 구현
 - OPA 내장 함수 통합
 
 - OPA 플러그인
- OPA 플러그인 구조
 - 플러그인 예제
 - 플러그인 버전 설정
 - 특별한 OPA 플러그인들
 
 - 정리
 
 - OPA 내장 함수
 - 11장. OPA와 웹 어셈블리
- OPA의 웹 어셈블리 활용
- 웹 어셈블리 개요
 - 웹 어셈블리 지원을 통해 기대할 수 있는 장점
 - OPA 웹 어셈블리를 사용하기 위한 요구사항
 - npm-opa-wasm을 통한 OPA 웹 어셈블리 모듈 적용
 
 - 자바를 위한 OPA 웹 어셈블리 SDK 작성
- 웹 어셈블리 SDK 요구사항
 - 자바 SDK 인터페이스 정의
 - 웹 어셈블리 런타임 연동
 - SDK API 구현
 - OPA 웹 어셈블리 자바 SDK 사용 예제
 
 - OPA 웹 어셈블리 SDK와 내장 함수
- SDK에서 구현해야 할 내장 함수 확인
 - SDK를 통해 호출할 내장 함수 목록 초기화
 - 내장 함수 구현 예시
 - 사용자 내장 함수 구현
 
 - 정리
 
 - OPA의 웹 어셈블리 활용
 


