Snowflake로 데이터베이스 액세스
Teleport v18.9Teleport는 Teleport Database Service를 통해 Snowflake에 대한 보안 접근을 제공할 수 있습니다. Teleport Database Service는 데이터베이스 클라이언트용 Teleport 인증 기관이 서명한 JSON 웹 토큰이 포함된 HTTP 메시지를 사용하여 Snowflake와 통신합니다.
Teleport는 Teleport Database Service를 통해 Snowflake에 대한 보안 접근을 제공할 수 있습니다. 이를 통해 Teleport의 RBAC를 사용한 세분화된 접근 제어가 가능합니다.
이 가이드에서는 다음을 수행합니다:
- Snowflake 데이터베이스를 구성합니다 키 쌍 인증으로.
- 데이터베이스를 Teleport 클러스터에 추가합니다.
- Teleport를 통해 데이터베이스에 연결합니다.
작동 방식#
Teleport Database Service는 데이터베이스 클라이언트용 Teleport 인증 기관이 서명한 JSON 웹 토큰이 포함된 HTTP 메시지를 사용하여 Snowflake와 통신합니다. Snowflake는 Teleport 데이터베이스 클라이언트 CA를 신뢰하도록 구성됩니다. 사용자가 Teleport를 통해 Snowflake에 연결하면 Database Service는 사용자의 요청을 Teleport 인증된 메시지로 Snowflake에 전달합니다.


