CREATE SECURITY INTEGRATION(External OAuth)

계정에 새 External OAuth 보안 통합을 만들거나 기존 통합을 바꿉니다. 클라이언트는 External OAuth 보안 통합을 통해 서드 파티 인증 서버를 사용하여 Snowflake와 상호 작용하는 데 필요한 액세스 토큰을 얻을 수 있습니다.

다른 유형의 보안 통합(예: Snowflake OAuth) 생성에 대한 자세한 내용은 CREATE SECURITY INTEGRATION 섹션을 참조하십시오.

참고 항목:

ALTER SECURITY INTEGRATION(External OAuth) , DROP INTEGRATION , SHOW INTEGRATIONS

구문

CREATE [ OR REPLACE ] SECURITY INTEGRATION [IF NOT EXISTS]
  <name>
  TYPE = EXTERNAL_OAUTH
  ENABLED = { TRUE | FALSE }
  EXTERNAL_OAUTH_TYPE = { OKTA | AZURE | PING_FEDERATE | CUSTOM }
  EXTERNAL_OAUTH_ISSUER = '<string_literal>'
  EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = { '<string_literal>' | ('<string_literal>' [ , '<string_literal>' , ... ] ) }
  EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = { 'LOGIN_NAME' | 'EMAIL_ADDRESS' }
  [ EXTERNAL_OAUTH_JWS_KEYS_URL = { '<string_literal>' | ('<string_literal>' [ , '<string_literal>' , ... ] ) } ]
  [ EXTERNAL_OAUTH_BLOCKED_ROLES_LIST = ( '<role_name>' [ , '<role_name>' , ... ] ) ]
  [ EXTERNAL_OAUTH_ALLOWED_ROLES_LIST = ( '<role_name>' [ , '<role_name>' , ... ] ) ]
  [ EXTERNAL_OAUTH_RSA_PUBLIC_KEY = <public_key1> ]
  [ EXTERNAL_OAUTH_RSA_PUBLIC_KEY_2 = <public_key2> ]
  [ EXTERNAL_OAUTH_AUDIENCE_LIST = { '<string_literal>' | ('<string_literal>' [ , '<string_literal>' , ... ] ) } ]
  [ EXTERNAL_OAUTH_ANY_ROLE_MODE = { DISABLE | ENABLE | ENABLE_FOR_PRIVILEGE } ]
  [ EXTERNAL_OAUTH_SCOPE_DELIMITER = '<string_literal>' ]
  [ EXTERNAL_OAUTH_SCOPE_MAPPING_ATTRIBUTE = '<string_literal>' ]
  [ COMMENT = '<string_literal>' ]
Copy

필수 매개 변수

name

통합에 대한 식별자(즉, 이름)를 지정하는 문자열로, 계정에서 고유해야 합니다.

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

자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.

TYPE = EXTERNAL_OAUTH

External OAuth 통합과 Snowflake OAuth 통합을 구분합니다.

ENABLED = { TRUE | FALSE }

통합 작업을 시작할지 일시 중단할지 여부를 지정합니다.

  • TRUE 로 지정하면 파이프 정의에 지정된 매개 변수를 기반으로 통합을 실행할 수 있습니다.

  • FALSE 로 지정하면 유지 관리를 위해 통합이 일시 중단됩니다. Snowflake와 서드 파티 서비스 간의 통합이 작동하지 않습니다.

EXTERNAL_OAUTH_TYPE = { OKTA | AZURE | PING_FEDERATE | CUSTOM }

OAuth 2.0 인증 서버를 Okta, Microsoft Azure AD, Ping Identity PingFederate 또는 Custom OAuth 2.0 인증 서버가 되도록 지정합니다.

EXTERNAL_OAUTH_ISSUER = 'string_literal'

OAuth 2.0 인증 서버를 정의하는 URL을 지정합니다.

EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = { 'string_literal' | ('string_literal' [ , 'string_literal' , ... ] ) }

액세스 토큰을 사용자 레코드에 매핑하기 위한 액세스 토큰 클레임을 지정합니다.

클레임의 데이터 타입은 문자열 또는 문자열 목록이어야 합니다.

EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = { 'LOGIN_NAME' | 'EMAIL_ADDRESS' }

