Infograb logo
Azure의 SQL Server로 데이터베이스 접근

Teleport은 Teleport Database Service를 통해 Azure SQL Server에 대한 안전한 액세스를 제공할 수 있습니다. 이를 통해 Teleport의 RBAC를 통한 세부적인 액세스 제어가 가능합니다.

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

  1. Azure SQL Server 데이터베이스 Microsoft Entra ID 기반 인증을 사용하여를 구성합니다.
  2. 데이터베이스를 Teleport 클러스터에 추가합니다.
  3. Teleport를 통해 데이터베이스에 연결합니다.

작동 방식

Teleport 데이터베이스 서비스는 Azure 가상 머신에서 실행되며, Azure Active Directory에서 인증 토큰을 검색할 수 있는 권한을 가진 Azure 아이덴티티가 연결됩니다. 사용자가 Teleport로 SQL Server에 연결하면, Teleport 데이터베이스 서비스가 Azure AD와 인증한 후 인증 토큰을 사용하여 SQL Server에 연결합니다. 데이터베이스 서비스는 사용자 트래픽을 데이터베이스로 전달합니다.

전제 조건

Azure Active Directory 인증을 통한 Azure SQL Server의 데이터베이스 접근은 Teleport 11.0 부터 가능합니다.

  • 실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.

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

    tctltsh 다운로드 방법에 대한 지침은 설치를 방문하십시오.

  • Azure에서 실행 중인 SQL Server.
  • Azure 가상 인스턴스에서 실행 중인 Teleport 데이터베이스 서비스.
  • 연결이 가능한지 확인하기 위해 tsh login 으로 로그인한 다음, 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오. 예를 들어:
    tsh login --proxy=teleport.example.com --user=email@example.com
    tctl status

    클러스터 teleport.example.com

    버전 17.0.0-dev

    CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678

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

1/8단계. 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/8단계. SQL Server Azure Active Directory 통합 활성화

이미 활성화되어 있다면, 다음 단계로 넘어갈 수 있습니다.

Azure Portal로 이동하여 데이터베이스 서버를 선택하고 Azure Active Directory 통합을 활성화할 데이터베이스를 선택합니다.

왼쪽 열에서 Azure Active Directory를 선택합니다.

관리자 설정을 선택하고 SQL Server에 관리자 로그인으로 추가할 계정을 선택합니다.

3/8단계. Teleport를 위한 IAM 권한 구성

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

  • SQL Server 인스턴스를 검색하고 등록합니다.
  • 로그인에 사용되는 가상 머신 관리 아이덴티티를 가져옵니다.

Azure 서비스 주체 구성

Teleport는 다음 권한이 필요합니다:

  • 리소스를 검색하기 위한 <resource-type>/read 권한은 보유하고 있는 리소스 유형에 대해서만 필요합니다. 예: Microsoft.Sql/managedInstances/read .
  • Microsoft.Compute/virtualMachines/read .

다음은 Teleport가 Azure SQL ServersAzure SQL Managed Instances를 읽을 수 있도록 허용하는 샘플 역할 정의입니다:

{
  "properties": {
    "roleName": "SQLServerAutoDiscovery",
    "description": "Teleport가 SQL Servers 및 SQL Managed Instances를 검색할 수 있도록 허용합니다.",
    "assignableScopes": ["/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"],
    "permissions": [
      {
        "actions": [
          "Microsoft.Sql/managedInstances/read",
          "Microsoft.Sql/servers/read",
          "Microsoft.Compute/virtualMachines/read"
        ],
        "notActions": [],
        "dataActions": [],
        "notDataActions": []
      }
    ]
  }
}

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

구독 페이지로 이동하여 구독을 선택합니다.

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

IAM 사용자 정의 역할

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

4/8단계. 가상 머신 아이덴티티 구성

Teleport Database Service 가상 머신의 아이덴티티 섹션에서 시스템 할당 아이덴티티를 활성화합니다. 이는 Teleport가 Azure API에 접근하는 데 사용됩니다.

