액세스 제어 구성하기

이 항목에서는 계정의 보안 오브젝트 에 대한 액세스 제어 보안을 구성하는 방법에 대해 설명합니다.

이 항목의 내용:

계정 관리

추가 사용자를 계정 관리자로 지정하기

기본적으로 각 계정에는 계정 관리자로 지정된(즉, 사용자에게 시스템 정의 ACCOUNTADMIN 역할이 부여됨) 1명의 사용자가 있습니다. 1명 이상의 사용자를 계정 관리자로 지정하는 것이 좋습니다. 그러면 특히 계정 관리자 중 1명이 로그인할 수 없는 경우에도 사용자 계정에서 항상 1명 이상의 사용자가 계정 수준 작업을 수행할 수 있습니다.

이러한 추가 계정 관리자의 경우 새 사용자를 생성하거나 기존 사용자를 지정할 수 있지만, 다음이 지정되어야 합니다.

  • 사용자에게 ACCOUNTADMIN 역할을 부여하지만, 이 역할을 기본값으로 설정하지 마십시오. 대신, 하위 수준 관리 또는 사용자 지정 역할(예: SYSADMIN)을 기본값으로 지정해야 합니다. 이를 통해 계정 관리자가 실수로 ACCOUNTADMIN 역할을 사용하여 오브젝트를 생성하는 것이 방지됩니다.

  • 각 사용자에 이메일 주소가 지정되었는지 확인합니다(다단계 인증을 위해 필요).

예를 들어, ACCOUNTADMIN 및 SYSADMIN 역할을 기존 사용자인 user2 사용자에게 부여하고 SYSADMIN을 기본 역할로 지정합니다.

GRANT ROLE ACCOUNTADMIN, SYSADMIN TO USER user2;

ALTER USER user2 SET EMAIL='user2@domain.com', DEFAULT_ROLE=SYSADMIN;

각 계정 관리자에서 MFA 활성화하기

Snowflake 계정에서 최고 수준의 보안을 보장하려면 민감한 데이터를 수정하거나 살펴볼 수 있는 사용자는 로그인할 때 다단계 인증(MFA)을 사용하는 것이 매우 좋습니다.

이 권장 사항은 특히 ACCOUNTADMIN 역할의 사용자에게 적용되지만, SECURITYADMIN 및 SYSADMIN 역할의 사용자에게도 적용될 수 있습니다.

자세한 내용은 액세스 제어 고려 사항다단계 인증(MFA) 섹션을 참조하십시오.

사용자 지정 역할 만들기

《최소 권한》의 일반 원칙을 따르려면 조직의 비즈니스 기능과 일치 하는 사용자 지정 역할을 생성하여 좁은 보안 오브젝트 세트에 대한 SQL 작업을 허용하는 것이 좋습니다.

워크플로는 다음과 같습니다.

  1. 사용자 지정 역할을 만듭니다.

  2. 역할에 권한 세트를 부여합니다.

  3. 비즈니스 요구 사항에 따라 SQL 작업을 수행하기 위해 역할에 부여된 권한이 필요한 1명 이상의 사용자에게 역할을 부여합니다.

  4. 역할 계층을 생성하거나 추가하려면 다른 역할에 역할을 부여합니다. 필수는 아니지만 이 단계는 적극 권장됩니다. 자세한 내용은 이 항목의 역할 계층 구조 만들기 섹션을 참조하십시오.

이 섹션에서는 이름이 r1 인 역할을 만들고 역할에 다음 권한을 부여하는 방법에 대해 설명합니다. 권한을 통해 세션에서 역할을 활성화하는 사용자가 단일 테이블인 d1.s1.t1 을 쿼리할 수 있습니다.

권한

오브젝트

참고

USAGE

웨어하우스 w1

데이터베이스 d1

스키마 s1

오브젝트(예: 테이블 또는 뷰)를 쿼리하려면 웨어하우스에 대한 USAGE 권한이 역할에 있어야 합니다. 웨어하우스는 쿼리를 실행하기 위한 컴퓨팅 리소스를 제공합니다.