액세스 토큰을 사용자 레코드에 매핑하는 데 어떤 Snowflake 사용자 레코드 특성을 사용해야 하는지 나타냅니다.

선택적 매개 변수

EXTERNAL_OAUTH_JWS_KEYS_URL = { 'string_literal' | ('string_literal' [ , 'string_literal' , ... ] ) }

External OAuth 액세스 토큰의 유효성을 검사하기 위해 공개 키 또는 인증서를 다운로드할 수 있는 URL 또는 URL 목록을 지정합니다.

EXTERNAL_OAUTH_TYPE 매개 변수를 AZURE 로 설정하면 URL을 최대 3개 지정할 수 있습니다. 예를 들어 URL을 2개 지정하려면 다음 구문을 사용하십시오.

EXTERNAL_OAUTH_JWS_KEYS_URL = ('https://example.ca', 'https://example.co.uk')
Copy

EXTERNAL_OAUTH_TYPE 매개 변수를 OKTA, PING_FEDERATE 또는 CUSTOM 으로 설정하면 URL을 하나만 지정할 수 있습니다. 예:

EXTERNAL_OAUTH_JWS_KEYS_URL = 'https://example.ca'
Copy
EXTERNAL_OAUTH_RSA_PUBLIC_KEY = public_key1

-----BEGIN PUBLIC KEY----------END PUBLIC KEY----- 헤더 없이 Base64로 인코딩된 RSA 공개 키를 지정합니다.

EXTERNAL_OAUTH_RSA_PUBLIC_KEY_2 = public_key2

-----BEGIN PUBLIC KEY----------END PUBLIC KEY----- 헤더 없이 보조 RSA 공개 키를 지정합니다. 키 순환에 사용됩니다.

EXTERNAL_OAUTH_BLOCKED_ROLES_LIST = ( 'role_name' [ , 'role_name' , ... ] )

클라이언트가 기본 역할 로 설정할 수 없는 역할의 목록을 지정합니다. External OAuth 인증 서버의 액세스 토큰을 기반으로 Snowflake 세션을 생성할 때 이 목록의 역할을 사용할 수 없습니다.

기본적으로, 이 목록에는 ACCOUNTADMIN, ORGADMIN 및 SECURITYADMIN 역할이 포함됩니다. 목록에서 이러한 권한 있는 역할을 제거하려면 ALTER ACCOUNT 명령을 사용하여 EXTERNAL_OAUTH_ADD_PRIVILEGED_ROLES_TO_BLOCKED_LIST 계정 매개 변수를 FALSE 로 설정하십시오.

EXTERNAL_OAUTH_ALLOWED_ROLES_LIST = ( 'role_name' [ , 'role_name' , ... ] )

클라이언트가 기본 역할로서 설정할 수 있는 역할 목록을 지정합니다.

External OAuth 인증 서버의 액세스 토큰을 기반으로 Snowflake 세션을 생성할 때 이 목록의 역할을 사용할 수 있습니다.

조심

이 매개 변수는 ACCOUNTADMIN, ORGADMIN 및 SECURITYADMIN 시스템 역할을 지원합니다.

이러한 높은 권한을 가진 역할을 기본 역할로 설정하여 Snowflake 세션을 만들 때는 주의하십시오.

EXTERNAL_OAUTH_AUDIENCE_LIST = { 'string_literal' | ('string_literal' [ , 'string_literal' , ... ] ) }

고객의 Snowflake 계정 URL(즉, <계정_식별자>.snowflakecomputing.com)을 사용하는 것 외에 액세스 토큰의 대상 그룹 확인을 위한 추가적인 값을 지정합니다. 자세한 내용은 계정 식별자 섹션을 참조하십시오.

Power BI SSO 사용 시 이 매개 변수에 대한 자세한 내용은 Power BI SSO 보안 통합 을 참조하십시오.

현재, External OAuth 사용자 지정 클라이언트 에 대해서만 여러 대상 그룹 URLs을 지정할 수 있습니다. 각 URL을 작은따옴표로 묶고, 쉼표로 각 URL을 구분해야 합니다. 예:

