Snowflake Open Catalog에서 외부 OAuth 구성

이 항목에서는 Snowflake Open Catalog에 액세스하기 위해 OAuth를 사용하는 외부 서버를 구성하는 방법을 설명합니다.

참고

이 항목에서는 Auth0을 사용하여 Open Catalog의 외부 OAuth를 구성하는 방법을 보여줍니다. 그러나 Okta 또는 Microsoft Entra ID에서 이를 구성하는 단계는 유사합니다.

전제 조건

  • Open Catalog 계정에서 하나 이상의 카탈로그를 만듭니다.

  • IdP(ID 공급자)가 있는 계정이 있는지 확인합니다. 데모 목적으로 이 항목에서는 Auth0을 IdP로 사용합니다. 회사 또는 조직의 Auth0 계정을 만들려면 https://auth0.com/을 참조하세요. 하지만 Okta와 Microsoft Entra ID에서 이 프로세스는 유사합니다.

  • Snowflake CLI가 컴퓨터에 설치되어 있어야 합니다.

  • 외부 OAuth를 구성하려면 Open Catalog에서 서비스 관리자 역할이 있어야 합니다. 자세한 내용은 사용자 역할을 참조하세요. Snowflake CLI에서 이 역할은 POLARIS_ACCOUNT_ADMIN으로 출력됩니다.

시작하기 전에

외부 OAuth를 구성하려면 Open Catalog에 대해 Snowflake CLI 연결을 생성해야 합니다.

이 연결을 만들려면 전체 Open Catalog 계정 식별자가 필요합니다. 여기에는 Snowflake 조직 이름과 Open Catalog 계정 이름이 포함됩니다(예: <orgname>.<my-snowflake-open-catalog-account-name>).

  • Snowflake 조직 이름(<orgname>)을 찾으려면 :ref:label-account_name_find 섹션을 참조하세요.

  • Snowflake Open Catalog 계정 이름(<my-snowflake-open-catalog-account-name>)을 확인하려면 :doc:/user-guide/opencatalog/find-account-name 섹션을 참조하세요.

Snowflake CLI 연결 만들기

계정에 대한 외부 OAuth를 구성하는 데 사용할 수 있도록 Open Catalog 계정에 대한 Snowflake CLI 연결을 만듭니다.

1단계: Snowflake Open Catalog용 Snowflake CLI 연결 추가

  • 다음 값을 사용하여 :ref:연결을 추가<label-snowcli_snow_connection_command_add>하세요. 다른 모든 매개 변수의 경우 kbd:Enter 키를 눌러 매개 변수의 값 지정을 건너뜁니다.

    연결 구성 매개 변수

    이 연결의 이름

    연결에 대한 이름을 지정합니다(예: myopencatalogconnection).

    계정 이름

    다음 형식으로 Snowflake 조직 이름을 지정한 후 Open Catalog 계정 이름을 입력합니다.

    <orgname>-<my-snowflake-open-catalog-account-name>.

    예: ABCDEFG-MYACCOUNT1.

    이 이름들을 찾으려면 시작하기 전에_ 섹션을 참조하세요.

    사용자 이름

    Open Catalog용 사용자 이름을 지정합니다(예: jsmith).

    비밀번호[선택 사항]

    Open Catalog 연결을 생성할 때 이 매개 변수는 선택 사항이 아닙니다.

    Open Catalog의 비밀번호를 입력합니다(예: MyPassword123456789).

    연결의 역할[선택 사항]

    Open Catalog 연결을 생성할 때 이 매개 변수는 선택 사항이 아닙니다.

    POLARIS_ACCOUNT_ADMIN을 반드시 입력해야 합니다.

2단계: Snowflake CLI 연결 테스트

  • CLI 연결을 테스트하려면 다음 예시를 따라 myopencatalogconnection의 연결을 테스트하세요.

    snow connection test -c myopencatalogconnection
    
    Copy

    응답은 다음과 같아야 합니다.

    +------------------------------------------------------------------------------+
    | key              | value                                                     |
    |----------------------------+-------------------------------------------------|
    | Connection name  | myopencatalogconnection                                   |
    | Status           | OK                                                        |
    | Host             | ABCDEFG-MYACCOUNT1.snowflakecomputing.com                 |
    | Account          | ABCDEFG-MYACCOUNT1                                        |
    | User             | jsmith                                                    |
    | Role             | POLARIS_ACCOUNT_ADMIN                                     |
    | Database         | not set                                                   |
    | Warehouse        | not set                                                   |
    +------------------------------------------------------------------------------+
    
    Copy

