외부 API 인증과 시크릿(Secrets)

외부 API 인증과 시크릿(Secrets)

이 주제는 외부 API 인증과 시크릿(secret)에 대한 개념을 설명해요. Snowflake 외부에서 호스팅되는 서비스에 인증하기 위한 경로와, 자격 증명을 안전하게 저장하는 시크릿 객체를 다뤄요.

출처: Snowflake 문서

본문

개요

외부 API 인증은 Snowflake 외부에서 호스팅되는 서비스에 인증하는 경로를 제공해요. 서비스에 접근하는 API 요청은 인증되어야 해요. Snowflake는 외부 API 인증을 사용할 때 다음 인증 방법을 지원해요.

  • 기본 인증(Basic authentication)
  • 코드 그랜트 플로우(Code grant flow)를 사용한 OAuth
  • 클라이언트 자격 증명 플로우(Client credentials flow)를 사용한 OAuth

Snowflake는 RFC 7617에 명시된 대로 인증 자격 증명이 Base64로 인코딩된 API 요청 헤더의 기본 인증(즉, 사용자 이름과 비밀번호)을 지원해요. 마찬가지로 Snowflake는 RFC 6749에 명시된 OAuth 2.0을 지원해요. Snowflake에서 인증 자격 증명은 시크릿(secret)이라는 객체에 안전하게 저장되고 접근돼요. 시크릿은 커넥터와 함께 사용되어 Snowflake 외부의 서비스에 접근해요. 예를 들어 Snowflake Connector for ServiceNow가 있어요. 외부 API 인증을 위한 보안 통합(security integration)은 OAuth 플로우를 사용할 때 Snowflake가 외부에서 호스팅되는 서비스에 연결할 수 있게 해요.

시크릿은 민감 정보를 저장하고, RBAC를 사용해 민감 정보에 대한 접근을 제한하며, Snowflake 키 암호화 계층(key encryption hierarchy)을 사용해 암호화되는 스키마 수준 객체예요. 시크릿 객체에 있는 정보는 키 계층의 키로 암호화돼요. 시크릿을 만든 후에는 통합(integration)과 외부 함수 같은 전용 Snowflake 구성 요소만 민감 정보를 읽을 수 있어요.

예를 들어, 외부 함수는 API 권한 부여 헤더에 인증 자격 증명을 전달해 Snowflake 외부의 서비스에 API 요청을 하려면 시크릿에 접근해 읽어야 해요. 시크릿과 외부 함수의 바인딩은 커넥터 설치 과정에서 이루어져요. 하지만 사용자가 시크릿에 대해 DESCRIBE SECRET 연산을 실행해도 시크릿에 저장된 비밀번호 값은 절대 노출되지 않아요.

Snowflake는 시크릿에서 API 인증에 사용되는 자격 증명의 중앙 집중식 관리와 접근 제어를 제공해요. 시크릿 관리와 커넥터 관리를 담당하는 역할 간에 직무 분리(SoD)를 구현할 수 있어요. 커넥터는 시크릿 이름만 사용하면 되고, 커넥터 역할을 부여받은 사용자는 시크릿에 저장된 민감 정보를 볼 필요가 없어요.

시크릿 관리

Snowflake는 시크릿 객체를 관리하기 위해 다음 명령을 제공해요.

Snowflake는 사용자가 시크릿을 생성·사용·소유할 수 있는지 결정하는 다음 권한(privilege)을 지원해요.

스키마의 객체에 대한 작업은 상위 데이터베이스에 대한 권한이 하나 이상, 상위 스키마에 대한 권한이 하나 이상 필요해요.

권한(Privilege) 용도(Usage)
CREATE 스키마에 새 시크릿을 생성할 수 있게 해요.
USAGE 시크릿을 사용할 수 있게 해요.
OWNERSHIP 시크릿의 소유권을 이전하며, 시크릿에 대한 완전한 통제를 부여해요. 시크릿의 대부분 속성을 변경하는 데 필요해요.

다음 표는 시크릿 명령 연산과 필요한 권한 간의 관계를 요약해요.

연산(Operation) 필요 권한(Privilege)
CREATE SECRET 상위 데이터베이스와 스키마에 대한 USAGE 권한이 있고 같은 스키마에 CREATE SECRET 권한이 있는 역할
ALTER SECRET 시크릿에 대한 OWNERSHIP 권한이 있는 역할
DROP SECRET 시크릿에 대한 OWNERSHIP 권한이 있는 역할
DESCRIBE SECRET 시크릿에 대한 USAGE 권한이 있는 역할
SHOW SECRETS 시크릿에 대한 USAGE 권한이 있는 역할
USE SECRET 시크릿에 대한 USAGE 권한이 있는 역할. 시크릿을 외부 함수와 함께 사용하려면 외부 함수를 생성하는 역할과 쿼리 런타임에 외부 함수를 호출하는 역할에 이 권한이 필요해요.

외부 API 인증과 시크릿 사용하기

대표적인 예시는 다음을 참고해요.

추가로 계정 복제를 사용해 시크릿을 복제할 수 있어요. 자세한 내용은 복제 고려사항의 Replication and secrets 섹션을 참고해요.

더 알아보기 (Learn more)