SQL 저장소 백엔드용 권한 관리

SQL 저장소 백엔드용 권한 관리

이 문서는 SQL 저장소 백엔드를 사용할 때 권한을 설정하고 관리하는 안내를 사용자에게 제공하는 것을 목표로 해요.

출처: 문서

본문

소개

권한을 처리하기 위해 Helm은 Kubernetes의 RBAC 기능을 활용해요. SQL 저장소 백엔드를 사용할 때는 Kubernetes의 역할로는 사용자가 특정 리소스에 접근할 수 있는지 판단할 수 없어요. 이 문서는 이런 권한을 만들고 관리하는 방법을 보여 줘요.

초기화

Helm CLI가 데이터베이스에 처음 연결할 때, 클라이언트는 데이터베이스가 이전에 초기화됐는지 확인해요. 초기화되지 않았다면 필요한 설정을 자동으로 처리해요. 이 초기화는 public 스키마에 대한 admin 권한이 필요하며, 적어도 다음이 가능해야 해요:

  • 테이블 만들기

  • public 스키마에 권한 부여

데이터베이스에 마이그레이션을 실행한 후에는 모든 다른 역할도 클라이언트를 사용할 수 있어요.

PostgreSQL에서 일반 사용자에게 권한 부여

권한을 관리하기 위해 SQL 백엔드 드라이버는 PostgreSQL의 RLS(행 보안 수준, Row Security Level) 기능을 활용해요. RLS는 모든 사용자가 같은 테이블에서 읽기/쓰기를 할 수 있게 하면서, 명시적으로 허용되지 않은 같은 행을 조작할 수는 없게 해 줘요. 기본적으로 명시적으로 올바른 권한이 부여되지 않은 역할은 helm list를 실행할 때 항상 빈 목록을 반환하며, 클러스터에서 어떤 리소스도 검색하거나 수정할 수 없어요.

특정 역할에 특정 네임스페이스 접근 권한을 부여하는 방법을 볼게요:

CREATE POLICY <name> ON releases_v1 FOR ALL TO <role> USING (namespace = 'default');

이 명령은 namespace = 'default' 조건을 만족하는 모든 리소스를 읽고 쓸 수 있는 권한을 role 역할에 부여해요. 이 정책을 만든 후, role 역할을 대신해 데이터베이스에 연결한 사용자는 helm list를 실행할 때 default 네임스페이스에 있는 모든 릴리스를 볼 수 있고, 그것을 수정하고 삭제할 수도 있어요.

권한은 RLS로 세밀하게 관리할 수 있어요. 테이블의 서로 다른 열에 따라 접근을 제한하고 싶을 수도 있어요:

  • key

  • type

  • body

  • name

  • namespace

  • version

  • status

  • owner

  • createdAt

  • modifiedAt

더 알아보기 (Learn more)