3단계: 기본 Snowflake CLI 연결 설정

사용 중인 연결에 항상 필요한 POLARIS_ACCOUNT_ADMIN 역할이 부여되도록 하려면, Open Catalog용으로 생성한 Snowflake CLI 연결을 기본 연결로 설정할 수 있습니다. 기본 연결에 대한 자세한 내용은 :ref:label-cli_set_default_connection 섹션을 참조하세요.

  1. 다음 예시를 따라 myopencatalogconnection 연결을 기본값으로 설정합니다.

    snow connection set-default myopencatalogconnection
    
    Copy
  2. 올바른 사용자 및 역할을 사용하고 있는지 확인하려면 다음을 실행합니다.

    snow sql -q "Select current_user(); select current_role();"
    
    Copy

    응답은 귀하의 Open Catalog 사용자 이름을 반환해야 하며, CURRENT ROLE은 POLARIS_ACCOUNT_ADMIN이어야 합니다.

    +----------------+
    | CURRENT_USER() |
    |----------------|
    | JSMITH        |
    +----------------+
    select current_role();
    +-----------------------+
    | CURRENT_ROLE()        |
    |-----------------------|
    | POLARIS_ACCOUNT_ADMIN |
    +-----------------------+
    
    Copy

1단계: Auth0을 외부 OAuth 인증 서버로 설정

이 섹션에서는 Auth0을 외부 OAuth 인증 서버로 설정합니다. 그러나 Microsoft Entra ID 또는 Okta를 외부 OAuth 인증 서버로 설정하는 단계는 유사합니다.

참고

회사 또는 조직의 Auth0 계정을 만들려면 https://auth0.com/ 섹션을 참조하세요.

API 정의

권한을 할당할 수 있도록 API를 정의합니다.

  1. Auth0 콘솔에 로그인합니다.

  2. 왼쪽 창에서 애플리케이션 > APIs를 선택합니다.

  3. + API 만들기를 선택합니다.

  4. 이름식별자를 입력하고 기본 설정을 수락합니다.

  5. 만들기 를 선택합니다.

API에 권한 추가

클라이언트에 권한을 부여할 수 있도록 API에 권한을 추가합니다.

이 클라이언트는 Open Catalog의 주체가 되고, 클라이언트에 할당하는 권한은 Open Catalog의 주체 역할이 됩니다.

  1. Auth0 콘솔에 로그인합니다.

  2. 왼쪽 창에서 애플리케이션 > APIs를 선택합니다.

  3. API를 선택합니다.

  4. 권한 탭에서 권한을 추가합니다.

    1. 권한설명 필드를 사용하여 API에 대한 권한을 추가합니다. SESSION:ROLE:<custom_role_name> 형식을 사용합니다. 예를 들어 SESSION:ROLE:ENGINEER 과 같습니다.

      중요

      서비스 관리자 액세스 토큰을 생성하려면 SESSION:ROLE:POLARIS_ACCOUNT_ADMIN 권한을 추가해야 합니다. 이 권한이 있으면 Open Catalog에서 API에 대한 권한과 함께 서비스 관리자 역할을 할당할 수 있습니다.

    2. + 추가를 선택합니다.

애플리케이션 만들기

만든 API에 대한 권한을 부여할 수 있도록 애플리케이션을 만듭니다.

  1. Auth0 콘솔에 로그인합니다.

  2. 왼쪽 창에서 애플리케이션 > 애플리케이션을 선택합니다.

  3. + 애플리케이션 만들기를 선택하고 애플리케이션을 만듭니다. 이 단계를 반복하여 외부 OAuth를 구성하는 데 필요한 각 애플리케이션을 만듭니다.

    중요

    서비스 관리자 액세스 토큰을 생성하기 위한 애플리케이션을 만들어야 합니다. 나중에 SESSION:ROLE:POLARIS_ACCOUNT_ADMIN 권한을 부여합니다.

API에 권한 할당

