액세스 제어의 개요

액세스 제어 권한에 따라 Snowflake의 특정 오브젝트에 액세스하고 작업을 수행할 수 있는 사용자가 결정됩니다.

이 항목의 내용:

액세스 제어 프레임워크

Snowflake는 다음 두 모델을 결합하는 방식으로 액세스 제어를 수행합니다.

  • 사용자 지정 액세스 제어(DAC): 각 오브젝트에는 소유자가 있으며 소유자는 해당 오브젝트에 대한 액세스 권한을 부여할 수 있습니다.

  • 역할 기반 액세스 제어(RBAC): 액세스 권한은 역할에 할당되며, 이후에 사용자에게 할당됩니다.

Snowflake에서의 액세스 제어를 이해하기 위한 주요 개념은 다음과 같습니다.

  • 보안 오브젝트: 액세스 권한이 부여될 수 있는 엔터티입니다. 권한 부여에 의해 허용되는 경우를 제외하고, 액세스가 거부됩니다.

  • 역할: 권한이 부여될 수 있는 엔터티입니다. 이후에 사용자에게 역할이 할당됩니다. 역할을 다른 역할에 할당하여 역할 계층 구조를 생성하는 것도 가능하다는 점에 유의하십시오.

  • 권한: 오브젝트에 대한 정의된 액세스 수준입니다. 여러 고유 권한을 사용하여 부여된 액세스를 세밀하게 제어할 수 있습니다.

  • 사용자: 사람 또는 프로그램과의 연결 여부와 관계없이, Snowflake에서 인식하는 사용자 ID입니다.

Snowflake 모델에서는 역할에 할당된 권한을 통해 보안 오브젝트에 액세스할 수 있습니다. 그런 다음, 이러한 권한은 다른 역할이나 사용자에게 할당됩니다. 또한, 각 보안 오브젝트에는 다른 역할에 대한 액세스 권한을 부여할 수 있는 소유자도 있습니다. 이 모델은 사용자 기반 액세스 제어 모델(권리와 권한이 각 사용자 또는 사용자 그룹에 할당됨)과 다릅니다. Snowflake 모델은 상당한 제어 및 유연성을 모두 제공하도록 설계되었습니다.

Access control relationships

보안 오브젝트

모든 보안 오브젝트는 컨테이너 계층 구조의 논리적 컨테이너 내에 위치합니다. 최상위 컨테이너는 고객 조직입니다. 테이블, 뷰, 함수 및 스테이지 등의 보안 오브젝트는 스키마 오브젝트에 포함되고 차례로 데이터베이스에 포함됩니다. Snowflake 계정의 모든 데이터베이스는 계정 오브젝트에 포함되어 있습니다. 이러한 오브젝트 및 컨테이너 계층 구조는 다음과 같습니다.

Hierarchy of securable database objects

오브젝트를 소유 한다는 말은 역할 이 오브젝트에 대한 OWNERSHIP 권한 을 갖는다는 것을 의미합니다. 각 보안 오브젝트는 단일 역할이 소유하여, 이는 오브젝트를 생성하기 위해 사용되는 기본적인 역할입니다. 이 역할이 사용자에게 할당되면 사실상 사용자에게 오브젝트에 대한 공유 제어가 제공됩니다. 일반적인 스키마에서 소유 역할은 오브젝트에 대한 권한을 다른 역할 부여 또는 취소 기능 등 기본적으로 오브젝트에 대한 모든 권한을 보유합니다. 또한, 소유권은 한 역할에서 다른 역할로 이전이 가능합니다. 그러나 관리형 액세스 스키마 의 경우 오브젝트 소유자는 권한 부여와 관련한 결정을 할 수 없습니다. 스키마 소유자(즉, 스키마에 대한 OWNERSHIP 권한을 가진 역할) 또는 MANAGE GRANTS 권한을 가진 역할만 스키마의 오브젝트에 대한 권한을 부여할 수 있습니다.

오브젝트에 대한 SQL 작업을 수행하는 기능은 사용자 세션에서 활성 역할에 부여된 권한에 의해 정의됩니다. 다음은 Snowflake의 다양한 오브젝트에서 사용할 수 있는 SQL 작업의 예입니다.

  • 웨어하우스 생성 권한.

  • 스키마에 포함된 테이블 나열 권한.

  • 테이블에 데이터 추가 권한.

역할

역할은 보안 오브젝트에 대한 권한 을 부여 및 취소할 수 있는 엔터티입니다. 사용자에게는 역할이 할당되어 조직의 비즈니스 기능에 필요한 작업을 수행할 수 있습니다. 사용자에게는 여러 역할이 할당될 수 있습니다. 이를 통해 사용자는 역할을 전환(즉, 현재 Snowflake 세션에서 활성화 상태의 역할 선택)하여 별도의 권한 세트로 다른 작업을 수행할 수 있습니다.

