CREATE SECURITY INTEGRATION(External OAuth)¶
계정에 새 External OAuth 보안 통합을 만들거나 기존 통합을 바꿉니다. 클라이언트는 External OAuth 보안 통합을 통해 서드 파티 인증 서버를 사용하여 Snowflake와 상호 작용하는 데 필요한 액세스 토큰을 얻을 수 있습니다.
다른 유형의 보안 통합(예: Snowflake OAuth) 생성에 대한 자세한 내용은 CREATE SECURITY INTEGRATION 섹션을 참조하십시오.
구문¶
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>' ]
필수 매개 변수¶
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')
EXTERNAL_OAUTH_TYPE
매개 변수를OKTA
,PING_FEDERATE
또는CUSTOM
으로 설정하면 URL을 하나만 지정할 수 있습니다. 예:EXTERNAL_OAUTH_JWS_KEYS_URL = 'https://example.ca'
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')
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;
REVOKE USE_ANY_ROLE ON INTEGRATION external_oauth_1 FROM role1;
값은 선택적으로 작은따옴표로 묶을 수 있습니다(예:
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';
DESCRIBE INTEGRATION 을 사용하여 통합 설정 보기:
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';
DESCRIBE INTEGRATION 을 사용하여 통합 설정 보기:
DESC SECURITY INTEGRATION external_oauth_okta_1;
Microsoft Power BI SSO의 예¶
예는 다음을 참조하십시오.