클라이언트에 부여할 권한을 선택하려면 다음 단계를 따릅니다.

  1. Auth0 콘솔에 로그인합니다.

  2. 왼쪽 창에서 애플리케이션 > 애플리케이션을 선택합니다.

  3. 생성한 애플리케이션을 선택합니다.

  4. APIs 탭을 선택합니다.

  5. 필요한 경우 API에 대한 승인됨 토글을 켜짐으로 설정합니다.

  6. API에 대한 확장 아이콘을 선택합니다.

  7. 권한 필드에서 API에 할당하려는 각 권한의 확인란을 선택합니다.

  8. 업데이트를 선택합니다.

    생성한 각 애플리케이션에 대해 이러한 단계를 반복합니다.

중요

서비스 관리자 액세스 토큰을 생성하기 위해 만든 애플리케이션을 선택하고 API에 SESSION:ROLE:POLARIS_ACCOUNT_ADMIN 권한을 할당해야 합니다. 그렇지 않으면 서비스 관리자 액세스 토큰을 생성할 수 없습니다.

2단계: 조직 및 계정 이름 가져오기

보안 통합 생성과 같은 작업을 위해서는 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름이 필요합니다.

  1. 이 형식으로 조직 이름과 Snowflake Open Catalog 계정 이름을 가져오려면 Snowflake CLI에서 다음 명령을 실행합니다.

    snow sql -q "SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME();"
    
    Copy
  2. 응답에서 반환된 값을 복사하여 나중에 사용할 수 있도록 텍스트 편집기에 붙여넣습니다. 예를 들어 ABCDEFG-MYACCOUNT1 과 같습니다.

3단계: 보안 통합 만들기

보안 통합을 생성하려면 Snowflake CLI 연결을 사용하여 CREATE SECURITY INTEGRATION 명령을 실행하세요.

 snow sql -q "create or replace security integration external_oauth_auth0
    type = external_oauth
    enabled = true
    external_oauth_type = custom
    external_oauth_issuer = 'https://<Auth0_domain>/'
    external_oauth_jws_keys_url = 'https://<Auth0_domain>/.well-known/jwks.json'
    external_oauth_audience_list = ('https://<your_org_name>-<your_open_catalog_account_name>.snowflakecomputing.com')
    external_oauth_token_user_mapping_claim = 'sub'
    external_oauth_snowflake_user_mapping_attribute = 'login_name'
    EXTERNAL_OAUTH_SCOPE_DELIMITER = ' '
    EXTERNAL_OAUTH_SCOPE_MAPPING_ATTRIBUTE = 'scope';"
Copy

여기서

  • <Auth0_domain>은 Auth0 도메인입니다. 이 값을 찾으려면 Auth0에서 애플리케이션 > 애플리케이션 > [애플리케이션 이름] > 설정 > 도메인 필드로 이동합니다.

  • <your_org_name>-<your_open_catalog_account_name>은 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름입니다.

    예를 들어 ABCDEFG-MYACCOUNT1 과 같습니다.

    이러한 값을 이 형식으로 가져오려면 조직 및 계정 이름 가져오기를 참조하세요.

4단계: 서비스 관리자 액세스 토큰 생성

외부 OAuth를 프로그래밍 방식으로 구성하려면 서비스 관리자 액세스 토큰이 필요합니다. 그러나 Open Catalog UI를 사용하여 외부 OAuth를 구성하기 위한 몇 가지 작업을 수행할 수 있습니다.

이미 서비스 관리자 액세스 토큰을 직접 생성했고 해당 토큰이 여전히 활성 상태인 경우 이 단계를 건너뛸 수 있습니다.

서비스 관리자 액세스 토큰을 생성하려면 Snowflake CLI에서 다음 명령을 실행하고 값을 텍스트 편집기에 복사합니다.

