CREATE SECURITY INTEGRATION

CREATE SECURITY INTEGRATION (External API Authentication)

계정에 외부 API 인증용 새 보안 인티그레이션(security integration)을 만들거나 기존 인티그레이션을 교체하는 명령이에요. 이 인티그레이션은 OAuth 2.0으로 외부 서비스에 인증하기 위한 인터페이스를 제공해요.

출처: 문서

본문

계정에 외부 API 인증용 새 보안 인티그레이션을 만들거나 기존 인티그레이션을 교체해요.

다른 유형(예: External OAuth)의 보안 인티그레이션을 만드는 방법은 CREATE SECURITY INTEGRATION을 참고해요.

함께 보기: ALTER SECURITY INTEGRATION (External API Authentication), DESCRIBE INTEGRATION, DROP INTEGRATION, SHOW INTEGRATIONS, CREATE SECURITY INTEGRATION (External secret provider)

구문 (Syntax)

OAuth: Client credentials

CREATE SECURITY INTEGRATION <name>
  TYPE = API_AUTHENTICATION
  AUTH_TYPE = OAUTH2
  ENABLED = { TRUE | FALSE }
  [ OAUTH_TOKEN_ENDPOINT = '<string_literal>' ]
  [ OAUTH_CLIENT_AUTH_METHOD = { CLIENT_SECRET_BASIC | CLIENT_SECRET_POST } ]
  [ OAUTH_CLIENT_ID = '<string_literal>' ]
  [ OAUTH_CLIENT_SECRET = '<string_literal>' ]
  [ OAUTH_GRANT = 'CLIENT_CREDENTIALS']
  [ OAUTH_ACCESS_TOKEN_VALIDITY = <integer> ]
  [ OAUTH_ALLOWED_SCOPES = ( '<scope_1>' [ , '<scope_2>' ... ] ) ]
  [ COMMENT = '<string_literal>' ]

OAuth: Authorization code grant flow

CREATE SECURITY INTEGRATION <name>
  TYPE = API_AUTHENTICATION
  AUTH_TYPE = OAUTH2
  ENABLED = { TRUE | FALSE }
  [ OAUTH_AUTHORIZATION_ENDPOINT = '<string_literal>' ]
  [ OAUTH_TOKEN_ENDPOINT = '<string_literal>' ]
  [ OAUTH_CLIENT_AUTH_METHOD = { CLIENT_SECRET_BASIC | CLIENT_SECRET_POST } ]
  [ OAUTH_CLIENT_ID = '<string_literal>' ]
  [ OAUTH_CLIENT_SECRET = '<string_literal>' ]
  [ OAUTH_GRANT = 'AUTHORIZATION_CODE']
  [ OAUTH_ACCESS_TOKEN_VALIDITY = <integer> ]
  [ OAUTH_REFRESH_TOKEN_VALIDITY = <integer> ]
  [ COMMENT = '<string_literal>' ]

OAuth: JWT bearer flow

CREATE SECURITY INTEGRATION <name>
  TYPE = API_AUTHENTICATION
  AUTH_TYPE = OAUTH2
  ENABLED = { TRUE | FALSE }
  [ OAUTH_AUTHORIZATION_ENDPOINT = '<string_literal>' ]
  [ OAUTH_TOKEN_ENDPOINT = '<string_literal>' ]
  [ OAUTH_CLIENT_AUTH_METHOD = { CLIENT_SECRET_BASIC | CLIENT_SECRET_POST } ]
  [ OAUTH_CLIENT_ID = '<string_literal>' ]
  [ OAUTH_CLIENT_SECRET = '<string_literal>' ]
  [ OAUTH_GRANT = 'JWT_BEARER']
  [ OAUTH_ACCESS_TOKEN_VALIDITY = <integer> ]
  [ OAUTH_REFRESH_TOKEN_VALIDITY = <integer> ]
  [ COMMENT = '<string_literal>' ]

필수 매개변수 (Required parameters)

name 인티그레이션의 식별자(즉 이름)를 지정해요. 이 값은 계정 안에서 고유해야 해요.

또한 식별자는 반드시 알파벳 문자로 시작해야 하며, 전체 식별자 문자열이 큰따옴표로 묶이지 않는 한 공백이나 특수 문자를 포함할 수 없어요 (예: "My object"). 큰따옴표로 묶인 식별자는 대소문자를 구분해요.

