다단계 인증(MFA)

Snowflake는 Snowflake에 연결하는 사용자에게 향상된 로그인 보안을 제공하기 위해 다단계 인증(즉, MFA)을 지원합니다. MFA 지원은 Duo Security 서비스에서 제공되는 통합 Snowflake 기능으로 제공되며 Snowflake에서 완전하게 관리됩니다.

사용자는 Duo를 사용하거나 작업을 수행하여 별도로 가입할 필요가 없으며, 여러 스마트폰 플랫폼(iOS, Android, Windows 등)에서 지원되는 Duo Mobile 애플리케이션을 설치하면 됩니다. 지원 플랫폼/디바이스 및 Duo 다단계 인증의 작동 방식에 대한 자세한 내용은 Duo 사용자 가이드 를 참조하십시오.

MFA는 사용자당 방식으로 활성화되며, 현재는 사용자가 자동으로 MFA에 등록됩니다. MFA를 사용하려면 사용자가 본인을 등록해야 합니다.

주의

최소한으로, Snowflake는 ACCOUNTADMIN 역할의 모든 사용자가 MFA를 사용하는 것을 적극 권장합니다.

이 항목의 내용:

전제 조건

Duo 애플리케이션 서비스는 TCP 포트 443 을 통해 통신합니다.

일관적인 동작을 보장하려면 TCP 포트 443 에서 Duo 애플리케이션 서비스를 포함하도록 방화벽 설정을 업데이트하십시오.

*.duosecurity.com:443
Copy

자세한 내용은 Duo 설명서 를 참조하십시오.

MFA 로그인 흐름

다음 다이어그램은 연결에 사용되는 인터페이스와 관계없이 MFA에 등록한 사용자에 대한 전반적인 로그인 흐름을 보여줍니다.

MFA login flow

MFA에 Snowflake 사용자 등록하기

모든 Snowflake 사용자는 웹 인터페이스를 통해 MFA에 자체 등록할 수 있습니다. 자세한 내용은 Snowsight를 사용하여 사용자 프로필 관리하기 섹션을 참조하십시오.

MFA에 사용되는 휴대전화 전환하기

즉시 복원은 사용자가 새 휴대전화로 전환하기 전에 Duo 앱을 백업할 수 있게 해주는 Duo 기능입니다. Snowflake 사용자는 이전의 휴대전화를 먼저 백업하기만 하면 즉시 복원 기능을 사용하여 Snowflake에 대한 MFA를 중단하지 않고 새 휴대전화에서 인증 기능을 사용할 수 있습니다.

사용자가 이전 휴대전화를 백업하지 않거나 분실한 경우 Snowflake 계정 관리자가 이전 휴대전화를 사용한 각 사용자 이름에 대해 MFA를 비활성화해야 새 휴대전화에서 MFA를 다시 활성화할 수 있습니다.

계정과 사용자에 대한 MFA 관리하기

계정 수준에서는 MFA를 관리할 필요가 없습니다. 계정에서 자동으로 활성화되며 모든 사용자가 자체 등록할 수 있습니다. 그러나 예를 들어 계정 관리자(즉, ACCOUNTADMIN 시스템 역할이 부여된 사용자)가 스마트폰을 잃어버리거나 전화 번호를 변경하여 MFA로 로그인할 수 없는 경우에는 사용자에 대한 MFA를 일시적 또는 영구적으로 비활성화해야 합니다.

이러한 작업을 수행하기 위해 계정 관리자가 사용할 수 있는 ALTER USER 명령의 속성은 다음과 같습니다.

  • MINS_TO_BYPASS_MFA

    로그인할 수 있는 사용자에 대한 MFA를 임시로 비활성화하는 시간(분)을 지정합니다. 이 시간 이후에는 MFA가 강제로 적용되어 사용자는 Duo Mobile 애플리케이션에서 생성된 임시 토큰이 있어야 로그인할 수 있습니다.

  • DISABLE_MFA

    사용자에 대한 MFA를 비활성화하여, 사실상 해당 사용자의 등록을 취소합니다. 더 이상 사용자가 MFA에 등록되어 있지 않은지 확인하기 위해 브라우저를 새로 고쳐야 할 수도 있습니다. MFA를 다시 사용하려면 반드시 사용자가 다시 등록해야 합니다.

    참고

    DISABLE_MFA는 Snowflake 테이블 또는 뷰의 열이 아닙니다. 계정 관리자가 ALTER USER 명령을 사용하여 DISABLE_MFATRUE 로 설정한 후에 FALSE 의 값은 자동으로 EXT_AUTHN_DUO 로 설정됩니다.

    지정된 사용자에 대한 MFA가 비활성화되었는지 확인하려면, DESCRIBE USER 문을 실행하고 EXT_AUTHN_DUO 속성의 값을 확인합니다.

MFA를 사용하여 Snowflake에 연결하기

