외부 함수 보안 설정
외부 함수 보안 설정 (Securing an external function)
이 문서는 외부 함수(external function)를 보호하는 것과 관련된 플랫폼 독립적인 세부 사항을 설명해요. 외부 함수의 접근 제어, API 통합 권한, 프록시 서비스와 원격 서비스 보호 방법을 이해하면 외부 함수를 안전하게 운영할 수 있어요.
본문
접근 제어 (Access control)
외부 함수 (External functions)
외부 함수는 다른 사용자 정의 함수(UDF)와 마찬가지로 접근 제어 규칙을 따릅니다:
- 외부 함수에는 소유자(owner)가 있어요.
- 소유자는 소유자 외의 호출자에게 함수에 대한 적절한 권한을 부여해야 해요.
그러나 외부 함수에는 몇 가지 추가 권한 요구 사항이 있습니다:
- 외부 함수는 API 통합이 필요하므로, 외부 함수의 작성자는 API 통합에 대한
USAGE권한을 부여받아야 해요.
UDF와 접근 제어에 대한 자세한 내용은 접근 제어 권한(Access control privileges) 문서를 참고하세요.
API 통합 (API integrations)
권한과 API 통합 (Privileges and API integrations)
API 통합은 데이터베이스 객체예요. API 통합을 만들려면 ACCOUNTADMIN 권한 또는 CREATE INTEGRATION 권한이 있는 Snowflake 역할이 필요해요. 계정 관리자는 각 API 통합에 대한 소유권과 사용 권한을 부여하고 취소할 수 있어요.
CREATE API INTEGRATION에서 API_KEY 옵션 사용하기 (Using the API_KEY option in CREATE API INTEGRATION)
일부 프록시 서비스(API Gateway)는 프록시 서비스를 호출할 때 사용자가 구독 정보(또는 다른 제품 관련 정보)를 제공할 것을 요구해요. 구독 정보는 사용자가 지불 고객임을 인증하고, 사용 할당량을 적용하는 등의 용도로 사용할 수 있어요.
Snowflake는 이제 API 키를 지원해요. API 키는 구독 키(Microsoft Azure의 용어)라고도 하며, 개발자가 구독 정보를 제공해야 하는 사용자에게 배포할 수 있는 영숫자(alphanumeric) 문자열 값이에요.
사용자는 CREATE API INTEGRATION 문 또는 ALTER API INTEGRATION 문의 API_KEY 절을 사용해 Snowflake에 이 키를 제공할 수 있어요. API_KEY 절은 선택 사항이며, 서비스가 키를 필요로 하지 않으면 생략할 수 있어요.
API_KEY는 IAM(Identity and Access Management)의 대체가 아니라 추가 항목이에요. API 키는 민감한 값이에요. API 키는 다음에는 표시되지 않아요:
- Query history 명령
DESCRIBE INTEGRATION명령DESCRIBE API INTEGRATION명령
서비스의 개발자가 키를 형식화하는 방법을 선택해요. 키는 Snowflake에 불투명하며, Snowflake는 키를 검증하지 않아요.
API 키에 대해 특정 플랫폼에서 자세히 읽어보려면 다음 링크를 참고하세요:
- AWS API 키
- Microsoft Azure 구독 키
프록시 서비스 보호하기 (Secure the proxy service)
외부 함수가 공개적으로 접근 가능하게 만들려는 것이 아니라면, Snowflake는 프록시 서비스 엔드포인트를 보호할 것을 강력히 권장해요.
Snowflake는 프록시 서비스 엔드포인트에 인증하기 위해 자격 증명 없는(credential-less) API 통합 객체를 사용해요. 자격 증명 없는 API 통합은 관리자와 사용자 사이의 책임을 분리해요. API 통합은 관리자가 클라우드 제공자의 네이티브 인증 및 권한 부여 메커니즘을 사용해 Snowflake와 클라우드 제공자 사이의 신뢰 정책(trust policy)을 만들 수 있게 해요. Snowflake가 클라우드 제공자에 연결하면 클라우드 제공자는 이 신뢰 정책을 통해 접근을 인증하고 권한을 부여해요. 특정 API 통합을 사용하여 관리자는 API 통합 객체가 접근할 수 있는 엔드포인트의 허용 목록(allowed list)을 지정할 수도 있어서, Snowflake가 사용할 수 있는 프록시 서비스와 리소스를 제한해 데이터 송수신에 대한 조직 정책을 시행할 수 있어요.
Amazon API Gateway 같은 특정 프록시 서비스 엔드포인트를 보호하는 더 자세한 지침은 플랫폼별 지침에 있어요.
원격 서비스 보호하기 (Secure the remote service)
자신만의 원격 서비스를 만들었다면 그것도 잊지 말고 보호하세요. 세부 사항은 원격 서비스의 구현에 따라 달라지며 이 문서의 범위 밖이에요. 대부분의 경우 원격 서비스는 HTTP가 아니라 HTTPS를 사용해야 해요.
추가 보안 정보 (Additional security information)
- Snowflake와 프록시 서버 사이의 통신은 HTTPS를 사용해 암호화돼요.
플랫폼별 보안 정보 (Platform-specific security information)
AWS
- AWS의 경우, (API Gateway로 가는) 모든 Snowflake HTTP 요청은 AWS sigv4 인증을 사용해 서명돼요. 자세한 내용은 AWS sig4 인증(AWS sig4 authentication) 문서를 참고하세요.
- 리소스 정책(resource policy)을 추가해 API Gateway 엔드포인트에 대한 접근을 제한하세요. 자세한 내용은 Amazon API Gateway 엔드포인트 보안 유지(Secure your Amazon API Gateway endpoint) 문서를 참고하세요.
- 프라이빗 엔드포인트를 사용한다면 PrivateLink에 대해 읽어보는 게 좋아요.
더 알아보기 (Learn more)
- 외부 함수 소개 (external-functions-introduction)
- 고성능 외부 함수 설계 (external-functions-implementation)
- 원격 서비스 입출력 데이터 형식 (external-functions-data-format)
- GCP용 외부 함수 문제 해결 (external-functions-creating-gcp-troubleshooting)