접근 제어
접근 제어
일반적으로 사용 가능(GA) — 정부 리전에서는 사용할 수 없어요.
이 섹션은 Snowflake Open Catalog에서 접근 제어가 작동하는 방식에 대한 정보를 제공해요.
Open Catalog는 Open Catalog 관리자가 카탈로그 역할에 접근 권한을 할당한 다음 카탈로그 역할을 보안 주체 역할에 할당해 서비스 주체에 리소스 접근을 부여하는 RBAC(역할 기반 접근 제어) 모델을 사용해요.
Open Catalog의 접근 제어를 이해하는 핵심 개념은 다음과 같아요:
- 보안 가능 객체(Securable object)
- 보안 주체 역할(Principal role)
- 커스텀 역할(Custom role)
- 카탈로그 역할(Catalog role)
- 권한(Privilege)
출처: Access control
본문
보안 가능 객체
보안 가능 객체는 접근이 부여될 수 있는 객체예요. Open Catalog에는 다음 보안 가능 객체가 있어요:
- 카탈로그
- 네임스페이스
- Iceberg 테이블
- 뷰
Open Catalog의 RBAC 모델은 세밀해요. 즉, 전체 카탈로그 또는 카탈로그 내 네임스페이스, 테이블, 뷰에 권한을 부여할 수 있어요. 네임스페이스에 권한을 부여한다면 그 아래에 그룹화된 테이블과 그 아래에 중첩된 하위 네임스페이스나 테이블도 보호할 수 있어요.
보안 주체 역할
보안 주체 역할은 Open Catalog의 리소스로, Open Catalog 서비스 주체를 논리적으로 그룹화하고 보안 가능 객체에 대한 권한을 부여하는 데 사용할 수 있어요.
Open Catalog는 서비스 주체와 보안 주체 역할 사이의 다대일 관계를 지원해요. 예를 들어 여러 서비스 주체에 같은 권한을 부여하려면 그 서비스 주체들에 단일 보안 주체 역할을 부여할 수 있어요. 서비스 주체에는 보안 주체 역할 하나만 부여할 수 있어요. 서비스 연결을 등록할 때 Open Catalog 관리자는 서비스 주체에 부여되는 보안 주체 역할을 지정해요.
보안 주체 역할에 직접 권한을 부여하지 않아요. 대신 카탈로그 역할 수준에서 객체 권한을 구성한 다음 보안 주체 역할에 카탈로그 역할을 부여해요.
다음 표는 Open Catalog에서 구성할 수 있는 보안 주체 역할 예시를 보여줘요:
| 보안 주체 역할 이름 | 설명 |
|---|---|
| Data_engineer | 데이터 엔지니어링 작업을 실행하기 위해 여러 서비스 주체에 부여되는 역할. |
| Data_scientist | 데이터 과학 또는 AI 작업을 실행하기 위해 여러 서비스 주체에 부여되는 역할. |
커스텀 역할
커스텀 역할은 보안 주체 역할과 비슷하지만 몇 가지 차이가 있어요. 커스텀 역할도 Open Catalog의 리소스예요. 커스텀 역할은 다음 목적에 사용할 수 있어요:
- Snowflake CLI를 통해 만든 Open Catalog 서비스 주체를 논리적으로 그룹화. Open Catalog는 이러한 서비스 주체와 커스텀 역할 사이의 다대일 관계를 지원해요. 이 서비스 주체를 사용해 External OAuth로 Open Catalog에 연결해요.
- 키 페어 인증을 위해 Snowflake CLI를 통해 만든 Open Catalog 사용자를 논리적으로 그룹화. Open Catalog는 이러한 사용자와 커스텀 역할 사이의 다대일 관계를 지원해요. 이 서비스 주체를 사용해 키 페어 인증으로 Open Catalog에 연결해요.
커스텀 역할을 만들려면 Snowflake CLI를 사용해야 해요.
보안 주체 역할과 마찬가지로 커스텀 역할에 직접 권한을 부여하지 않아요. 대신 카탈로그 역할 수준에서 객체 권한을 구성한 다음 커스텀 역할에 카탈로그 역할을 부여해요.
Open Catalog UI를 통해 만든 서비스 주체에는 커스텀 역할을 부여할 수 없어요. 즉, 서비스 연결을 구성할 때 서비스 연결의 서비스 주체에 커스텀 역할을 부여할 수 없어요. 하지만 커스텀 역할에 카탈로그 역할을 부여하면 커스텀 역할이 Open Catalog UI의 ASSIGNED TO PRINCIPAL ROLES 열에 나타나요.
카탈로그 역할
카탈로그 역할은 Open Catalog의 특정 카탈로그 리소스에 속하며, 카탈로그 네임스페이스나 테이블 같은 카탈로그 내 객체 또는 카탈로그에 대한 동작의 권한 집합을 지정해요. 카탈로그에 대해 하나 이상의 카탈로그 역할을 만들 수 있어요.
카탈로그 역할에 권한을 부여한 다음 카탈로그 역할을 보안 주체 역할에 부여해 하나 이상의 서비스 주체에 권한을 내려줘요.
서비스 주체에 내려진 권한을 업데이트하면 업데이트가 최대 1시간 동안 적용되지 않아요. 즉, 카탈로그에 대한 일부 권한을 철회하거나 부여하면 업데이트된 권한이 해당 카탈로그에 접근 권한이 있는 어떤 서비스 주체에도 최대 1시간 동안 적용되지 않아요.
Open Catalog는 카탈로그 역할과 보안 주체 역할 사이의 다대다 관계도 지원해요. 같은 카탈로그 역할을 하나 이상의 보안 주체 역할에 부여할 수 있어요. 마찬가지로 보안 주체 역할에는 하나 이상의 카탈로그 역할을 부여할 수 있어요.
다음 표는 Open Catalog에서 구성할 수 있는 카탈로그 역할 예시를 보여줘요:
| 예제 카탈로그 역할 | 설명 |
|---|---|
| Catalog administrators | 카탈로그에 대한 전체 접근을 모방하기 위해 여러 권한이 부여된 역할. 이 역할이 부여된 보안 주체 역할은 카탈로그에서 테이블을 만들고, 변경하고, 읽고, 쓰고, 삭제할 수 있음. |
| Catalog readers | 카탈로그의 테이블에 대한 읽기 전용 권한이 부여된 역할. 이 역할이 부여된 보안 주체 역할은 카탈로그의 테이블에서 읽을 수 있음. |
| Catalog contributor | 카탈로그에 속한 모든 테이블에 대한 읽기 및 쓰기 접근 권한이 부여된 역할. 이 역할이 부여된 보안 주체 역할은 카탈로그의 테이블에 대해 읽기 및 쓰기 작업을 수행할 수 있음. |
사용자 역할
사용자는 Open Catalog 웹 인터페이스에 로그인해 Open Catalog 계정을 관리하는 사람이에요. 하지만 사용자가 계정을 관리하려면 먼저 최소한 하나의 사용자 역할이 부여돼야 해요. 사용자에게 부여할 수 있는 사용자 역할은 서비스 관리자(service admin)와 카탈로그 관리자(catalog admin)예요.
서비스 관리자 역할
서비스 관리자 역할은 사용자가 몇 가지 예외를 제외하고 전체 계정을 관리할 수 있게 해요.
허용 권한
서비스 관리자 권한이 있는 사용자는 서비스 관리자예요. 서비스 관리자는 계정에서 다음 작업을 수행할 수 있어요:
- 서비스 연결 만들기.
- 네트워크 정책 사용.
- 사용자 관리: 사용자 만들기 및 삭제, 사용자에게 역할 부여, 사용자에게서 역할 철회.
- 카탈로그 만들기 및 만든 카탈로그 관리.
서비스 관리자가 카탈로그를 만들면 카탈로그에 대한 카탈로그 관리자 역할도 자동으로 부여돼요. 서비스 관리자는 카탈로그 관리자 권한이 있는 카탈로그에 대해 다음을 수행할 수 있어요:
- 다른 사용자에게 카탈로그에 대한 카탈로그 관리자 역할을 부여. 그 결과 두 사용자 모두 카탈로그에 접근할 수 있음.
- 카탈로그에 대한 자신의 카탈로그 관리자 권한을 철회해 카탈로그 접근을 상실. 하지만 카탈로그 관리자 권한을 철회하기 전에 먼저 다른 사용자에게 그 카탈로그에 대한 카탈로그 관리자 권한을 부여해야 함.
허용되지 않는 권한
서비스 관리자 권한이 있는 사용자는 계정에서 다음 작업을 수행할 수 없어요:
- 만들지 않은 카탈로그에 접근하거나 관리.
- 서비스 관리자가 만들지 않은 카탈로그에 카탈로그 관리자 권한 부여.
카탈로그 관리자 역할
카탈로그 관리자 역할은 사용자가 계정의 카탈로그를 관리할 수 있게 해요. 카탈로그 관리자 역할은 각 개별 카탈로그에 부여돼야 해요.
허용 권한
카탈로그 관리자 역할은 사용자에게 다음과 같이 카탈로그에 접근하고 관리할 권한을 부여해요:
- 카탈로그 접근.
- 카탈로그에서 네임스페이스 만들기.
- 카탈로그에서 카탈로그 역할을 만들고 그 역할에 권한 부여.
- 카탈로그 역할을 보안 주체 역할에 부여. 이는 서비스 주체에게 카탈로그 역할에 부여된 권한을 내려줌.
허용되지 않는 권한
카탈로그 관리자 권한만 있는 사용자는 계정에서 다음 작업을 수행할 수 없어요:
- 서비스 연결 만들기.
- 카탈로그 관리자 역할이 부여되지 않은 카탈로그에 접근하거나 관리.
- 카탈로그 만들기 또는 제거.
- 네트워크 정책 사용.
- 사용자 관리.
RBAC 모델
다음 다이어그램은 Open Catalog가 사용하는 RBAC 모델을 보여줘요. 각 카탈로그에 대해 Open Catalog 카탈로그 관리자는 카탈로그 역할에 접근 권한을 할당한 다음 카탈로그 역할을 보안 주체 역할에 부여해 서비스 주체에 리소스 접근을 부여해요. Open Catalog는 서비스 주체와 보안 주체 역할 사이의 다대일 관계를 지원해요.
- External OAuth 및 키 페어 인증의 경우 보안 주체 역할 대신 커스텀 역할이 사용돼요.
- 키 페어 인증의 경우 서비스 주체 대신 키 페어 인증 사용자가 사용돼요. 이 유형의 사용자는 액세스 토큰을 통해 프로그래매틱하게 Open Catalog에 연결해요. 사용자 이름과 비밀번호로 Open Catalog UI에 로그인하는 사람(휴먼) 사용자가 아니에요.
테이블이나 네임스페이스 수준에서도 접근 제어 권한을 부여할 수 있어요. 예를 들어 다음 다이어그램은 카탈로그 내 네임스페이스와 테이블에 권한을 부여하는 것을 보여줘요.
접근 제어 권한
이 섹션은 Open Catalog 접근 제어 모델에서 사용할 수 있는 권한을 설명해요. 권한은 카탈로그 역할에 부여되고, 카탈로그 역할은 보안 주체 역할에 부여되며, 보안 주체 역할은 서비스 주체에 부여되어 서비스 주체가 Open Catalog의 객체에서 수행할 수 있는 작업을 지정해요.
객체에 전체 권한 집합(drop, list, read, write 등)을 부여하려면 전체 권한(full privilege) 옵션을 사용할 수 있어요.
자세한 내용은 다음을 참조하세요:
Table Reader 같은 일반 카탈로그 역할의 권한 집합은 일반 카탈로그 역할의 권한 집합을 참조하세요.
카탈로그 권한
| 권한 | 설명 |
|---|---|
| CATALOG_MANAGE_CONTENT | 카탈로그 콘텐츠의 전체 관리를 활성화. 이 권한은 다음 권한을 포함함: CATALOG_MANAGE_METADATA, TABLE_FULL_METADATA, NAMESPACE_FULL_METADATA, VIEW_FULL_METADATA, TABLE_WRITE_DATA, TABLE_READ_DATA, CATALOG_READ_PROPERTIES, CATALOG_WRITE_PROPERTIES |
| CATALOG_MANAGE_METADATA | 카탈로그, 카탈로그 역할, 네임스페이스, 테이블의 전체 관리를 활성화. |
| CATALOG_READ_PROPERTIES | 카탈로그 나열과 카탈로그 속성 읽기를 활성화. |
| CATALOG_WRITE_PROPERTIES | 카탈로그 속성 구성을 활성화. |
| NAMESPACE_CREATE | 카탈로그에서 네임스페이스 만들기를 활성화. |
| NAMESPACE_DROP | 카탈로그에서 네임스페이스 삭제를 활성화. |
| NAMESPACE_FULL_METADATA | 모든 네임스페이스 권한을 부여. |
| NAMESPACE_LIST | 중첩 네임스페이스와 테이블을 포함해 네임스페이스의 모든 객체 나열을 활성화. |
| NAMESPACE_READ_PROPERTIES | 모든 네임스페이스 속성 읽기를 활성화. |
| NAMESPACE_WRITE_PROPERTIES | 네임스페이스 속성 구성을 활성화. |
| TABLE_CREATE | 카탈로그에 테이블 등록을 활성화. |
| TABLE_DROP | 카탈로그에서 테이블 삭제를 활성화. |
| TABLE_FULL_METADATA | 개별적으로 부여해야 하는 TABLE_READ_DATA와 TABLE_WRITE_DATA를 제외한 모든 테이블 권한을 부여. |
| TABLE_LIST | 카탈로그의 모든 테이블 나열을 활성화. |
| TABLE_READ_DATA | 카탈로그에서 단기간 유효한 읽기 전용 스토리지 자격 증명을 받아 테이블에서 데이터 읽기를 활성화. |
| TABLE_READ_PROPERTIES | 테이블의 속성 읽기를 활성화. |
| TABLE_WRITE_DATA | 카탈로그에서 단기간 유효한 읽기+쓰기 스토리지 자격 증명을 받아 테이블에 데이터 쓰기를 활성화. |
| TABLE_WRITE_PROPERTIES | 테이블에 대한 속성 구성을 활성화. |
| VIEW_CREATE | 카탈로그에 뷰 등록을 활성화. |
| VIEW_DROP | 카탈로그에서 뷰 삭제를 활성화. |
| VIEW_FULL_METADATA | 모든 뷰 권한을 부여. |
| VIEW_LIST | 카탈로그의 모든 뷰 나열을 활성화. |
| VIEW_READ_PROPERTIES | 모든 뷰 속성 읽기를 활성화. |
네임스페이스 권한
| 권한 | 설명 |
|---|---|
| CATALOG_MANAGE_CONTENT | 해당되는 경우 네임스페이스, 그 아래에 그룹화된 모든 테이블, 네임스페이스 아래에 중첩된 모든 네임스페이스와 테이블의 콘텐츠 전체 관리를 활성화. 이 권한은 전체 카탈로그에 부여되지 않음. 이 권한은 다음 권한을 포함함: CATALOG_MANAGE_METADATA, TABLE_FULL_METADATA, NAMESPACE_FULL_METADATA, VIEW_FULL_METADATA, TABLE_WRITE_DATA, TABLE_READ_DATA, CATALOG_READ_PROPERTIES, CATALOG_WRITE_PROPERTIES |
| CATALOG_MANAGE_METADATA | 네임스페이스, 카탈로그 역할, 그 아래에 그룹화된 모든 테이블 또는 그 아래에 중첩된 하위 네임스페이스나 테이블의 전체 관리를 활성화. |
| NAMESPACE_CREATE | 네임스페이스에서 하위 네임스페이스 만들기를 활성화. |
| NAMESPACE_DROP | 카탈로그에서 네임스페이스 삭제를 활성화. |
| NAMESPACE_FULL_METADATA | 네임스페이스의 모든 네임스페이스 권한을 부여. |
| NAMESPACE_LIST | 중첩 네임스페이스와 테이블을 포함해 네임스페이스의 모든 객체 나열을 활성화. |
| NAMESPACE_READ_PROPERTIES | 모든 네임스페이스 속성 읽기를 활성화. |
| NAMESPACE_WRITE_PROPERTIES | 네임스페이스 속성 구성을 활성화. |
| TABLE_CREATE | 네임스페이스에 테이블 등록을 활성화. |
| TABLE_DROP | 네임스페이스에서 테이블 삭제를 활성화. |
| TABLE_FULL_METADATA | 개별적으로 부여해야 하는 TABLE_READ_DATA와 TABLE_WRITE_DATA를 제외한 네임스페이스에 그룹화된 테이블의 모든 테이블 권한을 부여. |
| TABLE_LIST | 네임스페이스의 모든 테이블 나열을 활성화. |
| TABLE_READ_DATA | 카탈로그에서 단기간 유효한 읽기 전용 스토리지 자격 증명을 받아 네임스페이스 아래에 그룹화된 모든 테이블에서 데이터 읽기를 활성화. |
| TABLE_READ_PROPERTIES | 네임스페이스 아래에 그룹화된 모든 테이블의 속성 읽기를 활성화. |
| TABLE_WRITE_DATA | 카탈로그에서 단기간 유효한 읽기+쓰기 스토리지 자격 증명을 받아 네임스페이스에 그룹화된 모든 테이블에 데이터 쓰기를 활성화. |
| TABLE_WRITE_PROPERTIES | 네임스페이스 아래에 그룹화된 모든 테이블에 대한 속성 구성을 활성화. |
| VIEW_CREATE | 네임스페이스에 뷰 등록을 활성화. |
| VIEW_DROP | 네임스페이스에서 뷰 삭제를 활성화. |
| VIEW_FULL_METADATA | 네임스페이스의 모든 뷰에 대한 모든 뷰 권한을 부여. |
| VIEW_LIST | 네임스페이스의 모든 뷰 나열을 활성화. |
| VIEW_READ_PROPERTIES | 네임스페이스의 모든 뷰에 대한 모든 뷰 속성 읽기를 활성화. |
| VIEW_WRITE_PROPERTIES | 네임스페이스의 모든 뷰에 대한 뷰 속성 구성을 활성화. |
테이블 권한
| 권한 | 설명 |
|---|---|
| TABLE_DROP | 카탈로그에서 테이블 삭제를 활성화. |
| TABLE_FULL_METADATA | 개별적으로 부여해야 하는 TABLE_READ_DATA와 TABLE_WRITE_DATA를 제외한 모든 테이블 권한을 부여. |
| TABLE_LIST | 카탈로그의 모든 테이블 나열을 활성화. |
| TABLE_READ_DATA | 카탈로그에서 단기간 유효한 읽기 전용 스토리지 자격 증명을 받아 테이블에서 데이터 읽기를 활성화. |
| TABLE_READ_PROPERTIES | 테이블의 속성 읽기를 활성화. |
| TABLE_WRITE_DATA | 카탈로그에서 단기간 유효한 읽기+쓰기 스토리지 자격 증명을 받아 테이블에 데이터 쓰기를 활성화. |
| TABLE_WRITE_PROPERTIES | 테이블에 대한 속성 구성을 활성화. |
| VIEW_READ_PROPERTIES | 모든 뷰 속성 읽기를 활성화. |
뷰 권한
| 권한 | 설명 |
|---|---|
| VIEW_CREATE | 카탈로그에 뷰 등록을 활성화. |
| VIEW_DROP | 카탈로그에서 뷰 삭제를 활성화. |
| VIEW_LIST | 카탈로그의 모든 뷰 나열을 활성화. |
| VIEW_READ_PROPERTIES | 모든 뷰 속성 읽기를 활성화. |
| VIEW_WRITE_PROPERTIES | 뷰 속성 구성을 활성화. |
| VIEW_FULL_METADATA | 모든 뷰 권한을 부여. |
일반 카탈로그 역할의 권한 집합
| 카탈로그 역할 | 설명 | 권한 |
|---|---|---|
| table_reader | 테이블 정보를 읽고 테이블을 쿼리. | TABLE_LIST, TABLE_READ_PROPERTIES, TABLE_READ_DATA, TABLE_FULL_METADATA |
| catalog_writer | 테이블 만들기 및 삭제. | TABLE_CREATE, TABLE_DROP, TABLE_LIST, TABLE_READ_PROPERTIES, TABLE_WRITE_PROPERTIES, TABLE_READ_METADATA, TABLE_WRITE_METADATA, TABLE_FULL_METADATA |
| catalog_metadata_reader | 카탈로그 메타데이터 읽기. | NAMESPACE_LIST, NAMESPACE_READ_PROPERTIES, NAMESPACE_FULL_METADATA, CATALOG_READ_PROPERTIES |
RBAC 예제
다음 다이어그램은 카탈로그 수준에서 Open Catalog의 RBAC가 작동하는 방식을 보여주며 다음 사용자를 포함해요:
- Alice: Open Catalog에 가입한 서비스 관리자. Alice는 서비스 주체를 만들 수 있어요. 또한 카탈로그와 네임스페이스를 만들고 Open Catalog 리소스에 대한 접근 제어를 구성할 수 있어요.
Alice의 서비스 주체는 Open Catalog 사용자 인터페이스에 표시되지 않아요.
- Bob: Snowpipe Streaming(Snowflake 내)과 Apache Spark™ 연결을 사용해 Open Catalog와 상호작용하는 데이터 엔지니어.
Alice는 Bob을 위한 서비스 주체를 만들었어요. 여기에는 Data_engineer 보안 주체 역할이 부여됐고, 이 역할에는 다음 카탈로그 역할이 부여됐어요: Catalog contributor와 Data administrator(다음 다이어그램의 Silver 및 Gold 존 카탈로그 모두에 대해).
Catalog contributor 역할은 Bronze 존 카탈로그에서 네임스페이스와 테이블을 만들 권한을 부여해요. Data administrator 역할은 Silver 존 카탈로그와 Gold 존 카탈로그에 대한 전체 관리 권한을 부여해요.
- Mark: Snowflake AI 서비스를 사용해 Open Catalog와 상호작용하는 데이터 과학자.
Alice는 Mark를 위한 서비스 주체를 만들었어요. 여기에는 Data_scientist 보안 주체 역할이 부여됐고, 이 역할에는 Catalog reader라는 카탈로그 역할이 부여됐어요.
Catalog reader 역할은 Gold 존 카탈로그라는 카탈로그에 대한 읽기 전용 접근을 부여해요.