다단계 인증(MFA)¶
다단계 인증(MFA)은 비밀번호 인증과 관련된 보안 위험을 줄여줍니다. 비밀번호 사용자가 MFA 에 등록되어 있는 경우 Snowflake에 로그인할 때 두 번째 인증 요소를 사용해야 합니다. 이러한 사용자는 비밀번호를 입력한 다음 두 번째 요소를 사용합니다. 사용자가 인증의 두 번째 요소로 사용할 수 있는 MFA 메소드를 추가하는 방법에 대한 자세한 내용은 두 번째 인증 요소 구성하기 섹션을 참조하십시오.
MFA 는 비밀번호로 인증하는 인간 사용자 를 위한 것입니다. 서비스 사용자 는 다른 형태의 인증을 사용해야 합니다. 이러한 사용자 유형에 대한 자세한 내용은 사용자 유형 섹션을 참조하십시오.
중요
모든 고객의 보안 태세를 개선하기 위해 모든 비밀번호 로그인 시 MFA 를 요구하도록 변경 사항을 적용하고 있습니다. 이번 출시에 대한 자세한 내용은 단일 요소 비밀번호 로그인 사용 중단에 대한 계획 섹션을 참조하십시오.
사용자가 MFA 에 등록하도록 요구¶
현재 조직에 MFA 를 구현하는 전략은 2024_08 동작 변경 번들 이 활성화되었을 때 계정이 존재했는지 여부에 따라 달라집니다.
- 2024_08 번들이 활성화되기 전에 계정이 존재했다면 사용자에게 MFA 를 사용하도록 요구하려면 계정을 구성해야 합니다. 모든 사용자가 MFA 에 등록하도록 MFA 를 구현하는 방법에 대한 자세한 내용은 MFA를 사용하여 사용자 또는 계정 인증 강화하기 섹션을 참조하십시오. 
- 2024_08 번들을 활성화한 후에 계정을 생성한 경우 비밀번호로 인증하는 모든 사용자는 기본적으로 MFA 에 등록해야 합니다. 이 MFA 요구 사항의 경우 서비스 사용자에게는 적용되지 않습니다. - 모든 사용자가 MFA 에 등록해야 한다는 요구 사항을 비활성화하려면 - MFA_ENROLLMENT=OPTIONAL로 사용자 지정 인증 정책을 생성한 다음 계정에 인증 정책을 설정하십시오. 인증 정책을 생성하고 설정하는 방법에 대한 자세한 내용은 인증 정책 섹션을 참조하십시오.- 필수 MFA 에서 옵트아웃하는 기능은 일시적입니다. 단일 요소 비밀번호 로그인 사용 중단에 대한 계획 섹션을 참조하십시오. 
사용 가능한 MFA 방법 제한하기¶
사용자가 MFA 에 등록한 경우 두 번째 인증 요소로 MFA 방법을 사용해야 합니다. Snowflake는 다음 MFA 방법을 허용합니다.
- 다양한 방법으로 저장하고 액세스할 수 있는 패스키를 사용하여 인증합니다. 
- 시간 기반 일회용 암호(TOTP)를 생성하는 인증자 앱으로 인증. 
- Duo로 인증하기. 
팁
허용할 MFA 방법을 결정할 때 다음 사항에 유의하십시오.
- 보안과 사용 편의성으로 인해 패스키를 사용하는 것이 좋습니다. 
- Duo는 다른 MFA 방법처럼 복제되지 않습니다. 
관리자는 인증 정책 을 사용하여 인증의 두 번째 요소로 사용할 수 있는 MFA 방법을 제어할 수 있습니다. 예를 들어, 다음 인증 정책에서는 사용자가 두 번째 인증 요소로 비밀번호 또는 인증자 앱을 사용할 수 있지만 Duo는 사용할 수 없습니다.
CREATE AUTHENTICATION POLICY require_mfa_policy
  MFA_AUTHENTICATION_METHODS = ('PASSWORD')
  MFA_ENROLLMENT = REQUIRED
  MFA_POLICY = (ALLOWED_METHODS = ('PASSKEY', 'TOTP'));