ACCESS_TOKEN=$(curl -X POST https://<Auth0_domain>/oauth/token --header 'content-type: application/x-www-form-urlencoded' --data grant_type=client_credentials --data client_id=<client_id> --data client_secret=<client_secret> --data-urlencode "audience=https://<your_org_name>-<your_open_catalog_account_name>.snowflakecomputing.com" --data "scope=SESSION:ROLE:POLARIS_ACCOUNT_ADMIN" | jq -r '.access_token')
Copy

여기서

  • <Auth0_domain>은 Auth0 도메인입니다. 이 값을 찾으려면 Auth0에서 애플리케이션 > 애플리케이션 > [애플리케이션 이름] > 설정 > 도메인 필드로 이동합니다.

  • <client_id>는 POLARIS_ACCOUNT_ADMIN 권한에 대한 액세스 권한을 부여하는 Auth0의 애플리케이션에 대한 클라이언트 ID입니다. 이 값을 찾으려면 Auth0에서 애플리케이션 > 애플리케이션 > [애플리케이션 이름] > 설정 > 클라이언트 ID 필드로 이동합니다.

  • <client_secret>는 POLARIS_ACCOUNT_ADMIN 권한에 대한 액세스 권한을 부여하는 Auth0의 애플리케이션에 대한 클라이언트 시크릿입니다. 이 값을 찾으려면 Auth0에서 애플리케이션 > 애플리케이션 > [애플리케이션 이름] > 설정 > 클라이언트 시크릿 필드로 이동합니다.

  • <audience>는 API의 식별자입니다. 이 값을 찾으려면 Auth0에서 애플리케이션 > APIs로 이동하고 API > 설정 > 식별자 필드를 선택합니다.

  • <your_org_name>-<your_open_catalog_account_name>은 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름입니다.

    예를 들어 ABCDEFG-MYACCOUNT1 과 같습니다.

    이러한 값을 이 형식으로 가져오려면 조직 및 계정 이름 가져오기를 참조하세요.

  • POLARIS_ACCOUNT_ADMIN은 Open Catalog에서 외부 OAuth 구성을 포함하는 관리 작업을 수행할 수 있는 Open Catalog의 기본 제공 역할 이름입니다. Open Catalog UI에서는 이 역할을 서비스 관리자 역할이라고 합니다.

5단계: 사용자 지정 역할 만들기

이 단계에서는 Snowflake CLI 연결을 사용하여 사용자 지정 역할을 만듭니다.

사용자 지정 역할을 생성하여 나중에 카탈로그 역할을 부여하고 서비스 주체에게 이 사용자 지정 역할을 부여하면 서비스 주체에게 권한이 부여됩니다. 사용자 지정 역할에 대한 자세한 내용은 사용자 지정 역할을 참조하세요. Open Catalog의 RBAC 모델에 대한 자세한 내용은 RBAC 모델을 참조하세요.

참고

설정한 기본 Snowflake CLI 연결에 POLARIS_ACCOUNT_ADMIN 역할이 부여되지 않은 경우, USE ROLE POLARIS_ACCOUNT_ADMIN 문을 명령에 포함해야 합니다.

다음 예에서는 OPEN_CATALOG_ADMIN 사용자 지정 역할을 만듭니다.

snow sql -q "create role OPEN_CATALOG_ADMIN;"
Copy

6단계: 사용자 지정 역할에 카탈로그 역할 부여

이 섹션에서는 생성한 사용자 지정 역할에 카탈로그 역할을 부여합니다.

사용자 지정 역할에 카탈로그 역할을 부여한 후 서비스 주체에게 사용자 지정 역할을 부여하여 주체 역할에 부여된 카탈로그 역할에 부여된 모든 권한을 서비스 주체에게 부여합니다. Open Catalog의 RBAC 모델에 대한 자세한 내용은 RBAC 모델을 참조하세요.

카탈로그에 대한 카탈로그 관리자 권한이 있거나 지정한 카탈로그에 대한 권한 세트가 있는 카탈로그 역할을 사용자 지정 역할에 부여할 수 있습니다.

사용자 지정 역할에 카탈로그 관리자 권한이 있는 카탈로그 역할 부여

이 섹션에서는 사용자 지정 역할에 카탈로그 관리자 권한이 있는 카탈로그 역할을 부여합니다. 워크플로는 다음과 같습니다.

  1. 카탈로그 역할 만들기.

  2. 카탈로그 역할에 카탈로그 관리자 권한 부여.

  3. 사용자 지정 역할에 카탈로그 역할 부여.

카탈로그 역할 만들기

다음 명령을 실행하여 지정한 카탈로그에 카탈로그 역할을 생성합니다.

 curl -X POST \
"https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/management/v1/catalogs/{catalogName}/catalog-roles" \
-H "Authorization: Bearer <service_admin_access_token>" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
   "name": "<catalog_role_name>"
   }'
