인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
Amazon Keyspaces (Apache Cassandra)로 데이터베이스 접근하기
Teleport은 Teleport Database Service를 통해 Amazon Keyspaces (Apache Cassandra)에 대한 안전한 액세스를 제공할 수 있습니다. 이를 통해 Teleport의 RBAC를 통한 세부적인 액세스 제어가 가능합니다.
이 가이드에서는 다음을 수행합니다:
- Amazon Keyspaces (Apache Cassandra) 데이터베이스 IAM 인증 사용를 구성합니다.
- 데이터베이스를 Teleport 클러스터에 추가합니다.
- Teleport를 통해 데이터베이스에 연결합니다.
작동 방식
Teleport 데이터베이스 서비스는 IAM 인증을 사용하여 Amazon Keyspaces와 통신합니다. 사용자가 Teleport를 통해 데이터베이스에 연결하면, Teleport 데이터베이스 서비스는 AWS 자격 증명을 얻고 데이터베이스에 액세스할 수 있는 권한을 가진 IAM 주체로 AWS에 인증을 수행합니다.
전제 조건
-
실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.
-
tctl
관리자 도구와tsh
클라이언트 도구.tctl
및tsh
다운로드 방법에 대한 지침은 설치를 방문하십시오.
- Amazon Keyspaces 데이터베이스가 있는 AWS 계정 및 IAM 정책을 생성하고 연결할 수 있는 권한
cqlsh
Cassandra 클라이언트가 설치되어 시스템의PATH
환경 변수에 추가됨- Teleport 데이터베이스 서비스를 실행할 호스트, 예: Amazon EC2 인스턴스
- 연결이 가능한지 확인하기 위해
tsh login
으로 로그인한 다음, 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오. 예를 들어:클러스터에 연결할 수 있고tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 17.0.0-dev
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 워크스테이션에서 후속tctl
명령어를 실행할 수 있습니다.
자신의 Teleport 클러스터를 호스팅하는 경우, Teleport Auth Service를 호스팅하는 컴퓨터에서 전체 권한으로tctl
명령어를 실행할 수도 있습니다.
1/5단계. Teleport 데이터베이스 서비스 설정
Database 서비스는 Teleport 클러스터에 조인하기 위해 유효한 조인 토큰이 필요합니다.
다음 tctl
명령어를 실행하고 Database 서비스가 실행될 서버에 /tmp/token
안에 토큰 출력을 저장하세요:
tctl tokens add --type=db --format=textabcd123-insecure-do-not-use-this
AWS에 많은 인프라를 가진 사용자나 많은 인스턴스를 생성하거나 재생성할 가능성이 있는 사용자에게는 Teleport를 실행하는 새로운 EC2 인스턴스에 조인하기 위한 대체 방법을 고려하십시오:
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-v15.4.11.sh | bash -s ${TELEPORT_VERSION} edition설치 스크립트는 Linux 서버에서 패키지 관리자를 감지하고 이를 사용하여 Teleport 바이너리를 설치합니다. 설치를 사용자 정의하려면 설치 가이드에서 Teleport 패키지 리포지토리에 대해 알아보세요.
Teleport 데이터베이스 서비스 설정을 위해 구성 파일을 생성하고
--proxy
플래그를 Teleport Proxy 서비스 주소로 지정합니다:
sudo teleport db configure create \ -o file \ --token=/tmp/token \ --proxy=teleport.example.com:443 \ --name=keyspaces \ --protocol=cassandra \ --aws-account-id=12345678912 \ --aws-region=us-east-1 \ --labels=env=dev
Teleport 데이터베이스 서비스 설정을 위해 구성 파일을 생성하고
--proxy
플래그를 Teleport Proxy 서비스 주소로 지정합니다:
sudo teleport db configure create \ -o file \ --token=/tmp/token \ --proxy=mytenant.teleport.sh:443 \ --name=keyspaces \ --protocol=cassandra \ --aws-account-id=12345678912 \ --aws-region=us-east-1 \ --labels=env=dev
Teleport 데이터베이스 서비스 가 AWS에 인증하는 데 사용할 수 있는 자격 증명에 대한 액세스를 부여하십시오.
- Teleport 데이터베이스 서비스 를 EC2 인스턴스에서 실행 중인 경우, EC2 인스턴스 메타데이터 서비스 방법을 사용할 수 있습니다.
- Teleport 데이터베이스 서비스 를 Kubernetes에서 실행 중인 경우, IAM Roles for Service Accounts (IRSA)를 사용할 수 있습니다.
- 그렇지 않은 경우, 환경 변수를 사용해야 합니다.
Teleport는 EC2 인스턴스에서 실행 중일 때 이를 감지하고 인스턴스 메타데이터 서비스를 사용하여 자격 증명을 가져옵니다.
EC2 인스턴스는 EC2 인스턴스 프로필을 사용하도록 구성되어야 합니다. 자세한 내용은 인스턴스 프로필 사용을 참조하십시오.
AWS의 IAM Roles for Service Accounts (IRSA)를 참조하여 AWS에서 OIDC 공급자를 설정하고 포드의 서비스 계정이 해당 역할을 맡을 수 있도록 하는 AWS IAM 역할을 구성하십시오.
Teleport의 내장 AWS 클라이언트는 다음 환경 변수에서 자격 증명을 읽습니다:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION
Teleport 데이터베이스 서비스 를 시작할 때, 서비스는 /etc/default/teleport
경로에 있는 파일에서 환경 변수를 읽습니다. 이러한 자격 증명을 귀하의 조직에서 확보하십시오. /etc/default/teleport
에는 다음 내용을 포함해야 하며, 각 변수의 값을 교체하십시오:
AWS_ACCESS_KEY_ID=00000000000000000000
AWS_SECRET_ACCESS_KEY=0000000000000000000000000000000000000000
AWS_DEFAULT_REGION=<YOUR_REGION>
Teleport의 AWS 클라이언트는 다음 순서로 다양한 소스에서 자격 증명을 로드합니다:
- 환경 변수
- 공유된 자격 증명 파일
- 공유된 구성 파일 (Teleport는 항상 공유 구성을 활성화함)
- EC2 인스턴스 메타데이터 (자격 증명만 해당)
공유 자격 증명 파일 또는 공유 구성 파일을 통해 AWS 자격 증명을 제공할 수 있지만, Teleport 데이터베이스 서비스 를 선택한 프로필 이름에 할당된 AWS_PROFILE
환경 변수를 사용하여 실행해야 합니다.
위 지침에 설명되지 않은 특정 사용 사례가 있는 경우, AWS SDK for Go의 문서를 참조하여 자격 증명 로드 동작에 대한 자세한 설명을 확인하십시오.
호스트가 부팅될 때 Teleport 데이터베이스 서비스가 자동으로 시작되도록 systemd 서비스를 생성하여 구성합니다. 지침은 Teleport 데이터베이스 서비스를 설치한 방법에 따라 다릅니다.
Teleport 데이터베이스 서비스를 실행할 호스트에서 Teleport를 활성화하고 시작합니다:
sudo systemctl enable teleportsudo systemctl start teleport
Teleport 데이터베이스 서비스를 실행할 호스트에서 Teleport의 systemd 서비스 구성을 만들고, Teleport 서비스를 활성화한 후 Teleport를 시작합니다:
sudo teleport install systemd -o /etc/systemd/system/teleport.servicesudo systemctl enable teleportsudo systemctl start teleport
systemctl status teleport
로 Teleport 데이터베이스 서비스의 상태를 확인하고, journalctl -fu teleport
로 로그를 볼 수 있습니다.
2/5단계. Teleport 사용자 생성
Tip
기존 사용자를 수정하여 데이터베이스 서비스에 대한 액세스를 제공하려면 데이터베이스 액세스 제어를 참조하십시오.
내장된 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 | 사용자가 데이터베이스 서버 내에서 연결할 수 있는 논리 데이터베이스(즉, 스키마) 목록. 와일드카드는 모든 데이터베이스를 허용합니다. |
Warning
데이터베이스 이름은 PostgreSQL, MongoDB 및 Cloud Spanner 데이터베이스에 대해서만 적용됩니다.
데이터베이스 액세스 제어 및 액세스를 제한하는 방법에 대한 자세한 정보는 RBAC 문서를 참조하십시오.
3/5단계. Amazon Keyspaces 역할 생성
AWS IAM 역할을 생성하여 Keyspaces 사용자로 사용합니다.
IAM -> 액세스 관리 -> 역할로 이동합니다.
역할 생성(Create Role)을 클릭합니다.
AWS는 AmazonKeyspacesReadOnlyAccess
및 AmazonKeyspacesFullAccess
IAM 정책을 제공하여 Keyspaces 사용자 역할에 통합할 수 있습니다.
Amazon Keyspaces에 대한 읽기 전용 접근을 위해 AmazonKeyspacesReadOnlyAccess
를 선택하거나 전체 접근을 위해 AmazonKeyspacesFullAccess
를 선택할 수 있습니다.
Tip
AmazonKeyspacesReadOnlyAccess
및 AmazonKeyspacesReadOnlyAccess
정책은
의도에 비해 너무 많은 또는 부족한 접근 권한을 제공할 수 있습니다. 이를 사용할
계획이라면 기대치에 부합하는지 확인하십시오. 사용자 정의 Amazon Keyspaces 권한
정책도 생성할 수 있습니다: Amazon Keyspaces 아이덴티티 기반 정책
예제.
역할 이름을 입력하고 "역할 생성(Create role)"을 클릭합니다.
4/5단계. Teleport에 역할을 가정할 권한 부여
다음으로, Teleport Database Service 인스턴스가 사용하는 IAM 역할 또는 IAM 사용자에 다음 정책을 연결합니다. 이 정책은 Database Service가 IAM 역할을 가정할 수 있도록 허용합니다:
{
"Version": "2012-10-17",
"Statement":
[{ "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "*" }],
}
Tip
와일드카드를 사용하지 말고 "Resource" 필드에 특정 IAM 역할 리소스 ARN을 제공함으로써 정책을 더 엄격하게 만들 수 있습니다.
5/5단계. 연결
Database Service가 클러스터에 조인한 후, 사용 가능한 데이터베이스를 보려면 로그인하세요:
tsh login --proxy=teleport.example.com --user=alicetsh db ls이름 설명 허용된 사용자 레이블 연결
--------- ----------- ------------- ------- -------
keyspaces [*] env=dev
tsh login --proxy=mytenant.teleport.sh --user=alicetsh db ls이름 설명 허용된 사용자 레이블 연결
--------- ----------- ------------- ------- -------
keyspaces [*] env=dev
특정 데이터베이스 인스턴스에 KeyspacesReader
AWS IAM Keyspaces 역할을 데이터베이스 사용자로 연결하려면:
tsh db connect --db-user=KeyspacesReader keyspacesAmazon Keyspaces에 localhost:55084로 연결됨
[cqlsh 6.0.0 | Cassandra 3.11.2 | CQL spec 3.4.4 | Native protocol v4]
도움말은 HELP 를 사용하세요.
KeyspacesReader@cqlsh>
데이터베이스에서 로그아웃하고 자격 증명을 제거하려면:
특정 데이터베이스 인스턴스의 자격 증명 제거.
tsh db logout keyspaces모든 데이터베이스 인스턴스의 자격 증명 제거.
tsh db logout
추가 자료
다음 단계
- 특정 사용자와 데이터베이스에 대한 액세스 제한하기 방법을 배우십시오.
- 고가용성(HA) 가이드를 확인하십시오.
- YAML 구성 참조를 살펴보십시오.
- 전체 CLI 참조를 확인하십시오.