Infograb logo
구글 클라우드 API 액세스를 Teleport로 보호하기

Teleport를 사용하여 Google Cloud의 API와 상호작용하는 CLI 도구에 대한 액세스를 관리할 수 있습니다. 이를 통해 인프라 자체를 보호하는 데 사용하는 것과 동일한 RBAC 시스템을 사용하여 인프라의 관리 API에 대한 액세스를 제어할 수 있습니다.

Teleport 애플리케이션 서비스는 CLI 애플리케이션에서 오는 요청을 프록시하여 Google Cloud의 API에 대한 액세스를 관리합니다. 애플리케이션 서비스는 Google Cloud에서 검색한 토큰을 사용하여 이러한 요청의 인증을 수행합니다. 이를 통해 Teleport 운영자는 사용자가 Google Cloud API와 상호작용할 수 있도록 수임할 수 있는 서비스 계정을 제어할 수 있습니다.

Teleport 애플리케이션 서비스는 역 터널을 통해 Teleport 프록시 서비스에 연결되기 때문에 애플리케이션 서비스를 사설 네트워크에서 실행하고 조직의 Google Cloud 서비스 계정에 대한 무단 액세스를 방지할 수 있습니다.

전제 조건

  • 실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.

  • tctl 관리 도구와 tsh 클라이언트 도구.

    tctltsh 다운로드에 대한 지침은 설치를 방문하세요.

  • IAM 역할 및 서비스 계정을 생성할 수 있는 권한이 있는 Google Cloud 계정, 서비스 계정 및 프로젝트에 대한 IAM 역할 바인딩을 생성할 수 있어야 합니다.

  • gcloud CLI 도구. Google Cloud 문서 페이지를 따라 gcloud를 설치하고 인증하세요.

    이 가이드는 gcloud에 중점을 두고 있지만, Teleport로 Google Cloud API 액세스를 설정한 후에는 Teleport 애플리케이션 서비스를 사용하여 gsutil 및 기타 Google Cloud CLI 도구에 대한 액세스도 관리할 수 있습니다.

  • Teleport 애플리케이션 서비스를 실행할 Google Compute Engine VM 또는 Google Cloud 프로젝트에서 VM을 생성할 수 있는 권한이 필요합니다. 기존 VM을 사용하는 경우, 리눅스 배포판에서 실행 중이어야 하며 Google Compute Engine VM에 서비스 계정을 첨부할 수 있는 권한이 있어야 합니다.

기존 서비스 계정 사용

이 가이드에서는 Teleport 사용자가 인증할 수 있도록 teleport-vm-viewer라는 서비스 계정을 생성하여 Google Cloud CLI 액세스를 보여줍니다. Google Cloud 프로젝트에서 기존 서비스 계정에 대한 액세스를 활성화하려는 경우, 가이드 작업 중 teleport-vm-viewer를 이러한 서비스 계정으로 바꿀 수 있습니다.

  • 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면, tsh login으로 로그인한 다음 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오. 예를 들어:
    tsh login --proxy=teleport.example.com --user=email@example.com
    tctl status

    클러스터 teleport.example.com

    버전 16.2.0

    CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678

    클러스터에 연결하고 tctl status 명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속 tctl 명령어를 실행할 수 있습니다. 자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로 tctl 명령어를 실행할 수도 있습니다.

1단계/4. Google Cloud 구성하기

Teleport 애플리케이션 서비스는 Teleport 사용자로부터 Google Cloud API에 요청을 프록시하기 위해 Google Cloud의 권한이 필요합니다. 이 단계에서는 Teleport 애플리케이션 서비스를 시작하기 전에 이러한 권한을 구성합니다.