스키마의 모든 오브젝트에 대한 작업을 수행하려면 컨테이너 데이터베이스 및 스키마에 대한 USAGE 권한이 역할에 있어야 합니다.

SELECT

테이블 t1

역할이 생성된 후 역할이 있는 사용자가 동일한 오브젝트 또는 추가 오브젝트에 대한 추가 SQL 작업을 수행할 수 있도록 역할에 추가 권한을 부여할 수 있습니다.

역할 만들기

  1. CREATE ROLE 를 사용하여 r1 역할을 생성합니다.

    사용자 관리자(즉, USERADMIN 이상의 시스템 역할을 가진 사용자) 또는 계정에 대한 CREATE ROLE 권한이 있는 다른 역할만 역할을 만들 수 있습니다.

    CREATE ROLE r1
       COMMENT = 'This role has all privileges on schema_1';
    

역할에 권한 부여

  1. 이 섹션 앞부분의 테이블에 정의된 권한을 r1 역할에 부여합니다.

    SECURITYADMIN 시스템 역할은 오브젝트에 대한 권한을 역할에 부여하는 데 사용할 수 있습니다. 추가 옵션은 GRANT <권한> 섹션을 참조하십시오.

    GRANT USAGE
      ON WAREHOUSE w1
      TO ROLE r1;
    
    GRANT USAGE
      ON DATABASE d1
      TO ROLE r1;
    
    GRANT USAGE
      ON SCHEMA d1.s1
      TO ROLE r1;
    
    GRANT SELECT
      ON TABLE d1.s1.t1
      TO ROLE r1;
    

사용자에게 역할 부여

  1. smith 사용자에게 r1 역할을 할당합니다.

    SECURITYADMIN 역할은 사용자에게 역할을 부여하는 데 사용할 수 있습니다. 추가 옵션은 GRANT ROLE 섹션을 참조하십시오.

    GRANT ROLE r1
       TO USER smith;
    
  2. 선택 사항으로 새 사용자 지정 역할을 사용자의 기본 역할로 설정합니다. 다음에 사용자가 Snowflake에 로그인하면 기본 역할이 세션에서 자동으로 활성화됩니다.

    사용자에 대한 OWNERSHIP 권한을 가진 역할 또는 더 높은 역할만 이 명령을 실행할 수 있습니다..

    다음 명령은 사용자 smith 의 기본 역할을 설정합니다.

    ALTER USER smith
       SET DEFAULT_ROLE = r1;
    

사용자 지정 읽기 전용 역할 만들기

특정 스키마(예: d1.s1)의 모든 테이블 쿼리로 제한된 역할이 필요한 상황을 가정해 보겠습니다. 이 역할을 사용하여 명령을 실행하는 사용자는 테이블 데이터를 업데이트하거나 추가 데이터베이스 오브젝트를 생성하거나 테이블을 삭제할 수 없습니다. 이 역할은 테이블 데이터 쿼리로 제한됩니다.

읽기 전용 역할을 생성하려면 이 항목의 사용자 지정 역할 만들기 에서 설명되는 기본 단계를 완료하십시오. 역할에 권한 부여 섹션에서 읽기 전용 역할(이 지침의 경우 read_only)에 다음 오브젝트 권한을 부여합니다.

권한

오브젝트

참고

USAGE

웨어하우스

오브젝트(예: 테이블 또는 뷰)를 쿼리하려면 웨어하우스에 대한 USAGE 권한이 역할에 있어야 합니다. 웨어하우스는 쿼리를 실행하기 위한 컴퓨팅 리소스를 제공합니다.

SELECT

테이블

스키마의 모든 오브젝트에 대한 작업을 수행하려면 컨테이너 데이터베이스 및 스키마에 대한 USAGE 권한이 역할에 있어야 합니다.

GRANT <권한> 문은 다음과 같습니다.

GRANT USAGE
  ON DATABASE d1
  TO ROLE read_only;

GRANT USAGE
  ON SCHEMA d1.s1
  TO ROLE read_only;

GRANT SELECT
  ON ALL TABLES IN SCHEMA d1.s1
  TO ROLE read_only;