Copy
여기서
  • <your_org_name>-<your_open_catalogaccount_name>은 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름입니다.

    예를 들어 ABCDEFG-MYACCOUNT1 과 같습니다.

    이 형식으로 이러한 값을 가져오려면 :ref:label-retrieve_org_account_name_external_oauth 섹션을 참조하세요.

  • {Catalogname}은 카탈로그 역할을 만들려는 Open Catalog의 카탈로그 이름입니다.

  • <service_admin_access_token>은 :ref:생성한 서비스 관리자 액세스 토큰<label-generate_service_admin_access_token_external_oauth>입니다.

  • <catalog_role_name>의 경우 카탈로그 역할의 이름을 지정합니다. 예를 들어 CatalogAdmin 과 같습니다.

카탈로그 역할에 카탈로그 관리자 권한 부여

다음 명령을 실행합니다.

curl -X PUT \
"https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/management/v1/catalogs/{catalogName}/catalog-roles/{catalogRoleName}/grants" \
-H "Authorization: Bearer <service_admin_access_token>" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"grant": {"type": "catalog", "privilege": "CATALOG_MANAGE_CONTENT"}}'
Copy
여기서
  • <your_org_name>-<your_open_catalogaccount_name>은 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름입니다.

    예를 들어 ABCDEFG-MYACCOUNT1 과 같습니다.

    이 형식으로 이러한 값을 가져오려면 :ref:label-retrieve_org_account_name_external_oauth 섹션을 참조하세요.

  • {Catalogname}은 권한을 부여하려는 Open Catalog의 카탈로그 이름입니다.

  • {catalogRoleName}은 권한을 부여하려는 카탈로그 역할의 이름입니다. 예: TableReader.

  • <service_admin_access_token>은 :ref:생성한 서비스 관리자 액세스 토큰<label-generate_service_admin_access_token_external_oauth>입니다.

  • CATALOG_MANAGE_CONTENT은 카탈로그 관리자 권한이 있는 Open Catalog의 권한 이름입니다.

사용자 지정 역할에 카탈로그 역할 부여

중요

사용자 지정 역할은 대소문자를 구분합니다. 소문자로 또는 소문자와 대문자로 생성한 경우에도 모든 대문자로 사용자 지정 역할을 지정해야 합니다.

다음 명령을 실행합니다.

curl -X PUT \
"https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/management/v1/principal-roles/{customRoleName}/catalog-roles/{catalogName}" \
-H "Authorization: Bearer <service_admin_access_token>" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"catalogRole": {"name": "<catalog_role_name>", "properties": {}, "entityVersion": 1}}'
Copy
여기서
  • <your_org_name>-<your_open_catalogaccount_name>은 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름입니다.

    예를 들어 ABCDEFG-MYACCOUNT1 과 같습니다.

    이 형식으로 이러한 값을 가져오려면 :ref:label-retrieve_org_account_name_external_oauth 섹션을 참조하세요.

  • {customRoleName}은 카탈로그 관리자 권한이 있는 카탈로그 역할을 부여할 사용자 지정 역할의 이름입니다. 예: OPEN_CATALOG_ADMIN.

  • {catalogName}은 카탈로그 관리자 권한을 부여하려는 Open Catalog의 카탈로그 이름입니다.

  • <catalog_role_name>은 카탈로그 관리자 권한이 부여된 카탈로그에 대한 카탈로그 역할의 이름입니다. 예를 들면 CatalogAdmin과 같습니다.

  • <service_admin_access_token>은 :ref:생성한 서비스 관리자 액세스 토큰<label-generate_service_admin_access_token_external_oauth>입니다.

필요한 경우 이 단계를 반복하여 사용자 지정 역할에 다른 카탈로그에 대한 카탈로그 관리자 권한을 부여합니다.

사용자 지정 역할에 지정한 권한 세트가 있는 카탈로그 역할 부여

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

  1. 카탈로그 역할 만들기.

  2. 카탈로그 역할에 권한 부여. 이러한 권한을 통해 서비스 주체는 Open Catalog에서 작업을 수행할 수 있습니다.

  3. 사용자 지정 역할에 카탈로그 역할 부여.

카탈로그 역할 만들기

이 섹션에서는 카탈로그 역할을 만듭니다. 카탈로그 역할에 대한 자세한 내용은 카탈로그 역할 섹션을 참조하십시오.