EXTERNAL_OAUTH_AUDIENCE_LIST = ('https://example.com/api/v2/', 'https://example.com')
Copy
EXTERNAL_OAUTH_ANY_ROLE_MODE = { DISABLE | ENABLE | ENABLE_FOR_PRIVILEGE }

OAuth 클라이언트 또는 사용자가 OAuth 액세스 토큰에 정의되지 않은 역할을 사용할 수 있는지 여부를 지정합니다. Snowflake로의 Power BI 통합 을 사용하면 이 매개 변수가 사용될 때도 PowerBI 사용자가 역할을 전환할 수 없습니다.

  • DISABLE 로 지정하면 OAuth 클라이언트 또는 사용자가 역할(즉, USE ROLE role;)을 전환할 수 없습니다. 기본값입니다.

  • ENABLE 로 지정하면 OAuth 클라이언트 또는 사용자가 역할을 전환할 수 있습니다.

  • ENABLE_FOR_PRIVILEGE 로 지정하면 OAuth 클라이언트 또는 사용자가 USE_ANY_ROLE 권한을 가진 클라이언트 또는 사용자에 대해서만 역할을 전환할 수 있습니다. 사용자가 사용할 수 있는 1개 이상의 역할에 이 권한을 부여하고 취소할 수 있습니다. 예:

    GRANT USE_ANY_ROLE ON INTEGRATION external_oauth_1 TO role1;
    
    Copy
    REVOKE USE_ANY_ROLE ON INTEGRATION external_oauth_1 FROM role1;
    
    Copy

값은 선택적으로 작은따옴표로 묶을 수 있습니다(예: DISABLE 또는 'DISABLE').

EXTERNAL_OAUTH_SCOPE_DELIMITER = 'string_literal'

인증 토큰에서 범위 구분 기호를 지정하여 기본 구분 기호 ',' 를 재정의합니다. 구분 기호는 쉼표(',') 또는 공백(' ')과 같은 단일 문자일 수 있습니다.

EXTERNAL_OAUTH_TYPE 매개 변수를 CUSTOM 으로 설정한 경우에만 이 속성을 사용할 수 있습니다.

EXTERNAL_OAUTH_SCOPE_MAPPING_ATTRIBUTE = 'string_literal'

액세스 토큰을 계정 역할에 매핑하기 위한 액세스 토큰 클레임을 지정합니다.

이 매개 변수는 scp 또는 scope 로만 설정할 수 있습니다.

EXTERNAL_OAUTH_TYPE 매개 변수를 CUSTOM 으로 설정한 경우에만 이 매개 변수를 사용할 수 있습니다.

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

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

Microsoft Azure AD의 예

다음은 Microsoft Azure AD OAuth 2.0 인증 서버에 대한 외부 OAuth 보안 통합을 만드는 예입니다.

CREATE SECURITY INTEGRATION external_oauth_azure_1
    TYPE = external_oauth
    ENABLED = true
    EXTERNAL_OAUTH_TYPE = azure
    EXTERNAL_OAUTH_ISSUER = '<AZURE_AD_ISSUER>'
    EXTERNAL_OAUTH_JWS_KEYS_URL = '<AZURE_AD_JWS_KEY_ENDPOINT>'
    EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'upn'
    EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'login_name';
Copy

DESCRIBE INTEGRATION 을 사용하여 통합 설정 보기:


Copy

DESC SECURITY INTEGRATION external_oauth_azure_1;

Okta의 예

다음은 Okta OAuth 2.0 인증 서버에 대한 외부 OAuth 보안 통합을 만드는 예입니다.

CREATE SECURITY INTEGRATION external_oauth_okta_1
    TYPE = external_oauth
    ENABLED = true
    EXTERNAL_OAUTH_TYPE = okta
    EXTERNAL_OAUTH_ISSUER = '<OKTA_ISSUER>'
    EXTERNAL_OAUTH_JWS_KEYS_URL = '<OKTA_JWS_KEY_ENDPOINT>'
    EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'sub'
    EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'login_name';
Copy

DESCRIBE INTEGRATION 을 사용하여 통합 설정 보기:

DESC SECURITY INTEGRATION external_oauth_okta_1;
Copy

Microsoft Power BI SSO의 예

예는 다음을 참조하십시오.