Kolla-Ansible 환경에서 Policy(RBAC) 커스텀 및 최적화
OpenStack을 프라이빗 클라우드로 운영하다 보면 기본 정책(Default Policy)만으로는 보안 요구사항을 충족하기 어려울 때가 많다. 예를 들어, 일반 사용자가 인스턴스의 특정 메타데이터를 보지 못하게 하거나, 치명적인 액션(Force Delete 등)을 관리자(Admin) 전용으로 제한해야 하는 경우다.
패키지 설치 방식(RDO, Packstack)에서는 /etc/nova/policy.yaml을 직접 수정하면 그만이지만, Kolla-Ansible과 같은 컨테이너 기반 배포 환경에서는 컨테이너 내부 파일을 직접 수정하는 것은 금물이다. (컨테이너가 재생성되면 초기화되기 때문)
시스템 엔지니어 관점에서 Kolla-Ansible의 Config Override 기능을 활용해 영구적이고 안전하게 정책을 튜닝하는 방법을 정리한다.
1. 작동 원리: Config Override
Kolla-Ansible은 배포 시 /etc/kolla/config/ 디렉터리 하위에 있는 설정 파일들을 컨테이너 내부의 설정 경로로 바인딩(Binding)하거나 복사한다.
우리는 이 경로에 각 서비스(Nova, Cinder, Keystone 등)별 policy.yaml (또는 policy.json) 파일을 생성하여, 기본 코드에 정의된 정책(Policy-in-Code) 위에 우리의 커스텀 정책을 덮어씌울(Override) 것이다.
2. Nova 'Force Delete' 권한 제한
기본적으로 os_compute_api:os-admin-actions:force_delete 정책은 관리자 권한을 요구하지만, 상황에 따라 특정 롤(Role)에 명시적으로 부여하거나 회수해야 할 수 있다. 여기서는 **"Force Delete 기능을 오직 'admin' 역할을 가진 사용자만 수행할 수 있도록 명시"**하는 예제를 다룬다.
2.1. 설정 디렉터리 생성
Kolla의 설정 오버라이드 경로는 /etc/kolla/config/<service_name>/이다. Nova용 디렉터리를 생성한다.
$ sudo mkdir -p /etc/kolla/config/nova
2.2. Policy 파일 작성
과거에는 전체 policy.json을 복사해 와서 수정했지만, 최신 OpenStack은 변경된 규칙만 적으면 되는 방식을 권장한다. YAML 포맷이 가독성이 좋으므로 policy.yaml을 사용한다.
$ sudo vi /etc/kolla/config/nova/policy.yaml
작성 내용:
# Force Delete를 오직 'admin' role을 가진 사용자에게만 허용
"os_compute_api:os-admin-actions:force_delete": "role:admin"
# (선택) 인스턴스 잠금(Lock) 기능을 관리자만 가능하게 변경하고 싶다면
"os_compute_api:os-admin-actions:lock": "role:admin"
"os_compute_api:os-admin-actions:unlock": "role:admin"
Tip: 현재 적용된 기본 정책을 확인하고 싶다면 컨테이너 내부에서 oslopolicy-policy-generator를 사용하거나, 해당 OpenStack 버전의 소스 코드를 참조해야 한다.3. 변경 사항 적용 (Reconfigure)
설정 파일 생성 후, Kolla-Ansible을 통해 변경된 설정을 컨테이너에 전파해야 한다. 전체 배포(deploy)가 아닌 reconfigure 명령어를 사용하면 서비스 중단을 최소화하며 설정만 갱신할 수 있다.
# 가상환경 활성화 (필요 시)
$ source /path/to/venv/bin/activate
# Nova 서비스에 대해서만 재설정 수행
$ kolla-ansible reconfigure -i ./multinode --tags nova
이 과정에서 Ansible은 다음 작업을 수행한다:
/etc/kolla/config/nova/policy.yaml감지- 해당 파일을 Nova 컨테이너의
/etc/nova/경로로 복사 - Nova Scheduler, Conductor, API, Compute 컨테이너 재시작 (Rolling Restart)
4. 검증 (Verification)
적용이 완료되었다면, 일반 사용자(Member Role)로 로그인하여 Force Delete 시도가 차단되는지 확인한다.
# 일반 유저 환경변수 로드
$ source openrc_member
# 강제 삭제 시도 (실패해야 정상)
$ openstack server delete --force <Instance-ID>
# 결과:
# 403 Forbidden: Policy doesn't allow os_compute_api:os-admin-actions:force_delete to be performed.
위와 같이 403 Forbidden 에러가 리턴된다면, 커스텀 정책이 정상적으로 오버라이드 되어 적용된 것이다.
5. 결론 및 주의사항
Kolla-Ansible 환경에서 정책을 수정할 때는 반드시 Host의 /etc/kolla/config 경로를 이용해야 한다. 이를 통해 IaC(Infrastructure as Code) 관점에서 설정을 관리할 수 있으며, 향후 OpenStack 업그레이드 시에도 설정이 유실되지 않는다.
- Syntax 주의: YAML/JSON 문법 오류 시 컨테이너가
Restarting상태에 빠질 수 있으므로, 적용 전 린터(Linter)로 문법을 체크하는 것이 좋다. - Service별 경로: Keystone은
/etc/kolla/config/keystone/, Cinder는/etc/kolla/config/cinder/등 서비스명을 정확히 맞춰야 한다.