Infograb logo
Azure Cache for Redis로 데이터베이스 액세스

Teleport는 Teleport Database Service를 통해 Azure Cache for Redis에 대한 안전한 접근을 제공할 수 있습니다. 이는 Teleport의 RBAC를 통해 세부적인 접근 제어를 가능하게 합니다.

이 가이드에서는 다음을 수행합니다:

  1. Azure Cache for Redis 데이터베이스 Microsoft Entra ID 기반 인증으로를 구성합니다.
  2. 데이터베이스를 Teleport 클러스터에 추가합니다.
  3. Teleport를 통해 데이터베이스에 연결합니다.

작동 방식

Teleport 데이터베이스 서비스는 Teleport 사용자와 Azure Cache for Redis 간의 트래픽을 프록시합니다. 사용자가 Teleport를 통해 데이터베이스에 연결할 때, 데이터베이스 서비스는 Microsoft Entra ID(구 Azure AD)에서 액세스 토큰을 얻고 데이터베이스를 관리할 수 있는 권한이 있는 주체로 Azure에 인증합니다.

전제 조건

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

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

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

  • 배포된 Azure Redis 서버 또는 Azure Redis Enterprise 클러스터.
  • 서비스 주체 및 액세스 제어를 관리하기 위한 Azure 관리 권한.
  • Teleport 데이터베이스 서비스를 실행할 Azure VM 인스턴스와 같은 호스트.
  • redis-cli 버전 6.2 이상을 설치하고 시스템의 PATH 환경 변수에 추가해야 합니다.
  • 당신의 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단계/5. Teleport 사용자 생성

Tip

기존 사용자를 수정하여 데이터베이스 서비스에 대한 액세스를 제공하려면 데이터베이스 액세스 제어를 참조하세요.

내장된 access 역할로 로컬 Teleport 사용자를 생성하세요:

tctl users add \ --roles=access \ --db-users="*" \ --db-names="*" \ alice

내장된 accessrequester 역할로 로컬 Teleport 사용자를 생성하세요:

tctl users add \ --roles=access,requester \ --db-users="*" \ --db-names="*" \ alice
FlagDescription
--roles사용자에게 할당할 역할 목록입니다. 내장된 access 역할은 그들이 Teleport에 등록된 모든 데이터베이스 서버에 연결할 수 있도록 합니다.
--db-users사용자가 데이터베이스에 연결할 때 사용할 수 있는 데이터베이스 사용자 이름 목록입니다. 와일드카드는 모든 사용자를 허용합니다.
--db-names사용자가 데이터베이스 서버 내에서 연결할 수 있는 논리적 데이터베이스(일명 스키마) 목록입니다. 와일드카드는 모든 데이터베이스를 허용합니다.
Warning

데이터베이스 이름은 PostgreSQL, MongoDB 및 Cloud Spanner 데이터베이스에 대해서만 적용됩니다.

데이터베이스 액세스 제어와 액세스를 제한하는 방법에 대한 자세한 정보는 RBAC 문서를 참조하세요.

2단계/5. 데이터베이스 서비스 구성 만들기

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 패키지 리포지토리에 대해 알아보세요.

데이터베이스 서비스 구성을 만들고 지역을 다음과 같이 지정합니다:

sudo teleport db configure create \ -o file \ --proxy=tele.example.com:443 \ --token=/tmp/token \ --azure-redis-discovery=eastus
sudo teleport db configure create \ -o file \ --proxy=teleport.example.com:3080 \ --token=/tmp/token \ --azure-redis-discovery=eastus

명령은 eastus 지역에서 Azure Cache for Redis 자동 발견이 활성화된 데이터베이스 서비스 구성을 생성하고 이를 /etc/teleport.yaml 위치에 배치합니다.

Tip

모든 지역에서 데이터베이스를 발견하려면 --azure-redis-discovery=*를 사용합니다. 지역 외에도 선택적으로 --azure-resource-group=<resource-group-name>, --azure-subscription=<subscription-id> 또는 --labels=<key>=<value>를 지정하여 자동 발견의 범위를 더욱 사용자 지정할 수 있습니다.

