REST 카탈로그 구성 확인하기¶
다음 시나리오를 사용하여 Snowflake가 카탈로그 서버와 상호 작용할 수 있도록 Iceberg REST 카탈로그에 대한 인증 및 액세스 제어를 올바르게 구성했는지 확인할 수 있습니다.
SYSTEM$VERIFY_CATALOG_INTEGRATION 사용¶
SYSTEM$VERIFY_CATALOG_INTEGRATION 함수를 사용하여 카탈로그 통합 구성을 확인할 수 있습니다.
다음 예제는 시스템 함수가 부적절하게 구성된 카탈로그 통합의 문제를 포착하고 보고하는 방법을 보여줍니다.
다음 예제 문은 잘못된 OAuth 클라이언트 시크릿을 사용하여 REST 카탈로그 통합을 생성합니다(오류 없이 실행됨):
시스템 함수를 사용하여 카탈로그 통합을 확인하고 실패를 예상합니다.
출력:
OAuth 에 대한 구성 확인¶
원격 REST 카탈로그를 사용하여 OAuth 구성을 확인하려면 다음 단계를 따르십시오.
1단계: 엑세스 토큰 검색하기¶
curl 명령을 사용하여 카탈로그에서 엑세스 토큰을 검색합니다. 다음 예제는 Snowflake Open Catalog 에서 엑세스 토큰을 요청합니다.
여기서
https://xx123xx.us-west-2.aws.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens는 OAuth 토큰을 검색하는 엔드포인트입니다(getToken).scope은 카탈로그 통합을 생성할 때OAUTH_ALLOWED_SCOPES매개 변수에 지정하는 값과 동일합니다. 범위가 여러 개인 경우 공백을 구분 기호로 사용합니다.my_client_id는 카탈로그 통합을 생성할 때OAUTH_CLIENT_ID매개 변수에 지정한 것과 동일한 클라이언트 ID 입니다.my_client_secret은 카탈로그 통합을 만들 때OAUTH_CLIENT_SECRET매개 변수에 지정한 것과 동일한 클라이언트 시크릿입니다.
반환 값 예제:
2단계: 엑세스 토큰 권한 확인하기¶
이전 단계에서 검색한 엑세스 토큰을 사용하여 카탈로그 서버에 액세스할 수 있는 권한이 있는지 확인합니다.
curl 명령을 사용하여 카탈로그의 구성 설정을 목록으로 만들 수 있습니다.
여기서
?warehouse=warehouse는 선택적으로 카탈로그에서 요청할 웨어하우스 이름을 지정합니다(지원되는 경우). Snowflake Open Catalog 의 경우 웨어하우스 이름은 카탈로그 이름입니다.ACCESS_TOKEN은 이전 단계에서 검색한access_token을 포함하는 변수입니다.
반환 값 예제:
3단계: 카탈로그에서 테이블 로드하기¶
GET 으로 요청하여 테이블을 로딩할 수도 있습니다. Snowflake는 loadTable 작업을 사용하여 REST 카탈로그에서 테이블 데이터를 로드합니다.
여기서
prefix는 선택적으로 이전getConfig응답에서 얻은 접두사를 지정합니다.namespace는 검색하려는 테이블의 네임스페이스입니다. 네임스페이스가 중첩된 경우%1F구분 기호를 사용합니다(예:parentNamespace%1FchildNamespace).table은 테이블 이름입니다.
무기명 토큰에 대한 구성 확인¶
다음 단계에 따라 원격 REST 카탈로그에서 무기명 토큰 사용에 대한 구성을 확인하십시오.
1단계: 엑세스 토큰 권한 확인하기¶
curl 명령을 사용하여 카탈로그 서버에 액세스할 수 있는 권한이 있는지 확인합니다.
여기서
https://xx123xx.us-west-2.aws.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens는 OAuth 토큰을 검색하는 엔드포인트입니다(getToken).?warehouse=warehouse는 선택적으로 카탈로그에서 요청할 웨어하우스 이름을 지정합니다(지원되는 경우).BEARER_TOKEN은 이전 단계에서 검색한access_token을 포함하는 변수입니다.
반환 값 예제:
2단계: 카탈로그에서 테이블 로드하기¶
GET 으로 요청하여 테이블을 로딩할 수도 있습니다. Snowflake는 loadTable 작업을 사용하여 REST 카탈로그에서 테이블 데이터를 로드합니다.
여기서
prefix는 선택적으로 이전getConfig응답에서 얻은 접두사를 지정합니다.namespace는 검색하려는 테이블의 네임스페이스입니다. 네임스페이스가 중첩된 경우%1F구분 기호를 사용합니다(예:parentNamespace%1FchildNamespace).table은 테이블 이름입니다.
SigV4 에 대한 구성 확인¶
AWS 로 SigV4 에 대한 구성을 확인하려면 다음 단계를 따르십시오.
1단계: IAM 역할 신뢰 관계에 사용자를 추가합니다¶
SigV4 에 대한 REST 카탈로그 통합을 생성하면 Snowflake는 AWS IAM 사용자를 Snowflake 계정에 프로비저닝합니다. API 게이트웨이 리소스에 액세스할 수 있는 권한이 있는 IAM 역할 에 대한 IAM 사용자를 신뢰 관계에 추가 합니다.
구성을 테스트하려면 사용자는 역할의 신뢰 정책 문서에 AWS 사용자를 추가한 후 AWS 계정에서 사용자로 역할을 맡을 수 있습니다. 현재 IAM 사용자를 검색하려면 ARN, AWS 명령줄 인터페이스(CLI)에 sts get-caller-identity 명령을 사용합니다. :
출력 예:
업데이트된 신뢰 정책 문서에는 다음과 같이 Snowflake 사용자(ARN)와 사용자(ARN)가 모두 포함되어야 합니다.
전체 지침은 AWS IAM 설명서의 역할 신뢰 정책 업데이트 섹션을 참조하십시오.
2단계: 임시 자격 증명을 얻기 위해 IAM 역할을 가정합니다.¶
AWS 에 대한 임시 보안 자격 증명을 얻으려면 sts assume-role 명령을 사용하여 AWS CLI 에 대한 임시 보안 자격 증명을 얻습니다.
여기서
my_role_arn는 Snowflake에 대해 구성한 IAM 역할의 Amazon 리소스 이름(ARN)입니다.session_name는 가정된 역할 세션에 대해 사용자가 선택한 문자열 식별자입니다(예:my_rest_session).
출력 예:
참고
assume-role 명령이 실패하면 현재 AWS 사용자가 역할의 신뢰 정책에 허용된 주체로 포함되어 있지 않다는 의미입니다.
마찬가지로 Snowflake IAM 사용자 ARN 이 신뢰 정책에 포함되지 않은 경우 Snowflake는 API 게이트웨이 리소스에 연결할 수 없습니다. 자세한 내용은 IAM에서 신뢰 관계 구성 섹션을 참조하십시오.
3단계: IAM 역할에 올바른 권한이 있는지 확인합니다¶
이전 단계에서 검색한 임시 자격 증명을 사용하여 IAM 역할에 API 게이트웨이 APIs 를 호출할 수 있는 권한이 있는지 확인합니다.
curl 명령을 사용하여 카탈로그의 구성 설정을 목록으로 만들 수 있습니다.
여기서
123xxxxxxx.execute-api.us-west-2.amazonaws.com은 API 게이트웨이 호스트 이름입니다.test_v2는 API 가 배포되는 스테이지의 이름입니다.v1/config는 Iceberg 카탈로그 OpenAPI 정의에서 getConfig 작업을 지정합니다.?warehouse=warehouse는 선택적으로 카탈로그에서 요청할 웨어하우스 이름을 지정합니다(지원되는 경우).$AWS_ACCESS_KEY_ID는sts assume-role명령을 사용하여 검색한AccessKeyId를 포함하는 변수입니다.$AWS_SECRET_ACCESS_KEY는sts assume-role명령을 사용하여 검색한SecretAccessKey를 포함하는 변수입니다.aws:amz:us-west-2:execute-api는 SigV4 프로토콜의 서명 이름입니다. AWS Glue의 경우aws:amz:us-west-2:glue를 대신 사용하십시오.$AWS_SESSION_TOKEN는sts assume-role명령을 사용하여 검색한SessionToken을 포함하는 변수입니다.
반환 값 예제:
GET 으로 요청하여 테이블을 로딩할 수도 있습니다. Snowflake는 loadTable 작업을 사용하여 REST 카탈로그에서 테이블 데이터를 로드합니다.
여기서
prefix는 선택적으로 이전getConfig응답에서 얻은 접두사를 지정합니다.namespace는 검색하려는 테이블의 네임스페이스입니다. 네임스페이스가 중첩된 경우%1F구분 기호를 사용합니다(예:parentNamespace%1FchildNamespace).table은 테이블 이름입니다.
비공개 API
비공개 API 의 경우 동일한 curl 명령에서 VPC 엔드포인트와 비공개 Amazon API 게이트웨이 호스트 이름을 지정할 수 있습니다.
예:
여기서
https://vpce-xxxxxxxxxxxxxxxxxxxxxxxxxx.execute-api.us-west-2.vpce.amazonaws.com/...은 VPC 엔드포인트의 호스트 이름입니다.abc1defgh2.execute-api.us-west-2.amazonaws.com은 Amazon API 게이트웨이에서 비공개 API 의 호스트 이름입니다.