Snowflake 계정에는 몇 개의 시스템 정의 역할 이 있습니다. 시스템 정의 역할은 삭제할 수 없습니다. 또한, Snowflake가 이러한 역할에 부여한 권한도 취소할 수 없습니다.

필요한 권한이 있는 역할이 부여된 사용자는 특정 비즈니스 및 보안 요구 사항을 충족하는 사용자 지정 역할을 생성할 수 있습니다.

역할을 다른 역할에 부여하여 역할 계층 구조를 생성할 수도 있습니다. 역할과 관련된 권한은 계층 구조에서 해당 역할의 상위로부터 상속됩니다. 역할 계층 및 권한 상속에 대한 자세한 내용은 이 항목의 역할 계층 및 권한 상속 을 참조하십시오.

참고

역할 소유자(즉, 역할에 대한 OWNERSHIP 권한이 있는 역할)는 소유한 역할의 권한을 상속하지 않습니다. 권한 상속은 역할 계층 내에서만 가능합니다.

시스템 정의 역할에 추가 권한을 부여하는 것은 가능하지만, 이는 권장되지 않습니다. 시스템 정의 역할은 계정 관리와 관련된 권한을 사용하여 생성됩니다. 가장 좋은 방법은 동일한 역할에서 계정 관리 권한과 엔터티별 권한을 함께 사용하지 않는 것입니다. 추가 권한이 필요한 경우에는 사용자 지정 역할에 추가 권한을 부여한 후 시스템 정의 역할에 사용자 지정 역할을 할당하는 것이 좋습니다.

활성 역할

활성 역할 은 세션에서 사용자가 취한 모든 조치 사항에 대한 권한 부여의 소스 역할을 합니다. 기본 역할과 모든 보조 역할 은 모두 사용자 세션에서 활성화할 수 있습니다.

역할은 다음 방법 중 하나로 활성 역할이 됩니다.

  • 세션이 처음 설정될 때 사용자의 기본 역할과 기본 보조 역할이 각각 세션 기본 역할과 보조 역할로 활성화됩니다.

    세션을 설정하는 데 사용되는 클라이언트 연결 속성은 사용할 기본 역할 또는 보조 역할을 명시적으로 재정의할 수 있습니다.

  • USE ROLE 또는 USE SECONDARY ROLES 문을 실행하면 각각 다른 기본 역할 또는 보조 역할이 활성화됩니다. 이러한 역할은 어느 한 명령이 다시 실행되는 경우 세션이 진행되는 과정에서 바뀔 수 있습니다.

시스템 정의 역할

ORGADMIN

(즉, 조직 관리자)

조직 수준에서 운영을 관리하는 역할. 보다 구체적으로 살펴보면, 이 역할은:

ACCOUNTADMIN

(즉, 계정 관리자)

SYSADMIN 및 SECURITYADMIN 시스템 정의 역할을 캡슐화하는 역할입니다. 시스템의 최상위 역할이며 계정에서 제한/통제된 수의 사용자에게만 부여되어야 합니다.

SECURITYADMIN

(즉, 보안 관리자)

모든 오브젝트 권한 부여를 전역적으로 관리하고 사용자 및 역할을 생성, 모니터링 및 관리할 수 있는 역할입니다. 보다 구체적으로 살펴보면, 이 역할은:

  • 취소 등 모든 권한 부여를 수정할 수 있는 MANAGE GRANTS 보안 권한이 부여됩니다.

  • 시스템 역할 계층 구조를 통해 USERADMIN 역할의 권한을 상속합니다(즉, USERADMIN 역할이 SECURITYADMIN에 부여됨).

USERADMIN

(즉, 사용자 및 역할 관리자)

사용자 및 역할 관리만을 수행하는 역할입니다. 보다 구체적으로 살펴보면, 이 역할은:

  • CREATE USER 및 CREATE ROLE 보안 권한이 부여됩니다.

  • 계정에서 사용자 및 역할을 생성할 수 있습니다.

    이 역할은 자신이 소유한 사용자 및 역할을 관리할 수도 있습니다. 오브젝트에 대한 OWNERSHIP 권한을 보유한 역할(즉, 사용자 또는 역할) 이상의 역할만 오브젝트 속성을 수정할 수 있습니다.

SYSADMIN

(즉, 시스템 관리자)

