예 - 컨테이너가 있는 앱의 서비스에 대한 외부 액세스 구성

이 항목에서는 컨테이너가 있는 앱에서 Snowflake 외부의 엔드포인트에 대한 액세스 권한을 부여하는 방법에 대해 설명합니다. 이 예제에서는 외부 액세스 통합과 시크릿을 사용하여 엔드포인트에 대한 액세스를 허용합니다.

컨테이너가 있는 앱에서 외부 엔드포인트에 대한 액세스 권한을 부여하려면 공급자가 다음 오브젝트에 대한 참조를 정의해야 합니다.

  • EXTERNAL ACCESS INTEGRATION

    외부 엔드포인트의 도메인 이름을 지정하는 네트워크 규칙 목록을 정의합니다. 외부 액세스 통합은 이러한 엔드포인트에 액세스하는 데 사용되는 자격 증명을 저장하는 시크릿 목록을 지정할 수도 있습니다. 시크릿은 선택 사항이며, NONE 또는 ALL로 설정할 수 있습니다.

    컨테이너를 사용하는 앱의 경우 외부 액세스 통합에는 USAGE 권한이 필요합니다.

    참고

    multi_valued 속성을 TRUE로 설정할 수 없습니다. 단일 값 참조만 지원됩니다.

  • SECRET

    외부 액세스 통합을 사용하여 외부 엔드포인트에 연결하는 데 필요한 자격 증명이 포함되어 있습니다.

    컨테이너가 있는 앱의 경우 시크릿은 USAGE 및 READ 권한을 지원합니다. 이러한 권한 중 하나 이상을 지정해야 합니다. 시크릿이 서비스와 함께 사용되거나 저장 프로시저 또는 사용자 정의 함수에 연결되어 있는 경우 READ 권한을 지정해야 합니다.

매니페스트 파일에 외부 액세스 통합 참조 추가

다음 예제에서는 공급자가 매니페스트 파일에서 외부 액세스 통합을 정의하는 방법을 보여줍니다.

references:
  ...
  - my_external_access:
      label: "Default External Access Integration"
      description: "This EAI is required to access xyz.com"
      privileges:
        - USAGE
      object_type: EXTERNAL ACCESS INTEGRATION
      required_at_setup: true
      register_callback: config.REGISTER_EAI_CALLBACK
      configuration_callback: config.get_config_for_ref
Copy

이 예제에서는 references 에서 다음 속성을 지정합니다.

  • my_external_access: 외부 참조의 이름을 지정합니다.

    • privileges: 외부 액세스 통합에 필요한 권한을 나열합니다. 이 예제에서는 USAGE 권한이 필요합니다.

    • object_type: EXTERNAL ACCESS INTEGRATION: 외부 액세스 통합에 대한 참조를 나타냅니다.

    • required_at_setup: true 로 설정된 경우 앱이 오브젝트를 생성하기 전에 컨슈머가 오브젝트에 대한 액세스 권한을 승인해야 함을 나타냅니다.

    • register_callback: 앱에 참조를 등록하는 데 사용되는 콜백 저장 프로시저를 지정합니다.

    • configuration_callback: 시크릿에 대한 구성 콜백 함수를 지정합니다. 자세한 내용은 설치 스크립트 configuration_callback 함수 추가 섹션을 참조하십시오.

매니페스트 파일에 시크릿 참조를 추가합니다.

다음 예제에서는 공급자가 매니페스트 파일에 시크릿을 정의하는 방법을 보여줍니다.

references:
 ...
 - consumer_secret:
     label: "Consumer secret"
     description: "Needed to authenticate with an external endpoint"
     privileges:
       - READ
     object_type: SECRET
     register_callback: config.register_my_secret
     configuration_callback: config.get_config_for_ref
Copy

이 예제에서는 references 에서 다음 속성을 지정합니다.

  • consumer_secret: 참조의 이름을 지정합니다.

    • privileges: 시크릿에 필요한 권한을 나열합니다. 이 예제에서는 READ 권한이 지정됩니다.

    • object_type: SECRET: 참조가 시크릿임을 나타냅니다.

    • register_callback: 앱에 참조를 등록하는 데 사용되는 콜백 저장 프로시저를 지정합니다.

    • configuration_callback: 시크릿에 대한 구성 콜백 함수를 지정합니다. 자세한 내용은 설치 스크립트 configuration_callback 함수 추가 섹션을 참조하십시오.

