Snowflake Open Catalog에서 키 페어 인증 구성하기

Snowflake Open Catalog에서 키 페어 인증 구성하기

이 주제는 Snowflake Open Catalog에서 키 페어 인증을 구성하는 방법을 설명해요.

기능 — 일반 제공(Generally Available): 정부 리전에서는 제공되지 않아요.

이 구성으로 키 페어 인증 사용자가 액세스 토큰을 통해 Open Catalog에 프로그래밍 방식으로 연결할 수 있어요. 간단히 하기 위해 다른 지정이 없다면, 이 주제의 나머지에서는 키 페어 인증 사용자를 사용자라는 용어로 지칭해요.

키 페어 인증을 사용하면 적절한 카탈로그에 권한이 있는 다양한 사용자 지정 역할에 대해 사용자에게 Open Catalog에 대한 프로그래밍 방식 접근을 허용할 수 있어요. 예를 들어:

  • ANALYST 사용자 지정 역할: catalogA에만 접근할 수 있음
  • ENGINEER 사용자 지정 역할: catalogB에만 접근할 수 있음

출처: Configure key pair authentication in Snowflake Open Catalog

본문

전제 조건

  • Open Catalog 계정에 카탈로그를 만들어요.
  • 사용자 머신에 Snowflake CLI가 설치되어 있어야 해요. 또한 Open Catalog용 Snowflake CLI 연결을 만들어야 해요. 이 연결을 만들려면 아래의 Open Catalog용 Snowflake CLI 연결 만들기를 참고해요.
  • 키 페어 인증을 구성하려면 Open Catalog에서 서비스 관리자(service admin) 역할이 있어야 해요. 자세한 내용은 사용자 역할을 참고해요. Snowflake CLI에서는 이 역할이 POLARIS_ACCOUNT_ADMIN으로 표시돼요.
  • 사용자 머신에 SnowSQL이 설치되어 있어야 해요.
  • 서비스 관리자 액세스 토큰이 필요해요. 키 페어 인증을 프로그래밍 방식으로 구성하려면 이 토큰이 필요하고, 카탈로그 관리자 권한으로 사용자에게 부여하려면 필수예요. 이 토큰을 생성하려면 아래의 서비스 관리자 액세스 토큰 생성하기를 참고해요.

시작하기 전에

키 페어 인증을 구성하려면 Open Catalog용 Snowflake CLI 연결이 필요해요. 이 연결을 만들려면 조직 이름과 Open Catalog 계정 이름이 포함된 전체 Open Catalog 계정 식별자가 필요해요. 예를 들어 <orgname>.<my-snowflake-open-catalog-account-name> 형태예요.

Open Catalog용 Snowflake CLI 연결 만들기

키 페어 인증을 구성하려는 계정에 대해 Open Catalog용 Snowflake CLI 연결을 만들어서 사용할 수 있게 해요.

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

키 페어 인증을 구성하려는 Snowflake Open Catalog 계정용 연결을 추가해요. 다음 값으로 연결을 추가해요. 나머지 모든 파라미터는 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 |
+-----------------------+

서비스 관리자 액세스 토큰 생성하기

키 페어 인증을 프로그래밍 방식으로 구성하려면 서비스 관리자 액세스 토큰이 필요해요. 다만 Open Catalog UI를 사용해 키 페어 인증 구성을 위한 일부 작업을 수행할 수도 있어요. 이미 서비스 관리자 액세스 토큰을 생성했고 아직 유효하다면 이 단계를 건너뛰어도 돼요.

서비스 관리자 액세스 토큰을 생성하는 단계는 다음과 같아요.

  1. 개인 키와 공개 키 생성하기
  2. 공개 키를 자신에게 할당하기
  3. 자신을 위한 JWT 생성하기
  4. 서비스 관리자 액세스 토큰 생성하기

개인 키와 공개 키 생성하기

이 섹션에서는 개인 키와 공개 키를 생성하는 방법을 설명해요. 개인 키를 생성하려면 다음 명령을 사용해요.

openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt

공개 키를 생성하려면 다음 명령을 사용해요.

openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub

공개 키를 자신에게 할당하기

Snowflake CLI 연결을 사용해 공개 키를 자신에게 할당해요.

참고: 설정한 기본 Snowflake CLI 연결에 POLARIS_ACCOUNT_ADMIN 역할이 부여되어 있지 않다면 명령에 다음 문을 포함해야 해요: USE ROLE POLARIS_ACCOUNT_ADMIN