사용자가 이전에 금지된 MFA 방법을 구성한 경우 다음에 로그인할 때 기존 방법을 사용하여 인증하라는 메시지가 표시된 다음 허용된 새 방법을 구성하라는 메시지가 표시됩니다.
매개 변수 MFA_POLICY 에 대한 자세한 내용은 CREATE AUTHENTICATION POLICY 섹션을 참조하십시오.
사용자의 MFA 방법 제거하기¶
사용자가 이전에 추가한 MFA 방법을 제거하여 더 이상 두 번째 인증 요소로 사용할 수 없도록 할 수 있습니다.
- SHOW MFA METHODS 명령을 실행하고 - name열에서 값을 찾습니다. 예를 들어,- joe사용자에 대한 MFA 방법을 제거하려는 경우 다음을 실행하고 출력에서 MFA 방법의- name복사본을 복사합니다.- SHOW MFA METHODS FOR USER joe; - +---------------+-----------------+------------------------+-------------------------------+---------------------------------+---------------------+ | name | type | comment | last_used | created_on | additional_info | +---------------+-----------------+------------------------+-------------------------------+---------------------------------+---------------------+ | TOTP-48A7 | TOTP | Authenticator App 48A7 | 2025-02-26 11:14:38.000 -0800 | 2025-02-26 11:13:19.000 -0800 | null | +---------------+-----------------+------------------------+-------------------------------+---------------------------------+---------------------+ 
- ALTER USER … REMOVE MFA METHOD 문을 실행하여 MFA 방법을 제거합니다. - ALTER USER joe REMOVE MFA METHOD TOTP-48A7; 
잠긴 사용자 복구하기¶
암호 사용자가 두 번째 인증 요소에 액세스할 수 없어 Snowflake에서 잠긴 경우 관리자는 MFA 를 일시적으로 비활성화 하거나 사용자가 새로운 MFA 방법을 설정 하는 방식으로 해당 사용자가 로그인할 수 있도록 복구할 수 있습니다.
사용자에게 새 MFA 방법을 추가하라는 메시지 표시¶
사용자가 두 번째 인증 요소로 사용하는 MFA 방법에 액세스할 수 없는 경우(예: 패스키를 저장하는 YubiKey 분실 등) 관리자는 사용자가 새로운 MFA 방법을 설정하도록 도와 Snowflake에 로그인할 수 있도록 할 수 있습니다.
사용자가 MFA 방법에 액세스할 수 없고 새 방법을 설정해야 하는 경우 관리자는 ALTER USER … ENROLL MFA 문을 실행합니다. 예를 들어, joe 사용자가 MFA 방법을 새로 설정해야 하는 경우 관리자는 다음을 실행하면 됩니다.니다.
ALTER USER joe ENROLL MFA;
- 사용자에게 인증 이메일 이 있는 경우, Snowflake는 MFA 인증 방법을 추가하라는 이메일을 보냅니다. 
- 사용자에게 인증된 이메일이 없는 경우 Snowflake는 사용자에게 MFA 인증 방법을 추가하라는 메시지를 표시하는 페이지의 URL 을 반환합니다. 관리자는 이 URL 을 잠긴 사용자에게 보낼 수 있습니다. 
MFA 를 일시적으로 비활성화¶
관리자가 사용자에 대해 MFA 를 일시적으로 비활성화해야 하는 경우 ALTER USER … SET MINS_TO_BYPASS_MFA 문을 실행하면 됩니다. 예를 들어, joe 사용자가 30분 동안 단일 요소 비밀번호로 인증할 수 있도록 MFA 를 일시적으로 비활성화하려면 다음을 실행합니다.
ALTER USER joe SET MINS_TO_BYPASS_MFA = 30;
break glass 액세스를 위한 관리자 설정하기¶
break glass는 일반적으로 계정에서 사용할 수 없는 대체 인증 방법을 사용하여 로그인할 수 있는 기능을 나타냅니다. 조직의 ID 공급자에게 정전이 발생한 경우처럼 일반적인 인증 방법을 사용할 수 없게 되는 경우 관리자는 Snowflake에 대한 break glass 액세스 권한이 필요합니다.
조직은 전용 Snowflake 사용자를 생성한 다음, 사용자의 비밀번호 자격 증명을 키 자격 증명 모음에 저장하여 break glass 액세스 권한을 제공할 수 있습니다. 관리자는 사용자의 비밀번호로 자격 증명 모음에 저장할 수 있는 하나 이상의 OTPs(일회용 암호)를 생성할 수 있습니다. Snowflake에 액세스하기 위해 관리자는 자격 증명 모음에서 비밀번호와 OTP를 검색한 다음, 로그인할 수 있습니다. OTPs를 사용하면 추가 보호 계층을 생성하고 Snowflake 다단계 인증 요구 사항을 충족할 수 있습니다.
중요
OTP가 인증에 사용된 후에는 무효화되어 인증하는 데 다시 사용할 수 없습니다.
추가 OTPs를 사용할 수 있고 사용자가 다른 MFA 방법을 사용할 수 없는 경우 세션이 만료되면 사용자가 잠길 수 있습니다. 언제나 우발적인 잠금을 방지하기 위해 백업 MFA 방법을 사용할 수 있습니다. 잠긴 사용자를 복구하는 방법에 대한 내용은 잠긴 사용자 복구하기 섹션을 참조하세요.
일회용 암호 생성¶
사용자에 대해 하나 이상의 OTPs를 생성하려면 ALTER USER … ADD MFA METHOD OTP 명령을 실행합니다. 선택적 COUNT 키워드는 생성되는 OTPs 수를 결정합니다. 예를 들어, 사용자 ``breakglass_user``에 대해 5개의 OTPs를 생성하려면 다음 명령을 실행합니다.
ALTER USER breakglass_user ADD MFA METHOD OTP COUNT = 5;
코드가 생성된 후 Snowflake에 대해 인증할 때 코드를 두 번째 인증 단계로 사용할 수 있습니다.
일회용 암호 무효화¶
OTP(일회용 암호)를 인증에 사용할 수 없어서 무효화하려는 경우 다음 옵션이 제공됩니다.
사용자의 모든 기존 OTPs 무효화
- ALTER USER … ADD MFA METHOD OTP 명령을 사용하여 새 OTPs를 생성합니다. 이전에 생성된 OTPs는 무효화됩니다. 
현재 사용자의 특정 OTP 무효화
- |sf-web-interface|에서 다음 단계에 따라 OTP를 무효화합니다. 
다른 사용자의 특정 OTP 무효화
- ALTER USER … REMOVE MFA METHOD 명령을 사용하여 다른 사용자의 특정 OTP를 무효화합니다. OTP를 직접 무효화하려면 |sf-web-interface|를 사용합니다. 예를 들어, 사용자 - joe``의 ``OTP_2암호를 무효화하려면 다음 명령을 실행합니다.- ALTER USER joe REMOVE MFA METHOD OTP_2; 
MFA를 사용하여 Snowflake에 연결하기¶
MFA 로그인은 기본적으로 웹 인터페이스를 통해 Snowflake에 연결하도록 설계되었지만, Snowflake CLI,SnowSQL 및 Snowflake JDBC, Node.js, ODBC 드라이버도 완전하게 지원됩니다.
참고
유선 또는 전화 콜백을 사용하는 MFA 구성은 ODBC 및 JDBC와 같은 드라이버와의 연결을 지원하지 않습니다.
MFA 토큰 캐싱을 사용하여 인증 도중 프롬프트 수 최소화하기 — 선택 사항¶
MFA 토큰 캐싱은 Snowflake에 연결하여 인증하는 동안, 특히 상대적으로 짧은 기간 동안 여러 연결 시도가 수행될 때 확인해야 하는 프롬프트의 수를 줄여줍니다.
캐시된 MFA 토큰은 최대 4시간 동안 유효합니다.
캐시된 MFA 토큰은 다음 조건 중 하나가 충족되는 경우 유효하지 않습니다.
- 계정에 대한 ALLOW_CLIENT_MFA_CACHING 매개 변수가 FALSE로 설정되었습니다. 
- 인증 방법이 변경됩니다. 
- 인증 자격 증명(즉, 사용자 이름 및/또는 비밀번호)이 변경됩니다. 
- 인증 자격 증명이 유효하지 않습니다. 
- 캐시된 토큰이 만료되거나 암호학적으로 유효하지 않습니다. 
- 캐시된 토큰과 연결된 계정 이름이 변경됩니다. 
MFA 토큰을 캐시하기 위해 Snowflake에서 사용하는 전체 프로세스는 브라우저 기반 페더레이션 SSO(single sign-on) 용 연결 토큰을 캐시하기 위해 사용되는 프로세스와 유사합니다. 클라이언트 애플리케이션은 클라이언트측 운영 체제의 키 저장소에 MFA 토큰을 저장합니다. 사용자는 언제라도 캐시된 MFA 토큰을 키 저장소에서 삭제할 수 있습니다.
Snowflake는 다음 드라이버, 커넥터 및 도구로 MFA 토큰 캐싱을 지원합니다.
- NET 드라이버 버전 4.3.0 이상 
- ODBC 드라이버 버전 2.23.0 이상. 
- JDBC 드라이버 버전 3.12.16 이상. 
- Snowflake용 Python Connector 버전 2.3.7 이상. 
- Snowflake CLI 버전 3.0 이상 
Snowflake는 내부 보안 및 컴플라이언스 책임자에게 문의한 후 MFA 토큰 캐싱을 활성화할 것을 권장합니다.
팁
MFA 토큰 캐싱은 페더레이션 SSO(single sign-on) 에서 연결 캐싱과 결합할 수 있습니다.
이 두 기능을 결합하려면 ALLOW_ID_TOKEN 매개 변수가 ALLOW_CLIENT_MFA_CACHING 매개 변수와 함께 true 로 설정되었는지 확인하십시오.
MFA 토큰 캐싱을 활성화하려면 다음 단계를 완료하십시오.
- 계정 관리자(즉, ACCOUNTADMIN 시스템 역할 사용자)로, ALTER ACCOUNT 명령을 사용하여 계정에 대한 ALLOW_CLIENT_MFA_CACHING 매개 변수를 - true로 설정합니다.- ALTER ACCOUNT SET ALLOW_CLIENT_MFA_CACHING = TRUE; 
- 클라이언트 연결 문자열에서 인증자 값을 - authenticator = username_password_mfa로 업데이트합니다.
- 드라이버 또는 커넥터에 필요한 패키지 또는 라이브러리를 추가합니다. - Python용 Snowflake Connector를 사용 중인 경우에는 다음을 실행하여 옵션으로 제공되는 인증 키 패키지를 설치합니다. - pip install "snowflake-connector-python[secure-local-storage]" - 명령에서와 같이 대괄호( - [및- ])를 반드시 입력해야 합니다. 대괄호는 설치해야 하는 패키지의 추가 부분 을 지정합니다.- 예시와 같이 패키지 이름 주위에 따옴표를 사용하여 대괄호가 와일드카드로 해석되지 않도록 합니다. - 다른 추가 항목(예:Pandas용 Python Connector APIs를 사용 하기 위한 - pandas)을 설치해야 하는 경우에는 추가 항목 사이에 쉼표를 사용합니다.- pip install "snowflake-connector-python[secure-local-storage,pandas]" 
- Snowflake JDBC 드라이브에 대한 내용은 JNA 클래스를 클래스 경로에 추가하기 를 참조하십시오. 
 