계정에서 웨어하우스 및 데이터베이스(및 기타 오브젝트)의 생성 권한이 있는 역할입니다.

권장 사항 에서와 같이, 모든 사용자 지정 역할을 SYSADMIN 역할에 할당하는 역할 계층 구조를 생성하는 경우 이 역할은 웨어하우스, 데이터베이스 및 기타 오브젝트에 대한 권한을 다른 역할에 부여할 수도 있습니다.

PUBLIC

모든 사용자와 계정의 모든 역할에 자동으로 부여되는 의사 역할입니다. 다른 역할과 마찬가지로 PUBLIC 역할도 보안 오브젝트를 소유할 수 있지만, 역할이 소유한 오브젝트는 정의에 따라 계정 내의 다른 모든 사용자 및 역할이 사용할 수 있습니다.

일반적으로 이 역할에는 명시적 액세스 제어가 필요하지 않으며, 액세스 권한과 관련하여 모든 사용자가 동등한 것으로 간주되는 경우에 사용됩니다.

사용자 지정 역할

사용자 정의 역할(즉, 시스템 정의 역할이 아닌 역할)은 USERADMIN 권한이 부여된 역할 또는 그 이상의 역할뿐만 아니라 CREATE ROLE 역할에 의해 생성될 수 있습니다. 기본적으로, 새로 생성된 역할은 사용자에게 할당되거나 다른 역할에 권한이 부여되지 않습니다.

시스템에서 보안 오브젝트의 소유자 역할을 수행할 역할을 생성할 때 Snowflake는 SYSADMIN 시스템 역할에 할당된 최상위 사용자 지정 역할을 사용하여 사용자 지정 역할 계층 구조를 생성하는 것을 권장합니다. 이러한 역할 구조를 통해 시스템 관리자는 웨어하우스 및 데이터베이스 오브젝트 등 계정 내의 모든 오브젝트를 관리할 수 있으며 사용자 및 역할 관리는 USERADMIN 역할로 제한됩니다.

반대로, 역할 계층 구조를 통해 사용자 지정 역할이 SYSADMIN에 할당되지 않으면 시스템 관리자는 해당 역할이 소유한 오브젝트를 관리할 수 없습니다. MANAGE GRANTS 권한이 부여된 역할만(기본적으로 SECURITYADMIN 역할만) 오브젝트를 살펴보고 액세스 권한을 수정할 수 있습니다.

사용자 지정 역할 생성 방법은 사용자 지정 역할 만들기 섹션을 참조하십시오.

권한

각 보안 오브젝트에는 부여할 수 있는 권한 세트가 있습니다. 기존 오브젝트의 경우 개별 오브젝트에 대한 권한(예: mytable 테이블에 대한 SELECT 권한)이 부여되어야 합니다. 권한 부여 관리를 간소화하기 위해, 향후 권한 부여 를 사용하면 스키마에서 생성된 오브젝트에 대한 초기 권한 세트(즉, 특정 역할에 myschema 스키마에서 생성된 모든 테이블에 대한 SELECT 권한 부여)를 정의할 수 있습니다.

권한은 GRANT <권한> … TO ROLEREVOKE <권한> … FROM ROLE 명령을 사용하여 관리할 수 있습니다.

  • 일반(즉, 비관리형) 스키마에서 이러한 명령의 사용은 오브젝트를 소유하는 역할(즉, 오브젝트에 대한 OWNERSHIP 권한 보유) 또는 오브젝트에 대한 MANAGE GRANTS 전역 권한을 보유한 모든 역할(기본적으로 SECURITYADMIN 역할만)로 제한됩니다.

  • 관리형 액세스 스키마 의 경우 오브젝트 소유자가 권한 부여와 관련한 결정을 할 수 없습니다. 스키마 소유자 또는 MANAGE GRANTS 권한이 있는 역할만 스키마의 오브젝트에 대한 권한(향후 자동 권한 부여 포함)을 부여할 수 있으므로 권한을 중앙에서 체계적으로 관리할 수 있습니다.

전역 MANAGE GRANTS 권한을 보유하는 역할은 현재(부여자) 역할에 추가 권한을 부여할 수 있습니다.

자세한 내용은 액세스 제어 권한 섹션을 참조하십시오.

역할 계층 구조 및 권한 상속

다음 다이어그램은 추가적인 사용자 정의 역할에 권장되는 구조와 함께 시스템 정의 역할의 계층 구조를 보여줍니다.

../_images/system-role-hierarchy.png

참고

ORGADMIN은 조직 수준에서 운영을 관리하는 별도의 시스템 역할입니다. 이 역할은 시스템 역할의 계층 구조에 포함되지 않습니다.