자세한 내용은 식별자 요구 사항(Identifier requirements)을 참고해요.

TYPE = API_AUTHENTICATION Snowflake와 외부 서비스 사이에 보안 인터페이스를 만든다고 지정해요. 이 항목은 AUTH_TYPE = OAUTH2를 다뤄요. 외부 시크릿 공급자에 연결하는 데 사용되는 AUTH_TYPE = WORKLOAD_IDENTITY_FEDERATION은 CREATE SECURITY INTEGRATION (External secret provider)을 참고해요.

AUTH_TYPE = OAUTH2 인티그레이션이 외부 서비스로 인증하기 위해 OAuth 2.0을 사용한다고 지정해요.

ENABLED = { TRUE | FALSE } 이 보안 인티그레이션이 활성화될지 비활성화될지 지정해요.

  • TRUE: 인티그레이션 정의에 지정된 매개변수에 따라 인티그레이션이 실행되도록 해요.
  • FALSE: 유지보수를 위해 인티그레이션을 일시 중지해요. Snowflake와 타사 서비스 사이의 어떤 인티그레이션도 작동하지 않아요.

값은 대소문자를 구분하지 않아요. 기본값은 TRUE예요.

선택 매개변수 (Optional parameters)

다음은 구성할 수 있는 매개변수의 전체 목록이에요. 선택한 OAuth 흐름을 기반으로 시크릿을 만들 때 구성하는 매개변수와 일치하도록 인티그레이션의 매개변수를 구성해요.

OAUTH_AUTHORIZATION_ENDPOINT = 'string_literal' 외부 서비스로 인증하기 위한 URL을 지정해요. 예를 들어 ServiceNow 인스턴스에 연결하려면 URL이 다음 형식이어야 해요.

https://<instance_name>.service-now.com/oauth_token

여기서 instance_name은 ServiceNow 인스턴스의 이름이에요.

OAUTH_TOKEN_ENDPOINT = 'string_literal' 클라이언트가 자기 인가 부여(authorization grant) 또는 새로 고침 토큰을 제시해 액세스 토큰을 얻는 데 사용하는 토큰 엔드포인트를 지정해요. 토큰 엔드포인트는 액세스 토큰이 직접 발급되는 암시적(implicit) 부여 유형을 제외한 모든 인가 부여에서 사용돼요.

OAUTH_CLIENT_AUTH_METHOD = { CLIENT_SECRET_BASIC | CLIENT_SECRET_POST } 클라이언트 자격 증명을 외부 서비스로 보내는 방법을 제어해요.

  • CLIENT_SECRET_BASIC: 클라이언트 자격 증명이 HTTP Basic Authentication 체계로 전송됨을 지정해요.
  • CLIENT_SECRET_POST: 클라이언트 자격 증명이 POST 요청의 HTTP 요청 본문으로 전송됨을 지정해요.
  • 기본값: CLIENT_SECRET_BASIC

OAUTH_CLIENT_ID = 'string_literal' 외부 서비스의 OAuth 애플리케이션 클라이언트 ID를 지정해요.

OAUTH_CLIENT_SECRET = 'string_literal' 외부 서비스의 OAuth 애플리케이션 클라이언트 시크릿을 지정해요.

OAUTH_GRANT = 'string_literal' OAuth 흐름의 유형을 지정해요. 다음 중 하나예요.

  • 'CLIENT_CREDENTIALS': 인티그레이션이 클라이언트 자격 증명을 사용할 때
  • 'AUTHORIZATION_CODE': 인티그레이션이 인가 코드를 사용할 때
  • 'JWT_BEARER': 인티그레이션이 JWT bearer 토큰을 사용할 때

OAUTH_ACCESS_TOKEN_VALIDITY = integer OAuth 서버가 발급한 OAuth 액세스 토큰의 기본 수명(초)을 지정해요.

이 속성에 설정된 값은 액세스 토큰 수명이 OAuth 토큰 응답의 일부로 반환되지 않을 때 사용돼요. 두 값 모두 사용 가능하면 더 작은 값이 액세스 토큰 새로 고침에 사용돼요.

OAUTH_REFRESH_TOKEN_VALIDITY = integer OAuth 서버에서 얻은 새로 고침 토큰의 유효성을 결정하는 값을 지정해요.