설치 스크립트 configuration_callback 함수 추가

시크릿 및 외부 액세스 통합을 위한 참조를 추가한 후 설정 스크립트에 configuration_callback 함수를 추가해야 합니다. 외부 액세스 통합 또는 시크릿을 생성하려면 애플리케이션에서 호스트 포트, 시크릿 유형, OAuth에 대한 승인 및 토큰 엔드포인트 등의 값을 확인할 수 있어야 합니다. configuration_callback 함수는 컨슈머 계정의 이 정보를 앱에 제공합니다.

CREATE OR REPLACE PROCEDURE CONFIG.GET_CONFIG_FOR_REFERENCE(ref_name STRING)
RETURNS STRING
LANGUAGE SQL
AS
$$
BEGIN
 CASE (UPPER(ref_name))
   WHEN 'my_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;
$$;
Copy

Snowsight 는 이 콜백 프로시저를 실행하여 사용자에게 필수 오브젝트를 구성하라는 메시지를 표시하는 구성 대화 상자를 채웁니다.

참고

configuration_callback 함수는 외부 액세스 통합 및 시크릿 오브젝트에만 지원됩니다.

다음 예제와 같이 프로시저를 실행하려면 앱 역할에 권한을 부여해야 합니다.

GRANT USAGE ON PROCEDURE CONFIG.GET_CONFIG_FOR_REFERENCE(STRING)
  TO APPLICATION ROLE app_admin;
Copy

컨테이너가 있는 앱에서 외부 액세스 통합을 사용할 때의 모범 사례

컨테이너가 있는 앱에서 외부 액세스 통합을 사용할 때 Snowflake는 다음과 같은 모범 사례를 권장합니다.

  • CREATE SERVICE 또는 ALTER SERVICE 명령에 지정된 외부 액세스 통합에 대한 참조는 설정 스크립트에서 명령이 실행되기 전에 바인딩되어야 합니다. 참조가 바인딩되지 않으면 이러한 명령은 실패합니다.

  • 서비스 사양에 지정된 시크릿에 대한 참조도 설정 스크립트에서 CREATE SERVICE 또는 ALTER SERVICE 명령이 실행되기 전에 바인딩해야 합니다. 참조가 바인딩되지 않으면 이러한 명령은 실패합니다.

  • configuration_callback 함수에서 ERROR 유형의 페이로드를 반환하는 경우 공급자는 컨슈머가 오류의 원인과 해결 방법을 이해하는 데 도움이 되는 유용한 오류 메시지를 반환해야 합니다. 예:

    • 앱에서 오류가 발생한 경우

    • 아직 참조가 필요하지 않은 경우

    • 참조가 허용될 준비가 되지 않은 경우.

  • configuration_callback 함수에 required_at_setup 속성이 TRUE로 설정된 참조가 포함된 경우 설정 시 configuration_callback 함수가 성공해야 합니다. 이러한 맥락에서 configuration_callback 함수는 컨슈머의 정보를 활용할 수 없습니다.

  • 서비스와의 외부 액세스 통합에 대한 참조를 사용할 때 앱에 컨슈머가 제공한 시크릿이 필요한 경우 ALLOWED_AUTHENTICATION_SECRETS = ALL을 사용하여 서비스를 생성하는 것이 좋습니다. 이렇게 하면 외부 액세스 통합 내에서 시크릿을 간단하게 처리할 수 있습니다.

  • 앱이 특정 엔드포인트에만 도달해야 하고 시크릿이 필요하지 않은 경우 ALLOWED_AUTHENTICATION_SECRETS = NONE을 사용하십시오. 기본값은 NONE입니다. 자세한 내용은 CREATE EXTERNAL ACCESS INTEGRATION 섹션을 참조하십시오.

  • 앱이 참조를 업데이트해야 하는 경우, 먼저 참조의 바인딩을 취소한 다음, 컨슈머에게 새 오브젝트를 생성하여 참조에 바인딩하라는 메시지를 표시합니다. 컨슈머는 기존 오브젝트를 편집하고 바인딩할 수 있습니다. CREATE EXTERNAL ACCESS INTEGRATION 섹션을 참조하십시오.