역할 계층 구조 및 권한 상속에 대한 보다 자세한 예는 다음 시나리오를 살펴보십시오.

  • 역할 3의 권한이 역할 2에 부여되었습니다.

  • 역할 2의 권한이 역할 1에 부여되었습니다.

  • 역할 1의 권한이 사용자 1에 부여되었습니다.

Privilege inheritance for granted roles

이 시나리오에서:

  • 역할 2는 권한 C를 상속합니다.

  • 역할 1은 권한 B 및 C를 상속합니다.

  • 사용자 1에는 모두 3개의 권한이 있습니다.

적용 모델: 기본 역할 및 보조 역할

모든 활성 사용자 세션에는 기본 역할 이라고도 하는 《현재 역할》이 있습니다. 세션이 시작되면(예: 사용자가 JDBC/ODBC를 통해 연결하거나 Snowflake 웹 인터페이스에 로그인) 현재 역할은 다음 기준에 따라 결정됩니다.

  1. 역할이 연결의 일부로 지정되고 해당 역할이 연결 사용자에게 이미 권한이 부여된 역할인 경우 지정된 역할이 현재 역할이 됩니다.

  2. 역할이 지정되지 않고 연결 사용자에 기본 역할이 설정된 경우 해당 역할이 현재 역할이 됩니다.

  3. 역할이 지정되지 않고 연결 사용자에 기본 역할이 설정되지 않은 경우 시스템 역할 PUBLIC이 현재 역할이 됩니다.

또한 사용자 세션에서 일련의 보조 역할을 활성화할 수도 있습니다. 사용자는 기본 역할과 보조 역할에 부여된 집계 권한을 사용하여 세션의 오브젝트에 대한 SQL 작업을 수행할 수 있습니다. 먼저 사용자에게 역할을 부여해야 세션에서 역할을 활성화할 수 있습니다. 한 세션에는 한 번에 정확히 하나의 활성 기본 역할이 있어야 하지만, 보조 역할은 몇 개든 동시에 활성화할 수 있습니다.

CREATE <오브젝트> 문 실행 인증은 기본 역할에서만 제공됩니다. 오브젝트 생성 시, 그 소유권은 현재 활성 상태의 기본 역할로 설정됩니다. 하지만 다른 모든 SQL 작업의 경우, 활성 기본 역할 또는 보조 역할에 부여된 권한을 사용하여 작업을 인증할 수 있습니다. 예를 들어 보조 역할 계층 구조의 역할이 오브젝트를 소유하는 경우(즉, 오브젝트에 대한 OWNERSHIP 권한이 있는 경우), 보조 역할이 오브젝트에 대한 모든 DDL 작업 수행을 인증합니다. 기본 역할뿐 아니라 모든 보조 역할도 역할 계층 구조에서 더 낮은 역할로부터 권한을 상속합니다.

Primary and Secondary Role Operations

보안 모델에 많은 역할이 포함되어 있고 각각의 역할이 권한을 통해 인증이 세분화되어 있는 조직의 경우, 보조 역할 사용으로 역할 관리가 단순화됩니다. 사용자에게 부여된 모든 역할을 한 세션에서 활성화할 수 있습니다. 보조 역할은 데이터베이스 간 조인과 같은 SQL 작업에 특히 유용한데, 이런 역할이 없다면 각 데이터베이스의 오브젝트에 대한 액세스 권한을 가진 역할의 상위 역할을 만들어야 했을 것입니다.

세션이 진행되는 동안 사용자는 USE ROLE 또는 USE SECONDARY ROLES 명령을 사용하여 현재의 기본 역할이나 보조 역할을 각각 변경할 수 있습니다. 사용자는 CURRENT_SECONDARY_ROLES 함수를 사용하여 현재 세션에 대한 모든 활성 보조 역할을 표시할 수 있습니다.

사용자가 오브젝트를 만들려고 할 때 Snowflake는 오브젝트를 만드는 데 필요한 권한과 사용자 세션에서 현재 역할이 사용할 수 있는 권한을 비교합니다. 사용자가 시도한 다른 SQL 작업의 경우, Snowflake는 현재 기본 역할 보조 역할에 사용할 수 있는 권한을 대상 오브젝트에서 작업을 실행하는 데 필요한 권한과 비교합니다. 오브젝트에 대한 필수 권한이 세션에 있으면 작업이 허용됩니다.

참고

Snowflake에는 인증 확인을 우회할 수 있는 《수퍼 사용자》 또는 《수퍼 역할》이라는 개념이 없습니다. 모든 액세스에는 적절한 액세스 권한이 필요합니다.

맨 위로 이동