CREATE SECRET

CREATE SECRET

현재 또는 지정한 스키마에 새 시크릿(secret)을 만들거나 기존 시크릿을 교체하는 명령이에요. 시크릿은 외부 서비스에 인증하는 데 사용할 자격 증명(OAuth 토큰, 비밀번호, API 토큰 등)을 안전하게 저장하는 객체예요.

출처: 문서

본문

현재 또는 지정한 스키마에 새 시크릿을 만들거나 기존 시크릿을 교체해요.

함께 보기: ALTER SECRET, DESCRIBE SECRET, DROP SECRET, SHOW SECRETS

구문 (Syntax)

클라이언트 자격 증명 흐름의 OAuth:

CREATE [ OR REPLACE ] SECRET [ IF NOT EXISTS ] <name>
  TYPE = OAUTH2
  API_AUTHENTICATION = <security_integration_name>
  OAUTH_SCOPES = ( '<scope_1>' [ , '<scope_2>' ... ] )
  [ COMMENT = '<string_literal>' ]

인가 코드 부여 흐름의 OAuth:

CREATE [ OR REPLACE ] SECRET [ IF NOT EXISTS ] <name>
  TYPE = OAUTH2
  OAUTH_REFRESH_TOKEN = '<string_literal>'
  OAUTH_REFRESH_TOKEN_EXPIRY_TIME = '<string_literal>'
  API_AUTHENTICATION = <security_integration_name>
  [ COMMENT = '<string_literal>' ]

클라우드 공급자:

CREATE [ OR REPLACE ] SECRET [ IF NOT EXISTS ] <name>
  TYPE = CLOUD_PROVIDER_TOKEN
  API_AUTHENTICATION = '<cloud_provider_security_integration>'
  ENABLED = { TRUE | FALSE }
  [ COMMENT = '<string_literal>' ]

기본 인증 (Basic authentication):

CREATE [ OR REPLACE ] SECRET [ IF NOT EXISTS ] <name>
  TYPE = PASSWORD
  USERNAME = '<username>'
  PASSWORD = '<password>'
  [ COMMENT = '<string_literal>' ]

일반 문자열 (Generic string):

CREATE [ OR REPLACE ] SECRET [ IF NOT EXISTS ] <name>
  TYPE = GENERIC_STRING
  SECRET_STRING = '<string_literal>'
  [ COMMENT = '<string_literal>' ]

대칭 키 (Symmetric key):

CREATE [ OR REPLACE ] SECRET [ IF NOT EXISTS ] <name>
  TYPE = SYMMETRIC_KEY
  ALGORITHM = GENERIC

워크로드 ID 연합 (Workload identity federation):

CREATE [ OR REPLACE ] SECRET [ IF NOT EXISTS ] <name>
  TYPE = WORKLOAD_IDENTITY_FEDERATION
  [ COMMENT = '<string_literal>' ]

클라이언트 자격 증명 흐름의 OAuth 필수 매개변수

name 시크릿의 식별자(즉 이름)를 지정하는 문자열로, 스키마 안에서 고유해야 해요.

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

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

TYPE = OAUTH2 OAuth 부여 흐름과 함께 사용할 시크릿을 지정해요.

API_AUTHENTICATION = security_integration_name Snowflake를 외부 서비스에 연결하는 Snowflake 보안 인티그레이션의 name 값을 지정해요.

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

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

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

인가 코드 부여 흐름의 OAuth 필수 매개변수

name 시크릿의 식별자(즉 이름)를 지정하는 문자열로, 스키마 안에서 고유해야 해요.

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

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

TYPE = OAUTH2 OAuth 부여 흐름과 함께 사용할 시크릿을 지정해요.

OAUTH_REFRESH_TOKEN = 'string_literal' 액세스 토큰이 만료될 때 OAuth 인가 서버에서 새 액세스 토큰을 얻는 데 사용되는 토큰을 문자열로 지정해요.

OAUTH_REFRESH_TOKEN_EXPIRY_TIME = 'string_literal' OAuth 새로 고침 토큰이 만료되는 타임스탬프를 문자열로 지정해요.

API_AUTHENTICATION = security_integration_name Snowflake를 외부 서비스에 연결하는 Snowflake 보안 인티그레이션의 name 값을 지정해요.

AWS IAM 필수 매개변수

TYPE = CLOUD_PROVIDER_TOKEN 이것이 AWS(Amazon Web Services) 같은 클라우드 공급자와 함께 사용할 시크릿이라고 지정해요.

API_AUTHENTICATION = 'cloud_provider_security_integration' Snowflake를 클라우드 공급자에 연결하는 Snowflake 보안 인티그레이션의 name 값을 지정해요.

기본 인증 필수 매개변수

name 시크릿의 식별자(즉 이름)를 지정하는 문자열로, 스키마 안에서 고유해야 해요.

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

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

TYPE = PASSWORD 기본 인증과 함께 사용할 시크릿을 지정해요. 이 유형을 지정할 때는 username과 password 속성 값을 지정해야 해요.

