카테고리:

사용자 및 보안 DDL (서드 파티 서비스 통합)

CREATE API INTEGRATION

계정에 새 API 통합 오브젝트를 만들거나 기존 API 통합을 대체합니다.

API 통합 오브젝트는 다음에 대한 정보를 포함하여 HTTPS 프록시 서비스에 대한 정보를 저장합니다.

  • 클라우드 플랫폼 공급자(예: Amazon AWS).

  • 프록시 서비스의 유형(클라우드 플랫폼 공급자가 두 가지 이상의 프록시 서비스 유형을 제공하는 경우).

  • 프록시 서비스를 사용하기에 충분한 권한이 있는 클라우드 플랫폼 역할의 식별자 및 액세스 자격 증명. 예를 들어, AWS에서 애 역할의 ARN(Amazon 리소스 이름)은 식별자 및 액세스 자격 증명의 역할을 합니다.

    이 클라우드 사용자에게 적절한 권한이 부여되면 Snowflake가 이 사용자를 사용하여 프록시 서비스(클라우드 플랫폼의 기본 HTTPS 프록시 서비스의 인스턴스. 예: Amazon API Gateway의 인스턴스)의 리소스에 액세스할 수 있습니다.

  • API 통합 오브젝트는 그러한 프록시 서비스에 대해 허용되고 선택적으로 차단되는 엔드포인트와 리소스도 지정합니다.

참고 항목:

ALTER API INTEGRATION , DROP INTEGRATION , SHOW INTEGRATIONS , 외부 함수 , CREATE EXTERNAL FUNCTION

이 항목의 내용:

구문

구문은 클라우드 플랫폼마다 다릅니다.

Amazon API Gateway의 경우

CREATE [ OR REPLACE ] API INTEGRATION [ IF NOT EXISTS ] <integration_name>
    API_PROVIDER = { aws_api_gateway | aws_private_api_gateway | aws_gov_api_gateway | aws_gov_private_api_gateway }
    API_AWS_ROLE_ARN = '<iam_role>'
    [ API_KEY = '<api_key>' ]
    API_ALLOWED_PREFIXES = ('<...>')
    [ API_BLOCKED_PREFIXES = ('<...>') ]
    ENABLED = { TRUE | FALSE }
    [ COMMENT = '<string_literal>' ]
    ;

aws_api_gateway 또는 aws_private_api_gateway 또는 aws_gov_api_gateway 또는 aws_gov_private_api_gateway 는 따옴표로 묶여 있으면 됩니다.

Azure API Management의 경우

CREATE [ OR REPLACE ] API INTEGRATION [ IF NOT EXISTS ] <integration_name>
    API_PROVIDER = azure_api_management
    AZURE_TENANT_ID = '<tenant_id>'
    AZURE_AD_APPLICATION_ID = '<azure_application_id>'
    [ API_KEY = '<api_key>' ]
    API_ALLOWED_PREFIXES = ( '<...>' )
    [ API_BLOCKED_PREFIXES = ( '<...>' ) ]
    ENABLED = { TRUE | FALSE }
    [ COMMENT = '<string_literal>' ]
    ;

azure_api_management 가 따옴표로 묶여 있으면 안 됩니다.

Google Cloud API Gateway의 경우

CREATE [ OR REPLACE ] API INTEGRATION [ IF NOT EXISTS ] <integration_name>
    API_PROVIDER = google_api_gateway
    GOOGLE_AUDIENCE = '<google_audience_claim>'
    API_ALLOWED_PREFIXES = ( '<...>' )
    [ API_BLOCKED_PREFIXES = ( '<...>' ) ]
    ENABLED = { TRUE | FALSE }
    [ COMMENT = '<string_literal>' ]
    ;

google_api_gateway 가 따옴표로 묶여 있으면 안 됩니다.

필수 매개 변수

Amazon API Gateway의 경우

integration_name

API 통합의 이름을 지정합니다. 이 이름은 오브젝트 식별자 에 대한 규칙을 따릅니다. 계정에서 이름은 API 통합 간에 고유해야 합니다.

provider_info

HTTPS 프록시 서비스 유형을 지정합니다. 유효한 값은 다음과 같습니다.

  • aws_api_gateway: 리전 엔드포인트를 사용하는 Amazon API Gateway용.

  • aws_private_api_gateway: 개인 엔드포인트를 사용하는 Amazon API Gateway용.

  • aws_gov_api_gateway: 미국 정부 GovCloud 엔드포인트를 사용하는 Amazon API Gateway용.

  • aws_gov_private_api_gateway: 프라이빗 엔드포인트이기도 한 미국 정부 GovCloud 엔드포인트를 사용하는 Amazon API Gateway용.

