Microsoft Entra ID와의 통합

Microsoft Entra ID와의 SQL Server용 Cloud SQL 통합은 기존 Microsoft Entra ID 테넌트를 사용하여 데이터베이스에 대한 중앙 집중식 ID 및 액세스 관리 (IAM)를 제공합니다.

이 통합은 다음과 같은 이점을 제공합니다.

  • 중앙 집중식 인증. 사용자와 애플리케이션이 비밀번호를 다시 입력하지 않고 기존 Microsoft Entra ID ID를 사용하여 SQL Server용 Cloud SQL 인스턴스에 로그인할 수 있습니다. 이 기능을 사용하면 별도의 SQL Server 전용 로그인 및 비밀번호를 관리할 필요가 없습니다.

  • 보안 강화. 데이터베이스 수준에서 다중 인증 (MFA) 및 조건부 액세스 (CA) 규칙과 같은 조직의 기존 보안 정책을 적용할 수 있습니다.

  • 간편해진 사용자 관리. 사용자의 Microsoft Entra ID 계정이 사용 중지되거나 삭제되면 사용자의 데이터베이스 액세스 권한이 자동으로 취소됩니다. 이 기능을 사용하면 온보딩 및 액세스 검토를 간소화할 수 있습니다.

통합을 위한 기본 요건

Microsoft Entra ID와 SQL Server용 Cloud SQL 통합을 사용하려면 인스턴스가 다음 요구사항을 충족해야 합니다.

  1. 기존 SQL Server 2022 인스턴스가 있거나 새 인스턴스를 만들어야 합니다.

    Microsoft Entra ID 인증은 SQL Server 2022에서만 지원되며 SQL Server 2017 또는 SQL Server 2019에서는 사용할 수 없습니다.

  2. Microsoft Entra ID 인증을 사용 설정합니다.

    Microsoft Entra ID 인증을 사용 설정하기 전에 Azure 포털에서 다음 단계를 완료하세요.

    1. Microsoft Entra 테넌트 ID를 찾습니다.
    2. Microsoft Entra ID에 새 애플리케이션 등록을 만듭니다.

      SQL 서버용 Cloud SQL은 이 애플리케이션을 사용하여 Microsoft Entra 테넌트 ID와 통신합니다. 애플리케이션을 만들 때 애플리케이션 또는 클라이언트 ID를 기록해 둡니다.

    3. 애플리케이션이 디렉터리 데이터를 읽을 수 있는 권한을 부여합니다.

      1. 방금 만든 애플리케이션 등록을 선택한 후 API 권한을 클릭합니다.
      2. 권한 추가 > Microsoft Graph > 애플리케이션 권한을 선택합니다.
      3. 다음 권한 집합 중 하나를 부여합니다.
        • 옵션 1.
          • Directory.Read.All
        • 옵션 2. 더 구체적인 권한을 제공합니다.
          • Application.Read.All
          • Group.Read.All
          • User.Read.All
      4. 애플리케이션이 이러한 권한을 사용할 수 있도록 테넌트 전체 관리자 동의를 부여합니다.

네트워크 연결

Microsoft Entra ID는 인증을 위해 공개 엔드포인트를 사용하는 공개 서비스입니다. Microsoft Entra ID 인증이 제대로 작동하려면 Cloud SQL 인스턴스가 이러한 공개 엔드포인트에 아웃바운드 연결을 설정할 수 있어야 합니다. 다음 섹션에서는 인스턴스의 네트워크 연결 구성에 따라 다음 단계를 설명합니다.

공개 IP가 있는 인스턴스

Cloud SQL 인스턴스가 공개 IP 주소로 구성된 경우 인터넷에 대한 아웃바운드 액세스가 내장되어 있습니다.

Microsoft Entra ID 인증이 작동하는 데 추가 네트워크 구성은 필요하지 않지만 계속하기 전에 제한사항을 검토하세요.

비공개 IP가 있는 인스턴스

Cloud SQL 인스턴스가 비공개 IP 주소로만 구성된 경우 인터넷에 직접 액세스할 수 없습니다. 인스턴스가 Microsoft의 공개 ID 엔드포인트에 도달할 수 있도록 이그레스 경로를 구성해야 합니다. Microsoft Entra ID 통합 구성은 비공개 인스턴스가 구성된 방식에 따라 다릅니다.

Private Service Connect

Cloud SQL 인스턴스가 비공개 IP 주소를 사용하도록 구성된 경우 Private Service Connect를 사용하여 Microsoft Entra ID를 사용 설정하는 것이 좋습니다. 이렇게 하면 다음과 같은 특정 오버헤드 유지관리 작업이 필요하지 않기 때문입니다.

  • 배스천 호스트 VM 관리
  • 경로 유지
  • PSA 연결에 필요한 것과 같은 지나치게 광범위한 경로를 만듭니다.