USERNAME = 'username' 시크릿에 저장할 사용자 이름 값을 지정해요. 기본 인증에 사용하기 위해 TYPE 값을 PASSWORD로 설정할 때 이 값을 지정해요.

PASSWORD = 'password' 시크릿에 저장할 비밀번호 값을 지정해요. 기본 인증에 사용하기 위해 TYPE 값을 PASSWORD로 설정할 때 이 값을 지정해요.

일반 문자열 매개변수

name 시크릿의 식별자(즉 이름)를 지정하는 문자열로, 스키마 안에서 고유해야 해요.

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

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

TYPE = GENERIC_STRING 민감한 문자열 값을 저장할 시크릿을 지정해요.

SECRET_STRING = 'string_literal' 시크릿에 저장할 문자열을 지정해요. 문자열은 API 토큰이거나 UDF 또는 저장 프로시저의 핸들러 코드에서 사용할 수 있는 민감한 문자열 값일 수 있어요. 자세한 내용은 외부 접근 인티그레이션 만들기와 사용(Creating and using an external access integration)을 참고해요.

이 속성으로 어떤 종류의 OAuth 토큰도 저장하지 않아야 해요. OAuth 사용 사례에는 다른 시크릿 유형 중 하나를 사용해요.

대칭 키 매개변수

대칭 키 시크릿은 암호화 작업에 사용할 수 있는 암호화 키를 생성해요. 현재 합성 데이터(synthetic data)를 생성하는 데만 사용돼요.

ALGORITHM 대칭 키를 생성하는 데 사용할 알고리즘을 지정해요. 유일하게 지원되는 값은 256비트 키를 생성하는 GENERIC이에요.

워크로드 ID 연합 매개변수

name 시크릿의 식별자(즉 이름)를 지정하는 문자열로, 스키마 안에서 고유해야 해요.

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

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

TYPE = WORKLOAD_IDENTITY_FEDERATION Snowflake가 OIDC(OpenID Connect) 공급자 역할을 하며, 워크로드 ID 연합을 사용해 Snowflake 워크로드가 외부 서비스로 인증할 수 있게 하는 시크릿을 지정해요. 시크릿을 만들면 Snowflake는 워크로드의 발급자(issuer) URL과 주체(subject) 식별자를 시크릿의 속성으로 저장해요.

자세한 내용은 외부 서비스에 접근하는 Snowflake 워크로드용 워크로드 ID 연합(Workload identity federation for Snowflake workloads that access external services)을 참고해요.

선택 매개변수 (Optional parameters)

COMMENT = 'string_literal' 시크릿에 대한 설명(comment)을 지정하는 문자열(리터럴)이에요.

  • 기본값: 값 없음

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

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

권한 (Privilege) 객체 (Object) 비고
CREATE SECRET Schema
USAGE Database 또는 schema

스키마 안의 객체를 작업하려면 상위 데이터베이스에 대한 권한이 최소 하나, 상위 스키마에 대한 권한이 최소 하나 필요해요.

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

사용 메모 (Usage notes)

OR REPLACEIF NOT EXISTS 절은 서로 배타적이에요. 같은 문에서 둘 다 사용할 수 없어요.

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

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

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

예시 (Examples)

OAuth with client credentials

OAuth 클라이언트 자격 증명 흐름에 사용할 시크릿을 만들어요.

CREATE OR REPLACE SECRET mysecret
  TYPE = OAUTH2
  API_AUTHENTICATION = mysecurityintegration
  OAUTH_SCOPES = ('useraccount')
  COMMENT = 'secret for the ServiceNow connector'

OAuth with authorization code grant

OAuth 코드 부여 흐름에 사용할 시크릿을 만들어요.

CREATE SECRET service_now_creds_oauth_code
  TYPE = OAUTH2
  OAUTH_REFRESH_TOKEN = '34n;vods4nQsdg09wee4qnfvadH'
  OAUTH_REFRESH_TOKEN_EXPIRY_TIME = '2022-01-06 20:00:00'
  API_AUTHENTICATION = sn_oauth;

AWS IAM

인증을 위해 AWS IAM ARN을 포함해 AWS(Amazon Web Services)와 함께 사용할 시크릿을 만들어요.

CREATE SECRET aws_secret
  TYPE = CLOUD_PROVIDER_TOKEN
  API_AUTHENTICATION = myawsiamintegration
  ENABLED = TRUE;

기본 인증 (Basic authentication)

ServiceNow에 접근할 사용자 이름과 비밀번호를 지정하는 시크릿을 만들어요.

CREATE SECRET service_now_creds_pw
  TYPE = PASSWORD
  USERNAME = 'jsmith1'
  PASSWORD = 'W3dr@fg*7B1c4j';

워크로드 ID 연합 (Workload identity federation)

워크로드 ID 연합을 사용해 Snowflake 워크로드가 외부 서비스로 인증할 수 있게 하는 시크릿을 만들어요.

CREATE SECRET my_db.auth.my_workload
  TYPE = WORKLOAD_IDENTITY_FEDERATION;

더 알아보기 (Learn more)