dbt Projects on Snowflake 접근 제어

dbt Projects on Snowflake 접근 제어

다음 명령은 dbt 프로젝트 객체에 흔히 부여되는 권한을 보여줘요.

출처: Snowflake 문서

본문

  • 워크스페이스 내에서의 배포를 포함해 dbt 프로젝트 객체를 생성할 권한을 부여하려면: GRANT CREATE DBT PROJECT ON SCHEMA my_database.my_schema TO ROLE my_role;
  • 워크스페이스를 dbt 프로젝트 객체에 연결하는 것을 포함해 dbt 프로젝트 객체를 변경(alter)하거나 삭제(drop)할 권한을 부여하려면: GRANT OWNERSHIP ON DBT PROJECT my_dbt_project_object TO ROLE my_role;
  • dbt 프로젝트 객체를 실행하고 파일을 나열하거나 가져올 권한을 부여하려면: GRANT USAGE ON DBT PROJECT my_dbt_project_object TO ROLE my_role;
  • Snowsight에서 dbt 프로젝트 객체를 보거나 최근 실행에서 dbt 아티팩트를 검색하려면: dbt 프로젝트 객체에 MONITOR 권한이 있는 역할을 사용하세요. 이 권한은 SYSTEM$DBT_GET_LAST_SUCCESSFUL_RUN_TARGET, SYSTEM$DBT_GET_LAST_FAILED_RUN_TARGET, 또는 SYSTEM$DBT_GET_LAST_RUN_TARGET을 호출하는 데 필요해요. 없으면 프로젝트 세부 정보, 실행 기록, 모니터링 정보, 또는 이 함수들이 반환하는 아티팩트에 접근할 수 없어요. GRANT MONITOR ON DBT PROJECT my_dbt_project_object TO ROLE my_role;

자세한 내용은 dbt 프로젝트 객체 권한 문서를 참조하세요.

dbt 프로젝트 배포를 위한 역할과 권한

배포는 두 단계로 일어나요: dbt 프로젝트 객체를 생성하거나 업데이트하는 초기 단계, 그리고 dbt가 Jinja를 해결하고 SQL을 검증하며 선택적으로 의존성을 설치하는 컴파일 단계. 각 단계는 다른 역할을 사용할 수 있어요. 초기 단계는 SQL 워크시트에서 활성화된 역할, Snowsight 배포 대화 상자에서 선택한 역할, 또는 Snowflake CLI의 connection.toml에 구성된 역할을 사용해요. 컴파일 단계는 dbt_projects_profiles.yml 또는 profiles.yml의 target에 있는 역할을 사용해요.

배포 방법 초기 단계 역할 (객체 생성 또는 업데이트)
Snowsight Connect » Deploy dbt project에서 선택한 역할
SQL CREATE DBT PROJECT 또는 ALTER DBT PROJECT를 실행할 때 워크시트에서 활성화된 역할
CLI snow dbt deploy를 실행할 때 connection.toml의 역할 (또는 --role로 재정의)

컴파일 단계에서 Snowflake는 DEFAULT_TARGET이 지정한 target을 사용해요. DEFAULT_TARGET이 설정되지 않으면 프로필 파일에 정의된 기본 target을 사용해요. 두 프로필 파일이 모두 있으면 dbt_projects_profiles.yml이 profiles.yml보다 우선해요.

📌 이 페이지에서 설명하는 일부 기능은 가변 live 버전을 사용하는 dbt 프로젝트 객체가 필요해요. live 버전 객체를 얻으려면 2026_06 동작 변경 번들에 옵트인하거나, Snowflake 계정 담당자에게 별도의 단일 live 버전 기능을 활성화하도록 요청하세요. 그런 다음 객체를 생성하거나 교체하고, 기존 버전 객체는 SYSTEM$MIGRATE_DBT_PROJECT로 마이그레이션하세요. 자세한 내용은 dbt 프로젝트 객체의 단일 가변 live 버전으로의 마이그레이션 문서를 참조하세요.

선택적으로 배포와 실행 분리하기