공개 키를 자신에게 할당하려면 다음을 실행해요.

snow sql -q "alter user <your_username> set RSA_PUBLIC_KEY='<your_public_key>';"

여기서,

  • <your_username>은 Open Catalog UI에 로그인할 때 사용하는 Open Catalog 사용자 이름이에요.

참고: 공개 키를 검색해야 한다면 cat rsa_key.pub을 실행해요.

사용자에게 공개 키(RSA_PUBLIC_KEY)가 설정되어 있고 사용자의 RSA 공개 키 지문(RSA_PUBLIC_KEY_FP)이 설정되어 있는지 확인해요.

snow sql -q "desc user <your_username>;"

여기서,

  • <your_username>은 Open Catalog UI에 로그인할 때 사용하는 Open Catalog 사용자 이름이에요.

JSON 웹 토큰 생성하기

이 섹션에서는 액세스 토큰을 생성하는 데 필요한 JSON 웹 토큰(JWT)을 생성해요. SnowSQL을 사용해 JWT를 생성하려면 다음을 실행해요.

snowsql --private-key-path rsa_key.p8 --generate-jwt -h <your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com -a <account-identifier> -u <your_user_name>

여기서,

  • <your_org_name>-<your_open_catalogaccount_name>은 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름이에요. 예를 들어 ABCDEFG-MYACCOUNT1이에요. 이 형식의 값을 검색하려면 조직 이름과 계정 이름 검색하기를 참고해요.
  • <account-identifier>는 Snowflake Open Catalog 계정의 계정 식별자예요. 이 값을 검색하려면 Open Catalog 계정 URL을 참고해요. 예를 들어 https://app.snowflake.com/us-west-2/abc12345/#/에서 abc12345가 이에요.
  • <your_user_name>은 Open Catalog 사용자 이름이에요. 암호화했다면 패스키를 입력하고, 그렇지 않으면 Enter를 선택해 계속해요. JWT를 받는 데 몇 초가 걸릴 수 있어요.

서비스 관리자 액세스 토큰 생성하기

이 섹션에서는 키 페어 인증을 프로그래밍 방식으로 구성하는 데 사용하는 서비스 관리자 액세스 토큰을 생성해요. 서비스 관리자 액세스 토큰을 생성하려면 다음 명령을 실행하고 값을 텍스트 편집기에 복사해요.

curl -i -X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: application/json" \
--data-urlencode "scope=session:role:POLARIS_ACCOUNT_ADMIN" \
--data-urlencode "grant_type=client_credentials" \
--data-urlencode "client_secret=<your_JWT>" \
"https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens"

여기서,

  • POLARIS_ACCOUNT_ADMIN은 키 페어 인증 구성을 포함해 Open Catalog에서 관리 작업을 수행할 수 있게 해 주는 Open Catalog의 기본 제공 역할 이름이에요. Open Catalog UI에서는 이 역할을 서비스 관리자 역할이라고 해요.
  • <your_JWT>는 이전 단계에서 생성한 JWT예요.
  • <your_org_name>-<your_open_catalogaccount_name>은 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름이에요. 예를 들어 ABCDEFG-MYACCOUNT1이에요. 이 형식의 값을 검색하려면 조직 이름과 계정 이름 검색하기를 참고해요.

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

이 단계에서는 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;"

2단계: 조직 이름과 계정 이름 검색하기

JWT나 액세스 토큰 생성 같은 작업에는 조직 이름과 Snowflake Open Catalog 계정 이름을 하이픈으로 구분한 값이 필요해요. 이 형식의 조직 이름과 Snowflake Open Catalog 계정 이름을 검색하려면 다음 명령을 실행해요.

snow sql -q "SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME();"

응답에서 반환된 값을 복사해 나중에 사용하려고 텍스트 편집기에 붙여 넣어요. 예를 들어 ABCDEFG-MYACCOUNT1이에요.

3단계: 카탈로그 역할을 사용자 지정 역할에 부여하기

이 섹션에서는 만든 사용자 지정 역할에 카탈로그 역할을 부여해요. 카탈로그 역할을 사용자 지정 역할에 부여한 다음, 사용자 지정 역할을 사용자에게 부여해서 주체 역할에 부여된 카탈로그 역할에 부여된 모든 권한을 사용자에게 부여해요. Open Catalog의 RBAC 모델에 대한 자세한 내용은 RBAC 모델을 참고해요.