Teleport로 Google Cloud API 액세스를 설정할 때 두 가지 기능을 가진 서비스 계정을 구성합니다:

  • 제어 서비스 계정: 애플리케이션 서비스는 이 서비스 계정을 사용하여 다른 서비스 계정을 가장하고 Google Cloud API에 서명 요청을 합니다. 이 가이드에서는 teleport-google-cloud-cli라는 제어 서비스 계정을 생성합니다.
  • 대상 서비스 계정: Google Cloud API에 액세스할 때 Teleport 사용자가 수임해야 하는 서비스 계정입니다. 이 가이드에서는 teleport-vm-viewer라는 하나의 대상 서비스 계정을 생성하며, 동일한 단계를 따라 다른 대상 서비스 계정에 대한 액세스를 활성화할 수 있습니다.

애플리케이션 서비스용 서비스 계정 생성하기

애플리케이션 서비스는 제어 서비스 계정을 사용하여 대상 서비스 계정에 대한 서명된 토큰을 생성하여 Google Cloud API에 액세스합니다. Teleport 사용자로부터 요청을 전달하기 전에 이러한 토큰으로 서명합니다. 이렇게 하면 로컬 Google Cloud CLI 도구는 이러한 토큰에 액세스할 수 없습니다.

이 섹션에서는 애플리케이션 서비스를 위한 제어 서비스 계정을 생성하고 그에 대한 권한을 할당합니다.

teleport-google-cloud-cli라는 서비스 계정을 생성합니다:

gcloud iam service-accounts create teleport-google-cloud-cli \ --description="Google Cloud CLI 액세스" \ --display-name="teleport-google-cloud-cli"

Teleport 사용자가 접근할 수 있는 서비스 계정 설정하기

Teleport 사용자가 Teleport 애플리케이션 서비스에 대해 Google Cloud CLI 명령을 실행할 때, 애플리케이션 서비스는 앞에서 생성한 teleport-google-cloud-cli 서비스 계정을 사용하여 대상 서비스 계정을 가장합니다.

이 섹션에서는 애플리케이션 서비스가 대상 서비스 계정을 가장할 수 있도록 권한을 부여하는 방법을 보여줍니다.

리소스를 볼 수 있는 서비스 계정 생성하기

기존 서비스 계정에 대한 액세스를 활성화하는 경우, 다음 섹션으로 건너뛸 수 있습니다.

대상 서비스 계정을 생성합니다:

gcloud iam service-accounts create teleport-vm-viewer \ --description="Teleport를 시연하기 위한 샘플 서비스 계정" \ --display-name="teleport-vm-viewer"

이 서비스 계정을 미리 정의된 "Compute Viewer" 역할에 바인딩합니다. 이 역할은 해당 역할을 가진 사용자에게 Google Compute Engine 리소스를 나열할 수 있는 권한을 부여합니다:

gcloud projects add-iam-policy-binding google-cloud-project \ --member="serviceAccount:teleport-vm-viewer@google-cloud-project.iam.gserviceaccount.com" \ --role="roles/compute.viewer"

teleport-google-cloud-cli를 대상 서비스 계정을 가장할 수 있도록 설정하기

teleport-google-cloud-cli 서비스 계정이 사용자 요청을 인증하기 위해 teleport-vm-viewer를 가장할 수 있도록 설정합니다. 이를 위해, teleport-vm-viewer 서비스 계정에 대해 미리 정의된 "서비스 계정 토큰 생성기 역할"에 teleport-google-cloud-cli 계정을 바인딩합니다:

기존 서비스 계정에 대해 Google Cloud CLI 액세스를 활성화하려면, 각 서비스 계정에 대해 이 명령을 실행해야 합니다.

gcloud iam service-accounts add-iam-policy-binding \ teleport-vm-viewer@google-cloud-project.iam.gserviceaccount.com \ --member=serviceAccount:teleport-google-cloud-cli@google-cloud-project.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"

2단계/4. Teleport 애플리케이션 서비스 배포하기

이 시점에서 제어 서비스 계정을 생성하고 이 서비스 계정이 Teleport 사용자가 접근하기를 원하는 서비스 계정을 가장할 수 있도록 설정했습니다.

이 단계에서는 제어 서비스 계정을 Google Compute Engine VM에 연결한 다음, Teleport 애플리케이션 서비스를 실행합니다.