GRANT USAGE
  ON WAREHOUSE w1
  TO ROLE read_only;

참고

GRANT SELECT ON ALL TABLES IN SCHEMA <스키마> 문은 모든 기존 테이블에 대해서만 SELECT 권한을 부여합니다. 모든 향후 테이블에 대한 SELECT 권한을 역할에 부여하려면 다음 명령문을 실행합니다.

GRANT SELECT ON FUTURE TABLES IN SCHEMA d1.s1 TO ROLE read_only;

역할 계층 구조 만들기

사용자 지정 역할을 생성할 때 궁극적으로 상위 관리자 역할에 할당되는 역할 계층 구조를 생성하는 것이 좋습니다. 일반적으로 SYSADMIN 역할은 계층 구조에서 다른 모든 역할이 할당된 역할과 마찬가지로 원활하게 작동하지만, 충분한 권한이 있는 역할이 이 기능을 수행할 수 있다는 점에 유의하십시오. SYSADMIN 역할은 계정에서 웨어하우스, 데이터베이스 및 데이터베이스 오브젝트를 생성하고 이러한 권한을 다른 역할에 부여할 수 있는 권한이 있는 시스템 정의 역할입니다. 기본 시스템 계층에서 최상위 ACCOUNTADMIN 역할은 시스템 관리자 역할을 관리합니다.

두 번째 역할에 역할을 부여하여 역할 계층을 생성합니다. 그러면 두 번째 역할을 세 번째 역할에 부여할 수 있습니다. 역할과 관련된 권한은 계층 구조(즉, 상위 역할)에서 해당 역할의 상위로부터 상속됩니다.

다음 다이어그램은 역할 계층 구조와 각 역할에 부여된 권한의 예를 보여줍니다.

Role hierarchy and privileges granted to each role

다른 역할에 역할 부여

역할 계층에서 상위 수준 역할에 역할을 할당합니다. 이 예에서는 이 항목의 사용자 지정 역할 만들기 에서 생성한 r1 역할을 SYSADMIN에 할당합니다. SYSADMIN 역할은 r1 역할에 부여된 모든 오브젝트 권한을 상속합니다.

GRANT ROLE r1
   TO ROLE sysadmin;

참고

더 복잡한 예에서는 custom 역할을 SYSADMIN의 다른 하위 역할(또는 데이터베이스를 생성할 수 있는 충분한 권한이 있는 사용자 지정 역할 등 기타 관리자 역할)에 할당할 수 있습니다. SYSADMIN 역할은 custom 역할과 상위 역할에 할당된 결합된 권한을 상속합니다. 계층 구조에서 custom 상위의 역할이 오브젝트를 소유하는 경우 역할 계층 구조는 SYSADMIN 역할의 구성원도 해당 오브젝트를 (간접적으로) 소유하여 원활하게 관리할 수 있도록 합니다.

부여된 권한 보기

오브젝트에 현재 부여된 권한 세트를 살펴보려면 SHOW GRANTS 명령을 실행합니다.

참고

특정 오브젝트에서 SHOW GRANTS 명령을 실행하려면 해당 오브젝트 타입에 대해 SHOW 명령을 실행할 때와 동일한 오브젝트 권한이 필요합니다.

예를 들어, 테이블에서 SHOW GRANTS 명령을 실행하려면 테이블, 컨테이너 데이터베이스 및 스키마에 대한 다음 권한이 필요합니다.

데이터베이스

USAGE

스키마

USAGE

테이블

모든 권한

예를 들어, 스키마에 대한 현재 권한을 살펴보려면 다음 명령을 실행합니다.

SHOW GRANTS ON SCHEMA <database_name>.<schema_name>;

예를 들어, 이 항목의 사용자 지정 역할 만들기 에서 부여된 database_a.schema_1 에 대한 권한을 확인하려면 다음 명령을 실행합니다.

SHOW GRANTS ON SCHEMA database_a.schema_1;

Snowflake에서 반환되는 결과는 다음과 같습니다.