3단계/5. Teleport IAM 권한 구성

Teleport 데이터베이스 서비스는 Azure IAM 권한이 필요합니다:

  • Azure Cache for Redis 데이터베이스를 발견하고 등록합니다.
  • 데이터베이스와 인증하기 위한 Redis 액세스 키를 검색합니다.

Azure 서비스 주체 구성

Teleport Database Service가 Azure 리소스에 접근할 수 있는 방법에는 두 가지가 있습니다:

  • 데이터베이스 서비스는 관리되는 ID가 연결된 Azure VM에서 실행될 수 있습니다. 이는 프로덕션 환경에서 데이터베이스 서비스를 배포하는 권장 방법으로, Azure 자격 증명을 관리할 필요가 없기 때문입니다.
  • 데이터베이스 서비스는 Azure AD 애플리케이션으로 등록되고(AD의 "앱 등록"을 통해) 해당 자격 증명으로 구성될 수 있습니다. 이는 Azure 자격 증명이 데이터베이스 서비스의 환경에 있어야 하므로 개발 및 테스트 목적으로만 권장됩니다.

Azure 포털의 Managed Identities 페이지로 이동하여 생성 버튼을 클릭하여 새로운 사용자 할당 관리 ID를 생성하세요:

Managed identities

새로운 ID에 대한 이름과 리소스 그룹을 선택하고 생성하세요.

생성된 ID의 클라이언트 ID를 기록해 두세요.

다음으로, 데이터베이스 서비스 인스턴스를 실행할 Azure VM으로 이동하여 방금 생성한 ID를 추가하세요.

VM identity

이 ID를 데이터베이스 서비스를 실행할 모든 Azure VM에 연결하세요.

Note

데이터베이스 서비스를 Azure AD 애플리케이션으로 등록하는 것은 다음에 적합합니다 테스트 및 개발 시나리오 또는 데이터베이스 서비스가 실행되지 않는 경우 Azure VM. 프로덕션 시나리오의 경우 관리되는 ID를 사용하는 것을 선호합니다 접근.

Azure Active Directory의 앱 등록 페이지로 이동하여 새 등록을 클릭하세요:

App registrations

새 애플리케이션의 이름(예: DatabaseService)을 선택하고 등록하세요. 앱이 생성되면 애플리케이션(클라이언트) ID를 기록하고 인증서 또는 비밀 추가를 클릭하세요.

데이터베이스 서비스 에이전트가 Azure API에 인증할 때 사용할 새로운 클라이언트 비밀을 생성하세요.

Registered app secrets

Teleport Database Service는 Azure SDK의 기본 자격 증명 제공자 체인을 사용하여 자격 증명을 찾습니다. Azure SDK 인증을 참조하여 귀하의 사용 사례에 적합한 방법을 선택하세요. 예를 들어, 클라이언트 비밀을 사용한 환경 기반 인증을 사용하려면 데이터베이스 서비스에 다음 환경 변수가 설정되어야 합니다:

export AZURE_TENANT_ID=export AZURE_CLIENT_ID=export AZURE_CLIENT_SECRET=

사용자 정의 역할 만들기

Teleport는 발견을 위해 <resource-type>/read 권한과 Redis 서버와 인증하기 위한 <resource-type>/listKeys/action 권한이 필요하지만, Teleport는 당신이 가진 리소스 유형에 대한 권한만 필요합니다.

다음은 Azure Redis 및 Azure Redis Enterprise에 대한 키를 읽고 나열할 수 있도록 Teleport에 허용하는 샘플 역할 정의입니다:

{
    "properties": {
        "roleName": "TeleportDiscovery",
        "description": "Allows Teleport to discover Azure Cache For Redis databases and list keys",
        "assignableScopes": [
            "/subscriptions/11111111-2222-3333-4444-555555555555"
        ],
        "permissions": [
            {
                "actions": [
                    "Microsoft.Cache/redis/read",
                    "Microsoft.Cache/redis/listKeys/action",
                    "Microsoft.Cache/redisEnterprise/read",
                    "Microsoft.Cache/redisEnterprise/databases/read",
                    "Microsoft.Cache/redisEnterprise/databases/listKeys/action"
                ],
                "notActions": [],
                "dataActions": [],
                "notDataActions": []
            }
        ]
    }
}

