Teleport는 Teleport Database Service를 통해 Amazon DynamoDB에 대한 안전한 접근을 제공할 수 있습니다. 이는 Teleport의 RBAC를 통해 세부적인 접근 제어를 가능하게 합니다.
이 가이드에서는 다음을 수행합니다:
- Amazon DynamoDB 데이터베이스 with IAM authentication를 구성합니다.
- 데이터베이스를 Teleport 클러스터에 추가합니다.
- Teleport를 통해 데이터베이스에 연결합니다.
작동 방식
Teleport 사용자는 DynamoDB에 로컬 프록시 서버를 통해 연결하여 Teleport 프록시 서비스를 통해 Teleport 데이터베이스 서비스에 요청을 전달합니다. 연결할 때 사용자는 가정할 IAM 역할을 선택합니다. Teleport 데이터베이스 서비스는 이 역할과 잠재적으로 다른 IAM 역할을 가정할 수 있는 권한을 가지고 있습니다. Teleport 데이터베이스 서비스가 사용자 요청을 수신하면 AWS의 자격 증명으로 요청을 재작성한 다음 DynamoDB API로 전달합니다.
사전 요구 사항
- DynamoDB 데이터베이스가 있는 AWS 계정.
- IAM 역할을 생성할 수 있는 IAM 권한.
$PATH
에 설치된aws
명령줄 인터페이스(CLI) 도구.
-
실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.
-
tctl
관리 도구와tsh
클라이언트 도구.tctl
과tsh
다운로드에 대한 지침은 설치를 방문하세요.
- Teleport 데이터베이스 서비스를 실행할 호스트, 예: EC2 인스턴스. 이 가이드는 IAM 역할을 생성하고 적용할 때 EC2 인스턴스를 가정하며, 사용자 정의 구성에 따라 조정해야 합니다.
- 당신의 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
명령어를 실행할 수도 있습니다.
이 가이드는 IAM 접근 역할의 예제 구성을 모델로 제공하며, Teleport 데이터베이스 서비스를 제공하기 위해 EC2 인스턴스를 사용합니다. 제공된 접근 수준은 귀하의 필요에 맞지 않거나 귀하의 조직의 접근 관행에 맞지 않을 수 있습니다. AWS IAM 권한을 귀하의 필요에 맞게 조정해야 합니다.
단계 1/4. DynamoDB 접근을 위한 IAM 역할 생성
이 가이드에서 설명하는 설정은 두 개의 IAM 역할이 필요합니다:
- Teleport 데이터베이스 서비스를 실행하는 EC2 인스턴스에 연결된 하나로, 이를 통해 사용자가 부여된 추가 역할을 가정할 수 있게 합니다.
- EC2 인스턴스 역할에 의해 가정될 수 있고, 사용자가 DynamoDB 서비스에 접근할 수 있도록 권한을 부여하는 하나입니다.
EC2 인스턴스 역할
AWS 콘솔의 IAM > 역할 페이지를 방문한 후 "역할 생성"을 클릭합니다. 신뢰할 수 있는 엔터티 유형에서 "AWS 서비스"를 선택합니다. 사용 사례에서 "EC2"를 선택한 다음 다음을 클릭합니다.
"Permissions 추가" 페이지에서는 이 역할에 권한이 필요하지 않기 때문에
간단히 다음을 클릭할 수 있습니다. 이 가이드에서는 이 역할을 TeleportDatabaseService
라는 예제 이름을 사용합니다. 이름을 선택한 후 역할 생성을 클릭하여 프로세스를 완료합니다.
DynamoDB 접근 역할
역할 페이지로 돌아가 새 역할을 생성합니다. "AWS 계정" 옵션을 선택하여 이 계정의 다른 엔터티가 이 역할을 가정할 수 있도록 기본 신뢰 정책을 생성합니다:
다음을 클릭합니다. AWS 관리 정책 AmazonDynamoDBFullAccess
를 찾아서 선택합니다:
AmazonDynamoDBFullAccess
정책은 원하는 것보다 더 많은 권한을 부여할 수 있습니다.
더 적은 권한을 부여하기 위해 다른 IAM 정책을 사용하려면
Amazon DynamoDB 리소스에 대한 접근 권한 관리
를 참조하십시오.
다음을 클릭합니다. 다음 페이지에서 역할 이름을 입력합니다. 이 가이드에서는 이 역할에 대해 ExampleTeleportDynamoDBRole
이라는 예제 이름을 사용합니다.
"신뢰할 수 있는 엔터티 선택"에서 JSON을 업데이트하여 TeleportDatabaseService
역할이 이 역할을 가정할 수 있도록 합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::abcd1234-this-is-an-example:role/TeleportDatabaseService"
]
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
마지막으로 역할 생성을 클릭합니다.
단계 2/4. Teleport IAM 역할 매핑 구성
다음 단계는 Teleport 사용자가 Teleport 클러스터를 통해 AWS 리소스에 접근할 때 AWS IAM 역할을 가정할 수 있는 권한을 부여하는 것입니다.
db_users
필드에 이전 단계에서 생성된 IAM 역할 ARN을 나열하는 Teleport 역할을 생성하여 이를 수행할 수 있습니다. aws-dynamodb-access.yaml
이라는 파일을 다음과 같은 내용으로 만듭니다:
kind: role
version: v7
metadata:
name: aws-dynamodb-access
spec:
allow:
db_labels:
'*': '*'
db_users:
- 'ExampleTeleportDynamoDBRole'
새 역할을 생성합니다:
tctl create -f aws-dynamodb-access.yaml
aws-dynamodb-access
역할을 Teleport 사용자에게 할당하려면 인증 제공자에 맞는 적절한 명령어를 실행하세요:
-
로컬 사용자의 역할을 콤마로 구분된 목록으로 가져옵니다:
ROLES=$(tsh status -f json | jq -r '.active.roles | join(",")') -
로컬 사용자를 편집하여 새로운 역할을 추가합니다:
tctl users update $(tsh status -f json | jq -r '.active.username') \ --set-roles "${ROLES?},aws-dynamodb-access" -
Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.
-
github
인증 커넥터를 가져옵니다:tctl get github/github --with-secrets > github.yaml--with-secrets
플래그는spec.signing_key_pair.private_key
의 값을github.yaml
파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시github.yaml
파일을 제거해야 합니다. -
github.yaml
을 편집하고teams_to_roles
섹션에aws-dynamodb-access
을 추가합니다.이 역할에 매핑할 팀은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 하지만 팀에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 팀이어야 합니다.
여기에 예시가 있습니다:
teams_to_roles: - organization: octocats team: admins roles: - access + - aws-dynamodb-access
-
변경 사항을 적용합니다:
tctl create -f github.yaml -
Teleport 클러스터에서 로그아웃한 후 새로운 역할을 assum 하기 위해 다시 로그인합니다.
-
saml
구성 리소스를 가져옵니다:tctl get --with-secrets saml/mysaml > saml.yaml--with-secrets
플래그는spec.signing_key_pair.private_key
의 값을saml.yaml
파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시saml.yaml
파일을 제거해야 합니다. -
saml.yaml
을 편집하고attributes_to_roles
섹션에aws-dynamodb-access
을 추가합니다.이 역할에 매핑할 속성은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 그러나 그룹에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 그룹이어야 합니다.
여기에 예시가 있습니다:
attributes_to_roles: - name: "groups" value: "my-group" roles: - access + - aws-dynamodb-access
-
변경 사항을 적용합니다:
tctl create -f saml.yaml -
Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.
-
oidc
구성 리소스를 가져옵니다:tctl get oidc/myoidc --with-secrets > oidc.yaml--with-secrets
플래그는spec.signing_key_pair.private_key
의 값을oidc.yaml
파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시oidc.yaml
파일을 제거해야 합니다. -
oidc.yaml
을 편집하고claims_to_roles
섹션에aws-dynamodb-access
을 추가합니다.이 역할에 매핑할 클레임은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 그러나 그룹에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 그룹이어야 합니다.
여기에 예시가 있습니다:
claims_to_roles: - name: "groups" value: "my-group" roles: - access + - aws-dynamodb-access
-
변경 사항을 적용합니다:
tctl create -f oidc.yaml -
Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.
단계 3/4. Teleport 데이터베이스 서비스 설치
Teleport 데이터베이스 서비스를 호스트할 EC2 인스턴스를 생성하고
TeleportDatabaseService
AWS IAM 역할을 부착합니다. 서비스를 다른 방법으로 호스팅하는 경우 AWS 자격 증명을 서비스에 제공해야 합니다 - AWS 자격 증명 구성
에 대한 자세한 내용을 참조하십시오.
AWS GovCloud (US) 리전 및 AWS China 리전과 같은 비표준 AWS 리전의 경우
데이터베이스 서비스가 올바른 STS 엔드포인트를 사용할 수 있도록
AWS_REGION
환경 변수 또는 AWS 자격 증명 파일에 해당 리전을 설정해야 합니다.
토큰 생성
AWS에 많은 인프라가 있는 사용자나 많은 인스턴스를 생성하거나 재생성할 수 있는 사용자에게는, 새로운 EC2 인스턴스를 Teleport에 연결하기 위한 대체 방법을 고려하세요:
Database 서비스는 Teleport 클러스터에 참여하려면 유효한 조인 토큰이 필요합니다.
다음 tctl
명령을 실행하고 토큰 출력을 /tmp/token
에 저장하세요.
Database 서비스가 실행될 서버에서:
tctl tokens add --type=db --format=textabcd123-insecure-do-not-use-this
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 패키지 리포지토리에 대해 알아보세요.
/etc/teleport.yaml
이라는 파일을 다음과 같은 내용으로 만듭니다:
version: v3
teleport:
nodename: CHANGEME
data_dir: /var/lib/teleport
proxy_server: teleport.example.com:443
auth_token: /tmp/token
db_service:
enabled: "yes"
# 이 에이전트가 프록시하는 정적으로 등록된 데이터베이스를 나열합니다.
databases:
- name: "example-dynamodb"
protocol: "dynamodb"
# 선택적 uri, uri가 설정된 경우 AWS 리전을 여기서 추출할 수 있습니다.
# 또는 AWS 리전이 이미 설정된 경우 두 리전이 일치해야 합니다.
# uri: "dynamodb.us-east-1.amazonaws.com:443"
static_labels:
env: "dev"
aws:
region: "us-east-1"
account_id: "abcd1234-this-is-an-example"
teleport.example.com
을 귀하의 Teleport 프록시 서비스 주소로 교체하십시오.
(즉, Teleport 클라우드 고객의 경우 mytenant.teleport.sh
와 비슷할 것입니다.)
생성된 토큰은 /tmp/token
파일에 배치되어야 합니다.
호스트가 부팅될 때 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
로 볼 수 있습니다.
단계 4/4 연결
데이터베이스 서비스가 시작되고 클러스터에 참여하면, DynamoDB 데이터베이스에 연결을 시작할 수 있습니다.
프록시 터널을 생성합니다:
tsh proxy db --tunnel --port 8000 --db-user=ExampleTeleportDynamoDBRole example-dynamodb
aws
CLI를 통해 데이터베이스에 대한 연결을 테스트할 수 있습니다:
aws dynamodb list-tables --endpoint-url=http://localhost:8000{ "TableNames": [ "table1", "table2", "table3" ]}
AWS NoSQL Workbench에서도 이 데이터베이스에 연결할 수 있으며, 자세한 내용은 데이터베이스 접근 GUI 클라이언트 가이드를 참조하십시오.
또한 프로그래밍적 접근을 위해 이 터널을 사용할 수 있습니다. 아래의 예는 AWS에서 boto3
SDK를 사용하는 예입니다:
$ python3
Python 3.10.4 (main, Mar 31 2022, 03:37:37) [Clang 12.0.0 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import boto3
>>> clt = boto3.client('dynamodb', endpoint_url='http://localhost:8000')
>>> res = clt.list_tables()
>>> print(res)
{'TableNames': *snip output*}
>>>
다음 단계
- 동적 데이터베이스 등록을 참조하여 인프라 내에서 Teleport가 사용할 수 있는 데이터베이스를 최신 상태로 유지하기 위해 리소스 레이블을 사용하는 방법을 알아보세요.