+-------------------------------+-----------------------+------------+----------------------+------------+--------------------------+--------------+---------------+
| created_on                    | privilege             | granted_on | name                 | granted_to | grantee_name             | grant_option | granted_by    |
|-------------------------------+-----------------------+------------+----------------------+------------+--------------------------+--------------+---------------|
| 2022-03-07 09:04:23.635 -0800 | USAGE                 | SCHEMA     | D1.S1                | ROLE       | R1                       | false        | SECURITYADMIN |
+-------------------------------+-----------------------+------------+----------------------+------------+--------------------------+--------------+---------------+

또한, SHOW GRANTS 명령을 실행하여 역할에 부여된 현재 권한 세트 또는 사용자에게 부여된 현재 역할 세트를 살펴볼 수도 있습니다.

SHOW GRANTS TO ROLE <role_name>;
SHOW GRANTS TO USER <user_name>;

예를 들어, 사용자 지정 역할 만들기 에서 생성된 r1 역할에 부여된 권한을 살펴보려면 다음 명령을 실행합니다.

SHOW GRANTS TO ROLE r1;

Snowflake에서 반환되는 결과는 다음과 같습니다.

+-------------------------------+-----------+------------+----------------------+------------+--------------+--------------+---------------+
| created_on                    | privilege | granted_on | name                 | granted_to | grantee_name | grant_option | granted_by    |
|-------------------------------+-----------+------------+----------------------+------------+--------------+--------------+---------------|
| 2022-03-07 09:08:43.773 -0800 | USAGE     | DATABASE   | D1                   | ROLE       | R1           | false        | SECURITYADMIN |
| 2022-03-07 09:08:55.253 -0800 | USAGE     | SCHEMA     | D1.S1                | ROLE       | R1           | false        | SECURITYADMIN |
| 2022-03-07 09:09:07.206 -0800 | SELECT    | TABLE      | D1.S1.T1             | ROLE       | R1           | false        | SECURITYADMIN |
| 2022-03-07 09:08:34.838 -0800 | USAGE     | WAREHOUSE  | W1                   | ROLE       | R1           | false        | SECURITYADMIN |
+-------------------------------+-----------+------------+----------------------+------------+--------------+--------------+---------------+

오브젝트에 대한 향후 권한 할당하기

권한 부여 관리를 단순화하기 위해, 향후 권한 부여 를 사용하면 데이터베이스 또는 스키마에서 특정 타입의 새로운(즉, 향후) 오브젝트에 부여할 초기 권한 세트를 정의할 수 있습니다. 데이터베이스나 스키마에서 새 오브젝트가 생성되면, 정의된 권한이 지정된 역할에 자동으로 부여됩니다.

향후 자동 권한 부여는 지정된 타입의 새 오브젝트에 대해 부여되는 초기 권한 세트만 정의합니다. 개별 오브젝트가 생성된 후에는 관리자가 해당 오브젝트에서 추가적인 권한을 명시적으로 부여하거나 권한을 취소할 수 있습니다. 이를 통해 스키마 또는 데이터베이스의 모든 오브젝트에 대한 세분화된 액세스 제어를 수행할 수 있습니다.

고려 사항

  • 데이터베이스와 같은 데이터베이스의 스키마에 대해 동일한 오브젝트 유형에서 향후 권한 부여가 정의되면 스키마 수준 권한 부여가 데이터베이스 수준의 권한 부여보다 우선하며, 데이터베이스 수준의 권한 부여는 무시됩니다. 이 동작은 한 역할 또는 다른 역할에 부여된 향후 오브젝트에 대한 권한에 적용됩니다.

    예를 들어 다음 문은 데이터베이스 수준과 스키마 수준에서 동일한 유형의 오브젝트에 대해 서로 다른 권한을 부여합니다.

    데이터베이스 d1 의 모든 향후 테이블에 대한 SELECT 권한을 역할 r1 에 부여합니다.

    GRANT SELECT ON FUTURE TABLES IN DATABASE d1 TO ROLE r1;
    

    스키마 d1.s1 에서 모든 향후 테이블에 대한 INSERT 및 DELETE 권한을 r2 역할에 부여합니다.

    GRANT INSERT,DELETE ON FUTURE TABLES IN SCHEMA d1.s1 TO ROLE r2;
    

    스키마 d1.s1 의 오브젝트 타입에서 r1 역할에 할당된 향후 권한 부여는 완전히 무시됩니다. 스키마 d1.s1 에 새 테이블이 생성될 때 r2 역할에 대해 테이블에 정의된 향후 권한만 부여됩니다.

  • 데이터베이스 수준의 향후 권한 부여는 일반 및 관리되는 액세스 스키마 에 모두 적용됩니다.