사전 요구 사항#
-
실행 중인 Teleport 클러스터. Teleport를 시작하려면 무료 체험판에 가입하거나 데모 환경을 구성하세요.
-
tctlandtshclients.Installing `tctl` and `tsh` clients
-
Teleport 클러스터의 버전을 확인합니다.
tctlandtshclients는 Teleport 클러스터 버전보다 최대 한 개의 메이저 버전까지만 뒤처질 수 있습니다. Proxy Service의/v1/webapi/find로 GET 요청을 보내고 JSON 쿼리 도구를 사용하여 클러스터 버전을 확인합니다.teleport.example.com:443를 Teleport Proxy Service의 웹 주소로 바꿉니다:$ TELEPORT_DOMAIN=teleport.example.com:443 $ TELEPORT_VERSION="$(curl -s https://$TELEPORT_DOMAIN/v1/webapi/find | jq -r '.server_version')" -
사용 중인 플랫폼에 대한 지침에 따라
tctlandtshclients를 설치합니다:
-
Mac
`tctl` and `tsh` clients가 포함된, 서명된 Teleport macOS .pkg 설치 프로그램을 다운로드합니다:
```code
$ curl -O https://cdn.teleport.dev/teleport-${TELEPORT_VERSION?}.pkg
```
Finder에서 `pkg` 파일을 더블 클릭하여 설치를 시작합니다.
Homebrew를 사용하여 Teleport를 설치하는 것은 지원되지 않습니다. Homebrew의
Teleport 패키지는 Teleport에서 유지 관리하지 않으므로 신뢰성이나 보안을
보장할 수 없습니다.
Windows - Powershell
```code
$ curl.exe -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-windows-amd64-bin.zip
# Unzip the archive and move the `tctl` and `tsh` clients to your %PATH%
# NOTE: Do not place the `tctl` and `tsh` clients in the System32 directory, as this can cause issues when using WinSCP.
# Use %SystemRoot% (C:\Windows) or %USERPROFILE% (C:\Users\<username>) instead.
```
Linux
Linux 설치판의 모든 Teleport 바이너리에는 `tctl` and `tsh` clients가 포함되어 있습니다. RPM/DEB
패키지 및 i386/ARM/ARM64용 다운로드를 포함한 더 많은 옵션은
[설치 페이지](../installation/installation.mdx)를 참조하세요.
```code
$ curl -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ tar -xzf teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ cd teleport
$ sudo ./install
# Teleport binaries have been copied to /usr/local/bin
```
-
SECURITYADMIN역할 이상을 가진 Snowflake 계정. -
시스템의
PATH환경 변수에 추가되어 설치된snowsql. -
Teleport Database Service를 실행할 호스트.
자세한 내용은 설치를 참조하세요.
Teleport cluster에 연결할 수 있는지 확인하려면 tsh login으로 로그인한 다음,
현재 자격 증명으로 tctl 명령을 실행할 수 있는지 확인합니다.
예를 들어, teleport.example.com에 cluster 내 Teleport Proxy Service의
도메인 이름을, email@example.com에 Teleport 사용자 이름을 지정하여
다음 명령을 실행합니다:
$ tsh login --proxy=teleport.example.com --user=email@example.com
$ tctl status
# Cluster (=teleport.url=)
# Version (=teleport.version=)
# CA pin (=presets.ca_pin=)
cluster에 연결하여 tctl status 명령을 실행할 수 있다면, 현재 자격 증명을 사용하여
워크스테이션에서 이후의 tctl 명령을 실행할 수 있습니다.
자체 Teleport cluster를 호스팅하는 경우, 전체 권한을 얻기 위해 Teleport Auth Service를
호스팅하는 컴퓨터에서 tctl 명령을 실행할 수도 있습니다.
1/5단계. Teleport Database Service 설정#
Database Service가 Teleport 클러스터에 조인하려면 유효한 조인 토큰이 필요합니다.
다음 tctl 명령을 실행하고 Database Service를 실행할 서버에서
토큰 출력을 /tmp/token에 저장합니다:
$ tctl tokens add --type=db --format=text
(=presets.tokens.first=)
Teleport Database Service를 실행할 위치에 Teleport를 설치하고 구성합니다.
Linux 서버에 Teleport Agent를 설치하려면:
권장 설치 방법은 클러스터 설치 스크립트입니다. 이 스크립트는 클러스터에 맞는 올바른 버전, 에디션, 설치 모드를 선택합니다.
-
teleport.example.com:443에 Teleport 클러스터의 호스트명과 포트를 할당하되, 스킴(https://)은 포함하지 마십시오. -
클러스터의 설치 스크립트를 실행하십시오:
$ curl "https://teleport.example.com:443/scripts/install.sh" | sudo bash
Teleport Database Service를 실행할 호스트에서 적절한 구성으로 Teleport를 시작합니다.
단일 Teleport 프로세스는 여러 개의 서로 다른 서비스를 실행할 수 있습니다.
예를 들어 여러 개의 Database Service 에이전트뿐만 아니라 SSH Service나 Application
Service도 함께 실행할 수 있습니다. 아래 단계는 기존 구성 파일을 덮어쓰므로,
여러 서비스를 실행 중이라면 --output=stdout를 추가하여 터미널에 구성을 출력한
다음 /etc/teleport.yaml을 수동으로 조정합니다.
Database Service를 위한 구성 파일을 /etc/teleport.yaml에 생성합니다:
Teleport Enterprise/Enterprise Cloud
$ sudo teleport db configure create \
-o file \
--token=/tmp/token \
--proxy=teleport.example.com:443 \
--name=example-snowflake \
--protocol=snowflake \
--uri=abc12345.snowflakecomputing.com \
--labels=env=dev
Teleport Community Edition
$ sudo teleport db configure create \
-o file \
--token=/tmp/token \
--proxy=mytenant.teleport.sh:443 \
--name=example-snowflake \
--protocol=snowflake \
--uri=abc12345.snowflakecomputing.com \
--labels=env=dev
systemd 서비스를 생성하여 호스트가 부팅될 때 the Teleport Database Service이 자동으로 시작되도록 구성합니다. 지침은 the Teleport Database Service을 어떻게 설치했는지에 따라 다릅니다.
Package Manager
the Teleport Database Service을 실행할 호스트에서 Teleport를 활성화하고 시작합니다:
$ sudo systemctl enable teleport
$ sudo systemctl start teleport
TAR Archive
the Teleport Database Service을 실행할 호스트에서 Teleport용 systemd 서비스 구성을 생성하고, Teleport 서비스를 활성화한 후 Teleport를 시작합니다:
$ sudo teleport install systemd -o /etc/systemd/system/teleport.service
$ sudo systemctl enable teleport
$ sudo systemctl start teleport
systemctl status teleport로 the Teleport Database Service의 상태를 확인하고 journalctl -fu teleport로
로그를 볼 수 있습니다.
Teleport는 쿠버네티스 클러스터에 Teleport Database Service를 설치하기 위한 Helm 차트를 제공합니다.
Teleport Helm 리포지토리에서 Teleport 차트를 가져오도록 Helm을 구성하십시오.
$ helm repo add teleport (=teleport.helm_repo_url=)
최신 차트를 가져와 로컬 Helm 캐시를 새로 고치십시오.
$ helm repo update
Self-Hosted
Teleport Database Service 구성으로 Teleport Kube Agent를 Kubernetes 클러스터에 설치합니다.
$ JOIN_TOKEN=$(cat /tmp/token)
$ helm install teleport-kube-agent teleport/teleport-kube-agent \
--create-namespace \
--namespace teleport-agent \
--set roles=db \
--set proxyAddr=teleport.example.com:443 \
--set authToken=${JOIN_TOKEN?} \
--set "databases[0].name=example-snowflake" \
--set "databases[0].uri=abc12345.snowflakecomputing.com" \
--set "databases[0].protocol=snowflake" \
--set "databases[0].static_labels.env=dev" \
--version (=teleport.version=)
Cloud-Hosted
Teleport Database Service 구성으로 Teleport Kube Agent를 Kubernetes 클러스터에 설치합니다.
$ JOIN_TOKEN=$(cat /tmp/token)
$ helm install teleport-kube-agent teleport/teleport-kube-agent \
--create-namespace \
--namespace teleport-agent \
--set roles=db \
--set proxyAddr=mytenant.teleport.sh:443 \
--set authToken=${JOIN_TOKEN?} \
--set "databases[0].name=example-snowflake" \
--set "databases[0].uri=abc12345.snowflakecomputing.com" \
--set "databases[0].protocol=snowflake" \
--set "databases[0].static_labels.env=dev" \
--version (=cloud.version=)
Teleport Agent 파드가 실행 중인지 확인합니다. 준비된 컨테이너가 하나 있는
teleport-kube-agent 파드 하나가 표시되어야 합니다:
$ kubectl -n teleport-agent get pods
NAME READY STATUS RESTARTS AGE
teleport-kube-agent-0 1/1 Running 0 32s
하나의 Teleport 프로세스는 여러 서비스를 실행할 수 있습니다. 예를 들어, 여러 Database Service 인스턴스뿐만 아니라 SSH Service나 Application Service와 같은 다른 서비스도 함께 실행할 수 있습니다.
2/5단계. Teleport 사용자 생성#
기존 사용자를 수정하여 Database Service 접근 권한을 부여하려면 Database Access Controls를 참조하십시오.
Teleport Community Edition
내장 access 역할을 가진 로컬 Teleport 사용자를 생성합니다:
$ tctl users add \
--roles=access \
--db-users="*" \
--db-names="*" \
alice
Teleport Enterprise/Enterprise Cloud
내장 access 및 requester 역할을 가진 로컬 Teleport 사용자를 생성합니다:
$ tctl users add \
--roles=access,requester \
--db-users="*" \
--db-names="*" \
alice
| Flag | 설명 |
|---|---|
--roles |
사용자에게 할당할 역할 목록입니다. 내장 access 역할은 Teleport에 등록된 모든 데이터베이스 서버에 연결할 수 있게 합니다. |
--db-users |
사용자가 데이터베이스에 연결할 때 사용할 수 있는 데이터베이스 사용자명 목록입니다. 와일드카드는 모든 사용자를 허용합니다. |
--db-names |
사용자가 데이터베이스 서버 내에서 연결할 수 있는 논리적 데이터베이스(즉, 스키마) 목록입니다. 와일드카드는 모든 데이터베이스를 허용합니다. |
데이터베이스 이름은 PostgreSQL, MongoDB, Cloud Spanner 데이터베이스에서만 적용됩니다.
데이터베이스 접근 제어 및 접근 제한 방법에 대한 자세한 정보는 RBAC 문서를 참조하십시오.
3/5단계. 공개 키 내보내기#
아래의 tctl auth sign 명령을 사용하여 Snowflake 사용자용 공개 키를 내보냅니다.
$ tctl auth sign --format=snowflake --out=server
이 명령은 Teleport의 공개 키가 담긴 server.pub 파일을 생성합니다. Teleport는 대응하는 개인 키를 사용하여
Snowflake에 인증하는 데 사용될 JWT(JSON Web Token)를 생성합니다.
4/5단계. Snowflake 사용자에 공개 키 추가#
앞서 생성한 공개 키를 사용하여 키 쌍 인증을 활성화합니다.
Snowflake 인스턴스에 로그인하여 아래 SQL 문을 실행합니다.
alter user alice set rsa_public_key='MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv3dHYw4LJCcZzdbhb3hV...LwIDAQAB';
이 문에서 alice는 Snowflake 사용자의 이름이며, rsa_public_key는 앞서 생성한 키에서
PEM 헤더/푸터(첫 줄과 마지막 줄)를 제외한 값입니다.
describe user 명령을 사용하여 사용자의 공개 키를 확인할 수 있습니다.
desc user alice;
자세한 내용은 Snowflake 문서를 참조하세요.
5/5단계. 연결#
Teleport 클러스터에 로그인하여 사용 가능한 데이터베이스를 확인합니다.
$ tsh login --proxy=teleport.example.com --user=alice
$ tsh db ls
# Name Description Labels
# ----------------- ------------------- --------
# example-snowflake Example Snowflake ❄ env=dev
$ tsh login --proxy=mytenant.teleport.sh --user=alice
$ tsh db ls
# Name Description Labels
# ----------------- ------------------- --------
# example-snowflake Example Snowflake ❄ env=dev
데이터베이스에 대한 자격 증명을 가져와 연결하려면 다음을 실행합니다.
$ tsh db connect --db-user=alice --db-name=SNOWFLAKE_SAMPLE_DATA example-snowflake
이 섹션의 내용은 원문 문서를 참조하세요. (proxy-db-tunnel.mdx)
연결하려면 snowsql 명령줄 클라이언트가 시스템 PATH에서 사용 가능해야
합니다.
데이터베이스에서 로그아웃하고 자격 증명을 제거하려면 다음을 실행합니다.
# 특정 데이터베이스 인스턴스의 자격 증명을 제거합니다.
$ tsh db logout example-snowflake
# 모든 데이터베이스 인스턴스의 자격 증명을 제거합니다.
$ tsh db logout
Teleport를 통해 Snowsight 액세스#
Teleport Database Service는 Snowflake 데이터베이스에 대한 CLI 및 프로그래밍 방식 액세스를 제공하지만, Snowsight 웹 인터페이스에 대한 직접 액세스는 제공하지 않습니다. Snowsight 액세스를 활성화하려면 이를 Teleport에서 SAML 애플리케이션으로 구성하여 Teleport가 Snowsight의 ID 공급자(IdP) 역할을 하도록 할 수 있습니다.
Teleport가 Snowsight의 IdP로 구성되면 SAML 인증만 처리합니다. Snowsight 활동은 Teleport를 통해 감사되거나 기록되지 않습니다.
Teleport를 IdP로 설정하려면 Teleport를 SAML ID 공급자로 사용하기와 연합 인증을 사용하도록 Snowflake 구성하기를 따르세요.
다음은 Snowflake 데이터베이스에서 생성할 보안 통합의 예시입니다.
CREATE SECURITY INTEGRATION teleport_idp
TYPE = saml2
ENABLED = true
SAML2_ISSUER = 'https://teleport.example.com/enterprise/saml-idp/metadata'
SAML2_SSO_URL = 'https://teleport.example.com/enterprise/saml-idp/sso'
SAML2_PROVIDER = 'custom'
SAML2_X509_CERT = 'MII...'
SAML2_ENABLE_SP_INITIATED = true
SAML2_SP_INITIATED_LOGIN_PAGE_LABEL = 'Teleport Login'
URL과 X.509 인증서를 Teleport Web UI의 등록 흐름 중에 생성된 값으로 바꾸세요. 통합을 생성한 후, 해당 통합을 describe하여 Teleport에서 구성해야 할 Snowflake URL을 확인하세요.
기본적으로 Teleport는 Teleport 사용자 이름을 Snowsight 계정 이름으로 전달합니다. 사용자 지정 매핑에 대해서는 SAML IdP 속성 매핑을 참조하세요.