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
응답은 다음과 같아야 합니다.
+------------------------------------------------------------------------------+ | 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 | +------------------------------------------------------------------------------+
3단계: 기본 Snowflake CLI 연결 설정¶
사용 중인 연결에 항상 필요한 POLARIS_ACCOUNT_ADMIN 역할이 부여되도록 하려면, Open Catalog용으로 생성한 Snowflake CLI 연결을 기본 연결로 설정할 수 있습니다. 기본 연결에 대한 자세한 내용은 :ref:label-cli_set_default_connection 섹션을 참조하세요.
다음 예시를 따라
myopencatalogconnection연결을 기본값으로 설정합니다.snow connection set-default myopencatalogconnection
올바른 사용자 및 역할을 사용하고 있는지 확인하려면 다음을 실행합니다.
snow sql -q "Select current_user(); select current_role();"
응답은 귀하의 Open Catalog 사용자 이름을 반환해야 하며, CURRENT ROLE은 POLARIS_ACCOUNT_ADMIN이어야 합니다.
+----------------+ | CURRENT_USER() | |----------------| | JSMITH | +----------------+ select current_role(); +-----------------------+ | CURRENT_ROLE() | |-----------------------| | POLARIS_ACCOUNT_ADMIN | +-----------------------+
2단계: 조직 및 계정 이름 가져오기¶
보안 통합 생성과 같은 작업을 위해서는 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름이 필요합니다.
이 형식으로 조직 이름과 Snowflake Open Catalog 계정 이름을 가져오려면 Snowflake CLI에서 다음 명령을 실행합니다.
snow sql -q "SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME();"
응답에서 반환된 값을 복사하여 나중에 사용할 수 있도록 텍스트 편집기에 붙여넣습니다. 예를 들어
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';"
여기서
<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')
여기서
<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;"
6단계: 사용자 지정 역할에 카탈로그 역할 부여¶
이 섹션에서는 생성한 사용자 지정 역할에 카탈로그 역할을 부여합니다.
사용자 지정 역할에 카탈로그 역할을 부여한 후 서비스 주체에게 사용자 지정 역할을 부여하여 주체 역할에 부여된 카탈로그 역할에 부여된 모든 권한을 서비스 주체에게 부여합니다. Open Catalog의 RBAC 모델에 대한 자세한 내용은 RBAC 모델을 참조하세요.
카탈로그에 대한 카탈로그 관리자 권한이 있거나 지정한 카탈로그에 대한 권한 세트가 있는 카탈로그 역할을 사용자 지정 역할에 부여할 수 있습니다.
카탈로그에 대한 카탈로그 관리자 권한을 서비스 주체에게 부여하려면 사용자 지정 역할에 카탈로그 관리자 권한이 있는 카탈로그 역할을 부여합니다. 카탈로그 관리자에게 있는 권한에 대한 자세한 내용은 카탈로그 관리자 역할을 참조하세요.
지정한 권한 세트를 서비스 주체에게 부여하려면 사용자 지정 역할에 지정한 권한 세트가 있는 카탈로그 역할을 부여합니다. 예를 들어, 사용자 지정 역할에 cataLog_reader, catalog_writer 또는 catalog_metadata_reader 카탈로그 역할을 부여하려면 이 옵션을 선택합니다.
사용자 지정 역할에 카탈로그 관리자 권한이 있는 카탈로그 역할 부여¶
이 섹션에서는 사용자 지정 역할에 카탈로그 관리자 권한이 있는 카탈로그 역할을 부여합니다. 워크플로는 다음과 같습니다.
카탈로그 역할 만들기¶
다음 명령을 실행하여 지정한 카탈로그에 카탈로그 역할을 생성합니다.
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>" }'
- 여기서
<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 과 같습니다.
Snowflake Labs의 카탈로그<https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#catalog-1>_를 참조하세요.
See See 카탈로그 역할 만들기.
카탈로그 역할에 카탈로그 관리자 권한 부여¶
다음 명령을 실행합니다.
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"}}'
- 여기서
<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의 권한 이름입니다.
Snowflake Labs의 권한<https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_을 참조하세요. 지침에 설명된 대로 카탈로그 역할에 CATALOG_MANAGE_CONTENT 권한을 부여해야 합니다.
See Grant catalog privileges on a catalog role and select the
CATALOG_MANAGE_CONTENT privilege.
사용자 지정 역할에 카탈로그 역할 부여¶
중요
사용자 지정 역할은 대소문자를 구분합니다. 소문자로 또는 소문자와 대문자로 생성한 경우에도 모든 대문자로 사용자 지정 역할을 지정해야 합니다.
다음 명령을 실행합니다.
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}}'
- 여기서
<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>입니다.
Snowflake Labs에서 권한 부여<https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#grants>_를 참조하세요.
See 보안 카탈로그. These
instructions describe how to grant a catalog role to a principal role but the process is the same. Instead of selecting a principal
role from the list, select your custom role that you want to grant with the catalog role that has the CATALOG_MANAGE_CONTENT privilege.
필요한 경우 이 단계를 반복하여 사용자 지정 역할에 다른 카탈로그에 대한 카탈로그 관리자 권한을 부여합니다.
사용자 지정 역할에 지정한 권한 세트가 있는 카탈로그 역할 부여¶
워크플로는 다음과 같습니다.
카탈로그 역할에 권한 부여. 이러한 권한을 통해 서비스 주체는 Open Catalog에서 작업을 수행할 수 있습니다.
카탈로그 역할 만들기¶
이 섹션에서는 카탈로그 역할을 만듭니다. 카탈로그 역할에 대한 자세한 내용은 카탈로그 역할 섹션을 참조하십시오.
다음 명령을 실행하여 지정한 카탈로그에 카탈로그 역할을 생성합니다.
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>" }'
- 여기서
<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 과 같습니다.
Snowflake Labs의 카탈로그<https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#catalog-1>_를 참조하세요.
See 카탈로그 역할 만들기.
카탈로그 역할에 권한 부여¶
전체 카탈로그 또는 카탈로그의 네임스페이스나 테이블에 권한을 부여할 수 있습니다.
카탈로그 역할에 카탈로그 권한 부여¶
다음 명령을 실행합니다.
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>"}}'
- 여기서
<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>_을 참조하세요.
Snowflake Labs의 권한<https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_을 참조하세요.
참고
Snowflake Labs의 예에서는 카탈로그에 대한 카탈로그 관리자 권한을 부여하는 CATALOG_MANAGE_CONTENT 권한을 부여합니다. 사용 가능한 다른 권한 목록은 Open Catalog 설명서의 액세스 제어 권한<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>"}}'
- 여기서
<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>_을 참조하세요.
Snowflake Labs의 권한<https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_을 참조하세요.
참고
Snowflake Labs의 예에서는 카탈로그에 대한 카탈로그 관리자 권한을 부여하는 CATALOG_MANAGE_CONTENT 권한을 부여합니다. 사용 가능한 다른 권한 목록은 Open Catalog 설명서의 액세스 제어 권한<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>"}}'
- 여기서
<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>_을 참조하세요.
Snowflake Labs의 권한<https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_을 참조하세요.
참고
Snowflake Labs의 예에서는 카탈로그에 대한 카탈로그 관리자 권한을 부여하는 CATALOG_MANAGE_CONTENT 권한을 부여합니다. 사용 가능한 다른 권한 목록은 Open Catalog 설명서의 액세스 제어 권한<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}}'
- 여기서
<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>은 사용자 지정 역할에 부여할 카탈로그 역할의 이름입니다.
Snowflake Labs에서 권한 부여<https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#grants>_를 참조하세요.
See 보안 카탈로그. These instructions describe how to grant a catalog role to a principal role but the process is the same. Instead of selecting a principal role from the list, you select your custom role.
필요한 경우 이 워크플로를 반복하여 사용자 지정 역할에 생성한 추가 카탈로그 역할을 부여합니다.
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';"
여기서
<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;"
서비스 주체에게 역할이 부여되었는지 확인하려면 다음을 실행합니다.
snow sql -q "show grants to user service_principal1;"
응답에서, 생성한 사용자 지정 역할(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')
여기서
<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 asENGINEER.
10단계: 외부 OAuth를 사용하여 Open Catalog에 연결¶
이 섹션에서는 외부 OAuth를 통해 서비스 주체를 Open Catalog에 연결합니다. 지침은 외부 OAuth를 사용하여 Snowflake Open Catalog에 연결을 참조하세요. 여기에는 액세스 토큰 또는 자동 토큰 새로 고침을 사용하여 연결하기 위한 지침이 포함되어 있습니다.