계속하기 전에 Microsoft Entra ID 사용에 대한 제한사항을 검토하세요.

연결을 사용 설정하려면 소비자 VPC에서 Cloud 네트워크 주소 변환 (Cloud NAT)을 구성해야 합니다. 이렇게 하면 PSC 지원 인스턴스가 공개 Microsoft 엔드포인트로 향하는 아웃바운드 트래픽에 Cloud NAT 게이트웨이를 사용할 수 있습니다. 사용 설정하면 내부 라우팅이 Microsoft Entra ID 관련 트래픽만 Cloud NAT 인스턴스에 도달하도록 트래픽을 제한합니다.

연결을 사용 설정하려면 다음 필수 단계를 완료하세요.

  1. PSC 지원 인스턴스를 만듭니다.
  2. Cloud SQL 인스턴스의 아웃바운드 연결을 구성합니다.
  3. Cloud NAT 게이트웨이를 만듭니다.

비공개 서비스 액세스

Cloud SQL 인스턴스가 비공개 IP 주소를 사용하도록 구성되어 있고 PSA를 사용하는 경우 Microsoft Entra ID에 대한 연결을 사용 설정하려면 다음 단계를 따라야 합니다.

  1. VPC 내에 배스천 호스트 VM을 배포합니다.

    프로젝트에서 배스천 호스트 VM을 만들 때는 IP 전달을 사용 설정해야 합니다. Linux 기반 배스천 호스트 VM을 만든 경우 방금 만든 배스천 호스트 VM이 IP 전달을 수행하도록 구성합니다.

    sudo sysctl net.ipv4.conf.all.forwarding=1
    sudo iptables --table nat --append POSTROUTING --out-interface  ens4 -j MASQUERADE
    
  2. 배스천 호스트 VM 호스트를 통해 Cloud SQL 인스턴스에서 인터넷에 도달하도록 Microsoft Entra ID 인증 트래픽을 전달하는 데 필요한 네트워크 경로를 구성합니다.

    각 Microsoft Entra ID 엔드포인트에 해당하는 경로를 추가합니다. 현재 IP 범위는 Azure IP 범위 및 서비스 태그 리소스 파일의 AzureActiveDirectory.ServiceEndpoint 섹션에서 확인할 수 있습니다.

    gcloud

    각 Microsoft Entra ID IP 범위에 대해 다음 두 경로를 만듭니다. VM_NAMEVM_ZONE을 배스천 호스트 VM의 실제 이름과 영역으로 바꿉니다.

    gcloud --project=PROJECT_ID compute routes create NAME \
      --network=NETWORK --destination-range=RANGE \
      --priority=998 --next-hop-gateway=default-internet-gateway
    
    gcloud  --project=PROJECT_ID compute routes create NAME \
      --network=NETWORK --destination-range=RANGE --priority=999 \
      --next-hop-instance=VM_NAME --next-hop-instance-zone=VM_ZONE \
      --next-hop-ilb=ILB_VALUE
    

    다음을 바꿉니다.

    • PROJECT_ID: Cloud SQL 인스턴스가 있는 프로젝트의 ID
    • NAME: 만들려는 경로의 이름입니다.
    • NETWORK: Cloud SQL 인스턴스가 있는 네트워크의 이름입니다.
    • RANGE: 사용할 IP 범위입니다.
    • VM_NAME: 포함할 배스천 호스트 VM의 이름입니다.
    • VM_ZONE: 포함할 배스천 호스트 VM의 영역입니다(예: us-central1).
    • ILB_VALUE: 선택사항. 내부 TCP/UDP 부하 분산기의 전달 규칙 이름 또는 IP 주소입니다. 배스천 호스트 VM 앞에 부하 분산기를 구성한 경우 이 명령어에 --next-hop-ilb 플래그를 포함해야 합니다.

      자세한 내용은 다음 홉으로의 내부 패스 스루 네트워크 부하 분산기를 참고하세요.

    예시는 다음과 같습니다.

    gcloud  --project=my-customer-project compute routes create my-route-1 --network=default --destination-range=20.20.32.0/27 --priority=998 --next-hop-gateway=default-internet-gateway
    
    gcloud  --project=my-customer-project compute routes create my-route-2 --network=default --destination-range=20.20.32.0/27 --priority=999 --next-hop-instance=my-bastion-vm --next-hop-instance-zone=us-central1-c --next-hop-ilb=fr-ilb1
    
  3. 이전 단계와 동일한 명령어를 사용하여 Microsoft Entra ID 인증서 취소 확인을 위한 트래픽을 허용하는 동일한 구성을 적용합니다. DigiCert 인증서 상태 IP 주소에 나열된 IP 범위를 사용합니다.

    이 단계를 완료하지 않으면 Microsoft Entra ID 인증이 계속 작동할 수 있지만 새 연결을 열 때 지연이 발생할 수도 있습니다.