애플리케이션 서비스가 Google Cloud에 접근할 수 있도록 설정하기

제어 서비스 계정을 생성하고 그에 역할을 부여한 상태에서, 텔레포트를 실행하는 VM과 서비스 계정을 연결합니다. 이 지침은 Teleport 애플리케이션 서비스를 위해 기존 가상 머신을 사용하는지 또는 새로 시작하는지에 따라 다릅니다.

teleport-google-cloud 서비스 계정을 첨부한 새로운 가상 머신을 생성합니다:

gcloud compute instances create teleport-app-service \ --service-account=teleport-google-cloud-cli@google-cloud-project.iam.gserviceaccount.com \ --scopes=cloud-platform \ --zone=google-cloud-zone \ --image=https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20231212

여기서 나열한 것처럼 service-accountscopes 플래그를 사용해야 하며, 그렇지 않으면 VM이 Google Cloud에 액세스하기 위한 필요한 권한을 획득하지 못합니다. 나머지 플래그를 조정하고 환경의 필요에 따라 새로운 플래그를 포함해야 합니다.

VM을 중지하여 서비스 계정을 연결합니다:

gcloud compute instances stop vm-name --zone=google-cloud-zone

인스턴스에 서비스 계정을 연결합니다:

gcloud compute instances set-service-account vm-name \ --service-account teleport-google-cloud-cli@google-cloud-project.iam.gserviceaccount.com \ --zone google-cloud-zone \ --scopes=cloud-platform

gcloud compute instances set-service-account 명령에서 scopes 플래그를 사용해야 합니다. 그렇지 않으면 Google Cloud VM이 Google Cloud에 액세스하기 위한 필요한 권한을 획득하지 못합니다.

서비스 계정을 연결한 후, VM을 다시 시작합니다:

gcloud compute instances start vm-name --zone google-cloud-zone

가입 토큰 가져오기

새 애플리케이션 서비스 인스턴스와 Teleport 클러스터 간에 신뢰를 구축하려면 가입 토큰을 생성하세요:

tctl tokens add --type=app --ttl=1h --format=text
abcd123-insecure-do-not-use-this

Teleport 애플리케이션 서비스를 설치할 호스트에서, 당신의 토큰만으로 구성된 /tmp/token이라는 파일을 생성하세요:

echo join-token | sudo tee /tmp/token

Teleport 애플리케이션 서비스 설치하기

Teleport 애플리케이션 서비스를 설치할 호스트에서 아래의 지침을 따릅니다.

Linux 서버에 Teleport 설치하기:

  1. Teleport 에디션에 따라 edition을(를) 다음 중 하나로 지정합니다:

    에디션
    Teleport Enterprise Cloudcloud
    Teleport Enterprise (자체 호스팅)enterprise
    Teleport Community Editionoss
  2. 설치할 Teleport의 버전을 확인합니다. 클러스터에서 자동 에이전트 업데이트가 활성화되어 있는 경우, 업데이터와 호환되는 최신 Teleport 버전을 쿼리합니다:

    TELEPORT_DOMAIN=example.teleport.com
    TELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/automaticupgrades/channel/default/version | sed 's/v//')"

    그렇지 않으면, Teleport 클러스터의 버전을 확인합니다:

    TELEPORT_DOMAIN=example.teleport.com
    TELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/ping | jq -r '.server_version')"
  3. Linux 서버에 Teleport를 설치합니다:

    curl https://cdn.teleport.dev/install-v16.2.0.sh | bash -s ${TELEPORT_VERSION} edition

    설치 스크립트는 Linux 서버에서 패키지 관리자를 감지하고 이를 사용하여 Teleport 바이너리를 설치합니다. 설치를 사용자 지정하려면 설치 가이드에서 Teleport 패키지 리포지토리에 대해 알아보세요.

Teleport 애플리케이션 서비스 구성하기