MFA 토큰 캐싱을 비활성화하려면 ALLOW_CLIENT_MFA_CACHING 매개 변수의 설정을 해제합니다.
ALTER ACCOUNT UNSET ALLOW_CLIENT_MFA_CACHING;
로그인하기 위한 두 번째 인증으로 MFA 토큰 캐싱을 사용하는 모든 사용자를 찾으려면 계정 관리자(ACCOUNTADMIN 역할을 가진 사용자)로 다음 SQL 문을 실행할 수 있습니다.
SELECT EVENT_TIMESTAMP,
       USER_NAME,
       IS_SUCCESS
  FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY
  WHERE SECOND_AUTHENTICATION_FACTOR = 'MFA_TOKEN';
SnowSQL에서 MFA 사용하기¶
MFA를 사용하여 SnowSQL을 통해 Snowflake에 연결할 수 있습니다. 기본적으로 사용자가 MFA에 등록할 때 Duo Push 인증 방법을 사용할 수 있습니다.
푸시 방법 대신 Duo에서 생성되는 암호를 사용하려면 로그인 매개 변수에 다음 연결 옵션 중 1개를 반드시 포함해야 합니다.
--mfa-passcode <문자열>또는--mfa-passcode-in-password
자세한 내용은 SnowSQL(CLI 클라이언트) 섹션을 참조하십시오.
JDBC에서 MFA 사용하기¶
MFA를 사용하여 Snowflake JDBC 드라이버를 통해 Snowflake에 연결할 수 있습니다. 기본적으로 사용자가 MFA에 등록할 때 Duo Push 인증 방법을 사용할 수 있으며, JDBC 연결 문자열을 변경할 필요가 없습니다.
푸시 방법 대신 Duo에서 생성되는 암호를 사용하려면 JDBC 연결 문자열에 다음 매개 변수 중 1개를 반드시 포함해야 합니다.
passcode=<암호_문자열>또는passcodeInPassword=on
여기서
- passcode_string은 연결 중인 사용자를 위해 Duo가 생성한 암호입니다. 이 암호는 Duo Mobile 애플리케이션 또는 SMS 암호에서 생성된 암호일 수 있습니다.
- passcodeInPassword=on인 경우,- <비밀번호_문자열><암호_문자열>의 형식으로 비밀번호와 암호가 연결됩니다.
자세한 내용은 JDBC 드라이버 섹션을 참조하십시오.
Duo를 사용한 JDBC 연결 문자열의 예¶
Duo 암호를 사용하여 xy12345 계정(US 서부 리전)에 연결하는 demo 사용자를 위한 JDBC 연결 문자열:
jdbc:snowflake://xy12345.snowflakecomputing.com/?user=demo&passcode=123456
비밀번호에 포함된 Duo 암호를 사용하여 xy12345 계정(US 서부 리전)에 연결하는 demo 사용자를 위한 JDBC 연결 문자열:
jdbc:snowflake://xy12345.snowflakecomputing.com/?user=demo&passcodeInPassword=on
Node.js와 함께 MFA 사용하기¶
MFA를 사용하여 Snowflake Node.js 드라이버를 통해 Snowflake에 연결할 수 있습니다. 기본적으로 사용자가 MFA에 등록할 때 Duo Push 인증 방법을 사용할 수 있습니다.
푸시 방법 대신 Duo에서 생성되는 암호를 사용하려면 로그인 매개 변수에 다음 연결 옵션 중 1개를 반드시 포함해야 합니다. 두 예제 모두에서 비밀번호는:codenowrap:abc123 을 사용하고 MFA 암호는:codenowrap:987654 를 사용하여 구성을 설명합니다.
- 다음과 같이 비밀번호 문자열의 일부로 비밀번호를 포함하도록 - passcodeInPassword옵션을- true로 설정합니다.- authenticator: 'USERNAME_PASSWORD_MFA', password: "abc123987654", // passcode 987654 is part of the password passcodeInPassword: true // because passcodeInPassword is true 
- 다음과 같이 비밀번호와 암호를 별도로 지정하려면 - passcode옵션을 암호의 값으로 설정합니다.- authenticator: 'USERNAME_PASSWORD_MFA', password: "abc123", // password and MFA passcode are input separately passcode: "987654" - 이 방법을 사용하려면 - passcodeInPassword옵션이- false(기본값)인지 확인합니다.- passcodeInPassword가 모두- true로 설정되어 있고:codenowrap:- passcode도 구성된 경우,:codenowrap:- passcodeInPassword설정이 우선 적용되며 드라이버는 인증 시:codenowrap:- password필드에 비밀번호와 MFA 암호가 모두 포함되어 있는 것으로 가정합니다.
자세한 내용은 MFA 암호 사용하기 섹션을 참조하십시오.
ODBC에서 MFA 사용하기¶
MFA를 사용하여 Snowflake ODBC 드라이버를 통해 Snowflake에 연결할 수 있습니다. 기본적으로 사용자가 MFA에 등록할 때 Duo Push 인증 방법을 사용할 수 있으며, ODBC 설정을 변경할 필요가 없습니다.
푸시 방법 대신 Duo에서 생성되는 암호를 사용하려면 드라이버에 다음 매개 변수 중 1개를 반드시 지정해야 합니다.
passcode=<암호_문자열>또는passcodeInPassword=on
여기서
- passcode_string은 연결 중인 사용자를 위해 Duo가 생성한 암호입니다. 이 암호는 Duo Mobile 애플리케이션 또는 SMS 암호에서 생성된 암호일 수 있습니다.
- passcodeInPassword=on인 경우,- <비밀번호_문자열><암호_문자열>의 형식으로 비밀번호와 암호가 연결됩니다.
자세한 내용은 ODBC 드라이버 섹션을 참조하십시오.
Python에서 MFA 사용하기¶
MFA를 사용하여 Snowflake Python Connector를 통해 Snowflake에 연결할 수 있습니다. 기본적으로 사용자가 MFA에 등록할 때 Duo Push 인증 방법을 사용할 수 있으며, Python API 호출을 변경할 필요가 없습니다.
푸시 방법 대신 Duo에서 생성되는 암호를 사용하려면 connect() 메서드에서 드라이버에 다음 매개 변수 중 1개를 반드시 지정해야 합니다.
passcode=<암호_문자열>또는passcode_in_password=True
여기서
- passcode_string은 연결 중인 사용자를 위해 Duo가 생성한 암호입니다. 이 암호는 Duo Mobile 애플리케이션 또는 SMS 암호에서 생성된 암호일 수 있습니다.
- passcode_in_password=True인 경우,- <비밀번호_문자열><암호_문자열>의 형식으로 비밀번호와 암호가 연결됩니다.
자세한 내용은 Python Connector API 설명서의 함수 섹션에서 제공되는 connect() 메서드에 대한 설명을 참조하십시오.