iam_role

Amazon AWS의 경우 이것은 클라우드 플랫폼 역할의 ARN(Amazon 리소스 이름)입니다.

api_key

API 키 (〈구독 키’라고도 함)입니다.

ENABLED = < TRUE | FALSE >

이 API 통합을 사용할지, 사용하지 않을지 지정합니다. API 통합을 사용하지 않을 경우 이 통합에 의존하는 어떤 외부 함수도 작동하지 않습니다.

이 값은 대/소문자를 구분하지 않습니다.

기본값은 TRUE 입니다.

API_ALLOWED_PREFIXES = (...)

통합을 사용하여 하나 이상의 HTTPS 프록시 서비스 엔드포인트(예: Amazon API Gateway)와 이러한 프록시 내의 리소스를 참조하는 외부 함수를 명시적으로 제한합니다. 접두사로 처리되는 URLs의 쉼표로 구분된 목록을 지원합니다(자세한 내용은 아래 참조).

API_ALLOWED_PREFIXES = (...) 의 각 URL은 접두사로 처리됩니다. 다음과 같이 지정한다고 예를 들어 봅시다.

https://xyz.amazonaws.com/production/

그 의미는

https://xyz.amazonaws.com/production/

아래의 모든 리소스가 허용된다는 뜻입니다. 예를 들어 다음이 허용됩니다.

https://xyz.amazonaws.com/production/ml1

보안을 극대화하려면 허용된 위치를 가능한 한 좁게 제한해야 합니다.

Azure API Management Service의 경우

integration_name

API 통합의 이름을 지정합니다. 이 이름은 오브젝트 식별자 에 대한 규칙을 따릅니다. 계정에서 이름은 API 통합 간에 고유해야 합니다.

tenant_id

모든 Azure API Management 인스턴스가 속한 Office 365 tenant의 ID를 지정합니다. API 통합은 하나의 tenant에만 인증할 수 있으므로, 허용 및 차단된 위치는 모두 이 tenant에 속하는 API Management 인스턴스를 참조해야 합니다.

Tenant ID를 찾으려면 Azure 포털에 로그인하여 Azure Active Directory » Properties 를 클릭하십시오. tenant ID는 Tenant ID 필드에 표시됩니다.

azure_application_id

원격 서비스를 위한 Azure AD(Active Directory) 앱의 〈애플리케이션(클라이언트) ID’입니다. Microsoft Azure에서 외부 함수 만들기 의 지침을 준수한 경우 이는 해당 지침의 워크시트에 기록한 Azure Function App AD Application ID 입니다.

api_key

API 키 (〈구독 키’라고도 함)입니다.

ENABLED = < TRUE | FALSE >

이 API 통합을 사용할지, 사용하지 않을지 지정합니다. API 통합을 사용하지 않을 경우 이 통합에 의존하는 어떤 외부 함수도 작동하지 않습니다.

이 값은 대/소문자를 구분하지 않습니다.

기본값은 TRUE 입니다.

API_ALLOWED_PREFIXES = (...)

통합을 사용하여 하나 이상의 HTTPS 프록시 서비스 엔드포인트(예: Azure API Management 서비스)와 이러한 프록시 내의 리소스를 참조하는 외부 함수를 명시적으로 제한합니다. 접두사로 처리되는 URLs의 쉼표로 구분된 목록을 지원합니다(자세한 내용은 아래 참조).

API_ALLOWED_PREFIXES = (...) 의 각 URL은 접두사로 처리됩니다. 다음과 같이 지정한다고 예를 들어 봅시다.

https://my-external-function-demo.azure-api.net/my-function-app-name

그 의미는

https://my-external-function-demo.azure-api.net/my-function-app-name

아래의 모든 리소스가 허용된다는 뜻입니다. 예를 들어 다음이 허용됩니다.

https://my-external-function-demo.azure-api.net/my-function-app-name/my-http-trigger-function

보안을 극대화하려면 허용된 위치를 가능한 한 좁게 제한해야 합니다.

Google Cloud API Gateway의 경우

integration_name

API 통합의 이름을 지정합니다. 이 이름은 오브젝트 식별자 에 대한 규칙을 따릅니다. 계정에서 이름은 API 통합 간에 고유해야 합니다.

google_audience

이것은 Google API Gateway에 대해 인증하기 위해 JWT(JSON Web Token)을 생성할 때 대상 그룹 클레임으로 사용됩니다. Google 인증에 대한 자세한 내용은 Google 서비스 계정 인증 설명서 를 참조하십시오.

ENABLED = < TRUE | FALSE >