Teleport 애플리케이션 서비스를 실행할 호스트에서 /etc/teleport.yaml에 다음 내용을 가진 파일을 생성합니다:

version: v3
teleport:
  join_params:
    token_name: "/tmp/token"
    method: token
  proxy_server: "teleport.example.com:443"
auth_service:
  enabled: off
proxy_service:
  enabled: off
ssh_service:
  enabled: off
app_service:
  enabled: true
  apps:
  - name: google-cloud-cli
    cloud: GCP

/etc/teleport.yaml에서 teleport.example.com:443를 Teleport Proxy Service 또는 Teleport Cloud 테넌트의 호스트 및 포트로 바꿉니다, 예: mytenant.teleport.sh:443.

app_service 필드는 Teleport 애플리케이션 서비스를 구성합니다. app_service.apps 내 각각의 항목은 애플리케이션 구성입니다.

위의 예에서는 cloud 필드를 GCP로 설정하여 google-cloud-cli라는 애플리케이션을 등록하여 Google Cloud CLI 액세스를 활성화했습니다. Teleport 애플리케이션 서비스는 이 애플리케이션에 대한 요청을 Google Cloud로 전달합니다.

Teleport 애플리케이션 서비스 실행하기

Teleport 애플리케이션 서비스를 실행할 호스트에서, 패키지 관리자를 사용하여 Teleport를 설치했는지 TAR 아카이브를 통해 설치했는지에 따라 다음 명령을 실행합니다:

호스트가 부팅될 때 Teleport 애플리케이션 서비스가 자동으로 시작되도록 시스템 데몬 서비스를 생성하여 구성합니다. 지침은 Teleport 애플리케이션 서비스를 설치한 방법에 따라 다릅니다.

Teleport 애플리케이션 서비스를 실행할 호스트에서 Teleport를 활성화하고 시작하십시오:

sudo systemctl enable teleport
sudo systemctl start teleport

Teleport 애플리케이션 서비스를 실행할 호스트에서 Teleport에 대한 시스템 데몬 서비스 구성을 생성하고, Teleport 서비스를 활성화한 후 Teleport를 시작하십시오:

sudo teleport install systemd -o /etc/systemd/system/teleport.service
sudo systemctl enable teleport
sudo systemctl start teleport

Teleport 애플리케이션 서비스의 상태는 systemctl status teleport로 확인할 수 있으며, 로그는 journalctl -fu teleport로 볼 수 있습니다.

3단계/4. 사용자가 Google Cloud CLI에 접근할 수 있도록 설정하기

다음 단계는 Teleport 사용자가 대상 서비스 계정에 접근하고 Teleport를 통해 Google Cloud CLI 명령을 실행할 수 있도록 권한을 부여하는 것입니다. 사용자의 역할에 따라 사용자가 접근할 수 있는 Google Cloud 서비스 계정을 Teleport의 RBAC 시스템을 사용하여 보호합니다.

사용자가 Google Cloud 서비스 계정에 접근할 수 있도록 권한을 부여하는 방법은 두 가지가 있습니다:

접근 방식설명지원되는 사용자 유형
동적Teleport 역할에 사용자가 직접 할당된 모든 Google Cloud 서비스 계정에 대한 액세스를 부여하는 템플릿 변수가 포함되어 있습니다.로컬 사용자, OIDC, SAML
정적Teleport 역할에 사용자가 허용된 Google Cloud 서비스 계정을 명시적으로 지정합니다.로컬 사용자, OIDC, SAML, GitHub

동적 접근 방식을 사용하는 것이 좋습니다. 이는 Google Cloud 계정에 서비스 계정을 추가할 때 더 쉽게 확장됩니다. 오픈 소스 Teleport 클러스터가 GitHub SSO를 통해 사용자를 인증하도록 설정한 경우, 사용자 지정 클레임을 지원하지 않기 때문에 정적 접근 방식을 사용해야 합니다.

접근 방식

google-cloud-cli-access.yaml라는 파일을 생성하고 다음 내용을 입력합니다:

kind: role
version: v7
metadata:
  name: google-cloud-cli-access
spec:
  allow:
    app_labels:
      '*': '*'
    gcp_service_accounts:
      - '{{internal.gcp_service_accounts}}'

google-cloud-cli-access 역할을 가진 사용자가 Teleport를 통해 Google Cloud CLI에 인증할 때, Teleport 인증 서비스는 사용자가 할당받은 모든 Google Cloud 서비스 계정으로 {{internal.gcp_service_accounts}} 템플릿 변수를 채웁니다.

이전에 생성한 대상 서비스 계정(또는 다른 서비스 계정)을 Teleport 사용자에게 할당하려면 다음 명령을 실행합니다:

tctl users update teleport-user \--set-gcp-service-accounts teleport-vm-viewer@google-cloud-project.iam.gserviceaccount.com

이 명령은 --set-gcp-service-accounts 플래그를 사용하여 사용자에게 Google Cloud 서비스 계정을 추가합니다. --set-gcp-service-accounts를 쉼표로 구분된 서비스 계정 URI 목록으로 설정하여 여러 서비스 계정을 사용자에게 할당할 수 있습니다.

역할을 생성합니다:

tctl create -f google-cloud-cli-access.yaml

신원 제공자에서 gcp_service_accounts라는 사용자 정의 SAML 속성 또는 OIDC 클레임을 정의합니다. 각 사용자의 gcp_service_accounts 속성 또는 클레임은 Google Cloud 서비스 계정 URI 목록이어야 하며, 다음과 같은 형식을 사용해야 합니다:

<service_account_name>@<project_id>.iam.gserviceaccount.com

예를 들어, 다음 URI를 사용하여 사용자의 gcp_service_accountsteleport-vm-viewer로 설정할 수 있으며, <project_id>를 Google Cloud 프로젝트의 이름으로 교체합니다:

teleport-vm-viewer@my-project.iam.gserviceaccount.com

google-cloud-cli-access.yaml라는 파일을 생성하고 다음 내용을 입력합니다:

kind: role
version: v7
metadata:
  name: google-cloud-cli-access
spec:
  allow:
    app_labels:
      '*': '*'
    gcp_service_accounts:
      - '{{external.gcp_service_accounts}}'

google-cloud-cli-access 역할을 가진 사용자가 Teleport를 통해 Google Cloud CLI에 인증할 때, Teleport 인증 서비스는 사용자가 할당받은 모든 Google Cloud 서비스 계정으로 {{external.gcp_service_accounts}} 템플릿 변수를 채웁니다.

역할을 생성합니다:

tctl create -f google-cloud-cli-access

특정 Google Cloud 서비스 계정에 대한 액세스가 있는 역할을 정의합니다. 이렇게 하면 Teleport 사용자가 이 역할을 수임할 수 있으며, 이러한 아이덴티티를 통해 Google Cloud CLI를 실행할 수 있습니다.

google-cloud-cli-access.yaml라는 파일을 생성하고 다음 내용을 입력합니다. gcp_service_accounts의 값에 Google Cloud 프로젝트의 ID로 my-project를 교체합니다:

kind: role
version: v7
metadata:
  name: google-cloud-cli-access
spec:
  allow:
    app_labels:
      '*': '*'
    gcp_service_accounts:
      - teleport-vm-viewer@my-project.iam.gserviceaccount.com

이 역할은 사용자가 앞서 정의한 google-cloud-cli 애플리케이션과 같은 서 등록된 애플리케이션에 접근할 수 있도록 하며, 사용자가 앞서 생성한 teleport-vm-viewer 서비스 계정을 수임할 수 있도록 합니다.

역할을 생성합니다:

tctl create -f google-cloud-cli-access.yaml

사용자가 하나 이상의 Google Cloud 서비스 계정에 접근할 수 없도록 정의된 Teleport 역할을 설정할 수 있습니다. 이렇게 하려면 role 리소스의 spec.deny 섹션 내에서 gcp_service_accounts 필드에 값을 할당합니다.

