액세스 제어의 개요¶
이 항목에서는 Snowflake의 주요 액세스 제어 항목에 대한 정보를 제공합니다.
이 항목의 내용:
액세스 제어 프레임워크¶
Snowflake는 다음 두 모델을 결합하는 방식으로 액세스 제어를 수행합니다.
사용자 지정 액세스 제어(DAC): 각 오브젝트에는 소유자가 있으며 소유자는 해당 오브젝트에 대한 액세스 권한을 부여할 수 있습니다.
역할 기반 액세스 제어(RBAC): 액세스 권한은 역할에 할당되며, 이후에 사용자에게 할당됩니다.
Snowflake에서의 액세스 제어를 이해하기 위한 주요 개념은 다음과 같습니다.
보안 오브젝트: 액세스 권한이 부여될 수 있는 엔터티입니다. 권한 부여에 의해 허용되는 경우를 제외하고, 액세스가 거부됩니다.
역할: 권한이 부여될 수 있는 엔터티입니다. 이후에 사용자에게 역할이 할당됩니다. 역할을 다른 역할에 할당하여 역할 계층 구조를 생성하는 것도 가능하다는 점에 유의하십시오.
권한: 오브젝트에 대한 정의된 액세스 수준입니다. 여러 고유 권한을 사용하여 부여된 액세스를 세밀하게 제어할 수 있습니다.
사용자: 사람 또는 프로그램과의 연결 여부와 관계없이, Snowflake에서 인식하는 사용자 ID입니다.
Snowflake 모델에서는 역할에 할당된 권한을 통해 보안 오브젝트에 액세스할 수 있습니다. 그런 다음, 이러한 권한은 사용자나 다른 역할에 할당됩니다. 역할을 다른 역할에 부여하면 이 항목의 역할 계층 구조 및 권한 상속 섹션에 설명되어 있는 역할 계층이 생성됩니다.
또한, 각 보안 오브젝트에는 다른 역할에 대한 액세스 권한을 부여할 수 있는 소유자도 있습니다. 이 모델은 사용자 기반 액세스 제어 모델(권리와 권한이 각 사용자 또는 사용자 그룹에 할당됨)과 다릅니다. Snowflake 모델은 상당한 제어 및 유연성을 모두 제공하도록 설계되었습니다.
보안 오브젝트¶
모든 보안 오브젝트는 컨테이너 계층 구조의 논리적 컨테이너 내에 위치합니다. 최상위 컨테이너는 고객 조직입니다. 테이블, 뷰, 함수 및 스테이지 등의 보안 오브젝트는 스키마 오브젝트에 포함되고 차례로 데이터베이스에 포함됩니다. Snowflake 계정의 모든 데이터베이스는 계정 오브젝트에 포함되어 있습니다. 이러한 오브젝트 및 컨테이너 계층 구조는 다음과 같습니다.
오브젝트를 소유 한다는 말은 역할 이 오브젝트에 대한 OWNERSHIP 권한 을 갖는다는 것을 의미합니다. 각 보안 오브젝트는 단일 역할이 소유하여, 이는 오브젝트를 생성하기 위해 사용되는 기본적인 역할입니다. 이 역할이 사용자에게 할당되면 사실상 사용자에게 오브젝트에 대한 공유 제어가 제공됩니다. GRANT OWNERSHIP 명령을 사용하면 오브젝트의 소유권을 한 역할에서 데이터베이스 역할을 포함한 다른 역할로 이전할 수 있습니다. 이 명령은 각 컨테이너의 보안 설정 가능한 오브젝트도 지정합니다.
일반적인 스키마에서 소유 역할은 오브젝트에 대한 권한을 다른 역할 부여 또는 취소 기능 등 기본적으로 오브젝트에 대한 모든 권한을 보유합니다. 또한, 소유권은 한 역할에서 다른 역할로 이전이 가능합니다. 그러나 관리형 액세스 스키마 의 경우 오브젝트 소유자는 권한 부여와 관련한 결정을 할 수 없습니다. 스키마 소유자(즉, 스키마에 대한 OWNERSHIP 권한을 가진 역할) 또는 MANAGE GRANTS 권한을 가진 역할만 스키마의 오브젝트에 대한 권한을 부여할 수 있습니다.
오브젝트에 대한 SQL 작업을 수행하는 기능은 사용자 세션에서 활성 역할에 부여된 권한에 의해 정의됩니다. 다음은 Snowflake의 다양한 오브젝트에서 사용할 수 있는 SQL 작업의 예입니다.
웨어하우스 생성 권한.
스키마에 포함된 테이블 나열 권한.
테이블에 데이터 추가 권한.
역할¶
역할은 보안 오브젝트에 대한 권한 을 부여 및 취소할 수 있는 엔터티입니다. 사용자에게는 역할이 할당되어 조직의 비즈니스 기능에 필요한 작업을 수행할 수 있습니다. 사용자에게는 여러 역할이 할당될 수 있습니다. 이를 통해 사용자는 역할을 전환(즉, 현재 Snowflake 세션에서 활성화 상태의 역할 선택)하여 별도의 권한 세트로 다른 작업을 수행할 수 있습니다.
Snowflake 계정에는 몇 개의 시스템 정의 역할 이 있습니다. 시스템 정의 역할은 삭제할 수 없습니다. 또한, Snowflake가 이러한 역할에 부여한 권한도 취소할 수 없습니다.
필요한 권한이 있는 역할이 부여된 사용자는 특정 비즈니스 및 보안 요구 사항을 충족하는 사용자 지정 역할을 생성할 수 있습니다.
역할을 다른 역할에 부여하여 역할 계층 구조를 생성할 수도 있습니다. 역할과 관련된 권한은 계층 구조에서 해당 역할의 상위로부터 상속됩니다. 역할 계층 및 권한 상속에 대한 자세한 내용은 이 항목의 역할 계층 및 권한 상속 을 참조하십시오.
참고
역할 소유자(즉, 역할에 대한 OWNERSHIP 권한이 있는 역할)는 소유한 역할의 권한을 상속하지 않습니다. 권한 상속은 역할 계층 내에서만 가능합니다.
시스템 정의 역할에 추가 권한을 부여하는 것은 가능하지만, 이는 권장되지 않습니다. 시스템 정의 역할은 계정 관리와 관련된 권한을 사용하여 생성됩니다. 가장 좋은 방법은 동일한 역할에서 계정 관리 권한과 엔터티별 권한을 함께 사용하지 않는 것입니다. 추가 권한이 필요한 경우에는 사용자 지정 역할에 추가 권한을 부여한 후 시스템 정의 역할에 사용자 지정 역할을 할당하는 것이 좋습니다.
역할의 유형¶
다음 역할 유형은 범위를 제외하면 본질적으로 같습니다. 두 유형 모두 관리자가 계정의 오브젝트에 대한 액세스 권한을 승인하고 제한할 수 있도록 합니다.
참고
제품 설명서에 명시된 경우를 제외하고 역할 이라는 용어는 각각의 유형을 모두 가리킵니다.
- 계정 역할:
계정의 모든 오브젝트에 대한 SQL 작업을 허용하려면 오브젝트에 대한 권한을 계정 역할에 부여하십시오.
- 데이터베이스 역할:
SQL 작업을 단일 데이터베이스와 데이터베이스의 오브젝트로 제한하려면 오브젝트에 대한 권한을 동일한 데이터베이스 의 데이터베이스 역할에 부여합니다.
세션에서 직접 데이터베이스 역할을 활성화 할 수 없습니다. 세션에서 활성화할 수 있는 계정 역할에 데이터베이스 역할을 부여합니다.
데이터베이스 역할에 대한 자세한 내용은 다음을 참조하십시오.
이 항목의 역할 계층 구조 및 권한 상속
이 항목의 데이터베이스 역할과 역할 계층 구조
공유 SNOWFLAKE 데이터베이스 의 데이터베이스 역할.
- 인스턴스 역할:
클래스 의 인스턴스에 대한 액세스를 허용하려면 계정 역할에 인스턴스 역할을 부여하십시오.
클래스에는 각 역할에 부여된 서로 다른 권한을 가진 하나 이상의 클래스 역할이 있을 수 있습니다. 클래스의 인스턴스가 생성되면 인스턴스 메서드에 대한 액세스 권한을 부여하기 위해 계정 역할에 인스턴스 역할을 부여할 수 있습니다.
세션에서 직접 인스턴스 역할을 활성화 할 수 없습니다. 세션에서 활성화할 수 있는 계정 역할에 인스턴스 역할을 부여합니다.
자세한 내용은 인스턴스 역할 섹션을 참조하십시오.
활성 역할¶
활성 역할 은 세션에서 사용자가 취한 모든 조치 사항에 대한 권한 부여의 소스 역할을 합니다. 기본 역할과 모든 보조 역할 은 모두 사용자 세션에서 활성화할 수 있습니다.
역할은 다음 방법 중 하나로 활성 역할이 됩니다.
세션이 처음 설정될 때 사용자의 기본 역할과 기본 보조 역할이 각각 세션 기본 역할과 보조 역할로 활성화됩니다.
세션을 설정하는 데 사용되는 클라이언트 연결 속성은 사용할 기본 역할 또는 보조 역할을 명시적으로 재정의할 수 있습니다.
USE ROLE 또는 USE SECONDARY ROLES 문을 실행하면 각각 다른 기본 역할 또는 보조 역할이 활성화됩니다. 이러한 역할은 어느 한 명령이 다시 실행되는 경우 세션이 진행되는 과정에서 바뀔 수 있습니다.
시스템 정의 역할¶
- ORGADMIN:
(즉, 조직 관리자)
조직 수준에서 운영을 관리하는 역할. 보다 구체적으로 살펴보면, 이 역할은:
조직에서 계정을 생성 할 수 있습니다.
(SHOW ORGANIZATION ACCOUNTS 를 사용하여) 조직의 모든 계정은 물론이고 (SHOW REGIONS 를 사용하여) 조직에 대해 활성화된 모든 리전을 볼 수 있습니다.
조직 전체의 사용 정보 를 볼 수 있습니다.
- ACCOUNTADMIN:
(즉, 계정 관리자)
SYSADMIN 및 SECURITYADMIN 시스템 정의 역할을 캡슐화하는 역할입니다. 시스템의 최상위 역할이며 계정에서 제한/통제된 수의 사용자에게만 부여되어야 합니다.
- SECURITYADMIN:
(즉, 보안 관리자)
모든 오브젝트 권한 부여를 전역적으로 관리하고 사용자 및 역할을 생성, 모니터링 및 관리할 수 있는 역할입니다. 보다 구체적으로 살펴보면, 이 역할은:
취소 등 모든 권한 부여를 수정할 수 있는 MANAGE GRANTS 보안 권한이 부여됩니다.
시스템 역할 계층 구조를 통해 USERADMIN 역할의 권한을 상속합니다(즉, USERADMIN 역할이 SECURITYADMIN에 부여됨).
- USERADMIN:
(즉, 사용자 및 역할 관리자)
사용자 및 역할 관리만을 수행하는 역할입니다. 보다 구체적으로 살펴보면, 이 역할은:
CREATE USER 및 CREATE ROLE 보안 권한이 부여됩니다.
계정에서 사용자 및 역할을 생성할 수 있습니다.
이 역할은 자신이 소유한 사용자 및 역할을 관리할 수도 있습니다. 오브젝트에 대한 OWNERSHIP 권한을 보유한 역할(즉, 사용자 또는 역할) 이상의 역할만 오브젝트 속성을 수정할 수 있습니다.
- SYSADMIN:
(즉, 시스템 관리자)
계정에서 웨어하우스 및 데이터베이스(및 기타 오브젝트)의 생성 권한이 있는 역할입니다.
권장 사항 에서와 같이, 모든 사용자 지정 역할을 SYSADMIN 역할에 할당하는 역할 계층 구조를 생성하는 경우 이 역할은 웨어하우스, 데이터베이스 및 기타 오브젝트에 대한 권한을 다른 역할에 부여할 수도 있습니다.
- PUBLIC:
모든 사용자와 계정의 모든 역할에 자동으로 부여되는 의사 역할입니다. 다른 역할과 마찬가지로 PUBLIC 역할도 보안 오브젝트를 소유할 수 있지만, 역할이 소유한 오브젝트는 정의에 따라 계정 내의 다른 모든 사용자 및 역할이 사용할 수 있습니다.
일반적으로 이 역할에는 명시적 액세스 제어가 필요하지 않으며, 액세스 권한과 관련하여 모든 사용자가 동등한 것으로 간주되는 경우에 사용됩니다.
사용자 지정 역할¶
CREATE ROLE 권한이 부여된 역할뿐 아니라 USERADMIN 역할(또는 그 이상의 역할)을 사용하여 사용자 지정 계정 역할 을 생성할 수 있습니다.
사용자 지정 데이터베이스 역할은 데이터베이스 소유자(즉, 데이터베이스에 대한 OWNERSHIP 권한이 있는 역할)가 생성할 수 있습니다.
기본적으로, 새로 생성된 역할은 사용자에게 할당되거나 다른 역할에 권한이 부여되지 않습니다.
시스템에서 보안 오브젝트의 소유자 역할을 수행할 역할을 생성할 때 Snowflake는 SYSADMIN 시스템 역할에 할당된 최상위 사용자 지정 역할을 사용하여 사용자 지정 역할 계층 구조를 생성하는 것을 권장합니다. 이러한 역할 구조를 통해 시스템 관리자는 웨어하우스 및 데이터베이스 오브젝트 등 계정 내의 모든 오브젝트를 관리할 수 있으며 사용자 및 역할 관리는 USERADMIN 역할로 제한됩니다.
반대로, 역할 계층 구조를 통해 사용자 지정 역할이 SYSADMIN에 할당되지 않으면 시스템 관리자는 해당 역할이 소유한 오브젝트를 관리할 수 없습니다. MANAGE GRANTS 권한이 부여된 역할만(기본적으로 SECURITYADMIN 역할만) 오브젝트를 살펴보고 액세스 권한을 수정할 수 있습니다.
사용자 지정 역할 생성 방법은 사용자 지정 역할 만들기 섹션을 참조하십시오.
권한¶
액세스 제어 권한에 따라 Snowflake의 특정 오브젝트에 액세스하고 작업을 수행할 수 있는 사용자가 결정됩니다. 각 보안 오브젝트에는 부여할 수 있는 권한 세트가 있습니다. 기존 오브젝트의 경우 개별 오브젝트에 대한 권한(예: mytable
테이블에 대한 SELECT 권한)이 부여되어야 합니다. 권한 부여 관리를 간소화하기 위해, 향후 권한 부여 를 사용하면 스키마에서 생성된 오브젝트에 대한 초기 권한 세트(즉, 특정 역할에 myschema
스키마에서 생성된 모든 새 테이블에 대한 SELECT 권한 부여)를 정의할 수 있습니다.
권한은 GRANT <권한> 및 REVOKE <권한> 명령을 사용하여 관리할 수 있습니다.
일반(즉, 비관리형) 스키마에서 이러한 명령의 사용은 오브젝트를 소유하는 역할(즉, 오브젝트에 대한 OWNERSHIP 권한 보유) 또는 오브젝트에 대한 MANAGE GRANTS 전역 권한을 보유한 모든 역할(기본적으로 SECURITYADMIN 역할만)로 제한됩니다.
관리형 액세스 스키마 의 경우 오브젝트 소유자가 권한 부여와 관련한 결정을 할 수 없습니다. 스키마 소유자 또는 MANAGE GRANTS 권한이 있는 역할만 스키마의 오브젝트에 대한 권한(향후 자동 권한 부여 포함)을 부여할 수 있으므로 권한을 중앙에서 체계적으로 관리할 수 있습니다.
전역 MANAGE GRANTS 권한을 보유하는 역할은 현재(부여자) 역할에 추가 권한을 부여할 수 있습니다.
자세한 내용은 액세스 제어 권한 섹션을 참조하십시오.
역할 계층 구조 및 권한 상속¶
다음 다이어그램에서는 시스템 정의 역할의 계층 구조는 물론이고, 추가적인 사용자 정의 계정 역할과 데이터베이스 역할에 대해 권장되는 구조도 보여줍니다. 예시 계층 구조에서 최상위 수준의 데이터베이스 역할은 사용자 지정(즉, 사용자 정의) 계정 역할에 부여됩니다. 결국, 이 역할은 시스템 정의 SYSADMIN 역할이 사용자 지정 계정 역할과 데이터베이스 역할의 권한을 상속할 수 있도록 허용하는 권장 구조에서 다른 사용자 지정 역할에 부여됩니다.
참고
ORGADMIN은 조직 수준에서 운영을 관리하는 별도의 시스템 역할입니다. 이 역할은 시스템 역할의 계층 구조에 포함되지 않습니다.
역할 계층 구조 및 권한 상속에 대한 보다 자세한 예는 다음 시나리오를 살펴보십시오.
역할 3의 권한이 역할 2에 부여되었습니다.
역할 2의 권한이 역할 1에 부여되었습니다.
역할 1의 권한이 사용자 1에 부여되었습니다.
이 시나리오에서:
역할 2는 권한 C를 상속합니다.
역할 1은 권한 B 및 C를 상속합니다.
사용자 1에는 모두 3개의 권한이 있습니다.
데이터베이스 역할과 역할 계층 구조¶
현재 데이터베이스 역할에 다음 제한 사항이 적용됩니다.
공유 에 데이터베이스 역할이 부여되면 해당 데이터베이스 역할에 다른 어떤 데이터베이스 역할도 부여할 수 없습니다. 예를 들어 데이터베이스 역할
d1.r1
이 공유에 부여된 경우에는 데이터베이스 역할d1.r2
를d1.r1
에 부여하려는 시도가 차단됩니다.그 밖에도, 다른 데이터베이스 역할에 데이터베이스 역할이 부여된 경우 피부여자 데이터베이스 역할을 공유에 부여할 수 없습니다.
계정 역할뿐 아니라 다른 데이터베이스 역할에도 공유에 부여된 데이터베이스 역할을 부여할 수 있습니다.
역할 계층 구조의 데이터베이스 역할에는 계정 역할을 부여할 수 없습니다.
기본 역할 및 보조 역할을 사용한 적용 모델¶
모든 활성 사용자 세션에는 기본 역할 이라고도 하는 “현재 역할”이 있습니다. 세션이 시작되면(예: 사용자가 JDBC/ODBC를 통해 연결하거나 Snowflake 웹 인터페이스에 로그인) 현재 역할은 다음 기준에 따라 결정됩니다.
역할이 연결의 일부로 지정되고 해당 역할이 연결 사용자에게 이미 권한이 부여된 역할인 경우 지정된 역할이 현재 역할이 됩니다.
역할이 지정되지 않고 연결 사용자에 기본 역할이 설정된 경우 해당 역할이 현재 역할이 됩니다.
역할이 지정되지 않고 연결 사용자에 기본 역할이 설정되지 않은 경우 시스템 역할 PUBLIC이 현재 역할이 됩니다.
또한 사용자 세션에서 일련의 보조 역할을 활성화할 수도 있습니다. 사용자는 기본 역할과 보조 역할에 부여된 집계 권한을 사용하여 세션의 오브젝트에 대한 SQL 작업을 수행할 수 있습니다. 먼저 사용자에게 역할을 부여해야 세션에서 역할을 활성화할 수 있습니다. 한 세션에는 한 번에 정확히 하나의 활성 기본 역할이 있어야 하지만, 보조 역할은 몇 개든 동시에 활성화할 수 있습니다.
참고
데이터베이스 역할은 기본 역할도, 보조 역할도 될 수 없습니다. 데이터베이스 역할에 부여된 권한을 맡으려면 계정 역할에 데이터베이스 역할을 부여하십시오. 세션에서는 계정 역할만 활성화 할 수 있습니다.
CREATE <오브젝트> 문 실행 인증은 기본 역할에서만 제공됩니다. 오브젝트 생성 시, 그 소유권은 현재 활성 상태의 기본 역할로 설정됩니다. 하지만 다른 모든 SQL 작업의 경우, 활성 기본 역할 또는 보조 역할에 부여된 권한을 사용하여 작업을 인증할 수 있습니다. 예를 들어 보조 역할 계층 구조의 역할이 오브젝트를 소유하는 경우(즉, 오브젝트에 대한 OWNERSHIP 권한이 있는 경우), 보조 역할이 오브젝트에 대한 모든 DDL 작업 수행을 인증합니다. 기본 역할뿐 아니라 모든 보조 역할도 역할 계층 구조에서 더 낮은 역할로부터 권한을 상속합니다.
보안 모델에 많은 역할이 포함되어 있고 각각의 역할이 권한을 통해 인증이 세분화되어 있는 조직의 경우, 보조 역할 사용으로 역할 관리가 단순화됩니다. 사용자에게 부여된 모든 역할을 한 세션에서 활성화할 수 있습니다. 보조 역할은 데이터베이스 간 조인과 같은 SQL 작업에 특히 유용한데, 이런 역할이 없다면 각 데이터베이스의 오브젝트에 대한 액세스 권한을 가진 역할의 상위 역할을 만들어야 했을 것입니다.
세션이 진행되는 동안 사용자는 USE ROLE 또는 USE SECONDARY ROLES 명령을 사용하여 현재의 기본 역할이나 보조 역할을 각각 변경할 수 있습니다. 사용자는 CURRENT_SECONDARY_ROLES 함수를 사용하여 현재 세션에 대한 모든 활성 보조 역할을 표시할 수 있습니다.
사용할 권한이 하나 이상 필요한 오브젝트를 생성하는 경우 해당 권한의 부여를 검색할 때 기본 역할과 직간접적으로 이 역할을 상속받는 역할만 고려됩니다.
하나 이상의 권한이 필요한 다른 모든 문의 경우(예: 테이블을 쿼리하려면 데이터베이스와 스키마에 대한 USAGE 권한과 함께 테이블에 대한 SELECT 권한이 필요함), 해당 권한 부여를 검색할 때 기본 역할, 보조 역할 그리고 상속되는 기타 모든 역할이 고려됩니다.
참고
Snowflake에는 인증 확인을 우회할 수 있는 “수퍼 사용자” 또는 “수퍼 역할”이라는 개념이 없습니다. 모든 액세스에는 적절한 액세스 권한이 필요합니다.