Teleport에 권한을 부여하려면, 생성한 커스텀 역할이 가상 머신의 시스템 할당 아이덴티티에 할당되어야 합니다. 같은 페이지에서 Azure 역할 할당을 클릭한 다음 역할 할당 추가를 클릭합니다. 커스텀 역할을 선택하고 저장합니다.

Azure 역할 할당

역할 할당은 Teleport Database Service가 모든 매칭 데이터베이스를 발견할 수 있도록 충분히 높은 범위여야 합니다. Azure 범위 및 역할 할당 생성에 대한 자세한 내용은 필요한 범위 식별 을 참조하십시오.

로그인 아이덴티티

Teleport Database Service는 SQL Server 데이터베이스와 인증하기 위해 Azure AD의 액세스 토큰이 필요합니다.

이는 인증 토큰을 가져오기 위해 가상 머신에 연결된 관리 아이덴티티를 사용합니다.

사용자 할당 관리 아이덴티티를 새로 만들려면 Azure Portal에서 관리 아이덴티티 페이지로 이동하여 생성을 클릭합니다. 이름과 리소스 그룹을 선택하고 생성합니다:

Azure 사용자 관리 아이덴티티 생성 페이지

다음으로 Teleport Database Service 가상 머신 인스턴스아이덴티티 섹션으로 이동하여 사용자 할당을 선택하고 방금 생성한 아이덴티티를 추가합니다:

5/8단계. SQL Server에서 관리 아이덴티티 로그인 활성화

Azure AD SQL Server 통합은 데이터베이스 레벨 인증(포함된 사용자)을 사용하므로, 접근하고자 하는 각 데이터베이스에 대해 아이덴티티에 대한 사용자를 생성해야 합니다.

아이덴티티에 대한 포함된 사용자를 생성하려면, SQL Server로 Activity Directory 관리자 계정으로 연결한 후 다음 쿼리를 실행합니다:

USE MyDatabase;
CREATE USER [sqlserver-identity] FROM EXTERNAL PROVIDER;

새로 생성된 사용자는 공용 역할에 연결되며, 이는 쿼리를 수행하기에 충분한 권한이 없을 수 있습니다. 사용자에게 개별 권한을 부여하거나 기존 역할에 할당하는 것을 고려하십시오. 예를 들어, 사용자를 db_datareader 역할의 구성원으로 추가합니다:

ALTER ROLE db_datareader ADD MEMBER [sqlserver-identity];

6/8단계. Database Service 구성 생성

Teleport Database Service를 실행할 호스트에 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-v15.4.11.sh | bash -s ${TELEPORT_VERSION} edition

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

데이터베이스 서비스용 구성 파일을 /etc/teleport.yaml 에 생성합니다. --proxy 명령줄 옵션을 Teleport 클러스터의 주소로 설정하고, --azure-sqlserver-discovery 를 적절한 지역으로 설정합니다:

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

이 명령은 eastus 지역에서 Azure SQL Server 자동 검색을 활성화한 Database Service 구성을 생성하고 /etc/teleport.yaml 위치에 배치합니다.

7/8단계. Teleport 데이터베이스 서비스 시작

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

Teleport 데이터베이스 서비스를 실행할 호스트에서 Teleport를 활성화하고 시작합니다:

sudo systemctl enable teleport
sudo systemctl start teleport

Teleport 데이터베이스 서비스를 실행할 호스트에서 Teleport의 systemd 서비스 구성을 만들고, Teleport 서비스를 활성화한 후 Teleport를 시작합니다:

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

systemctl status teleport 로 Teleport 데이터베이스 서비스의 상태를 확인하고, journalctl -fu teleport 로 로그를 볼 수 있습니다.