카탈로그에 대한 카탈로그 관리자 권한을 가진 카탈로그 역할이나, 사용자가 지정한 카탈로그 권한 집합을 가진 카탈로그 역할로 사용자 지정 역할에 부여할 수 있어요.

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

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

  1. 카탈로그 역할 만들기
  2. 카탈로그 역할에 카탈로그 관리자 권한 부여하기
  3. 카탈로그 역할을 사용자 지정 역할에 부여하기

카탈로그 역할 만들기

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 권한이 있는 카탈로그 역할로 부여하려는 사용자 지정 역할을 선택해요. 필요한 경우 다른 카탈로그에 대해 카탈로그 관리자 권한으로 사용자 지정 역할을 부여하려면 이 단계를 반복해요.

사용자가 지정한 권한 집합을 가진 카탈로그 역할을 사용자 지정 역할에 부여하기

워크플로는 다음과 같아요.

  1. 카탈로그 역할 만들기
  2. 카탈로그 역할에 권한 부여하기 — 이 권한을 통해 사용자가 Open Catalog에서 작업을 수행할 수 있어요.
  3. 카탈로그 역할을 사용자 지정 역할에 부여하기

카탈로그 역할 만들기

이 섹션에서는 카탈로그 역할을 만들어요. 카탈로그 역할에 대한 자세한 내용은 카탈로그 역할을 참고해요.

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를 참고해요. 보안 카탈로그도 참고해요. 이 지침은 카탈로그 역할을 주체 역할에 부여하는 방법을 설명하지만 절차는 동일해요. 목록에서 주체 역할을 선택하는 대신 사용자 지정 역할을 선택해요. 필요한 경우 만든 추가 카탈로그 역할을 사용자 지정 역할에 부여하려면 이 워크플로를 반복해요.

4단계: 사용자 만들기

Snowflake CLI 연결을 사용해 Open Catalog에 키 페어 인증 사용자를 만들어요. 사람은 이 사용자의 자격 증명으로 Open Catalog UI에 로그인할 수 없어요.

참고: 설정한 기본 Snowflake CLI 연결에 POLARIS_ACCOUNT_ADMIN 역할이 부여되어 있지 않다면 명령에 다음 문을 포함해야 해요: USE ROLE POLARIS_ACCOUNT_ADMIN

사용자를 만들려면 다음 명령을 실행해요.

snow sql -q "create user <username> login_name='<username>';"

여기서,

  • <username>은 키 페어 인증 사용자에게 할당하려는 사용자 이름이에요.

5단계: 사용자 지정 역할을 사용자에게 부여하기

이 섹션에서는 Snowflake CLI 연결을 사용해 사용자 지정 역할을 하나 이상의 사용자에게 부여해요. 그 결과 사용자 지정 역할에 부여된 카탈로그 역할(들)에 부여된 권한을 사용자에게 부여하게 돼요. Open Catalog의 RBAC 모델에 대한 자세한 내용은 RBAC 모델을 참고해요.

참고: 설정한 기본 Snowflake CLI 연결에 POLARIS_ACCOUNT_ADMIN 역할이 부여되어 있지 않다면 명령에 다음 문을 포함해야 해요: USE ROLE POLARIS_ACCOUNT_ADMIN

중요: 사용자 지정 역할은 대소문자를 구분해요. 소문자만으로 또는 소문자와 대문자를 섞어 만들어도, 사용자 지정 역할은 모두 대문자로 지정해야 해요.

다음 예시는 ENGINEER 사용자 지정 역할을 keypairuser1 사용자에게 부여해요.

snow sql -q "GRANT ROLE ENGINEER to user keypairuser1;"

역할이 사용자에게 부여되었는지 확인하려면 다음을 실행해요.

snow sql -q "show grants to user keypairuser1;"

응답에서 만든 사용자 지정 역할(role 열)이 만든 사용자(grantee_name 열)에 할당되었는지 확인해요.

6단계: 사용자용 액세스 토큰 생성하기

이 섹션에서는 나중에 키 페어 인증을 통해 사용자를 Open Catalog에 연결할 때 사용하는 사용자용 액세스 토큰을 생성해요. 단계는 다음과 같아요.

  1. 개인 키와 공개 키 생성하기
  2. 사용자에게 공개 키 할당하기
  3. JWT 생성하기
  4. 액세스 토큰 생성하기

개인 키와 공개 키 생성하기