MFA 로그인은 기본적으로 웹 인터페이스를 통해 Snowflake에 연결하도록 설계되었지만, SnowSQL 및 Snowflake JDBC와 ODBC 드라이버도 완전하게 지원됩니다.

MFA 토큰 캐싱을 사용하여 인증 도중 프롬프트 수 최소화하기 — 선택 사항

MFA 토큰 캐싱은 Snowflake에 연결하여 인증하는 동안, 특히 상대적으로 짧은 기간 동안 여러 연결 시도가 수행될 때 확인해야 하는 프롬프트의 수를 줄여줍니다.

캐시된 MFA 토큰은 최대 4시간 동안 유효합니다.

캐시된 MFA 토큰은 다음 조건 중 하나가 충족되는 경우 유효하지 않습니다.

  1. 계정에 대한 ALLOW_CLIENT_MFA_CACHING 매개 변수가 FALSE로 설정되었습니다.

  2. 인증 방법이 변경됩니다.

  3. 인증 자격 증명(즉, 사용자 이름 및/또는 비밀번호)이 변경됩니다.

  4. 인증 자격 증명이 유효하지 않습니다.

  5. 캐시된 토큰이 만료되거나 암호학적으로 유효하지 않습니다.

  6. 캐시된 토큰과 연결된 계정 이름이 변경됩니다.

MFA 토큰을 캐시하기 위해 Snowflake에서 사용하는 전체 프로세스는 브라우저 기반 페더레이션 SSO(single sign-on) 용 연결 토큰을 캐시하기 위해 사용되는 프로세스와 유사합니다. 클라이언트 애플리케이션은 클라이언트측 운영 체제의 키 저장소에 MFA 토큰을 저장합니다. 사용자는 언제라도 캐시된 MFA 토큰을 키 저장소에서 삭제할 수 있습니다.

Snowflake는 macOS 및 Windows에서 다음 드라이버와 커넥터를 사용하여 MFA 토큰 캐싱을 지원합니다. 이 기능은 Linux에서 지원되지 않습니다.

  • ODBC 드라이버 버전 2.23.0 이상.

  • JDBC 드라이버 버전 3.12.16 이상.

  • Snowflake용 Python Connector 버전 2.3.7 이상.

Snowflake는 내부 보안 및 컴플라이언스 책임자에게 문의한 후 MFA 토큰 캐싱을 활성화할 것을 권장합니다.

MFA 토큰 캐싱은 페더레이션 SSO(single sign-on) 에서 연결 캐싱과 결합할 수 있습니다.

이 두 기능을 결합하려면 ALLOW_ID_TOKEN 매개 변수가 ALLOW_CLIENT_MFA_CACHING 매개 변수와 함께 true 로 설정되었는지 확인하십시오.

MFA 토큰 캐싱을 활성화하려면 다음 단계를 완료하십시오.

  1. 계정 관리자(즉, ACCOUNTADMIN 시스템 역할 사용자)로, ALTER ACCOUNT 명령을 사용하여 계정에 대한 ALLOW_CLIENT_MFA_CACHING 매개 변수를 true 로 설정합니다.

    ALTER ACCOUNT SET ALLOW_CLIENT_MFA_CACHING = TRUE;
    
    Copy
  2. 클라이언트 연결 문자열에서 인증자 값을 authenticator = username_password_mfa 로 업데이트합니다.

  3. 드라이버 또는 커넥터에 필요한 패키지 또는 라이브러리를 추가합니다.

    • Python용 Snowflake Connector를 사용 중인 경우에는 다음을 실행하여 옵션으로 제공되는 인증 키 패키지를 설치합니다.

      pip install "snowflake-connector-python[secure-local-storage]"
      
      Copy

      명령에서와 같이 대괄호([])를 반드시 입력해야 합니다. 대괄호는 설치해야 하는 패키지의 추가 부분 을 지정합니다.

      예시와 같이 패키지 이름 주위에 따옴표를 사용하여 대괄호가 와일드카드로 해석되지 않도록 합니다.

      다른 추가 항목(예: Pandas용 Python Connector APIs를 사용 하기 위한 pandas)을 설치해야 하는 경우에는 추가 항목 사이에 쉼표를 사용합니다.

      pip install "snowflake-connector-python[secure-local-storage,pandas]"
      
      Copy
    • Snowflake JDBC 드라이브에 대한 내용은 클래스 경로에 JNA 클래스 추가하기 를 참조하십시오.

MFA 토큰 캐싱을 비활성화하려면 ALLOW_CLIENT_MFA_CACHING 매개 변수의 설정을 해제합니다.

ALTER ACCOUNT UNSET ALLOW_CLIENT_MFA_CACHING;
Copy

로그인하기 위한 두 번째 인증으로 MFA 토큰 캐싱을 사용하는 모든 사용자를 찾으려면 계정 관리자(ACCOUNTADMIN 역할을 가진 사용자)로 다음 SQL 문을 실행할 수 있습니다.