다음 명령을 실행하여 지정한 카탈로그에 카탈로그 역할을 생성합니다.

 curl -X POST \
"https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/management/v1/catalogs/{catalogName}/catalog-roles" \
-H "Authorization: Bearer <service_admin_access_token>" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
   "name": "<catalog_role_name>"
   }'
Copy
여기서
  • <your_org_name>-<your_open_catalogaccount_name>은 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름입니다.

    예를 들어 ABCDEFG-MYACCOUNT1 과 같습니다.

    이 형식으로 이러한 값을 가져오려면 :ref:label-retrieve_org_account_name_external_oauth 섹션을 참조하세요.

  • {Catalogname}은 카탈로그 역할을 만들려는 Open Catalog의 카탈로그 이름입니다.

  • <service_admin_access_token>은 :ref:생성한 서비스 관리자 액세스 토큰<label-generate_service_admin_access_token_external_oauth>입니다.

  • <catalog_role_name>의 경우 카탈로그 역할의 이름을 지정합니다. 예를 들어 TableReader 과 같습니다.

카탈로그 역할에 권한 부여

전체 카탈로그 또는 카탈로그의 네임스페이스나 테이블에 권한을 부여할 수 있습니다.

카탈로그 역할에 카탈로그 권한 부여

다음 명령을 실행합니다.

curl -X PUT \
"https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/management/v1/catalogs/{catalogName}/catalog-roles/{catalogRoleName}/grants" \
-H "Authorization: Bearer <service_admin_access_token>" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"grant": {"type": "catalog", "privilege": "<privilege_name>"}}'
Copy
여기서
  • <your_org_name>-<your_open_catalogaccount_name>은 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름입니다.

    예를 들어 ABCDEFG-MYACCOUNT1 과 같습니다.

    이 형식으로 이러한 값을 가져오려면 :ref:label-retrieve_org_account_name_external_oauth 섹션을 참조하세요.

  • {Catalogname}은 권한을 부여하려는 Open Catalog의 카탈로그 이름입니다.

  • {catalogRoleName}은 권한을 부여하려는 카탈로그 역할의 이름입니다. 예: TableReader.

  • <service_admin_access_token>은 :ref:생성한 서비스 관리자 액세스 토큰<label-generate_service_admin_access_token_external_oauth>입니다.

  • <privilege_name>은 카탈로그 역할에 부여하려는 권한의 이름입니다. 사용 가능한 권한 목록은 액세스 제어 권한<https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_을 참조하세요.

카탈로그 역할에 네임스페이스 권한 부여

다음 명령을 실행합니다.

curl -X PUT \
"https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/management/v1/catalogs/{catalogName}/catalog-roles/{catalogRoleName}/grants" \
-H "Authorization: Bearer <service_admin_access_token>" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"grant": {"type": "namespace", "namespace": ["<namespace_name>"], "privilege": "<privilege_name>"}}'
Copy
여기서
  • <your_org_name>-<your_open_catalogaccount_name>은 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름입니다.

    예를 들어 ABCDEFG-MYACCOUNT1 과 같습니다.

    이 형식으로 이러한 값을 가져오려면 :ref:label-retrieve_org_account_name_external_oauth 섹션을 참조하세요.

  • {Catalogname}은 권한을 부여하려는 Open Catalog의 카탈로그 이름입니다.

  • {catalogRoleName}은 권한을 부여하려는 카탈로그 역할의 이름입니다. 예: TableReader.

  • <service_admin_access_token>은 :ref:생성한 서비스 관리자 액세스 토큰<label-generate_service_admin_access_token_external_oauth>입니다.

  • <namespace_name>는 권한을 부여하려는 네임스페이스의 이름입니다. 중첩된 네임스페이스에 권한을 부여하려면 상위 네임스페이스와 함께 쉼표로 구분하여 지정합니다(예: "ns1","ns1a").

  • <privilege_name>은 카탈로그 역할에 부여하려는 네임스페이스 권한의 이름입니다. 사용 가능한 권한 목록은 액세스 제어 권한<https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_을 참조하세요.

카탈로그 역할에 테이블 권한 부여

다음 명령을 실행합니다.

