Code Workspaces에서 외부 시스템 연결
소스(Source)는 외부 시스템의 비밀과 egress 정책 및 데이터 내보내기 통제를 코드와 분리해 관리합니다. JupyterLab과 RStudio의 대화형 작업 및 게시한 앱에서 사용할 수 있습니다.
소스는 일반적으로 네트워크 egress 정책을 직접 연결하는 방식보다 우선하는 경로입니다. CBAC를 활성화한 환경은 이 권고의 예외이므로 해당 환경에서 허용한 네트워크 정책 구성을 따릅니다. Code Workspaces에서 게시한 transform은 소스를 아직 지원하지 않습니다.
소스 준비
- Data Connection에서 소스를 만들고 필요한 외부 연결과 비밀을 구성합니다.
- 소스의 API 이름을 지정하고 코드 저장소로 가져오기를 허용합니다.
- 작업공간에 소스를 추가한 뒤 한 번 재시작합니다.
- External systems 패널이 제공하는 코드를 사용합니다.
Restricted outputs mode를 켠 작업공간에서는 추가한 소스와 네트워크 정책이 비활성화됩니다.
JupyterLab
작업공간의 Python 환경에 containers-external-systems-python을 설치합니다. SourceApiName과 secretName은 다음 예제의 가상 구성 이름이며 실제 소스 API 이름과 비밀 이름에 맞춥니다.
from containers_external_systems_python import get_source
my_source = get_source("SourceApiName")
some_secret = my_source.get_secret("secretName")
HTTPS 연결이 설정된 소스는 다음처럼 구성된 클라이언트로 요청합니다.
https_connection = my_source.get_https_connection()
client = https_connection.get_client()
response = client.get(https_connection.url, timeout=10)
response.raise_for_status()
text = response.text
자격 증명이나 전체 응답의 민감 데이터를 로그에 출력하지 않습니다. 요청이 실패하면 HTTP 오류를 전달하며 실패한 응답을 정상 데이터로 처리하지 않습니다.
RStudio
Python 환경과 containers-external-systems-python, R의 reticulate가 필요합니다. R에서 Python Source 객체의 메서드를 호출합니다.
library(reticulate)
external_source <- import("containers_external_systems_python")$get_source("SourceApiName")
https_connection <- external_source$get_https_connection()
client <- https_connection$get_client()
response <- client$get(https_connection$url, timeout = 10)
response$raise_for_status()
text <- response$text
비밀은 같은 Source 객체에서 읽습니다.
some_secret <- external_source$get_secret("secretName")
게시한 앱에 소스 포함
Streamlit 같은 앱을 게시할 때 소스가 필요하면 앱의 Advanced 구성에 해당 소스를 추가해야 합니다. 사용자에게 포함한 모든 소스의 접근 권한이 있어야 앱을 열 수 있습니다.
대화형 작업공간에 추가했다는 사실만으로 게시 앱의 소스 구성이 끝나지는 않습니다.
내보내기 보안 표지
내보내기를 허용한 소스를 가져오면 작업공간의 데이터와 그 소스의 exportable markings 목록을 함께 검사합니다. 데이터셋의 보안 표지가 소스의 내보내기 허용 목록에 없으면 같은 작업공간에서 그 소스와 데이터셋을 함께 사용할 수 없습니다.
가상의 Hospital A 소스가 Hospital A Patient Data 표지만 내보낼 수 있다고 가정합니다. 같은 작업공간에 Hospital B Patient Data 표지가 있는 데이터셋을 넣으면 병원 B의 정보를 A로 내보낼 수 있으므로 이 조합을 허용하지 않습니다. 검사는 개별 코드 줄이 아닌 작업공간 전체 입력 계보에 적용됩니다.
- 내보내기 목록을 적용한 소스가 이미 있고 비허용 표지의 데이터셋을 추가하면 데이터셋 접근을 막습니다. Dataset.get()에서 오류가 발생할 수 있습니다.
- 시작 또는 재시작 시 호환되지 않는 소스와 데이터셋이 함께 있으면 충돌이 사라지도록 둘 중 필요한 항목을 구성에서 제거하라는 안내가 나타납니다.
- 충돌을 정리한 뒤에는 이전 체크포인트를 복원하지 않고 작업공간을 재시작해야 합니다.
소스의 비밀 접근과 네트워크 허용, 데이터의 내보내기 가능 여부는 각각 필요한 조건입니다. 허용된 연결이 있다는 사실만으로 작업공간의 모든 데이터를 내보낼 수 있지는 않습니다.