Snowflake Open Catalog에서 External OAuth 구성하기
Snowflake Open Catalog에서 External OAuth 구성하기
이 주제는 Snowflake Open Catalog에 접근할 때 OAuth를 사용하는 외부 서버를 구성하는 방법을 설명해요.
기능 — 일반 제공(Generally Available): 정부 리전에서는 제공되지 않아요.
참고: 이 주제는 Open Catalog용 External OAuth를 구성할 때 Auth0을 사용하는 방법을 보여줘요. 하지만 Okta나 Microsoft Entra ID에서 구성하는 단계도 비슷해요.
본문
전제 조건
- Open Catalog 계정에 카탈로그를 하나 이상 만들어요.
- ID 제공자(IdP)가 있는 계정이 있는지 확인해요. 데모를 위해 이 주제는 Auth0을 IdP로 사용해요. 회사·조직용 Auth0 계정을 만들려면 https://auth0.com/을 참고해요. 다만 Okta와 Microsoft Entra ID의 절차도 비슷해요.
- 사용자 머신에 Snowflake CLI가 설치되어 있어야 해요.
- External OAuth를 구성하려면 Open Catalog에서 서비스 관리자(service admin) 역할이 있어야 해요. 자세한 내용은 사용자 역할을 참고해요. Snowflake CLI에서는 이 역할이
POLARIS_ACCOUNT_ADMIN으로 표시돼요.
시작하기 전에
External OAuth를 구성하려면 Open Catalog용 Snowflake CLI 연결을 만들어야 해요. 이 연결을 만들려면 조직 이름과 Open Catalog 계정 이름이 포함된 전체 Open Catalog 계정 식별자가 필요해요. 예를 들어 <orgname>.<my-snowflake-open-catalog-account-name> 형태예요.
- Snowflake 조직 이름(
<orgname>)을 찾으려면 계정의 조직 이름과 계정 이름 찾기를 참고해요. - Snowflake Open Catalog 계정 이름(
<my-snowflake-open-catalog-account-name>)을 찾으려면 Snowflake Open Catalog 계정의 계정 이름 찾기를 참고해요.
Snowflake CLI 연결 만들기
Open Catalog 계정용 Snowflake CLI 연결을 만들어서 해당 계정의 external OAuth를 구성할 때 사용해요.
1단계: Snowflake Open Catalog용 Snowflake CLI 연결 추가하기
다음 값으로 연결을 추가해요. 나머지 모든 파라미터는 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 연결을 기본 연결로 설정할 수 있어요. 기본 연결에 대한 자세한 내용은 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 |
+-----------------------+
1단계: Auth0을 External OAuth 인가 서버로 설정하기
이 섹션에서는 Auth0을 External OAuth 인가 서버로 설정해요. 다만 Microsoft Entra ID나 Okta를 External OAuth 인가 서버로 설정하는 단계도 비슷해요.
참고: 회사·조직용 Auth0 계정을 만들려면 https://auth0.com/을 참고해요.
API 정의하기
권한을 할당할 수 있도록 API를 정의해요.
- Auth0 콘솔에 로그인해요.
- 왼쪽 창에서 Applications > APIs를 선택해요.
- + Create API를 선택해요.
- Name과 Identifier를 입력하고 기본 설정을 그대로 둬요.
- Create를 선택해요.
API에 권한 추가하기
클라이언트에 부여할 수 있도록 API에 권한을 추가해요. 이 클라이언트는 Open Catalog의 주체(principal)가 되고, 클라이언트에 할당하는 권한이 Open Catalog의 주체 역할(principal role)이 돼요.
- Auth0 콘솔에 로그인해요.
- 왼쪽 창에서 Applications > APIs를 선택해요.
- 사용할 API를 선택해요.
- Permissions 탭에서 권한을 추가해요.
- Permission 및 Description 필드를 사용해 API용 권한을 추가해요.
SESSION:ROLE:<custom_role_name>형식을 사용해요. 예:SESSION:ROLE:ENGINEER
- + Add를 선택해요.
중요: 서비스 관리자 액세스 토큰을 생성하려면 API에 대한 권한으로 Open Catalog에서 서비스 관리자 역할을 할당할 수 있게 해 주는
SESSION:ROLE:POLARIS_ACCOUNT_ADMIN권한을 반드시 추가해야 해요.
애플리케이션 만들기
만든 API에 권한을 부여할 수 있도록 애플리케이션을 만들어요.
- Auth0 콘솔에 로그인해요.
- 왼쪽 창에서 Applications > Applications를 선택해요.
- + Create Application을 선택해 애플리케이션을 만들어요.
- External OAuth 구성을 위해 필요한 각 애플리케이션마다 이 단계를 반복해요.
중요: 서비스 관리자 액세스 토큰을 생성하기 위한 애플리케이션을 반드시 만들어 두어야 해요. 나중에 이 애플리케이션에
SESSION:ROLE:POLARIS_ACCOUNT_ADMIN권한을 부여하게 돼요.
API에 권한 할당하기
클라이언트에 부여할 권한을 선택하려면 다음 단계를 따라요.
- Auth0 콘솔에 로그인해요.
- 왼쪽 창에서 Applications > Applications를 선택해요.
- 만든 애플리케이션을 선택해요.
- APIs 탭을 선택해요.
- 필요한 경우 사용할 API의 Authorized 토글을 On으로 선택해요.
- 사용할 API의 Expand 아이콘을 선택해요.
- Permissions 필드에서 API에 할당할 각 권한의 확인란을 선택해요.
- Update를 선택해요.
- 만든 각 애플리케이션마다 이 단계를 반복해요.
중요: 서비스 관리자 액세스 토큰을 생성하기 위해 만든 애플리케이션을 반드시 선택하고, API에
SESSION: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에서 Applications > Applications > [애플리케이션 이름] > Settings > Domain 필드로 이동해요.<your_org_name>-<your_open_catalog_account_name>은 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름이에요. 예를 들어ABCDEFG-MYACCOUNT1이에요. 이 형식의 값을 검색하려면 조직 이름과 계정 이름 검색하기를 참고해요.
4단계: 서비스 관리자 액세스 토큰 생성하기
External OAuth를 프로그래밍 방식으로 구성하려면 서비스 관리자 액세스 토큰이 필요해요. 다만 Open Catalog UI를 사용해 External 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에서 Applications > Applications > [애플리케이션 이름] > Settings > Domain 필드로 이동해요.<client_id>는POLARIS_ACCOUNT_ADMIN권한에 접근을 부여하는 Auth0 애플리케이션의 클라이언트 ID예요. 이 값을 찾으려면 Auth0에서 Applications > Applications > [애플리케이션 이름] > Settings > Client ID 필드로 이동해요.<client_secret>은POLARIS_ACCOUNT_ADMIN권한에 접근을 부여하는 Auth0 애플리케이션의 클라이언트 시크릿이에요. 이 값을 찾으려면 Auth0에서 Applications > Applications > [애플리케이션 이름] > Settings > Client Secret 필드로 이동해요.<audience>는 사용자 API의 식별자예요. 이 값을 찾으려면 Auth0에서 Applications > APIs > 사용할 API 선택 > Settings > Identifier 필드로 이동해요.<your_org_name>-<your_open_catalog_account_name>은 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름이에요. 예를 들어ABCDEFG-MYACCOUNT1이에요. 이 형식의 값을 검색하려면 조직 이름과 계정 이름 검색하기를 참고해요.POLARIS_ACCOUNT_ADMIN은 External OAuth 구성을 포함해 Open Catalog에서 관리 작업을 수행할 수 있게 해 주는 Open Catalog의 기본 제공 역할 이름이에요. Open Catalog UI에서는 이 역할을 서비스 관리자 역할이라고 해요.
5단계: 사용자 지정 역할 만들기
이 단계에서는 Snowflake CLI 연결을 사용해 사용자 지정 역할(custom role)을 만들어요. 나중에 카탈로그 역할을 이 역할에 부여하고, 이 사용자 지정 역할을 서비스 주체에 부여해 서비스 주체에 권한을 부여할 수 있도록 역할을 만드는 거예요.
사용자 지정 역할에 대한 자세한 내용은 사용자 지정 역할을 참고하고, 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 / Apache Polaris (Incubating) CLI / Open Catalog UI
지정한 카탈로그에 카탈로그 역할을 만들려면 다음 명령을 실행해요.
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이에요. 이 형식의 값을 검색하려면 2단계: 조직 이름과 계정 이름 검색하기를 참고해요.{catalogName}은 카탈로그 역할을 만들려는 Open Catalog의 카탈로그 이름이에요.<service_admin_access_token>은 생성한 서비스 관리자 액세스 토큰이에요.<catalog_role_name>에는 카탈로그 역할의 이름을 지정해요. 예:CatalogAdmin
Snowflake Labs의 Catalog를 참고해요. 카탈로그 역할 만들기도 참고해요.
카탈로그 역할에 카탈로그 관리자 권한 부여하기
curl / Apache Polaris (Incubating) CLI / Open Catalog UI
다음 명령을 실행해요.
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이에요. 이 형식의 값을 검색하려면 2단계: 조직 이름과 계정 이름 검색하기를 참고해요.{catalogName}은 권한을 부여하려는 Open Catalog의 카탈로그 이름이에요.{catalogRoleName}은 권한을 부여할 카탈로그 역할의 이름이에요. 예:TableReader<service_admin_access_token>은 생성한 서비스 관리자 액세스 토큰이에요.CATALOG_MANAGE_CONTENT는 카탈로그 관리자 권한을 가진 Open Catalog의 권한 이름이에요.
Snowflake Labs의 Privileges를 참고해요. 지침에 설명된 대로 카탈로그 역할에 CATALOG_MANAGE_CONTENT 권한을 반드시 부여해요. 카탈로그 역할에 카탈로그 권한 부여하기를 참고하고 CATALOG_MANAGE_CONTENT 권한을 선택해요.
카탈로그 역할을 사용자 지정 역할에 부여하기
중요: 사용자 지정 역할은 대소문자를 구분해요. 소문자만으로 또는 소문자와 대문자를 섞어 만들어도, 사용자 지정 역할은 모두 대문자로 지정해야 해요.
curl / Apache Polaris (Incubating) CLI / Open Catalog UI
다음 명령을 실행해요.
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이에요. 이 형식의 값을 검색하려면 2단계: 조직 이름과 계정 이름 검색하기를 참고해요.{customRoleName}은 카탈로그 관리자 권한이 있는 카탈로그 역할로 부여하려는 사용자 지정 역할의 이름이에요. 예를 들어OPEN_CATALOG_ADMIN이에요.{catalogName}은 카탈로그 관리자 권한을 부여하려는 Open Catalog의 카탈로그 이름이에요.<catalog_role_name>은 카탈로그 관리자 권한이 부여된 카탈로그의 카탈로그 역할 이름이에요. 예:CatalogAdmin<service_admin_access_token>은 생성한 서비스 관리자 액세스 토큰이에요.
Snowflake Labs의 Grants를 참고해요. 보안 카탈로그도 참고해요. 이 지침은 카탈로그 역할을 주체 역할에 부여하는 방법을 설명하지만 절차는 동일해요. 목록에서 주체 역할을 선택하는 대신, CATALOG_MANAGE_CONTENT 권한이 있는 카탈로그 역할로 부여하려는 사용자 지정 역할을 선택해요. 필요한 경우 다른 카탈로그에 대해 카탈로그 관리자 권한으로 사용자 지정 역할을 부여하려면 이 단계를 반복해요.
사용자가 지정한 권한 집합을 가진 카탈로그 역할을 사용자 지정 역할에 부여하기
워크플로는 다음과 같아요.
- 카탈로그 역할 만들기
- 카탈로그 역할에 권한 부여하기 — 이 권한을 통해 서비스 주체가 Open Catalog에서 작업을 수행할 수 있어요.
- 카탈로그 역할을 사용자 지정 역할에 부여하기
카탈로그 역할 만들기
이 섹션에서는 카탈로그 역할을 만들어요. 카탈로그 역할에 대한 자세한 내용은 카탈로그 역할을 참고해요.
curl / Apache Polaris (Incubating) CLI / Open Catalog UI
지정한 카탈로그에 카탈로그 역할을 만들려면 다음 명령을 실행해요.
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이에요. 이 형식의 값을 검색하려면 2단계: 조직 이름과 계정 이름 검색하기를 참고해요.{catalogName}은 카탈로그 역할을 만들려는 Open Catalog의 카탈로그 이름이에요.<service_admin_access_token>은 생성한 서비스 관리자 액세스 토큰이에요.<catalog_role_name>에는 카탈로그 역할의 이름을 지정해요. 예:TableReader
Snowflake Labs의 Catalog를 참고해요. 카탈로그 역할 만들기도 참고해요.
카탈로그 역할에 권한 부여하기
전체 카탈로그 또는 카탈로그의 네임스페이스·테이블에 권한을 부여할 수 있어요.
카탈로그 역할에 카탈로그 권한 부여하기
curl / Apache Polaris (Incubating) CLI / Open Catalog UI
다음 명령을 실행해요.
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이에요. 이 형식의 값을 검색하려면 2단계: 조직 이름과 계정 이름 검색하기를 참고해요.{catalogName}은 권한을 부여하려는 Open Catalog의 카탈로그 이름이에요.{catalogRoleName}은 권한을 부여할 카탈로그 역할의 이름이에요. 예:TableReader<service_admin_access_token>은 생성한 서비스 관리자 액세스 토큰이에요.<privilege_name>은 카탈로그 역할에 부여할 권한의 이름이에요. 사용 가능한 권한 목록은 액세스 제어 권한을 참고해요.
Snowflake Labs의 Privileges를 참고해요.
참고: Snowflake Labs의 예시는 카탈로그 관리자 권한을 부여하는
CATALOG_MANAGE_CONTENT권한을 부여해요. 하지만 다른 사용 가능한 권한 목록은 Open Catalog 문서의 액세스 제어 권한을 참고해요.
카탈로그 역할에 카탈로그 권한 부여하기를 참고해요.
카탈로그 역할에 네임스페이스 권한 부여하기
curl / Apache Polaris (Incubating) CLI / Open Catalog UI
다음 명령을 실행해요.
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이에요. 이 형식의 값을 검색하려면 2단계: 조직 이름과 계정 이름 검색하기를 참고해요.{catalogName}은 권한을 부여하려는 Open Catalog의 카탈로그 이름이에요.{catalogRoleName}은 권한을 부여할 카탈로그 역할의 이름이에요. 예:TableReader<service_admin_access_token>은 생성한 서비스 관리자 액세스 토큰이에요.<namespace_name>은 권한을 부여하려는 네임스페이스의 이름이에요. 중첩 네임스페이스에 권한을 부여하려면 각 상위 네임스페이스와 함께 네임스페이스를 쉼표로 구분해 지정해요. 예를 들어"ns1","ns1a"와 같이요.<privilege_name>은 카탈로그 역할에 부여할 네임스페이스 권한의 이름이에요. 사용 가능한 권한 목록은 액세스 제어 권한을 참고해요.
Snowflake Labs의 Privileges를 참고해요.
참고: Snowflake Labs의 예시는 카탈로그 관리자 권한을 부여하는
CATALOG_MANAGE_CONTENT권한을 부여해요. 하지만 다른 사용 가능한 권한 목록은 Open Catalog 문서의 액세스 제어 권한을 참고해요.
카탈로그 역할에 네임스페이스 권한 부여하기를 참고해요.
카탈로그 역할에 테이블 권한 부여하기
curl / Apache Polaris (Incubating) CLI / Open Catalog UI
다음 명령을 실행해요.
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이에요. 이 형식의 값을 검색하려면 2단계: 조직 이름과 계정 이름 검색하기를 참고해요.{catalogName}은 권한을 부여하려는 Open Catalog의 카탈로그 이름이에요.{catalogRoleName}은 권한을 부여할 카탈로그 역할의 이름이에요. 예:TableReader<service_admin_access_token>은 생성한 서비스 관리자 액세스 토큰이에요.<namespace_name>은 테이블에 권한을 부여하려는 네임스페이스의 이름이에요. 중첩 네임스페이스 아래에 있는 테이블에 권한을 부여하려면 각 상위 네임스페이스와 함께 중첩 네임스페이스를 쉼표로 구분해 지정해요. 예를 들어"ns1","ns1a"와 같이요.<table_name>은 권한을 부여하려는 테이블의 이름이에요.<privilege_name>은 카탈로그 역할에 부여할 권한의 이름이에요. 사용 가능한 권한 목록은 액세스 제어 권한을 참고해요.
Snowflake Labs의 Privileges를 참고해요.
참고: Snowflake Labs의 예시는 카탈로그 관리자 권한을 부여하는
CATALOG_MANAGE_CONTENT권한을 부여해요. 하지만 다른 사용 가능한 권한 목록은 Open Catalog 문서의 액세스 제어 권한을 참고해요.
카탈로그 역할에 테이블 권한 부여하기를 참고해요.
카탈로그 역할을 사용자 지정 역할에 부여하기
중요: 사용자 지정 역할은 대소문자를 구분해요. 소문자만으로 또는 소문자와 대문자를 섞어 만들어도, 사용자 지정 역할은 모두 대문자로 지정해야 해요.
curl / Apache Polaris (Incubating) CLI / Open Catalog UI
다음 명령을 실행해요.
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이에요. 이 형식의 값을 검색하려면 2단계: 조직 이름과 계정 이름 검색하기를 참고해요.{customRoleName}은 카탈로그 역할을 부여하려는 사용자 지정 역할의 이름이에요.{catalogName}은 권한을 부여하려는 카탈로그 역할을 만든 Open Catalog의 카탈로그 이름이에요.<service_admin_access_token>은 생성한 서비스 관리자 액세스 토큰이에요.<catalog_role_name>은 사용자 지정 역할에 부여하려는 카탈로그 역할의 이름이에요.
Snowflake Labs의 Grants를 참고해요. 보안 카탈로그도 참고해요. 이 지침은 카탈로그 역할을 주체 역할에 부여하는 방법을 설명하지만 절차는 동일해요. 목록에서 주체 역할을 선택하는 대신 사용자 지정 역할을 선택해요. 필요한 경우 만든 추가 카탈로그 역할을 사용자 지정 역할에 부여하려면 이 워크플로를 반복해요.
7단계: 서비스 주체 만들기
이 단계에서는 Snowflake CLI 연결을 사용해 서비스 주체를 만들어요.
참고: 설정한 기본 Snowflake CLI 연결에
POLARIS_ACCOUNT_ADMIN역할이 부여되어 있지 않다면 명령에 다음 문을 포함해야 해요:USE ROLE POLARIS_ACCOUNT_ADMIN
External 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에서 Applications > Applications > [애플리케이션 이름] > Settings > Client ID 필드로 이동해요.
8단계: 사용자 지정 역할을 서비스 주체에 부여하기
이 섹션에서는 Snowflake CLI 연결을 사용해 사용자 지정 역할을 하나 이상의 서비스 주체에 부여해요. 그 결과 사용자 지정 역할에 부여된 카탈로그 역할(들)에 부여된 권한을 서비스 주체에 부여하게 돼요. Open Catalog의 RBAC 모델에 대한 자세한 내용은 RBAC 모델을 참고해요.
참고: 설정한 기본 Snowflake CLI 연결에
POLARIS_ACCOUNT_ADMIN역할이 부여되어 있지 않다면 명령에 다음 문을 포함해야 해요:USE ROLE POLARIS_ACCOUNT_ADMIN
중요: 사용자 지정 역할은 대소문자를 구분해요. 소문자만으로 또는 소문자와 대문자를 섞어 만들어도, 사용자 지정 역할은 모두 대문자로 지정해야 해요.
다음 예시는 ENGINEER 사용자 지정 역할을 service_principal1 서비스 주체에 부여해요.
snow sql -q "GRANT ROLE ENGINEER to user service_principal1;"
역할이 서비스 주체에 부여되었는지 확인하려면 다음을 실행해요.
snow sql -q "show grants to user service_principal1;"
응답에서 만든 사용자 지정 역할(role 열)이 만든 서비스 주체(grantee_name 열)에 할당되었는지 확인해요.
(선택 사항) 9단계: 액세스 토큰 생성하기
이 섹션에서는 External 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에서 Applications > Applications > [애플리케이션 이름] > Settings > Domain 필드로 이동해요.<client_id>는 Auth0 애플리케이션의 클라이언트 ID예요. 이 값을 찾으려면 Auth0에서 Applications > Applications > [애플리케이션 이름] > Settings > Client ID 필드로 이동해요.<client_secret>은 Auth0 애플리케이션의 클라이언트 시크릿이에요. 이 값을 찾으려면 Auth0에서 Applications > Applications > [애플리케이션 이름] > Settings > Client Secret 필드로 이동해요.<audience>는 사용자 API의 식별자예요. 이 값을 찾으려면 Auth0에서 Applications > APIs > 사용할 API 선택 > Settings > Identifier 필드로 이동해요.<your_org_name>-<your_open_catalog_account_name>은 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름이에요. 예를 들어ABCDEFG-MYACCOUNT1이에요. 이 형식의 값을 검색하려면 조직 이름과 계정 이름 검색하기를 참고해요.<custom_role_name>은ENGINEER처럼 카탈로그 역할로 부여한 사용자 지정 역할의 이름이에요.
10단계: External OAuth로 Open Catalog에 연결하기
이 섹션에서는 서비스 주체를 External OAuth를 통해 Open Catalog에 연결해요. 액세스 토큰 또는 자동 토큰 새로 고침을 사용해 연결하는 지침이 포함된 External OAuth로 Snowflake Open Catalog에 연결하기를 참고해요.