데이터베이스 또는 스키마 오브젝트에 대한 향후 권한 부여 정의

ON FUTURE 키워드와 함께 GRANT <권한> 명령을 사용하여 지정된 타입의 향후 오브젝트에 대한 권한을 부여합니다.

데이터베이스 또는 스키마 오브젝트에 대한 향후 권한 부여 취소하기

ON FUTURE 키워드와 함께 REVOKE <권한> 명령을 사용하여 향후 오브젝트에 대한 권한 부여를 취소합니다.

오브젝트 복제 및 향후 권한 부여

  • 데이터베이스 또는 스키마가 복제되면 향후 권한 부여가 해당 복제본에 복사됩니다. 이 동작은 일반 오브젝트 권한 부여와 일관성을 유지합니다. 즉, 원본 오브젝트(예: 데이터베이스)에 대한 권한 부여는 해당 복제본에 복사되지 않지만, 모든 하위 오브젝트(예: 데이터베이스의 테이블)에 대한 권한 부여는 복제본에 복사됩니다.

  • 스키마의 오브젝트가 복제될 때 복제 작업을 위해 CREATE <오브젝트> 문에 COPY GRANTS 옵션이 지정되어 있지 않으면 스키마에서 이 오브젝트 유형에 대해 정의된 모든 향후 권한 부여가 복제된 오브젝트에 적용됩니다. 그럴 경우, 새 오브젝트는 원본 오브젝트의 액세스 허가를 유지하고 해당 유형의 오브젝트에 대한 향후 권한 부여를 상속하지 않습니다.

웹 인터페이스를 사용하여 향후 권한 부여 관리하기

또한, 기존 Snowflake 웹 인터페이스를 사용하여 향후 권한 부여를 정의할 수 있습니다.

향후 데이터베이스 오브젝트에 대한 권한 부여
  1. Databases Databases tab 를 클릭합니다.

  2. 특정 데이터베이스의 행을 클릭합니다. 보안 패널이 열립니다.

  3. Grant Privileges 버튼을 클릭합니다. Grant Privileges 대화 상자가 열립니다.

  4. Grant privileges on 드롭다운 목록에서 future object_type 항목을 선택하여 특정 오브젝트 타입의 새 오브젝트에 대한 향후 권한 부여를 정의합니다.

  5. 나머지 드롭다운 목록에서, 지정한 타입의 새 오브젝트에 부여할 권한과 권한이 부여될 역할을 선택합니다.

  6. Grant Privileges 버튼을 클릭합니다.

향후 스키마 오브젝트에 대한 권한 부여
  1. Databases Databases tab » <db_이름> » Schemas 를 선택합니다.

  2. 특정 스키마의 행을 클릭합니다. 보안 패널이 열립니다.

  3. Grant Privileges 버튼을 클릭합니다. Grant Privileges 대화 상자가 열립니다.

  4. Grant privileges on 드롭다운 목록에서 future object_type 항목을 선택하여 특정 오브젝트 타입의 새 오브젝트에 대한 향후 권한 부여를 정의합니다.

  5. 나머지 드롭다운 목록에서, 지정한 타입의 새 오브젝트에 부여할 권한과 권한이 부여될 역할을 선택합니다.

  6. Grant Privileges 버튼을 클릭합니다.

관리형 액세스 스키마 만들기

관리형 액세스 스키마는 오브젝트에 대한 권한 관리를 잠금으로써 보안을 향상합니다.

