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 Active Directory에서 인증 토큰을 검색할 수 있는 권한이 있는 연결된 Azure 가상 머신에서 실행됩니다. 사용자가 Teleport를 통해 SQL Server에 연결하면 Teleport 데이터베이스 서비스가 Azure AD에 인증하고, 이후 인증 토큰을 사용하여 SQL Server에 연결합니다. 데이터베이스 서비스는 사용자 트래픽을 데이터베이스로 전달합니다.

필수 조건

Azure Active Directory 인증을 통한 Azure SQL Server에 대한 데이터베이스 액세스는 Teleport 11.0부터 사용할 수 있습니다.

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

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

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

  • Azure에서 실행 중인 SQL Server.
  • Azure 가상 인스턴스에서 실행 중인 Teleport 데이터베이스 서비스.
  • 당신의 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/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를 선택합니다.

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

단계 3/8. Teleport에 대한 IAM 권한 구성

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

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

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 Server 및 SQL Managed Instance를 검색할 수 있도록 허용합니다.",
        "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 필드는 구독(/subscriptions/<subscription>)을 포함하며, 해당 구독 내 모든 리소스 범위 또는 구독 범위 자체에 역할을 할당할 수 있게 합니다. assignableScopes를 추가로 제한하려면 리소스 그룹(/subscriptions/<subscription>/resourceGroups/<group>) 또는 관리 그룹(/providers/Microsoft.Management/managementGroups/<group>)을 대신 사용할 수 있습니다.

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

구독에서 **Access control (IAM)**을 클릭하고 Add > Add custom role을 선택합니다:

IAM 사용자 지정 역할

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

단계 4/8. 가상 머신 ID 구성

Teleport 데이터베이스 서비스 가상 머신의 Identity 섹션에서 시스템 할당 ID를 활성화합니다. 이는 Teleport가 Azure API에 액세스하는 데 사용됩니다.

Teleport에 권한을 부여하려면 생성한 사용자 지정 역할이 가상 머신 시스템 할당 ID에 할당되어야 합니다. 동일한 페이지에서 Azure 역할 할당을 클릭한 후 Add role assignment를 클릭합니다. 사용자 지정 역할을 선택하고 저장합니다.

Azure 역할 할당

역할 할당은 Teleport 데이터베이스 서비스가 모든 일치하는 데이터베이스를 검색할 수 있도록 충분히 높은 범위에서 이루어져야 합니다. 필요한 범위 식별을 참조하여 Azure 범위 및 역할 할당 생성에 대한 더 많은 정보를 확인하세요.

로그인 ID

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

Azure API에 대한 인증 토큰을 가져오기 위해 가상 머신에 연결된 관리 ID를 사용합니다.

새로운 사용자 할당 관리 ID를 만들려면 Azure PortalManaged Identities 페이지로 이동한 후 Create를 클릭합니다. 이름과 리소스 그룹을 선택하고 생성합니다:

Azure 사용자 관리 ID 생성 페이지

다음으로 Teleport 데이터베이스 서비스 가상 머신 인스턴스Identity 섹션으로 가서 User assigned를 선택한 후 방금 생성한 ID를 추가합니다:

단계 5/8. SQL Server에서 관리 ID 로그인 활성화

Azure AD SQL Server 통합은 데이터베이스 수준 인증(포함된 사용자)을 사용하므로 액세스하려는 각 데이터베이스에 대해 ID용 사용자를 만들어야 합니다.

ID에 대한 포함된 사용자를 만들기 위해, Activity Directory 관리자를 사용하여 SQL 서버에 연결하고 쿼리를 실행합니다:

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

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

ALTER ROLE db_datareader ADD MEMBER [sqlserver-identity];

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

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

데이터베이스 서비스에 대한 구성 파일을 /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

이 명령은 Azure SQL Server 자동 검색이 활성화된 데이터베이스 서비스 구성을 eastus 지역에 생성하고 /etc/teleport.yaml 위치에 배치합니다.

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

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

Tip

단일 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

로컬 프록시에 DB GUI 클라이언트를 연결하는 방법은 Database Access GUI Clients 가이드를 참조하세요.

문제 해결

ID를 찾을 수 없습니다

데이터베이스에 연결할 때 could not find identity "my-identity" attached to the instance라는 오류가 발생하면 연결하려는 ID가 Teleport 데이터베이스 서비스 가상 머신에 연결되어 있지 않음을 나타냅니다. Virtual Machines 페이지로 이동하여 Teleport 인스턴스Identity 섹션을 열고 User assigned를 선택하여 연결할 수 있는 모든 ID를 확인하십시오. ID가 보이지 않으면 4단계를 참조하여 추가 방법을 확인하세요.

사용자의 로그인 실패

데이터베이스에 연결할 때 mssql: login error: Login failed for user '<token-identified principal>' 오류가 발생하면, 관리 ID 로그인이 SQL 데이터베이스에 존재하지 않음을 의미합니다. 모든 연결할 데이터베이스에 대해 사용자를 생성해야 합니다. 6단계에 설명된 대로 사용자를 생성해야 합니다.

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

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

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

데이터베이스가 공개적이지 않고 전용 엔드포인트를 사용하고 있다면, 동일한 VPC에 있는지 확인하거나 Teleport VM VPC가 데이터베이스 VPC와 피어링되어 있는지 확인하세요.

VM이 액세스할 수 있는지 확인하려면 VM에서 다음을 수행할 수 있습니다:

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

다음 단계

Teleport 원문 보기