Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Code Workspaces에서 외부 시스템 연결

소스(Source)는 외부 시스템의 비밀과 egress 정책 및 데이터 내보내기 통제를 코드와 분리해 관리합니다. JupyterLab과 RStudio의 대화형 작업 및 게시한 앱에서 사용할 수 있습니다.

소스는 일반적으로 네트워크 egress 정책을 직접 연결하는 방식보다 우선하는 경로입니다. CBAC를 활성화한 환경은 이 권고의 예외이므로 해당 환경에서 허용한 네트워크 정책 구성을 따릅니다. Code Workspaces에서 게시한 transform은 소스를 아직 지원하지 않습니다.

소스 준비

  1. Data Connection에서 소스를 만들고 필요한 외부 연결과 비밀을 구성합니다.
  2. 소스의 API 이름을 지정하고 코드 저장소로 가져오기를 허용합니다.
  3. 작업공간에 소스를 추가한 뒤 한 번 재시작합니다.
  4. 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()에서 오류가 발생할 수 있습니다.
  • 시작 또는 재시작 시 호환되지 않는 소스와 데이터셋이 함께 있으면 충돌이 사라지도록 둘 중 필요한 항목을 구성에서 제거하라는 안내가 나타납니다.
  • 충돌을 정리한 뒤에는 이전 체크포인트를 복원하지 않고 작업공간을 재시작해야 합니다.

소스의 비밀 접근과 네트워크 허용, 데이터의 내보내기 가능 여부는 각각 필요한 조건입니다. 허용된 연결이 있다는 사실만으로 작업공간의 모든 데이터를 내보낼 수 있지는 않습니다.