예를 들어, 이 역할은 사용자에게 모든 Google Cloud 서비스 계정에 대한 액세스를 거부합니다:

kind: role
version: v7
metadata:
  name: "no-google-cloud"
spec:
  allow:
    app_labels:
      '*': '*'
  deny:
    gcp_service_accounts:
      - '*'

no-google-cloud 역할은 사용자가 모든 등록된 애플리케이션에 접근할 수 있도록 하지만, deny.gcp_service_accounts 필드 내에서 와일드카드 문자(*)를 사용하여 사용자가 어떤 Google Cloud 서비스 계정을 수임하지 못하도록 합니다.

allow.gcp_service_accounts 값과 달리, deny.gcp_service_accounts 값에는 특정 Google Cloud 서비스 계정의 URI 외에도 와일드카드 표현식을 포함할 수 있습니다.

Teleport 인증 서비스는 사용자의 역할을 평가할 때 deny 규칙을 allow 규칙보다 우선시합니다.

google-cloud-cli-access 역할을 Teleport 사용자에게 할당하려면 인증 제공자에 맞는 적절한 명령어를 실행하세요:

  1. 로컬 사용자의 역할을 콤마로 구분된 목록으로 가져옵니다:

    ROLES=$(tsh status -f json | jq -r '.active.roles | join(",")')
  2. 로컬 사용자를 편집하여 새로운 역할을 추가합니다:

    tctl users update $(tsh status -f json | jq -r '.active.username') \ --set-roles "${ROLES?},google-cloud-cli-access"
  3. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.

  1. github 인증 커넥터를 가져옵니다:

    tctl get github/github --with-secrets > github.yaml

    --with-secrets 플래그는 spec.signing_key_pair.private_key의 값을 github.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시 github.yaml 파일을 제거해야 합니다.

  2. github.yaml을 편집하고 teams_to_roles 섹션에 google-cloud-cli-access을 추가합니다.

    이 역할에 매핑할 팀은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 하지만 팀에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 팀이어야 합니다.

    여기에 예시가 있습니다:

      teams_to_roles:
        - organization: octocats
          team: admins
          roles:
            - access
    +       - google-cloud-cli-access
    
  3. 변경 사항을 적용합니다:

    tctl create -f github.yaml
  4. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 assum 하기 위해 다시 로그인합니다.

  1. saml 구성 리소스를 가져옵니다:

    tctl get --with-secrets saml/mysaml > saml.yaml

    --with-secrets 플래그는 spec.signing_key_pair.private_key의 값을 saml.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시 saml.yaml 파일을 제거해야 합니다.

  2. saml.yaml을 편집하고 attributes_to_roles 섹션에 google-cloud-cli-access을 추가합니다.

    이 역할에 매핑할 속성은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 그러나 그룹에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 그룹이어야 합니다.

    여기에 예시가 있습니다:

      attributes_to_roles:
        - name: "groups"
          value: "my-group"
          roles:
            - access
    +       - google-cloud-cli-access
    
  3. 변경 사항을 적용합니다:

    tctl create -f saml.yaml
  4. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.

  1. oidc 구성 리소스를 가져옵니다:

    tctl get oidc/myoidc --with-secrets > oidc.yaml

    --with-secrets 플래그는 spec.signing_key_pair.private_key의 값을 oidc.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시 oidc.yaml 파일을 제거해야 합니다.

  2. oidc.yaml을 편집하고 claims_to_roles 섹션에 google-cloud-cli-access을 추가합니다.

    이 역할에 매핑할 클레임은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 그러나 그룹에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 그룹이어야 합니다.

    여기에 예시가 있습니다:

      claims_to_roles:
        - name: "groups"
          value: "my-group"
          roles:
            - access
    +       - google-cloud-cli-access
    
  3. 변경 사항을 적용합니다:

    tctl create -f oidc.yaml
  4. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.

