책 소개
요약
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의 웹 어셈블리 활용