SELECT EVENT_TIMESTAMP,
       USER_NAME,
       IS_SUCCESS
  FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY
  WHERE SECOND_AUTHENTICATION_FACTOR = 'MFA_TOKEN';
Copy

Snowsight 에서 MFA 사용하기

Snowsight 에 MFA로 로그인하는 방법은 다음과 같습니다.

  1. Snowsight 에 로그인합니다.

  2. 사용자 자격 증명(사용자 로그인 이름 및 비밀번호)을 입력합니다.

  3. Duo Push를 사용하는 경우 알림 방식을 선택할 수 있습니다. Send Me a Push 를 선택하면 푸시 알림이 Duo Mobile 애플리케이션으로 전송됩니다. 알림이 도착했을 때 Approve 를 클릭하면 Snowflake에 로그인됩니다.

    MFA selection dialog with Send Me a Push, Call Me and Enter a Passcode options.

    위에 표시된 것처럼, 푸시 알림을 사용하는 대신 다음을 선택할 수도 있습니다.

    • Call Me 를 선택하여 등록된 모바일 디바이스로 전화 통화를 통해 로그인 지침을 제공받습니다.

    • Enter a Passcode 를 선택하여 Duo Mobile 애플리케이션에서 제공된 암호를 수동으로 입력하여 로그인합니다.

Classic Console 웹 인터페이스에서 MFA 사용하기

MFA 로 Classic Console 에 로그인하려면 다음을 수행하십시오.

  1. 브라우저에서 계정 의 URL을 가리킵니다. 예를 들어 https://myorg-account1.snowflakecomputing.com 과 같습니다.

  2. 사용자 자격 증명(사용자 로그인 이름 및 비밀번호)을 입력합니다.

  3. Duo Push가 활성화되면 푸시 알림이 Duo Mobile 애플리케이션으로 전송됩니다. 알림이 도착했을 때 Approve 를 클릭하면 Snowflake에 로그인됩니다.

    MFA selection dialog with Send Me a Push, Call Me and Enter a Passcode options.

    위의 스크린샷에서와 같이, 푸시 알림을 사용하는 대신 다음을 선택할 수도 있습니다.

    • Call Me 를 선택하여 등록된 모바일 디바이스로 전화 통화를 통해 로그인 지침을 제공받습니다.

    • Enter a Passcode 를 선택하여 Duo Mobile 애플리케이션에서 제공된 암호를 수동으로 입력하여 로그인합니다.

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
Copy

비밀번호에 포함된 Duo 암호를 사용하여 xy12345 계정(US 서부 리전)에 연결하는 demo 사용자를 위한 JDBC 연결 문자열:

jdbc:snowflake://xy12345.snowflakecomputing.com/?user=demo&passcodeInPassword=on
Copy

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() 메서드에 대한 설명을 참조하십시오.

MFA 오류 코드

다음은 인증 흐름 중에 반환될 수 있는 MFA와 연결된 오류 코드입니다.

오류는 실패한 각 로그인 시도에 표시됩니다. 과거 데이터는 Snowflake Information SchemaAccount Usage 에서도 확인할 수 있습니다.

오류 코드

오류

설명

390120

EXT_AUTHN_DENIED

Duo Security 인증이 거부되었습니다.

390121

EXT_AUTHN_PENDING

Duo Security 인증이 대기 중입니다.

390122

EXT_AUTHN_NOT_ENROLLED

사용자가 Duo Security에 등록되지 않았습니다. 로컬 시스템 관리자에게 문의하십시오.

390123

EXT_AUTHN_LOCKED

사용자가 Duo Security에서 잠겼습니다. 로컬 시스템 관리자에게 문의하십시오.

390124

EXT_AUTHN_REQUESTED

Duo Security 인증이 필요합니다.

390125

EXT_AUTHN_SMS_SENT

Duo Security 임시 암호가 SMS를 통해 전송됩니다. 암호를 사용하여 인증하십시오.

390126

EXT_AUTHN_TIMEOUT

Duo Mobile을 통한 로그인 요청 승인을 대기하는 동안 시간이 초과되었습니다. 모바일 디바이스에 데이터 서비스가 없는 경우 Duo 암호를 생성하고 연결 문자열에 입력하십시오.

390127

EXT_AUTHN_INVALID

잘못된 암호가 지정되었습니다.

390128

EXT_AUTHN_SUCCEEDED

Duo Security 인증이 성공했습니다.

390129

EXT_AUTHN_EXCEPTION

외부 서비스 공급자와의 통신 문제로 인해 요청을 완료하지 못했습니다. 나중에 다시 시도하십시오.

390132

EXT_AUTHN_DUO_PUSH_DISABLED

사용자의 MFA에 Duo Push가 활성화되지 않았습니다. 연결 문자열의 일부로 암호를 입력하십시오.