Teleport는 Teleport Database Service를 통해 Cloud Spanner에 대한 안전한 접근을 제공할 수 있습니다. 이는 Teleport의 RBAC를 통해 세부적인 접근 제어를 가능하게 합니다.
이 가이드에서는 다음을 수행합니다:
- Cloud Spanner 데이터베이스 with a service account를 구성합니다.
- 데이터베이스를 Teleport 클러스터에 추가합니다.
- Teleport를 통해 데이터베이스에 연결합니다.
작동 방식
Teleport 데이터베이스 서비스는 IAM 인증을 사용하여 Spanner와 통신합니다. 사용자가 Teleport를 통해 데이터베이스에 연결하면, Teleport 데이터베이스 서비스는 Google Cloud 자격 증명을 얻고 데이터베이스에 접근할 수 있는 권한을 가진 IAM 주체로 Google Cloud에 인증합니다.
필수 조건
-
실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.
-
tctl
관리 도구와tsh
클라이언트 도구.tctl
과tsh
다운로드에 대한 지침은 설치를 방문하세요.
- Google Cloud 계정
- Google Cloud Spanner 데이터베이스.
- Teleport 데이터베이스 서비스를 실행할 호스트, 예를 들어 Compute Engine 인스턴스.
- 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면,
tsh login
으로 로그인한 다음 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오. 예를 들어:클러스터에 연결하고tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 16.2.0
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속tctl
명령어를 실행할 수 있습니다. 자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로tctl
명령어를 실행할 수도 있습니다.
1단계/8. Teleport 데이터베이스 서비스용 서비스 계정 생성
Google Cloud Platform(GCP)에서 Teleport Database Service가 다른 GCP 서비스 계정을 대신하여 임시 액세스 토큰을 생성할 수 있도록 하기 위해 서비스 계정을 생성하는 방법에 대한 절차는 다음과 같습니다.
서비스 계정 생성하기
Google Cloud 콘솔에 로그인하고 서비스 계정 페이지로 이동합니다:
선택적인 단계는 무시합니다 - "완료"를 클릭합니다.
이 가이드의 나중에 이 서비스 계정에 대한 권한을 부여할 것입니다.
2단계/8. 데이터베이스 사용자용 서비스 계정 생성
사용자가 Teleport를 통해 Spanner에 연결할 때, 데이터베이스 사용자로서 서비스 계정 이름을 지정하며, Teleport 데이터베이스 서비스는 GCP에 인증하기 위해 그 서비스 계정을 가장합니다.
Teleport 사용자에게 다른 접근 수준을 제공하기 위해 여러 개의 서비스 계정을 생성할 수 있지만, 이 가이드에서는 하나만 생성합니다.
서비스 계정 생성
IAM 및 관리 서비스 계정 페이지로 가서 "spanner-user"라는 이름의 새 서비스 계정을 생성합니다:
선택적인 단계는 무시합니다 - 그냥 "완료"를 클릭합니다.
프로젝트 수준에서 접근을 부여하는 대신, 이 서비스 계정은 접근할 데이터베이스에만 권한을 부여합니다.
권한 부여
스패너 인스턴스 개요 페이지로 이동하여 스패너 인스턴스의 체크박스를 선택한 후 "권한"을 클릭합니다.
권한 블레이드에서 "주체 추가"를 클릭한 후 "spanner-user" 서비스 계정을 주체로 추가하고 "Cloud Spanner Database User" 역할을 할당합니다:
"저장"을 클릭합니다.
Cloud Spanner Database User는 미리 정의된 역할입니다.
다른 미리 정의된 역할을 사용하거나
커스텀 IAM 역할로 자신만의 역할 권한을 생성하고 맞춤 설정할 수 있습니다.
서비스 계정에 대한 접근 권한 부여
Teleport 데이터베이스 서비스는 이 서비스 계정을 가장할 수 있어야 합니다. "spanner-user" 서비스 계정 개요 페이지로 이동하여 "권한" 탭을 선택합니다:
"접근 권한 부여"를 클릭하고 "teleport-db-service" 주체 ID를 추가합니다. "Service Account Token Creator" 역할을 선택하고 변경 사항을 저장합니다:
"Service Account Token Creator" IAM 역할은 데이터베이스 서비스가 필요로 하는 것보다 더 많은 권한을 포함합니다. 서비스 계정을 더 제한하려면 다음 권한만 포함하는 역할을 만들 수 있습니다:
# 데이터베이스 인스턴스에 연결할 때 IAM 인증 토큰을 생성하는 데 사용됩니다.
iam.serviceAccounts.getAccessToken
3단계/8. Teleport 설치
Linux 서버에 Teleport 설치하기:
-
Teleport 에디션에 따라 edition을(를) 다음 중 하나로 지정합니다:
에디션 값 Teleport Enterprise Cloud cloud
Teleport Enterprise (자체 호스팅) enterprise
Teleport Community Edition oss
-
설치할 Teleport의 버전을 확인합니다. 클러스터에서 자동 에이전트 업데이트가 활성화되어 있는 경우, 업데이터와 호환되는 최신 Teleport 버전을 쿼리합니다:
TELEPORT_DOMAIN=example.teleport.comTELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/automaticupgrades/channel/default/version | sed 's/v//')"그렇지 않으면, Teleport 클러스터의 버전을 확인합니다:
TELEPORT_DOMAIN=example.teleport.comTELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/ping | jq -r '.server_version')" -
Linux 서버에 Teleport를 설치합니다:
curl https://cdn.teleport.dev/install-v16.2.0.sh | bash -s ${TELEPORT_VERSION} edition설치 스크립트는 Linux 서버에서 패키지 관리자를 감지하고 이를 사용하여 Teleport 바이너리를 설치합니다. 설치를 사용자 지정하려면 설치 가이드에서 Teleport 패키지 리포지토리에 대해 알아보세요.
4단계/8. Teleport 데이터베이스 서비스 구성
Database 서비스는 Teleport 클러스터에 참여하려면 유효한 조인 토큰이 필요합니다.
다음 tctl
명령을 실행하고 토큰 출력을 /tmp/token
에 저장하세요.
Database 서비스가 실행될 서버에서:
tctl tokens add --type=db --format=textabcd123-insecure-do-not-use-this
다음 정보를 제공한 후 Teleport 데이터베이스 서비스에 대한 구성 파일을 생성합니다:
- example.teleport.sh:443 Teleport 프록시 서비스 또는 클라우드 호스팅 Teleport 엔터프라이즈 사이트의 호스트 및 포트
- project-id GCP 프로젝트 ID. GCP 대시보드 상단의 조직 보기에서 일반적으로 볼 수 있습니다.
- instance-id Cloud SQL 인스턴스의 이름.
sudo teleport db configure create \ -o file \ --name=spanner-example \ --protocol=spanner \ --labels=env=dev \ --token=/tmp/token \ --uri=spanner.googleapis.com:443 \ --proxy=example.teleport.sh:443 \ --gcp-project-id=project-id \ --gcp-instance-id=instance-id
5단계/8. GCP 자격 증명 구성
Teleport 데이터베이스 서비스는 "teleport-db-service" GCP 서비스 계정에 대한 자격 증명을 가져야 합니다.
Teleport 데이터베이스 서비스가 GCE 인스턴스에서 호스팅되는 경우, 연결된 서비스 계정을 변경할 수 있습니다. GCE가 아닌 Teleport 배포의 경우, 워크로드 아이덴티티를 사용하는 것을 권장합니다.
또는, 해당 서비스 계정의 키 탭으로 이동하여 새 키를 생성하세요:
JSON 형식을 선택해야 합니다:
파일을 저장합니다. 다운로드한 JSON 자격 증명 파일을 가리키도록 GOOGLE_APPLICATION_CREDENTIALS
환경 변수를 설정합니다. 예를 들어, systemd
를 사용하여 teleport
를 시작하는 경우, 서비스의 EnvironmentFile
을 편집하여 환경 변수를 포함시켜야 합니다:
echo 'GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json' | sudo tee -a /etc/default/teleport
서비스 계정 키는 보안 위험이 될 수 있습니다 - 이 가이드에서는 단순함을 위해 키 사용을 설명합니다. 실제 운영 환경에서는 서비스 계정 키 사용을 권장하지 않습니다. 서비스 계정 인증 방법에 대한 자세한 내용은 Google Cloud 문서의 인증을 참조하세요.
6단계/8. Teleport 데이터베이스 서비스 시작
호스트가 부팅될 때 the Teleport Database Service가 자동으로 시작되도록 시스템 데몬 서비스를 생성하여 구성합니다. 지침은 the Teleport Database Service를 설치한 방법에 따라 다릅니다.
the Teleport Database Service를 실행할 호스트에서 Teleport를 활성화하고 시작하십시오:
sudo systemctl enable teleportsudo systemctl start teleport
the Teleport Database Service를 실행할 호스트에서 Teleport에 대한 시스템 데몬 서비스 구성을 생성하고, Teleport 서비스를 활성화한 후 Teleport를 시작하십시오:
sudo teleport install systemd -o /etc/systemd/system/teleport.servicesudo systemctl enable teleportsudo systemctl start teleport
the Teleport Database Service의 상태는 systemctl status teleport
로 확인할 수 있으며, 로그는 journalctl -fu teleport
로 볼 수 있습니다.
7단계/8. Teleport 사용자 생성
기존 사용자를 수정하여 데이터베이스 서비스에 대한 액세스를 제공하려면 데이터베이스 액세스 제어를 참조하세요.
내장된 access
역할로 로컬 Teleport 사용자를 생성하세요:
tctl users add \ --roles=access \ --db-users="*" \ --db-names="*" \ alice
내장된 access
및 requester
역할로 로컬 Teleport 사용자를 생성하세요:
tctl users add \ --roles=access,requester \ --db-users="*" \ --db-names="*" \ alice
Flag | Description |
---|---|
--roles | 사용자에게 할당할 역할 목록입니다. 내장된 access 역할은 그들이 Teleport에 등록된 모든 데이터베이스 서버에 연결할 수 있도록 합니다. |
--db-users | 사용자가 데이터베이스에 연결할 때 사용할 수 있는 데이터베이스 사용자 이름 목록입니다. 와일드카드는 모든 사용자를 허용합니다. |
--db-names | 사용자가 데이터베이스 서버 내에서 연결할 수 있는 논리적 데이터베이스(일명 스키마) 목록입니다. 와일드카드는 모든 데이터베이스를 허용합니다. |
데이터베이스 이름은 PostgreSQL, MongoDB 및 Cloud Spanner 데이터베이스에 대해서만 적용됩니다.
데이터베이스 액세스 제어와 액세스를 제한하는 방법에 대한 자세한 정보는 RBAC 문서를 참조하세요.
8단계/8. 연결
Teleport 데이터베이스 서비스가 클러스터에 조인한 후, 사용 가능한 데이터베이스를 보려면 로그인합니다:
tsh login --proxy=teleport.example.com --user=example-usertsh db ls이름 설명 허용된 사용자 레이블 연결 --------------- ----------------- ------------- ------- ------- spanner-example GCP Cloud Spanner [*] env=dev
tsh login --proxy=mytenant.teleport.sh --user=example-usertsh db ls이름 설명 허용된 사용자 레이블 연결 --------------- ----------------- ------------- ------- ------- spanner-example GCP Cloud Spanner [*] env=dev
당신은 Teleport 역할이 접근할 수 있는 데이터베이스만 볼 수 있습니다. 더 많은 세부정보는 우리의 RBAC 가이드를 참조하세요.
데이터베이스에 연결할 때, 위에서 생성한 데이터베이스 사용자용 서비스 계정의 이름을 사용합니다 위에서 설명했습니다, ("@project-id.iam.gserviceaccount.com" 접미사를 빼고). Cloud Spanner 인스턴스의 데이터베이스에 대한 자격 증명을 검색하고 연결합니다:
tsh db connect --db-user=spanner-user --db-name=example-db spanner-example
데이터베이스에서 로그아웃하고 자격 증명을 제거하려면:
특정 데이터베이스 인스턴스에 대한 자격 증명 제거:
tsh db logout spanner-example또는 모든 데이터베이스에 대한 자격 증명 제거:
tsh db logout
문제 해결
기본 자격 증명을 찾을 수 없습니다
"기본 자격 증명을 찾을 수 없습니다"라는 오류는 클라이언트 애플리케이션이나 Teleport에서 발생할 수 있습니다.
클라이언트 애플리케이션의 경우
- GCP 자격 증명 로딩을 비활성화해야 합니다. 클라이언트가 자격 증명을 로드하려고 시도해서는 안 되며, GCP 자격 증명은 Teleport Database Service에 의해 제공될 것입니다.
Teleport Database Service 로그에서 오류가 발생하는 경우
- (DEBUG 로그 레벨에서) Teleport Database Service에 GCP 자격 증명이 올바르게 구성되지 않은 것입니다.
- 서비스 계정 키를 사용하는 경우, 환경 변수
GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json
이 설정되어 있는지 확인하고, 이 환경 변수가teleport
에서 사용 가능하도록 Teleport Database Service를 재시작해야 합니다.
예를 들어, Teleport Database Service가 systemd
서비스로 실행되는 경우:
echo 'GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json' | sudo tee -a /etc/default/teleportsudo systemctl restart teleport
서비스 계정 인증 방법에 대한 자세한 내용은 Google Cloud 문서의 인증을 참조하세요.
다음 단계
-
특정 사용자와 데이터베이스에 대한 액세스를 제한하는 방법을 알아보세요.
-
고가용성(HA) 가이드를 확인하세요.
-
YAML 구성 참조를 살펴보세요.
-
전체 CLI 참조를 확인하세요.
- GUI 클라이언트로 연결하는 방법을 알아보세요.
- Google Cloud에서 서비스 계정으로 인증하는 방법에 대해 더 알아보세요.