Microsoft Entra ID 인증 관리

새 인스턴스 또는 기존 인스턴스에 대해 Entra ID 인증을 사용 설정할 수 있습니다.

Microsoft Entra ID 인증이 사용 설정된 인스턴스 만들기

새 SQL Server용 Cloud SQL 인스턴스를 만들 때 Microsoft Entra ID 인증을 사용 설정할 수 있습니다. Azure 포털에서 구성한 앱 등록의 특정 Microsoft Entra 테넌트 ID와 애플리케이션 ID (클라이언트 ID)를 제공해야 합니다.

자세한 내용은 기본 요건을 참고하세요.

gcloud

gcloud beta sql instances create INSTANCE_NAME \
    --database-version=EDITION \
    --tier=TIER \
    --network=NETWORK
    --root-password=PASSWORD
    --entra-id-tenant-id=TENANT_ID \
    --entra-id-application-id=APPLICATION_ID

다음을 바꿉니다.

  • INSTANCE_NAME: 만들려는 인스턴스의 이름입니다.
  • EDITION: 사용할 인스턴스 버전입니다(예: SQLSERVER_2022_STANDARD).
  • TIER: 사용할 인스턴스 등급 또는 머신 유형(예: db-custom-2-3840)
  • NETWORK: 사용할 네트워크 이름입니다.
  • PASSWORD: 인스턴스 비밀번호
  • TENANT_ID: Microsoft Entra 테넌트 ID입니다.
  • APPLICATION_ID: 애플리케이션 또는 클라이언트 ID입니다.

예시는 다음과 같습니다.

gcloud beta sql instances create my-entraid-instance \
    --database-version=SQLSERVER_2022_STANDARD \
    --tier=db-custom-2-3840 \
    --assign-ip \
    --root-password=D61Xv36f!0lE \
    --entra-id-tenant-id=7e281aab-e994-4c83-88ed-d1674477a39c \
    --entra-id-application-id=4c5ed2da-0478-4aaa-ab65-6dfd33ba8bfd

REST v1

가능한 모든 필드가 다음 기본 API 호출에 표시되지는 않습니다. JSON 요청의 프로토타입은 설정을 참고하세요.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 만들려는 인스턴스가 위치할 프로젝트의 이름입니다.
  • INSTANCE_ID: 만들려는 인스턴스의 ID입니다.
  • EDITION: 사용할 인스턴스 버전입니다(예: SQLSERVER_2022_STANDARD).
  • REGION: 인스턴스가 상주할 리전입니다(예: us-central1).
  • PASSWORD: 인스턴스 비밀번호
  • TIER: 사용할 인스턴스 등급 또는 머신 유형(예: db-custom-2-3840)
  • NETWORK: 사용할 네트워크 이름입니다.
  • TENANT_ID: Microsoft Entra 테넌트 ID입니다.
  • APPLICATION_ID: 애플리케이션 또는 클라이언트 ID입니다.

HTTP 메서드 및 URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

JSON 요청 본문:

{
  "databaseVersion":"EDITION",
  "name":"INSTANCE_ID",
  "region":"REGION",
  "rootPassword":"PASSWORD",
  "settings":
  {
    "tier":"TIER",
    "ipConfiguration":
      {
        "privateNetwork":"NETWORK"
      },
    "entraidConfig":
    {
      "tenantId": "TENANT_ID",
      "applicationId": "APPLICATION_ID"
    }
  }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

가능한 모든 필드가 다음 기본 API 호출에 표시되지는 않습니다. JSON 요청의 프로토타입은 설정을 참고하세요.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 만들려는 인스턴스가 위치할 프로젝트의 이름입니다.
  • INSTANCE_ID: 만들려는 인스턴스의 ID입니다.
  • EDITION: 사용할 인스턴스 버전입니다(예: SQLSERVER_2022_STANDARD).
  • REGION: 인스턴스가 상주할 리전입니다(예: us-central1).
  • PASSWORD: 인스턴스 비밀번호
  • TIER: 사용할 인스턴스 등급 또는 머신 유형(예: db-custom-2-3840)
  • NETWORK: 사용할 네트워크 이름입니다.
  • TENANT_ID: Microsoft Entra 테넌트 ID입니다.
  • APPLICATION_ID: 애플리케이션 또는 클라이언트 ID입니다.

HTTP 메서드 및 URL:

POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances

JSON 요청 본문:

{
  "databaseVersion":"EDITION",
  "name":"INSTANCE_ID",
  "region":"REGION",
  "rootPassword":"PASSWORD",
  "settings":
  {
    "tier":"TIER",
    "ipConfiguration":
      {
        "privateNetwork":"NETWORK"
      },
    "entraidConfig":
    {
      "tenantId": "TENANT_ID",
      "applicationId": "APPLICATION_ID"
    }
  }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

기존 인스턴스에서 Microsoft Entra ID 인증 관리

언제든지 기존 인스턴스에서 Microsoft Entra ID 구성을 사용 설정, 수정 또는 사용 중지할 수 있습니다.

인스턴스의 구성을 수정하려면 새 테넌트 ID 및 애플리케이션(클라이언트) ID 값 또는 삭제된 테넌트 ID 및 애플리케이션(클라이언트) ID 값으로 인스턴스를 패치해야 합니다.

이 프로세스에는 도메인 가입 또는 도메인 탈퇴가 포함되지 않습니다.

Microsoft Entra ID와의 통합을 사용 설정하거나 사용 중지하지 않고 테넌트 ID 및 애플리케이션 ID 값을 업데이트할 수 있습니다.

gcloud

gcloud beta sql instances patch INSTANCE_NAME \
    --entra-id-tenant-id="NEW_TENANT_ID" \
    --entra-id-application-id="NEW_APPLICATION_ID"

다음을 바꿉니다.

  • INSTANCE_NAME: 수정하려는 인스턴스의 이름입니다.
  • NEW_TENANT_ID: 새 Microsoft Entra 테넌트 ID입니다. Microsoft Entra ID를 사용 중지하려면 이 문자열을 비워 둡니다.
  • NEW_APPLICATION_ID: 새 애플리케이션 또는 클라이언트 ID입니다. Microsoft Entra ID를 사용 중지하려면 이 문자열을 비워 둡니다.

예시는 다음과 같습니다.

gcloud beta sql instances patch my-existing-instance \
    --entra-id-tenant-id=7e281aab-e994-4c83-88ed-d1674477a39c \
    --entra-id-application-id=4c5ed2da-0478-4aaa-ab65-6dfd33ba8bfd

REST v1

가능한 모든 필드가 다음 기본 API 호출에 표시되지는 않습니다. JSON 요청의 프로토타입은 설정을 참고하세요.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 수정할 인스턴스가 있는 프로젝트의 ID입니다.
  • INSTANCE_ID: 수정하려는 인스턴스의 ID입니다.
  • TENANT_ID: Microsoft Entra 테넌트 ID입니다. Microsoft Entra ID를 사용 중지하려면 이 문자열을 비워 둡니다.
  • APPLICATION_ID: 애플리케이션 또는 클라이언트 ID입니다. Microsoft Entra ID를 사용 중지하려면 이 문자열을 비워 둡니다.

HTTP 메서드 및 URL:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

JSON 요청 본문:

{
  "settings":
  {
    "entraidConfig":
    {
      "tenantId": "NEW_TENANT_ID",
      "applicationId": "NEW_APPLICATION_ID"
    }
  }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

가능한 모든 필드가 다음 기본 API 호출에 표시되지는 않습니다. JSON 요청의 프로토타입은 설정을 참고하세요.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 수정할 인스턴스가 있는 프로젝트의 ID입니다.
  • INSTANCE_ID: 수정하려는 인스턴스의 ID입니다.
  • TENANT_ID: Microsoft Entra 테넌트 ID입니다. Microsoft Entra ID를 사용 중지하려면 이 문자열을 비워 둡니다.
  • APPLICATION_ID: 애플리케이션 또는 클라이언트 ID입니다. Microsoft Entra ID를 사용 중지하려면 이 문자열을 비워 둡니다.

HTTP 메서드 및 URL:

PATCH https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances

JSON 요청 본문:

{
  "settings":
  {
    "entraidConfig":
    {
      "tenantId": "NEW_TENANT_ID",
      "applicationId": "NEW_APPLICATION_ID"
    }
  }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

애플리케이션에 인증서 추가

Microsoft Entra ID가 SQL Server용 Cloud SQL 인스턴스를 인증하려면 SQL Server용 Cloud SQL 인스턴스의 공개 인증서를 Microsoft Entra ID 앱 등록에 업로드해야 합니다.

  1. 인스턴스에서 Microsoft Entra ID 인증을 사용 설정한 후 Microsoft Entra ID용 인스턴스별 인증서를 만듭니다.

    gcloud

    gcloud beta sql ssl entraid-certs create --instance=INSTANCE_NAME
    

    다음을 바꿉니다.

    • INSTANCE_NAME: 인증서를 만들려는 인스턴스의 이름입니다.

    REST v1

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: 인스턴스가 있는 프로젝트의 ID입니다.
    • INSTANCE_ID: 인스턴스의 ID입니다.

    HTTP 메서드 및 URL:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/addEntraIdCertificate

    요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

    다음과 비슷한 JSON 응답이 표시됩니다.

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-01T19:13:21.834Z",
      "operationType": "CREATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    

    REST v1beta4

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: 인스턴스가 있는 프로젝트의 ID입니다.
    • INSTANCE_ID: 인스턴스의 ID입니다.

    HTTP 메서드 및 URL:

    POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/addEntraIdCertificate

    요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

    다음과 비슷한 JSON 응답이 표시됩니다.

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-01T19:13:21.834Z",
      "operationType": "CREATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    
  2. 인스턴스의 세부정보를 검색하여 방금 만든 인증서의 세부정보를 가져옵니다.

    gcloud

    gcloud beta sql ssl entraid-certs list --instance=INSTANCE_NAME --format="value(ssl_cert.cert)"
    

    다음을 바꿉니다.

    • INSTANCE_NAME: 방금 만든 인증서와 연결된 인스턴스의 이름입니다.

    REST v1

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: 인스턴스가 있는 프로젝트의 ID입니다.
    • INSTANCE_ID: 인스턴스의 ID입니다.

    HTTP 메서드 및 URL:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/listEntraIdCertificates

    요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

    성공 상태 코드(2xx)와 빈 응답을 받게 됩니다.

    이 명령어는 파일에 저장한 후 나중에 Azure 포털에 업로드할 수 있는 인증서를 출력합니다.

    파일에서 모든 삽입된 줄바꿈 문자를 삭제하고 각 새 줄을 수동으로 구분해야 합니다. 그렇지 않으면 파일 업로드가 실패합니다.

    예를 들어 다음과 같은 텍스트 문자열이 표시될 수 있습니다.

    Line1\Line2\Line3
    

    다음과 같이 각 줄을 수동으로 구분해야 합니다.

    Line1
    Line2
    Line3
    

    또는 이 작업을 수동으로 실행하지 않으려면 다음 명령어를 사용하세요.

    curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -H "x-goog-user-project: PROJECT_ID" "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME/listEntraIdCertificates" -s | jq -r '.certs[0].cert'
    

    다음을 바꿉니다.

    • PROJECT_ID: 인스턴스가 있는 프로젝트의 ID입니다.
    • INSTANCE_NAME: 방금 만든 인증서와 연결된 인스턴스의 이름입니다.

    REST v1beta4

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: 인스턴스가 있는 프로젝트의 ID입니다.
    • INSTANCE_ID: 인스턴스의 ID입니다.

    HTTP 메서드 및 URL:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/listEntraIdCertificates

    요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

    성공 상태 코드(2xx)와 빈 응답을 받게 됩니다.

    이 명령어는 파일에 저장한 후 나중에 Azure 포털에 업로드할 수 있는 인증서를 출력합니다.

    파일에서 모든 삽입된 줄바꿈 문자를 삭제하고 각 새 줄을 수동으로 구분해야 합니다. 그렇지 않으면 파일 업로드가 실패합니다.

    예를 들어 다음과 같은 텍스트 문자열이 표시될 수 있습니다.

    Line1\Line2\Line3
    

    다음과 같이 각 줄을 수동으로 구분해야 합니다.

    Line1
    Line2
    Line3
    

    또는 이 작업을 수동으로 실행하지 않으려면 다음 명령어를 사용하세요.

    curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -H "x-goog-user-project: PROJECT_ID" "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME/listEntraIdCertificates" -s | jq -r '.certs[0].cert'
    

    다음을 바꿉니다.

    • PROJECT_ID: 인스턴스가 있는 프로젝트의 ID입니다.
    • INSTANCE_NAME: 방금 만든 인증서와 연결된 인스턴스의 이름입니다.
  3. Azure 포털에 인증서를 추가합니다.

    1. Azure 포털에서 앱 등록으로 이동합니다.
    2. 인증서 및 보안 비밀을 엽니다.
    3. 인증서 업로드를 선택합니다. 인스턴스에서 가져온 인증서 파일을 찾아 추가합니다.
    4. 확인을 클릭합니다.

Microsoft Entra ID 인증서 순환

Microsoft Entra ID 인증서가 만료되기 전에 순환해야 합니다. 예정된 만료일 최소 1주일 전에 이 프로세스를 시작하는 것이 좋습니다.

  1. 애플리케이션에 인증서 추가의 단계에 따라 SQL Server용 Cloud SQL 인스턴스에서 비활성 상태의 새 인증서를 만든 다음 Azure Portal을 사용하여 Microsoft Entra ID에 업로드합니다. 현재 활성 인증서에는 영향을 미치지 않습니다.

  2. SQL Server용 Cloud SQL 인스턴스에서 새 인증서를 활성화합니다. 그러면 SQL Server용 Cloud SQL이 모든 새 인증에 새 인증서를 사용하기 시작합니다.

    gcloud

    gcloud beta sql ssl entraid-certs rotate --instance=INSTANCE_NAME
    

    다음을 바꿉니다.

    • INSTANCE_NAME: 순환하려는 인증서와 연결된 인스턴스의 이름입니다.

    REST v1

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: 인스턴스가 있는 프로젝트의 ID입니다.
    • INSTANCE_ID: 인스턴스의 ID입니다.

    HTTP 메서드 및 URL:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/rotateEntraIdCertificate

    요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

    성공 상태 코드(2xx)와 빈 응답을 받게 됩니다.

    REST v1beta4

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: 인스턴스가 있는 프로젝트의 ID입니다.
    • INSTANCE_ID: 인스턴스의 ID입니다.

    HTTP 메서드 및 URL:

    POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/rotateEntraIdCertificate

    요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

    성공 상태 코드(2xx)와 빈 응답을 받게 됩니다.

  3. 이제 인스턴스에서 새 인증서를 사용합니다.

    Microsoft Entra ID 앱 등록 및 SQL Server용 Cloud SQL 인스턴스에서 이전 인증서를 안전하게 삭제할 수 있습니다. 자세한 내용은 Microsoft Entra ID에서 애플리케이션 사용자 인증 정보 추가 및 관리하기를 참고하세요.

Microsoft Entra ID 인증서 롤백

새 인증서로 순환한 후 문제가 발생하면 이전 인증서로 롤백할 수 있습니다.

롤백을 수행하려면 이전 인증서가 여전히 유효해야 하며 Microsoft Entra ID 앱 등록에서 여전히 신뢰할 수 있어야 합니다.

다음 명령어는 SQL Server용 Cloud SQL 인스턴스에서 지정된 이전 인증서를 즉시 다시 활성화합니다.

gcloud

gcloud beta sql ssl entraid-certs rollback --instance=INSTANCE_NAME

다음을 바꿉니다.

  • INSTANCE_NAME: 롤백하려는 인증서와 연결된 인스턴스의 이름입니다.

REST v1

가능한 모든 필드가 다음 기본 API 호출에 표시되지는 않습니다. JSON 요청의 프로토타입은 설정을 참고하세요.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 인스턴스가 있는 프로젝트의 ID입니다.
  • INSTANCE_ID: 인증서를 롤백하려는 인스턴스의 ID입니다.
  • CERTIFICATE_NAME: 이전 인증서를 대체하는 데 사용할 새 인증서의 이름(예: sha1Fingerprint)

HTTP 메서드 및 URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/rollbackEntraIdCertificate

JSON 요청 본문:

{
  {
  "RotateEntraIdCertificateContext": {"nextVersion": "CERTIFICATE_NAME"}
  }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

가능한 모든 필드가 다음 기본 API 호출에 표시되지는 않습니다. JSON 요청의 프로토타입은 설정을 참고하세요.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 인스턴스가 있는 프로젝트의 ID입니다.
  • INSTANCE_ID: 인증서를 롤백하려는 인스턴스의 ID입니다.
  • CERTIFICATE_NAME: 이전 인증서를 대체하는 데 사용할 새 인증서의 이름(예: sha1Fingerprint)

HTTP 메서드 및 URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/rollbackEntraIdCertificate

JSON 요청 본문:

{
  {
  "RotateEntraIdCertificateContext": {"nextVersion": "CERTIFICATE_NAME"}
  }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

초기 Microsoft Entra ID 로그인 만들기

인스턴스에서 Microsoft Entra ID 인증을 사용 설정한 후 Microsoft Entra ID 로그인을 만들어야 합니다.

  1. 첫 번째 Microsoft Entra ID 로그인을 만듭니다.

    Microsoft Entra ID 사용자 또는 그룹을 나타내는 이 초기 로그인은 T-SQL을 사용하여 만들 수 없습니다. gcloud CLI 또는 Cloud SQL Admin API를 사용하여 만들어야 합니다.

    gcloud

    gcloud sql users create USER_NAME --instance=INSTANCE_NAME --type=ENTRAID_USER
    

    다음을 바꿉니다.

    • USER_NAME: 생성하려는 SQL Server용 Cloud SQL 사용자의 이름입니다.
    • INSTANCE_NAME: Microsoft Entra ID 로그인을 만들려는 인스턴스의 이름입니다.
    • ENTRAID_USER: Microsoft Entra ID 사용자 이름입니다.

    예시는 다음과 같습니다.

    gcloud sql users create myentraiduser@mytenant.com --instance=my-entraid-instance --type=ENTRAID_USER
    

    REST v1

    가능한 모든 필드가 다음 기본 API 호출에 표시되지는 않습니다. JSON 요청의 프로토타입은 설정을 참고하세요.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: 인스턴스가 있는 프로젝트의 ID입니다.
    • INSTANCE_ID: 업데이트할 인스턴스의 ID입니다.
    • USER_NAME: 생성할 SQL Server용 Cloud SQL 사용자의 이름입니다.
    • ENTRAID_USER: Microsoft Entra ID 사용자 이름입니다.

    HTTP 메서드 및 URL:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users

    JSON 요청 본문:

    {
      "name": "USER_NAME"
      "type": "ENTRAID_USER"
    }
    

    요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

    다음과 비슷한 JSON 응답이 표시됩니다.

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-01T19:13:21.834Z",
      "operationType": "CREATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    

    REST v1beta4

    가능한 모든 필드가 다음 기본 API 호출에 표시되지는 않습니다. JSON 요청의 프로토타입은 설정을 참고하세요.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: 인스턴스가 있는 프로젝트의 ID입니다.
    • INSTANCE_ID: 업데이트할 인스턴스의 ID입니다.
    • USER_NAME: 생성할 SQL Server용 Cloud SQL 사용자의 이름입니다.
    • ENTRAID_USER: Microsoft Entra ID 사용자 이름입니다.

    HTTP 메서드 및 URL:

    POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users

    JSON 요청 본문:

    {
      "name": "USER_NAME"
      "type": "ENTRAID_USER"
    }
    

    요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

    다음과 비슷한 JSON 응답이 표시됩니다.

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-01T19:13:21.834Z",
      "operationType": "CREATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    

    초기 Microsoft Entra ID 로그인이 생성되면 해당 사용자로 데이터베이스에 연결할 수 있습니다.

  2. 후속 Microsoft Entra ID 로그인을 만듭니다.

    이전 단계에서 설명한 대로 추가 Microsoft Entra ID 로그인을 만들고 관리할 수 있습니다.

    또는 SQL Server Management Studio (SSMS)와 같은 다른 도구를 사용하려면 먼저 초기 로그인에 다른 로그인을 관리할 권한을 부여해야 합니다.

    GRANT ALTER ANY LOGIN TO [ENTRA_ID_USER] AS CustomerDbRootRole
    

    ENTRAID_USER을 Microsoft Entra ID 사용자 이름으로 바꿉니다.

    권한이 부여되면 이 로그인으로 표준 T-SQL 명령어를 사용하여 다른 Microsoft Entra ID 로그인을 만들고 관리할 수 있습니다. 명령어 예시는 다음과 같습니다.

    CREATE LOGIN [<<ENTRA_ID_USER>>] FROM EXTERNAL PROVIDER
    

    ENTRAID_USER을 Microsoft Entra ID 사용자 이름으로 바꿉니다.

    Microsoft Entra ID 로그인을 기반으로 사용자를 만들거나 권한을 부여하려면 표준 T-SQL 명령어를 사용합니다.

    올바른 구문을 사용하여 로그인을 만드는 방법을 비롯한 자세한 내용은 앱 등록으로 SQL Server용 Microsoft Entra 인증 설정을 참고하세요.

권장사항

권한을 격리하고 보안 경계를 더 잘 정의하려면 각 SQL Server용 Cloud SQL 인스턴스에 대해 고유한 Microsoft Entra ID 애플리케이션 등록을 만드는 것이 좋습니다. 애플리케이션의 사용자 인증 정보를 취소해도 관련이 없는 다른 인스턴스에는 영향을 미치지 않습니다.

자세한 내용은 Microsoft Entra ID에 애플리케이션을 등록하는 방법을 참고하세요.

문제 해결

다음 섹션에서는 Microsoft Entra ID 통합을 관리하는 중에 발생할 수 있는 문제를 해결하는 데 도움이 됩니다.

비공개 IP 인스턴스의 네트워크 연결 문제

통합 설정 중에 다음 문제가 발생할 수 있습니다.

  • Microsoft Entra ID 로그인 생성 작업이 느림
  • Microsoft Entra ID 로그인을 만들 수 없음
  • Microsoft Entra ID 인증을 사용하여 인스턴스에 연결할 수 없음

이러한 문제를 해결하려면 다음 연결 테스트를 실행하세요.

  1. 동일한 Google Cloud 프로젝트 및 VPC 내에서 Cloud SQL for SQL Server 인스턴스와 동일한 리전에 비공개 IP만으로 구성된 테스트 VM을 만듭니다.

  2. 원격 데스크톱 프로토콜(RDP) 또는 보안 셸 프로토콜 (SSH)을 사용하여 방금 만든 VM에 연결합니다. 그런 다음 다음 명령어를 실행하여 연결 가능성을 테스트합니다. 다음 단계는 Linux 기반 VM과 Windows 기반 VM 모두에 적용할 수 있습니다.

    curl -4iv login.microsoftonline.com
    curl -4iv graph.microsoft.com
    curl -4iv ocsp.digicert.com
    

시간 초과 또는 연결 거부 오류로 인해 이러한 엔드포인트에 연결할 수 없는 경우 네트워크 구성에서 다음을 확인하세요.

  • Private Service Connect의 경우 아웃바운드 인터넷 액세스를 허용하도록 Cloud NAT가 올바르게 구성되어 있는지 확인합니다.
  • 비공개 서비스 액세스의 경우 커스텀 경로 및 배스천 호스트 구성을 확인합니다.
  • VPC 방화벽 규칙을 확인하여 이러한 도메인으로의 이그레스 트래픽이 차단되지 않는지 확인합니다.

일반적인 오류 메시지

Microsoft Entra ID 인증 중에 다음과 같은 로그인 오류가 발생할 수 있습니다.

Login failed for user ""

이 문제를 해결하려면 이 Microsoft Entra ID 사용자에 대한 SQL Server 로그인이 있는지 확인하세요.

Microsoft Active Directory에서 이전

다음 시나리오에서는 기존 Microsoft Active Directory 인증을 사용 중지하지 않고 Microsoft Entra ID 인증을 사용 설정할 수 있습니다.

읽기 복제본

  • Microsoft Entra ID가 사용 설정된 기본 인스턴스에 읽기 복제본을 추가하면 Microsoft Entra ID를 사용하도록 읽기 복제본이 자동으로 구성됩니다.
  • 기본 인스턴스에 Microsoft Entra ID가 사용 설정되어 있고 해당 인스턴스로 백업을 복원하는 경우 ID가 변경되지 않으므로 연결된 읽기 복제본이 Microsoft Entra를 사용하도록 자동으로 구성됩니다.

클론된 인스턴스 및 다른 인스턴스로 복원

다음 시나리오에서는 Microsoft Entra ID 통합이 새 인스턴스에 자동으로 구성되지 않습니다.

  • 기본 인스턴스의 클론입니다.
  • 기본이 아닌 인스턴스에 복원된 백업

이 경우 새 인스턴스에서 Microsoft Entra ID를 수동으로 사용 설정한 다음 인증서를 Microsoft Entra ID 애플리케이션에 다시 업로드해야 합니다. 이 요구사항은 여러 관련 없는 인스턴스가 동일한 애플리케이션 ID를 사용하는 것을 방지하기 위한 보안 조치입니다.

제한사항

  • Microsoft Entra ID 인증은 SQL Server 2022에서만 지원되며 SQL Server 2017 또는 SQL Server 2019에서는 사용할 수 없습니다.
  • 인스턴스를 클론하거나 다른 인스턴스로 백업을 복원하는 경우 새 인스턴스에서 Microsoft Entra ID 통합이 자동으로 구성되지 않습니다. 자세한 내용은 백업 및 복구를 참고하세요.
  • 공개 IP로 구성된 고가용성 (HA) 인스턴스에서는 Microsoft Entra ID 인증이 지원되지 않습니다.
  • Microsoft Entra ID 인증은 PSC 지원 기본 인스턴스 및 해당 읽기 복제본 인스턴스에서 지원되지 않습니다.
  • 복제본이 연결된 기본 인스턴스에서 Microsoft Entra ID 인증서를 순환하지 마세요. 기본 인스턴스의 인증서를 순환하면 복제본 인증서는 업데이트되지 않습니다.
  • SQL Server용 Cloud SQL과의 Microsoft Entra ID 통합은 gcloud CLI 또는 Cloud SQL Admin API를 사용하여 구성할 수 있습니다. Terraform을 사용하여 통합을 관리할 수 없습니다.

다음 단계