위의 assignableScopes 필드는 구독 /subscriptions/<subscription>을 포함하며, 역할이 해당 구독 또는 구독 범위 내의 모든 리소스 범위에 할당될 수 있도록 허용합니다. assignableScopes를 더욱 제한하고 싶다면 리소스 그룹 /subscriptions/<subscription>/resourceGroups/<group>이나 관리 그룹 /providers/Microsoft.Management/managementGroups/<group>을 대신 사용할 수 있습니다.

이제 구독 페이지로 가서 구독을 선택합니다.

구독에서 *액세스 제어(IAM)*을 클릭하고 추가 > 사용자 정의 역할 추가를 선택합니다:

IAM 사용자 정의 역할

사용자 정의 역할 생성 페이지에서 JSON 탭을 클릭하고 편집을 클릭한 후 JSON 예제를 붙여 넣고 assignableScopes의 구독을 자신의 구독 ID로 바꿉니다:

Teleport 데이터베이스 서비스 주체에 대한 역할 할당 만들기

(!docs/pages/includes/database-access/azure-assign-service-principal.mdx!)

4단계/5. 데이터베이스 서비스 시작

호스트가 부팅될 때 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로 볼 수 있습니다.

5단계/5. 연결

Teleport 클러스터에 로그인합니다. Azure Cache for Redis 데이터베이스가 사용 가능한 데이터베이스 목록에 나타납니다:

tsh login --proxy=teleport.example.com --user=alice
tsh db ls
Name Description Allowed Users Labels Connect ------------------------- ---------------------------------------- ------------- ------- ------- my-azure-redis East US의 Azure Redis 서버 [*] ...my-azure-redis-enterprise East US의 Azure Redis Enterprise 서버 [*] ...
tsh login --proxy=mytenant.teleport.sh --user=alice
tsh db ls
Name Description Allowed Users Labels Connect ------------------------- ---------------------------------------- ------------- ------- ------- my-azure-redis East US의 Azure Redis 서버 [*] ...my-azure-redis-enterprise East US의 Azure Redis Enterprise 서버 [*] ...
기본 데이터베이스 이름 재정의

기본적으로 Teleport는 Azure Cache for Redis 리소스의 이름을 데이터베이스 이름으로 사용합니다. Azure 태그에 TeleportDatabaseName을 적용하여 데이터베이스 이름을 재정의할 수 있습니다. 태그의 값이 데이터베이스 이름으로 사용됩니다.

데이터베이스의 자격 증명을 검색하고 연결하려면:

tsh db connect my-azure-redis

Teleport 데이터베이스 서비스는 백엔드에서 액세스 키를 검색하고 Redis 서버와 자동으로 인증합니다. 따라서 연결 후 AUTH <access-key> 명령은 필요하지 않습니다.

데이터베이스에서 로그아웃하고 자격 증명을 제거하려면:

tsh db logout my-azure-redis

문제 해결

Teleport 권한을 부여하려면, 생성한 사용자 지정 역할을 Teleport 서비스 주체(앞서 생성한 관리 ID 또는 앱 등록)에 할당해야 합니다.

역할 할당을 수행할 리소스 범위로 이동합니다. *Access control (IAM)*을 클릭하고 Add > Add role assignment를 선택합니다. 역할로는 생성한 사용자 지정 역할을 선택하고, 구성원으로는 Teleport 서비스 주체를 선택하세요.

Assign role
Azure Role Assignments

Azure 역할 할당은 Teleport Database Service가 모든 관련 데이터베이스를 검색할 수 있도록 충분히 높은 범위에서 이루어져야 합니다. Azure 범위 및 역할 할당에 대한 자세한 정보는 필요한 범위 식별 을 참조하세요.

다음 단계

추가 읽기

Teleport 원문 보기