더 강한 직무 분리를 위해 CI/CD 파이프라인에서 배포 전용(deploy-only) 역할을 사용하세요. dbt 프로젝트 객체를 만들려면 이 역할에 target 스키마에 대한 CREATE DBT PROJECT를 부여하세요. 역할은 생성 후 객체를 소유해요. 기존 객체의 live 버전을 교체하려면 그 객체에 OWNERSHIP을 부여하세요.

자동 컴파일이 활성화되면 Snowflake는 선택된 target이 정의한 역할로 배포 중 dbt compile을 실행해요. 외부 접근 통합(access integration)이 구성되면 Snowflake가 먼저 dbt deps를 실행한 다음 dbt compile을 실행해요. 두 명령을 건너뛰고 dbt 명령 실행을 별도 역할에 맡기려면 snow dbt deploy --no-auto-compile로 배포하세요.

가장 간단한 설정은 호출 역할(calling role)과 프로필 역할을 하나의 실행 역할로 사용하는 것이에요. 외부 오케스트레이션에는 이를 활성 Snowflake 역할로 구성하고, Snowflake 태스크에는 태스크 소유자 역할로 사용하세요.

실행 역할에 dbt 프로젝트 객체에 대한 USAGE, 그리고 프로젝트를 컴파일·실행·테스트하는 데 필요한 웨어하우스와 데이터 권한을 부여하세요. 호출 역할과 프로필 역할은 다를 수 있으며, 다음 섹션에서 각 실행 방법에 대한 권한을 설명해요.

실행 역할이 최근 실행 아티팩트 검색 함수를 사용해 프로덕션 dbt 프로젝트 객체에서 아티팩트를 가져온다면 그 객체에도 MONITOR를 부여하세요.

dbt 프로젝트 실행을 위한 역할과 권한

dbt 프로젝트 객체를 실행할 때, 실행을 수행하고 dbt run 또는 build 명령을 지정할 때 출력을 구체화하는 역할은 실행 방법에 따라 달라져요.

SQL 또는 CLI에서 실행

EXECUTE DBT PROJECT에 지정된 dbt 명령은 프로젝트의 dbt_projects_profiles.yml 또는 profiles.yml 파일의 outputs 블록에 지정된 역할의 권한으로 실행돼요. 작업은 EXECUTE DBT PROJECT를 호출하는 Snowflake 사용자에게 부여된 권한으로만 더 제한돼요. 사용자와 지정된 역할 모두 웨어하우스를 사용하고, 프로필 파일에 지정된 데이터베이스와 스키마에서 작업을 수행하고, dbt 모델이 지정한 다른 Snowflake 객체에서 작업을 수행하는 데 필요한 권한을 가져야 해요. 두 파일이 모두 있으면 Snowflake는 dbt_projects_profiles.yml을 사용해요.

워크스페이스 내에서 실행

워크스페이스 내에서 프로젝트에 대해 dbt Run 또는 Build 명령을 선택하면 프로젝트의 dbt_projects_profiles.yml 또는 profiles.yml 파일에 정의된 역할을 사용해 target 출력을 구체화해요. 사용자와 지정된 역할 모두 웨어하우스를 사용하고, 프로필 파일에 지정된 데이터베이스와 스키마에서 작업을 수행하고, dbt 모델이 지정한 다른 Snowflake 객체에서 작업을 수행하는 데 필요한 권한을 가져야 해요. 두 파일이 모두 있으면 Snowflake는 dbt_projects_profiles.yml을 사용해요.

워크스페이스 내에서 예약 실행

워크스페이스 내에서 dbt 프로젝트 객체 실행을 스케줄하면 사용자 관리 태스크가 생성돼요. 워크스페이스에서 태스크를 만들려면 사용자가 CREATE TASK 참조의 접근 제어 요구 사항 아래에 설명된 권한을 가진 역할을 가져야 해요. Snowflake는 태스크 소유자의 권한으로 태스크를 실행하지만, 태스크 실행은 사용자와 연결되지 않아요. 자세한 내용은 시스템 서비스가 실행하는 태스크 문서를 참조하세요.

더 알아보기 (Learn more)