curl -X PUT \
"https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/management/v1/catalogs/{catalogName}/catalog-roles/{catalogRoleName}/grants" \
-H "Authorization: Bearer <service_admin_access_token>" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"grant": {"type": "table", "namespace": ["<namespace_name>"], "tableName": "<table_name>", "privilege": "<privilege_name>"}}'
Copy
여기서
  • <your_org_name>-<your_open_catalogaccount_name>은 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름입니다.

    예를 들어 ABCDEFG-MYACCOUNT1 과 같습니다.

    이 형식으로 이러한 값을 가져오려면 :ref:label-retrieve_org_account_name_external_oauth 섹션을 참조하세요.

  • {Catalogname}은 권한을 부여하려는 Open Catalog의 카탈로그 이름입니다.

  • {catalogRoleName}은 권한을 부여하려는 카탈로그 역할의 이름입니다. 예: TableReader.

  • <service_admin_access_token>은 :ref:생성한 서비스 관리자 액세스 토큰<label-generate_service_admin_access_token_external_oauth>입니다.

  • <namespace_name>는 권한을 부여하려는 네임스페이스의 이름입니다. 중첩된 네임스페이스에 권한을 부여하려면 상위 네임스페이스와 함께 쉼표로 구분하여 지정합니다(예: "ns1","ns1a").

  • <table_name>은 권한을 부여할 테이블의 이름입니다.

  • <privilege_name>은 카탈로그 역할에 부여하려는 권한의 이름입니다. 사용 가능한 권한 목록은 액세스 제어 권한<https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_을 참조하세요.

사용자 지정 역할에 카탈로그 역할 부여

중요

사용자 지정 역할은 대소문자를 구분합니다. 소문자로 또는 소문자와 대문자로 생성한 경우에도 모든 대문자로 사용자 지정 역할을 지정해야 합니다.

다음 명령을 실행합니다.

curl -X PUT \
"https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/management/v1/principal-roles/{customRoleName}/catalog-roles/{catalogName}" \
-H "Authorization: Bearer <service_admin_access_token>" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"catalogRole": {"name": "<catalog_role_name>", "properties": {}, "entityVersion": 1}}'
Copy
여기서
  • <your_org_name>-<your_open_catalogaccount_name>은 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름입니다.

    예를 들어 ABCDEFG-MYACCOUNT1 과 같습니다.

    이 형식으로 이러한 값을 가져오려면 :ref:label-retrieve_org_account_name_external_oauth 섹션을 참조하세요.

  • {customRoleName}은 카탈로그 역할을 부여할 사용자 지정 역할의 이름입니다.

  • {catalogName}은 권한을 부여하려는 카탈로그 역할을 생성한 Open Catalog의 카탈로그 이름입니다.

  • <service_admin_access_token>은 :ref:생성한 서비스 관리자 액세스 토큰<label-generate_service_admin_access_token_external_oauth>입니다.

  • <catalog_role_name>은 사용자 지정 역할에 부여할 카탈로그 역할의 이름입니다.

필요한 경우 이 워크플로를 반복하여 사용자 지정 역할에 생성한 추가 카탈로그 역할을 부여합니다.

7단계: 서비스 주체 만들기

이 단계에서는 Snowflake CLI 연결을 사용하여 서비스 주체를 만듭니다.

참고

설정한 기본 Snowflake CLI 연결에 POLARIS_ACCOUNT_ADMIN 역할이 부여되지 않은 경우, USE ROLE POLARIS_ACCOUNT_ADMIN 문을 명령에 포함해야 합니다.

외부 OAuth를 통해 Open Catalog에 연결하려면 서비스 주체가 필요합니다. Open Catalog에서 서비스 주체는 TYPE 매개 변수가 service로 설정된 사용자입니다. 따라서 CREATE USER 명령을 사용하여 TYPE=service의 사용자를 만듭니다.

서비스 주체를 만들려면 다음 명령을 실행합니다.

snow sql -q "CREATE USER <user_name> LOGIN_NAME='<client_id>@clients' TYPE='service';"
Copy

여기서

  • <user_name>의 경우 서비스 주체의 이름을 지정합니다.

  • <client_id>의 경우 애플리케이션에 대한 클라이언트 ID를 지정합니다. 이 값을 찾으려면 Auth0에서 애플리케이션 > 애플리케이션 > [애플리케이션 이름] > 설정 > 클라이언트 ID 필드로 이동합니다.

8단계: 서비스 주체에 사용자 지정 역할 부여

