예제 - OAuth를 사용한 외부 액세스¶
이 항목에서는 공급자가 Snowflake 외부의 엔드포인트에 대한 액세스 권한을 부여할 수 있도록 참조를 사용하는 방법을 설명하는 예제를 제공합니다. 이 예제에서는 OAuth2 시크릿과 외부 액세스 통합을 사용하여 액세스를 허용합니다.
매니페스트 파일에 참조 추가¶
OAuth를 사용하여 외부 엔드포인트에 액세스할 수 있도록 하려면 공급자가 manifest.yml
파일에 다음 항목을 추가하면 됩니다.
USAGE 권한이 있는 EXTERNAL ACCESS INTEGRATION 참조
READ 권한이 있는 SECRET 참조
다음 예제 manifest.yml
파일은 이러한 참조를 정의하는 방법을 보여줍니다.
manifest_version: 1
configuration:
log_level: warn
trace_level: off
...
references:
- consumer_secret:
label: "Consumer's Secret"
description: "Needed to authenticate with xyz.com"
privileges:
- READ
object_type: SECRET
register_callback: config.register_my_secret
configuration_callback: config.get_config_for_ref
- consumer_external_access:
label: "Default External Access Integration"
description: "This is required to access xyz.com"
privileges:
- USAGE
object_type: EXTERNAL ACCESS INTEGRATION
register_callback: config.register_reference
configuration_callback: config.get_config_for_ref
required_at_setup: true
참고
이러한 참조는 multi_valued
속성을 true로 설정할 수 없습니다.
시크릿 및 외부 액세스 오브젝트에 대한 참조의 경우에도 설정 스크립트에 configuration_callback
함수가 필요합니다. 자세한 내용은 설치 스크립트 configuration_callback 함수 추가 섹션을 참조하십시오.
설치 스크립트 configuration_callback 함수 추가¶
시크릿 및 외부 액세스 통합을 위한 참조를 추가한 후 설정 스크립트에 configuration_callback
함수를 추가해야 합니다. 외부 액세스 통합 또는 시크릿을 만들려면 애플리케이션에서 호스트 포트, 시크릿 유형, OAuth에 대한 권한 부여 및 토큰 엔드포인트 등의 값을 확인할 수 있어야 합니다. configuration_callback
은 컨슈머 계정에서 애플리케이션으로 이 정보를 제공합니다.
Snowsight 는 이 콜백 프로시저를 실행하여 사용자에게 오브젝트를 구성하라는 메시지를 표시하는 구성 대화 상자를 채웁니다. 실행을 위해서는 앱 역할에 대한 권한이 부여되어야 합니다.
참고
configuration_callback은 외부 액세스 통합 및 시크릿 오브젝트에만 지원됩니다.
콜백 함수에는 다음과 같은 요구 사항이 있습니다.
콜백 함수는 참조 이름이 포함된 인자를 받아야 합니다. 이를 통해 동일한 콜백 함수로 여러 참조를 처리할 수 있습니다.
콜백 함수는 올바른 형식의 JSON 오브젝트를 반환해야 합니다. JSON 오브젝트에 포함된 속성은 다음과 같습니다.
type
메시지의 유형을 나타냅니다. 유효한 값은 다음과 같습니다.
CONFIGURATION
: 오브젝트 유형에 따라 오브젝트의 구성 값이 포함된 페이로드를 반환합니다.ERROR
: Snowsight 에 표시되는 관련 메시지와 함께 오류를 반환합니다.
payload
type
속성 값과 구성 중인 오브젝트 유형에 따른 응답 내용을 포함합니다.
구성 콜백에 대한 서명은 다음과 같습니다.
CREATE OR REPLACE PROCEDURE configuration_callback_name(ref_name string)
RETURNS STRING
language <language>
as
$$
...
$$
설정 스크립트 내에서 앱 구성에 사용되는 애플리케이션 역할에 USAGE 권한을 부여하여 저장 프로시저를 호출할 수 있는 권한을 갖도록 해야 합니다. 다음 예제는 저장 프로시저에 USAGE 권한을 부여하는 방법을 보여줍니다.
GRANT USAGE ON PROCEDURE configuration_callback_name(string)
TO APPLICATION ROLE app_role;
콜백 함수는 JSON 오브젝트를 반환합니다. 자세한 내용은 구성 콜백 응답의 JSON 형식 섹션을 참조하십시오.
다음 예제는 외부 액세스와 시크릿 참조를 처리하기 위한 일반적인 콜백 함수를 보여줍니다.
이 함수는 다음을 수행합니다.
외부 액세스 통합에 대한 참조를 위해 프로시저는 필요한 구성 정보가 포함된 JSON 오브젝트를 반환합니다. 자세한 내용은 외부 액세스 통합의 JSON 형식 섹션을 참조하십시오.
시크릿에 대한 참조를 위해 프로시저는 OAuth2 유형의 시크릿 구성이 포함된 JSON 오브젝트를 반환합니다. 자세한 내용은 시크릿 참조의 JSON 형식 섹션을 참조하십시오.
CREATE OR REPLACE PROCEDURE config.get_config_for_ref(ref_name STRING)
RETURNS STRING
LANGUAGE SQL
AS
$$
BEGIN
CASE (ref_name)
WHEN 'CONSUMER_EXTERNAL_ACCESS' THEN
RETURN '{
"type": "CONFIGURATION",
"payload":{
"host_ports":["google.com"],
"allowed_secrets" : "LIST",
"secret_references":["CONSUMER_SECRET"]}}';
WHEN 'CONSUMER_SECRET' THEN
RETURN '{
"type": "CONFIGURATION",
"payload":{
"type" : "OAUTH2",
"security_integration": {
"oauth_scopes": ["https://www.googleapis.com/auth/analytics.readonly"],
"oauth_token_endpoint": "https://oauth2.googleapis.com/token",
"oauth_authorization_endpoint":
"https://accounts.google.com/o/oauth2/auth"}}}';
END CASE;
RETURN '';
END;
$$;
GRANT USAGE ON PROCEDURE config.get_config_for_ref(string)
TO APPLICATION ROLE app_admin;
시크릿 및 외부 액세스 통합을 위해 Python Permission SDK 사용하기¶
Python Permission SDK 는 시크릿 및 외부 액세스 통합 오브젝트를 지원합니다. 하지만 이러한 오브젝트의 동작은 약간 다릅니다.
공급자가 permission.request_reference()
를 호출하고 object_type
값이 SECRET
또는 EXTERNAL ACCESS INTEGRATION
인 참조의 이름을 전달하면 Snowsight 는 자동으로 다음을 수행합니다.
설정 스크립트에서
configuration_callback
함수를 호출합니다.configuration_callback
함수에서 반환된 값의 유효성을 검사합니다.컨슈머에게 구성 대화 상자를 표시합니다.
참고
공급자가 payload.allow_secrets
속성을 LIST
로 설정하여 외부 액세스 통합을 구성하는 경우 시크릿에 대한 참조를 요청하기 위해 별도의 호출을 할 필요가 없습니다. 시크릿 구성은 외부 액세스 통합 구성의 일부로 암시적으로 포함됩니다.