이 API 통합을 사용할지, 사용하지 않을지 지정합니다. API 통합을 사용하지 않을 경우 이 통합에 의존하는 어떤 외부 함수도 작동하지 않습니다.

이 값은 대/소문자를 구분하지 않습니다.

기본값은 TRUE 입니다.

API_ALLOWED_PREFIXES = (...)

통합을 사용하여 하나 이상의 HTTPS 프록시 서비스 엔드포인트(예: Google Cloud API Gateway)와 이러한 프록시 내의 리소스를 참조하는 외부 함수를 명시적으로 제한합니다. 접두사로 처리되는 URLs의 쉼표로 구분된 목록을 지원합니다(자세한 내용은 아래 참조).

API_ALLOWED_PREFIXES = (...) 의 각 URL은 접두사로 처리됩니다. 다음과 같이 지정한다고 예를 들어 봅시다.

https://my-external-function-demo.uc.gateway.dev/x

그 의미는

https://my-external-function-demo.uc.gateway.dev/x

아래의 모든 리소스가 허용된다는 뜻입니다. 예를 들어 다음이 허용됩니다.

https://my-external-function-demo.uc.gateway.dev/x/y

보안을 극대화하려면 허용된 위치를 가능한 한 좁게 제한해야 합니다.

선택적 매개 변수

이러한 선택적 매개 변수는 다음 각각에 적용됩니다.

  • Amazon API Gateway.

  • Azure API Management Service.

  • Google Cloud API Gateway.

API_BLOCKED_PREFIXES = (...)

Snowflake에서 호출할 수 없는 HTTPS 프록시 서비스의 엔드포인트와 리소스를 나열합니다.

위치에 대해 가능한 값은 위의 API_ALLOWED_PREFIXES 에 대한 것과 같은 규칙을 따릅니다.

API_BLOCKED_PREFIXES가 API_ALLOWED_PREFIXES에 우선합니다. 둘 모두와 일치하는 접두사는 차단됩니다. 즉, Snowflake는 API_BLOCKED_PREFIXES와도 일치하는 값을 제외하고 API_ALLOWED_PREFIXES와 일치하는 모든 값을 허용합니다.

어떤 값이 API_ALLOWED_PREFIXES 외부에 있으면 이를 명시적으로 차단할 필요가 없습니다.

COMMENT = '<string_literal>'

외부 함수에 대한 설명입니다.

액세스 제어 요구 사항

이 SQL 명령을 실행하는 데 사용되는 역할 에는 최소한 다음 권한 이 있어야 합니다.

권한

오브젝트

참고

CREATE INTEGRATION

계정

Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed.

지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.

보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 Snowflake에서의 액세스 제어 섹션을 참조하십시오.

사용법 노트

  • API 통합에 대한 OWNERSHIP 또는 USAGE 권한이 있는 Snowflake 역할만 API 통합을 직접(예: 해당 API 통합을 지정하는 외부 함수를 만들어 직접) 사용할 수 있습니다.

  • API 통합 오브젝트는 특정 HTTPS 프록시 URL이 아니라, 해당 계정 내의 특정 클라우드 플랫폼 계정과 역할에 연결됩니다. 클라우드 공급자 계정에서 둘 이상의 HTTPS 프록시 서비스 인스턴스를 만들 수 있으며, 똑같은 API 통합을 사용하여 해당 계정의 여러 프록시 서비스에 인증할 수 있습니다.

  • Snowflake 계정에는 예컨대 다양한 클라우드 플랫폼 계정에 대해 여러 개의 API 통합 오브젝트가 있을 수 있습니다.

  • 여러 외부 함수가 똑같은 API 통합 오브젝트를 사용할 수 있으므로, 똑같은 HTTPS 프록시 서비스를 사용할 수 있습니다.

  • 메타데이터 관련:

    주의

    고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.

  • CREATE OR REPLACE <오브젝트> 문은 원자성입니다. 즉, 오브젝트가 바뀔 때 이전 오브젝트 삭제와 새 오브젝트 생성이 단일 트랜잭션으로 처리됩니다.

API 통합을 만들고 후속 CREATE EXTERNAL FUNCTION 문에서 해당 API 통합을 사용하는 방법을 보여주는 예입니다.

create or replace api integration demonstration_external_api_integration_01
    api_provider=aws_api_gateway
    api_aws_role_arn='arn:aws:iam::123456789012:role/my_cloud_account_role'
    api_allowed_prefixes=('https://xyz.execute-api.us-west-2.amazonaws.com/production')
    enabled=true;

create or replace external function local_echo(string_col VARCHAR)
    returns variant
    api_integration = demonstration_external_api_integration_01
    as 'https://xyz.execute-api.us-west-2.amazonaws.com/production/remote_echo';
맨 위로 이동