이 섹션에서는 Snowflake CLI 연결을 사용하여 하나 이상의 서비스 주체에게 사용자 지정 역할을 부여합니다. 결과적으로, 사용자 지정 역할에 부여한 모든 카탈로그 역할에 부여된 권한을 서비스 주체에게 부여합니다. Open Catalog의 RBAC 모델에 대한 자세한 내용은 RBAC 모델을 참조하세요.

참고

설정한 기본 Snowflake CLI 연결에 POLARIS_ACCOUNT_ADMIN 역할이 부여되지 않은 경우, USE ROLE POLARIS_ACCOUNT_ADMIN 문을 명령에 포함해야 합니다.

중요

사용자 지정 역할은 대소문자를 구분합니다. 소문자로 또는 소문자와 대문자로 생성한 경우에도 모든 대문자로 사용자 지정 역할을 지정해야 합니다.

다음 예에서는 service_principal1 서비스 주체에게 ENGINEER 사용자 지정 역할을 부여합니다.

snow sql -q "GRANT ROLE ENGINEER to user service_principal1;"
Copy

서비스 주체에게 역할이 부여되었는지 확인하려면 다음을 실행합니다.

snow sql -q "show grants to user service_principal1;" 
Copy

응답에서, 생성한 사용자 지정 역할(role 열)이 생성한 서비스 주체(grantee_name 열)에 할당되었는지 확인합니다.

(선택 사항) 9단계: 액세스 토큰 생성

이 섹션에서는 외부 OAuth를 사용하여 Open Catalog에 연결하는 데 사용할 수 있는 액세스 토큰을 생성할 수 있습니다. 그러나 이 방법을 사용하여 연결하는 경우 액세스 토큰을 수동으로 새로 고쳐야 합니다.

또는 이 단계를 건너뛰고 나중에 기본 설정 방법인 자동 새로 고침 토큰을 사용하여 Open Catalog에 연결할 수 있습니다.

다음 curl 명령을 사용하여 액세스 토큰을 생성합니다.

ACCESS_TOKEN=$(curl -X POST https://<Auth0_domain>/oauth/token --header 'content-type: application/x-www-form-urlencoded' --data grant_type=client_credentials --data client_id=<client_id> --data client_secret=<client_secret> --data-urlencode "audience=https://<your_org_name>-<your_open_catalog_account_name>.snowflakecomputing.com" --data "scope=SESSION:ROLE:<custom_role_name>" | jq -r '.access_token')
Copy

여기서

  • <Auth0_domain>은 Auth0 도메인입니다. 이 값을 찾으려면 Auth0에서 애플리케이션 > 애플리케이션 > [애플리케이션 이름] > 설정 > 도메인 필드로 이동합니다.

  • <client_id>는 Auth0의 애플리케이션에 대한 클라이언트 ID입니다. 이 값을 찾으려면 Auth0에서 애플리케이션 > 애플리케이션 > [애플리케이션 이름] > 설정 > 클라이언트 ID 필드로 이동합니다.

  • <client_secret>은 Auth0의 애플리케이션에 대한 클라이언트 시크릿입니다. 이 값을 찾으려면 Auth0에서 애플리케이션 > 애플리케이션 > [애플리케이션 이름] > 설정 > 클라이언트 시크릿 필드로 이동합니다.

  • <audience>는 API의 식별자입니다. 이 값을 찾으려면 Auth0에서 애플리케이션 > APIs로 이동하고 API > 설정 >

    식별자 필드를 선택합니다.

  • <your_org_name>-<your_open_catalog_account_name>은 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름입니다.

    예를 들어 ABCDEFG-MYACCOUNT1 과 같습니다.

    이러한 값을 이 형식으로 가져오려면 조직 및 계정 이름 가져오기를 참조하세요.

  • <custom_role_name> is the name of a custom role you granted with catalog roles, such as ENGINEER.

10단계: 외부 OAuth를 사용하여 Open Catalog에 연결

이 섹션에서는 외부 OAuth를 통해 서비스 주체를 Open Catalog에 연결합니다. 지침은 외부 OAuth를 사용하여 Snowflake Open Catalog에 연결을 참조하세요. 여기에는 액세스 토큰 또는 자동 토큰 새로 고침을 사용하여 연결하기 위한 지침이 포함되어 있습니다.