일반 스키마(즉, 비관리형 스키마)에서는, 오브젝트 소유자(오브젝트에 대한 OWNERSHIP 권한을 보유한 역할)가 오브젝트에 대한 액세스 권한을 다른 오브젝트에 부여할 수 있으며, 오브젝트 권한 부여를 관리할 수 있도록 이러한 역할에 향후 자동으로 권한을 부여할 수도 있습니다.

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

관리형 액세스 스키마는 웹 인터페이스 또는 SQL을 사용하여 생성할 수 있습니다.

Classic Web Interface

Databases Databases tab » <db_이름> » Schemas » Create Schema 를 클릭합니다.

SQL

WITH MANAGED ACCESS 키워드로 CREATE SCHEMA 문을 실행합니다.

웹 인터페이스 또는 SQL을 사용하여 일반 스키마를 관리형 액세스 스키마로(또는 그 반대로) 변경할 수 있습니다.

Classic Web Interface

Databases Databases tab » <db_이름> » Schemas » <스키마_이름> » Alter a schema 을 클릭합니다.

SQL

ENABLE | DISABLE MANAGED ACCESS 키워드를 사용하여 ALTER SCHEMA 문을 실행합니다.

다음 테이블을 일반 또는 관리형 액세스 스키마에서 오브젝트 권한을 관리할 수 있는 역할을 보여줍니다.

역할

일반 스키마에서 오브젝트 권한 부여 가능

관리형 액세스 스키마에서 오브젝트 권한 부여 가능

SYSADMIN

아니요

아니요

SECURITYADMIN 이상

데이터베이스 소유자

아니요

아니요

스키마 소유자

아니요

오브젝트 소유자

아니요

MANAGE GRANTS 권한을 보유한 모든 역할

비계정 관리자가 클래식 웹 인터페이스에서 사용 현황 및 청구 기록을 모니터링할 수 있도록 설정

Snowflake는 데이터 저장소/전송 및 웨어하우스 사용/로드에 대한 광범위한 계정 사용 및 청구 정보를 제공합니다.

Snowsight

Select Admin » Usage.

Classic Web Interface

Account Account tab » Billing & Usage 을 클릭합니다.

SQL

다음 중 하나를 쿼리합니다.

기본적으로 이러한 정보는 계정 관리자만 액세스/확인할 수 있습니다.

참고

현재, Snowsight 에서는 계정 관리자만 사용 및 청구 정보를 제공합니다. 다른 역할에 이 정보를 살펴볼 수 있는 권한을 부여할 수 없습니다.

계정 관리자가 아닌 사용자가 이 정보에 액세스하거나 살펴볼 수 있도록 하려면 시스템 정의 또는 사용자 지정 역할에 다음 권한을 부여해야 합니다. 역할에 권한을 부여하면 역할이 부여된 모든 사용자가 이 내역/사용 정보에 액세스할 수 있습니다.

권한

오브젝트

설명

MONITOR USAGE

계정(즉, 전역 권한)

역할이 부여된 사용자가 웹 인터페이스에서 사용 및 청구 정보를 확인하고 Information Schema에서 해당 테이블 함수를 쿼리할 수 있도록 허용합니다.

또한, 이 권한을 보유한 사용자가 SHOW DATABASESSHOW WAREHOUSES 명령을 사용하면 다른 권한 부여와는 관계없이 계정이 있는 모든 데이터베이스 및 웨어하우스의 목록이 각각 반환됩니다.

IMPORTED PRIVILEGES

snowflake 데이터베이스

역할이 부여된 사용자가 사용 및 청구 정보가 포함된 뷰 등 모든 ACCOUNT USAGE 뷰를 쿼리할 수 있도록 허용합니다.

자세한 내용은 다른 역할에 대해 Snowflake 데이터베이스 사용 활성화하기 섹션을 참조하십시오.

예를 들어, custom 역할에 이러한 권한을 부여하려면:

GRANT MONITOR USAGE ON ACCOUNT TO ROLE custom;

GRANT IMPORTED PRIVILEGES ON DATABASE snowflake TO ROLE custom;
맨 위로 이동