이 섹션에서는 개인 키와 공개 키를 생성하는 방법을 설명해요. 개인 키를 생성하려면 다음 명령을 사용해요.

openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt

공개 키를 생성하려면 다음 명령을 사용해요.

openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub

사용자에게 공개 키 할당하기

Snowflake CLI 연결을 사용해 만든 사용자에게 공개 키를 할당해요.

참고: 설정한 기본 Snowflake CLI 연결에 POLARIS_ACCOUNT_ADMIN 역할이 부여되어 있지 않다면 명령에 다음 문을 포함해야 해요: USE ROLE POLARIS_ACCOUNT_ADMIN

만든 사용자에게 공개 키를 할당하려면 다음을 실행해요.

snow sql -q "alter user <username> set RSA_PUBLIC_KEY='<your_public_key>';"

참고: 공개 키를 검색해야 한다면 cat rsa_key.pub을 실행해요.

사용자에게 공개 키(RSA_PUBLIC_KEY)가 설정되어 있고 사용자의 RSA 공개 키 지문(RSA_PUBLIC_KEY_FP)이 설정되어 있는지 확인해요.

snow sql -q "desc user keypairuser1;"

사용자용 JWT 생성하기

이 단계에서는 액세스 토큰을 생성하는 데 필요한 JWT를 생성해요. SnowSQL을 사용해 JWT를 생성하려면 다음을 실행해요.

snowsql --private-key-path rsa_key.p8 --generate-jwt -h <your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com -a <account-identifier> -u <user_name>

여기서,

  • <your_org_name>-<your_open_catalogaccount_name>은 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름이에요. 예를 들어 ABCDEFG-MYACCOUNT1이에요. 이 형식의 값을 검색하려면 조직 이름과 계정 이름 검색하기를 참고해요.
  • <account-identifier>는 Snowflake Open Catalog 계정의 계정 식별자예요. 이 값을 검색하려면 Open Catalog 계정 URL을 참고해요. 예를 들어 https://app.snowflake.com/us-west-2/abc12345/#/에서 abc12345가 이에요.
  • <user_name>은 공개 키가 할당된 Open Catalog 사용자의 사용자 이름이에요. 암호화했다면 패스키를 입력하고, 그렇지 않으면 Enter를 선택해 계속해요. JWT를 받는 데 몇 초가 걸릴 수 있어요.

사용자용 액세스 토큰 생성하기

JWT를 사용해 사용자 지정 또는 기본 제공 역할의 액세스 토큰을 검색해요.

curl -i -X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: application/json" \
--data-urlencode "scope=session:role:<custom_role_name>" \
--data-urlencode "grant_type=client_credentials" \
--data-urlencode "client_secret=<your_JWT>" \
"https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens"

여기서,

  • <custom_role_name>은 ENGINEER처럼 만든 사용자 지정 역할의 이름이에요.
  • <your_JWT>는 이전 단계에서 생성한 JWT예요.
  • <your_org_name>-<your_open_catalogaccount_name>은 하이픈으로 구분된 조직 이름과 Snowflake Open Catalog 계정 이름이에요. 예를 들어 ABCDEFG-MYACCOUNT1이에요. 이 형식의 값을 검색하려면 조직 이름과 계정 이름 검색하기를 참고해요.

액세스 토큰을 변수($ACCESS_TOKEN)에 저장해요.

7단계: 키 페어 인증으로 Open Catalog에 연결하기

이 섹션에서는 키 페어 인증을 통해 사용자를 Open Catalog에 연결해요. 지침은 키 페어 인증으로 Snowflake Open Catalog에 연결하기를 참고해요.

키 페어 교체(rotation) 구성하기

Open Catalog는 중단 없는 교체를 위해 여러 활성 키를 지원해요. Open Catalog에서 키 페어 교체를 구성하는 단계는 Snowflake에서 구성하는 단계와 동일해요. 지침은 Snowflake 문서의 키 페어 교체 구성하기를 참고해요.

Apache Polaris™ (Incubating) CLI를 사용해 카탈로그 관리하기

키 페어 인증을 구성한 후에는 서비스 관리자 액세스 토큰을 생성해서 Apache Polaris™ (Incubating) CLI를 사용해 Open Catalog에서 카탈로그를 설정·관리할 수 있어요. 지침은 Snowflake Labs의 Open Catalog with Polaris 가이드를 참고해요.

더 알아보기 (Learn more)