4단계/4. Teleport로 Google Cloud CLI 사용하기

현재 Teleport 애플리케이션 서비스를 시작하고 Teleport 사용자에게 Google Cloud CLI 액세스 권한을 부여했으므로, now you can run Google Cloud CLI commands 통해 Teleport를 사용할 수 있습니다.

Google Cloud CLI 애플리케이션 나열하기

Teleport 사용자가 이전에 등록한 google-cloud-cli 애플리케이션을 볼 수 있는지 확인합니다:

tsh apps ls
Application Description Type Public Address Labels---------------- ----------- ---- ------------------------------------- -------------------google-cloud-cli HTTP google-cloud-cli.teleport.example.com teleport.dev/origin

Google Cloud CLI 사용을 위한 로그인

애플리케이션에 로그인하고 teleport-vm-viewer 서비스 계정을 수임하려고 합니다:

tsh apps login google-cloud-cli --gcp-service-account teleport-vm-viewer

이 명령은 --gcp-service-account 플래그의 값을 사용자가 수임할 수 있는 값과 비교하여 검증합니다. 플래그의 값은 서비스 계정의 전체 URI이거나 아이덴티티의 이름일 수 있습니다. 예를 들어, teleport-vm-viewer입니다.

사용자가 단일 Google Cloud 서비스 계정에만 액세스하도록 권한을 부여받은 경우 --gcp-service-account 플래그를 생략할 수 있지만, 그렇지 않으면 비어 있는 --gcp-service-account 플래그가 오류를 발생시킵니다.

명령이 성공하면 사용자가 선택한 Google Cloud 서비스 계정에 대한 정보가 다음과 유사하게 표시됩니다:

GCP 앱 "google-cloud-cli"에 로그인했습니다.
귀하의 서비스 계정: teleport-vm-viewer@my-project.iam.gserviceaccount.com
예제 명령: tsh gcloud compute instances list

Google Cloud CLI 명령 실행하기

현재 Teleport 애플리케이션 서비스를 사용하여 gcloud 명령을 실행할 수 있으며, 앞에 tsh를 붙여야 합니다. 예를 들어, 사용자가 VM을 나열할 수 있는 권한으로 인증되었다면, 다음 명령을 사용하여 VM을 나열합니다:

tsh gcloud compute instances list

Google Cloud 프로젝트의 가상 머신 목록을 볼 수 있습니다.

그러나 사용자는 VM을 생성할 수 없습니다. 이 경우 그 서비스 계정에는 해당 권한이 없기 때문입니다:

tsh gcloud compute instances create another-instance --zone=google-cloud-zone
ERROR: (gcloud.compute.instances.create) 자원 가져오기 실패: - 'projects/my-project/zones/my-zone/instances/another-instance'에 대해 'compute.instances.create' 권한이 필요합니다.
ERROR: 종료 상태 1
gsutil 사용하기와 함께 tsh

등록된 google-cloud-cli 애플리케이션을 통해 gsutil 명령을 실행할 수 있습니다. gcloud와 마찬가지로, tsh 앞에 gsutil 명령을 붙여서 실행합니다:

tsh gsutil ls

tsh 없이 Google Cloud CLI 애플리케이션 사용하기

tsh를 통해 gcloudgsutil 명령을 실행하는 것 외에도 Google Cloud의 API에 대한 명령을 실행하는 모든 CLI 애플리케이션에 대한 안전한 액세스를 허용할 수 있습니다.

이를 위해 tsh를 사용하여 로컬 프록시를 시작하여 CLI 애플리케이션의 트래픽을 Teleport 애플리케이션 서비스로 전달합니다. 애플리케이션 서비스는 이전에 생성한 teleport-google-cloud-cli 서비스 계정을 사용하여 Google Cloud에서 인증 토큰을 가져옵니다. CLI 애플리케이션은 이 토큰을 사용하여 Google Cloud API에 대한 요청을 인증합니다.

로컬 프록시를 시작하려면 다음 tsh 명령을 실행합니다:

tsh proxy gcloud

이 명령은 로컬 프록시 서버의 주소와 환경 변수를 할당하는 export 명령을 인쇄합니다. Google Cloud CLI 애플리케이션은 이러한 변수를 읽어 Google Cloud API에 대한 인증 토큰을 요청합니다:

한시적 GCP 프록시가 http://127.0.0.1:50614에서 시작되었습니다.
포트 무작위화를 피하기 위해 --port 플래그를 사용하여 수신하는 포트를 선택할 수 있습니다.

프록시에 연결하기 위해 다음 자격 증명 및 HTTPS 프록시 설정을 사용하십시오:

  export BOTO_CONFIG=/Users/myuser/.tsh/gcp/teleport.example.com/google-cloud-cli/00000000_boto.cfg
  export CLOUDSDK_AUTH_ACCESS_TOKEN=00000000000000000000000000000000
  export CLOUDSDK_CONFIG=/Users/myuser/.tsh/gcp/teleport.example.com/google-cloud-cli/gcloud
  export CLOUDSDK_CORE_CUSTOM_CA_CERTS_FILE=/Users/myuser/.tsh/keys/teleport.example.com/myuser-google-cloud-cli/teleport.example.com/google-cloud-cli-localca.pem
  export CLOUDSDK_CORE_PROJECT=my-project
  export HTTPS_PROXY=http://127.0.0.1:50614

tsh proxy gcloud는 로컬 프록시를 포그라운드에서 실행하므로, 이 프로세스를 중단하거나 명령을 실행한 터미널에서 종료하지 마십시오. 로컬 프록시를 종료할 준비가 되기 전까지는 이를 계속해야 합니다.

export 명령을 복사하고 두 번째 터미널에 붙여넣습니다. 이 터미널에서는 이제 선택한 Google Cloud CLI 애플리케이션을 실행할 수 있습니다. 예를 들어, 다음 명령을 사용하여 Google Compute Engine VM을 나열할 수 있습니다:

gcloud compute instances list

이 가이드의 이전 단계에서 gcloud iam service-accounts create를 실행할 수 있었습니다. tsh proxy gcloud가 인쇄한 export 명령을 입력한 후 이 명령은 제한된 사용자로 실행되어 권한 문제를 발생시킵니다:

gcloud iam service-accounts create demo-service-account
ERROR: (gcloud.iam.service-accounts.create) 사용자 [myuser]가 프로젝트 인스턴스 [myproject]에 접근할 권한이 없습니다 (또는 없을 수 있습니다): 리소스에 대한 'iam.serviceAccounts.create' 권한이 거부되었습니다 (또는 존재하지 않을 수 있습니다).- '@type': type.googleapis.com/google.rpc.ErrorInfo 도메인: iam.googleapis.com 메타데이터: permission: iam.serviceAccounts.create reason: IAM_PERMISSION_DENIED

tsh gcloud 또는 tsh gsutil 명령을 통해 명령을 실행할 때, tsh는 로컬 프록시를 백그라운드에서 시작하고 이를 사용하여 명령을 실행합니다.

다음 단계

  • 이제 Teleport를 사용하여 Google Cloud CLI에 대한 액세스를 보호하는 방법을 알게 되었으므로, Teleport 사용자가 공격자가 탈취할 수 있는 오랜 관리 역할 없이 Google Cloud 리소스를 임시로만 관리할 수 있도록 하십시오. 역할 액세스 요청액세스 요청 플러그인에 대한 저희 문서를 확인하십시오.
  • Teleport를 통해 모든 gcloud 또는 gsutil 명령에 프록시를 설정할 수 있습니다. 전체 명령 참조를 위해 gcloudgsutil용 Google Cloud 문서를 참조하십시오.
  • 이 가이드에서 설명한 대로 Teleport가 internalexternal 특성을 어떻게 채우는지에 대한 자세한 내용은 Teleport 액세스 제어 참조를 참조하십시오.
Teleport 원문 보기