단일 Teleport 프로세스는 여러 가지 다른 서비스를 실행할 수 있습니다. 예를 들어, 여러 데이터베이스 서비스 에이전트와 SSH 서비스 또는 애플리케이션 서비스를 실행할 수 있습니다.

8/8단계. 연결

당신의 Teleport 클러스터에 로그인하십시오. 데이터베이스는 사용 가능한 데이터베이스 목록에 나타나야 합니다:

tsh login --proxy=teleport.example.com --user=alice
tsh db ls
Name Description Allowed Users Labels Connect------------------ ---------------------------------- ------------- ------ -------sqlserver Azure SQL Server in westeurope [*] ...sqlserver-managed Azure Managed SQL Server in eastus [*] ...

데이터베이스에 대한 자격 증명을 가져오고 연결하려면:

tsh db connect --db-user=sqlserver-identity --db-name=master sqlserver

여기서 --db-user 는 관리되는 ID의 이름입니다.

Note

sqlcmd 또는 mssql-cli 명령줄 클라이언트가 PATH 에 있어야 연결할 수 있습니다. tsh 는 먼저 sqlcmd 를 실행하려고 시도하고, PATH 에 없으면 mssql-cli 를 실행합니다.

시스템에 명령줄 클라이언트가 모두 없는 경우, SQL Server 클라이언트로 연결할 수 있는 로컬 프록시 서버를 시작하는 다음 명령을 실행할 수 있습니다:

tsh proxy db --db-user=teleport --tunnel sqlserver

데이터베이스 액세스 GUI 클라이언트 가이드를 참조하여 DB GUI 클라이언트를 로컬 프록시에 연결하는 방법을 확인하세요.

문제 해결

아이덴티티를 찾을 수 없음

데이터베이스에 연결할 때 could not find identity "my-identity" attached to the instance 오류가 표시되면, 연결하려는 아이덴티티가 Teleport 데이터베이스 서비스 가상 머신에 연결되어 있지 않다는 의미입니다. Azure 포털 내 가상 머신 페이지로 이동하여 Teleport 인스턴스, Identity 섹션을 열고 User assigned를 선택하여 연결할 수 있는 모든 아이덴티티를 확인하십시오. 아이덴티티가 보이지 않으면 4단계를 확인하여 아이덴티티를 추가하는 방법을 참조하십시오.

사용자 로그인 실패

데이터베이스에 연결할 때 mssql: login error: Login failed for user '<token-identified principal>' 오류가 표시되면 관리되는 아이덴티티 로그인이 SQL 데이터베이스에 존재하지 않는다는 의미입니다. 6단계에 설명된 대로 사용자로 생성을 해야 합니다. 기억하세요: 연결하려는 모든 데이터베이스에서 사용자를 생성해야 합니다.

데이터베이스 연결 시 시간 초과

데이터베이스에 연결할 때 i/o timeout issue 오류가 발생하면, Teleport 데이터베이스 서비스가 Azure에 있는 데이터베이스에 접근할 수 있는지 확인하십시오.

데이터베이스가 공개된 경우, 방화벽 규칙을 만들지 않고 Azure 서비스에서 연결을 받을 수 있도록 활성화할 수 있습니다: 데이터베이스 페이지로 이동하여, Network 탭에서 페이지 하단의 Exceptions 섹션에서 "Allow Azure services and resources to access this server" 옵션을 체크하고 저장합니다.

데이터베이스가 공개가 아니고 프라이빗 엔드포인트를 사용하는 경우, 같은 VPC 내에 있는지 또는 Teleport VM VPC가 데이터베이스와 피어링되어 있는지 확인하십시오.

VM의 접근을 확인하려면 VM에서 다음을 수행할 수 있습니다:

  • netcat 사용: nc -v yourdatabase.database.windows.net 1433
  • telnet 사용: telnet yourdatabase.database.windows.net 1433

다음 단계

  • YAML 구성 참조를 살펴보십시오.
  • 전체 CLI 참조를 확인하십시오.
Teleport 원문 보기