OAUTH_ALLOWED_SCOPES = ( 'scope_1' [ , 'scope_2' ... ] ) OAuth 클라이언트 자격 증명 흐름 동안 인티그레이션에 대해 USAGE 권한이 있는 역할이 OAuth에 요청할 때 사용할 범위(scope)의 쉼표로 구분된 목록을 지정하며, 각 범위를 작은따옴표로 감싸요.

이 목록은 보안 인티그레이션의 OAUTH_ALLOWED_SCOPES 속성에 정의된 범위의 하위 집합이어야 해요. OAUTH_SCOPES 속성 값을 지정하지 않으면 시크릿이 보안 인티그레이션에 지정된 모든 범위를 상속해요.

ServiceNow 커넥터의 유일한 가능한 범위 값은 'useraccount'예요.

  • 기본값: 빈 목록 (즉 [])

COMMENT = 'string_literal' 인티그레이션에 대한 설명(comment)을 지정해요.

  • 기본값: 값 없음

접근 제어 요구 사항 (Access control requirements)

이 작업을 실행하는 데 사용하는 역할(role)은 최소한 다음 권한을 가져야 해요.

권한 (Privilege) 객체 (Object) 비고
CREATE INTEGRATION Account 기본적으로 ACCOUNTADMIN 역할만 이 권한을 가져요. 필요에 따라 추가 역할에 부여될 수 있어요.
CREATE SECURITY INTEGRATION Account API_AUTHENTICATION 유형의 외부 보안 인티그레이션을 만들 수 있는 권한을 부여해요. 이 권한은 다른 유형의 보안 인티그레이션을 만들 수 있는 권한은 부여하지 않아요.

지정된 권한 집합으로 사용자 지정 역할을 만드는 방법은 사용자 지정 역할 만들기(Creating custom roles)를 참고해요. 보호 가능한 객체에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여의 일반적인 내용은 접근 제어 개요(Overview of Access Control)를 참고해요.

사용 메모 (Usage notes)

메타데이터에 관해서는 다음 사항에 주의해요.

⚠️ 주의: 고객은 Snowflake 서비스를 사용할 때 (User 객체를 제외하고) 개인 데이터·민감 데이터·수출 통제 데이터·기타 규제 데이터를 메타데이터로 입력하지 않도록 해야 해요. 자세한 내용은 Snowflake의 메타데이터 필드를 참고해요.

CREATE OR REPLACE <object> 문은 원자적(atomic)으로 동작해요. 즉, 객체를 교체할 때 기존 객체는 삭제되고 새 객체는 단일 트랜잭션 안에서 생성돼요.

예시 (Examples)

코드 부여 흐름의 OAuth로 Snowflake를 myinstance라는 ServiceNow 인스턴스에 연결하는 servicenow_oauth라는 보안 인티그레이션을 만들어요.

CREATE SECURITY INTEGRATION servicenow_oauth
  TYPE = API_AUTHENTICATION
  AUTH_TYPE = OAUTH2
  OAUTH_CLIENT_AUTH_METHOD = CLIENT_SECRET_POST
  OAUTH_CLIENT_ID = 'sn-oauth-134o9erqfedlc'
  OAUTH_CLIENT_SECRET = 'eb9vaXsrcEvrFdfcvCaoijhilj4fc'
  OAUTH_TOKEN_ENDPOINT = 'https://myinstance.service-now.com/oauth_token.do'
  ENABLED = TRUE;

클라이언트 자격 증명의 OAuth로 Snowflake를 Microsoft Sharepoint에 연결하는 sharepoint_security_integration이라는 보안 인티그레이션을 만들어요.

CREATE SECURITY INTEGRATION sharepoint_security_integration
  TYPE = API_AUTHENTICATION
  AUTH_TYPE = OAUTH2
  OAUTH_CLIENT_AUTH_METHOD = CLIENT_SECRET_POST
  OAUTH_CLIENT_ID = 'YOUR_CLIENT_ID'
  OAUTH_CLIENT_SECRET = 'YOUR_CLIENT_SECRET'
  OAUTH_GRANT = 'CLIENT_CREDENTIALS'
  OAUTH_TOKEN_ENDPOINT = 'https://login.microsoftonline.com/YOUR_TENANT_ID/oauth2/v2.0/token'
  OAUTH_ALLOWED_SCOPES = ('https://graph.microsoft.com/.default')
  ENABLED = TRUE;

더 알아보기 (Learn more)