Active Directory 통합 Azure Arc 지원 SQL Managed Instance 배포

이 문서에서는 Active Directory 인증을 사용하여 Azure Arc 지원 Azure SQL Managed Instance을 배포하는 방법을 알아봅니다.

필수 조건

SQL Managed Instance 배포를 시작하기 전에 다음 필수 구성 요소가 있는지 확인합니다.

커넥터 요구 사항

고객 관리형 keytab Active Directory 커넥터 및 시스템 관리형 keytab Active Directory 커넥터는 다양한 요구 사항과 단계가 있는 각기 다른 배포 모드입니다. 각 모드에는 배포 중에 특정 요구 사항이 있습니다. 사용하는 커넥터의 탭을 선택합니다.

Active Directory 고객 관리형 keytab 배포의 경우 다음을 제공해야 합니다.

  • SQL용 Active Directory 사용자 계정
  • 사용자 계정 아래의 SPN(서비스 사용자 이름)
  • SQL의 기본 엔드포인트에 대한 DNS A(정방향) 레코드(및 필요에 따라 보조 엔드포인트)

배포 준비

배포 모드에 따라 다음 단계를 완료하여 SQL Managed Instance 배포를 준비합니다.

고객 관리형 keytab 모드에서 배포를 준비하려면 다음을 수행합니다.

  1. SQL 엔드포인트의 DNS 이름 식별: 클라이언트가 Kubernetes 클러스터 외부에서 연결할 SQL 엔드포인트에 대해 고유한 DNS 이름을 선택합니다.

    • DNS 이름은 Active Directory 도메인 또는 하위 도메인에 있어야 합니다.
    • 이 문서의 예제에서는 기본 DNS 이름의 경우 sqlmi-primary.contoso.local을, 보조 DNS 이름 의 경우 sqlmi-secondary.contoso.local을 사용합니다.
  2. SQL 엔드포인트의 포트 번호 식별: 각 SQL 엔드포인트에 대한 포트 번호를 입력합니다.

    • 포트 번호는 Kubernetes 클러스터에 허용되는 포트 번호 범위에 있어야 합니다.
    • 이 문서의 예제에서는 기본 포트 번호의 경우 31433을, 보조 포트 번호의 경우 31434를 사용합니다.
  3. 관리되는 인스턴스용 Active Directory 계정 만들기: 관리되는 인스턴스를 나타낼 Active Directory 계정의 이름을 선택합니다.

    • 이 이름은 Active Directory 도메인에서 고유해야 합니다.
    • 이 문서의 예제에서는 Active Directory 계정 이름의 경우 sqlmi-account를 사용합니다.

    계정을 만들려면 다음을 수행합니다.

    1. 도메인 컨트롤러에서 Active Directory 사용자 및 컴퓨터 도구를 엽니다. 관리되는 인스턴스를 나타내는 계정을 만듭니다.
    2. Active Directory 도메인 암호 정책을 준수하는 계정 암호를 입력합니다. 다음 섹션의 일부 단계에서 이 암호를 사용합니다.
    3. 계정이 사용하도록 설정되어 있는지 확인합니다. 계정에는 특별한 권한이 필요하지 않습니다.
  4. Active Directory DNS 서버에서 SQL 엔드포인트에 대한 DNS 레코드 만들기: Active Directory DNS 서버 중 하나에서 1단계에서 선택한 DNS 이름에 대한 A 레코드(정방향 조회 레코드)를 만듭니다.

    • DNS 레코드는 SQL 엔드포인트가 Kubernetes 클러스터 외부에서 연결을 수신 대기하는 IP 주소를 가리킵니다.
    • A 레코드와 관련하여 PTR(역방향 조회 포인터) 레코드를 만들 필요가 없습니다.
  5. SPN 만들기: SQL이 SQL 엔드포인트에 대해 Active Directory 인증을 수락하려면 이전 단계에서 만든 계정에 두 개의 SPN을 등록해야 합니다. 기본 엔드포인트에 대해 두 개의 SPN을 등록해야 합니다. 보조 엔드포인트에 대한 Active Directory 인증을 원하는 경우 보조 엔드포인트에 대한 SPN도 등록해야 합니다.

    SPN을 만들고 등록하려면 다음을 수행합니다.

    1. 다음 형식을 사용하여 SPN을 만듭니다.

      MSSQLSvc/<DNS name>
      MSSQLSvc/<DNS name>:<port>
      
    2. 도메인 컨트롤러 중 하나에서 다음 명령을 실행하여 SPN을 등록합니다.

      setspn -S MSSQLSvc/<DNS name> <account>
      setspn -S MSSQLSvc/<DNS name>:<port> <account>
      

      명령은 다음 예제와 같이 표시될 수 있습니다.

      setspn -S MSSQLSvc/sqlmi-primary.contoso.local sqlmi-account
      setspn -S MSSQLSvc/sqlmi-primary.contoso.local:31433 sqlmi-account
      
    3. 보조 엔드포인트에서 Active Directory 인증을 원하는 경우 동일한 명령을 실행하여 보조 엔드포인트에 대한 SPN을 추가합니다.

      setspn -S MSSQLSvc/<DNS name> <account>
      setspn -S MSSQLSvc/<DNS name>:<port> <account>
      

      명령은 다음 예제와 같이 표시될 수 있습니다.

      setspn -S MSSQLSvc/sqlmi-secondary.contoso.local sqlmi-account
      setspn -S MSSQLSvc/sqlmi-secondary.contoso.local:31434 sqlmi-account
      
  6. 계정 및 SPN에 대한 항목이 있는 keytab 파일 생성: SQL이 Active Directory에 인증하고 Active Directory 사용자의 인증을 수락할 수 있도록 하려면 Kubernetes 비밀을 사용하여 keytab 파일을 제공합니다.

    • keytab 파일에는 관리되는 인스턴스 및 SPN에 대해 생성된 Active Directory 계정에 대한 암호화된 항목이 포함되어 있습니다.

    • SQL Server는 Active Directory에 대한 자격 증명으로 이 파일을 사용합니다.

    • 여러 도구 중에서 선택하여 keytab 파일을 생성할 수 있습니다.

      • adutil: Linux에 사용 가능( adutil 소개 참조)
      • ktutil: Linux에서 사용 가능
      • ktpass: Windows Update에서 사용 가능
      • 사용자 지정 스크립트

    특히 관리되는 인스턴스용 keytab 파일을 생성하려면 다음을 수행합니다.

    1. 다음 사용자 지정 스크립트 중 하나를 사용합니다.

      스크립트는 여러 매개 변수를 수락하고 keytab이 포함된 Kubernetes 비밀에 대한 keytab 파일 및 YAML 사양 파일을 생성합니다.

    2. 스크립트에서 매개 변수 값을 관리되는 인스턴스 배포에 대한 값으로 바꿉니다.

      입력 매개 변수의 경우 다음 값을 사용합니다.

      • --realm: 대문자로 된 Active Directory 도메인입니다. 예: CONTOSO.LOCAL
      • --account: SPN이 등록된 Active Directory 계정입니다. 예: sqlmi-account
      • --port: 기본 SQL 엔드포인트 포트 번호입니다. 예: 31433
      • --dns-name: 기본 SQL 엔드포인트의 DNS 이름입니다.
      • --keytab-file: keytab 파일의 경로입니다.
      • --secret-name: 사양을 생성할 keytab 비밀의 이름입니다.
      • --secret-namespace: keytab 비밀을 포함하는 Kubernetes 네임스페이스입니다.
      • --secondary-port: 보조 SQL 엔드포인트 포트 번호(선택 사항)입니다. 예: 31434
      • --secondary-dns-name: 보조 SQL 엔드포인트의 DNS 이름(선택 사항)입니다.

      keytab을 호스트하는 Kubernetes 비밀의 이름을 선택합니다. 관리되는 인스턴스가 배포되는 네임스페이스를 사용합니다.

    3. 다음 명령을 실행하여 keytab을 만듭니다.

      AD_PASSWORD=<password> ./create-sql-keytab.sh --realm <Active Directory domain in uppercase> --account <Active Directory account name> --port <endpoint port> --dns-name <endpoint DNS name> --keytab-file <keytab file name/path> --secret-name <keytab secret name> --secret-namespace <keytab secret namespace>
      

      예를 들어, 명령은 다음과 같을 수 있습니다.

      AD_PASSWORD=<password> ./create-sql-keytab.sh --realm CONTOSO.LOCAL --account sqlmi-account --port 31433 --dns-name sqlmi.contoso.local --keytab-file sqlmi.keytab --secret-name sqlmi-keytab-secret --secret-namespace sqlmi-ns
      
    4. 다음 명령을 실행하여 keytab이 올바른지 확인합니다.

      klist -kte <keytab file>
      
  7. keytab에 대한 Kubernetes 비밀 배포: 이전 단계에서 만든 Kubernetes 비밀 사양 파일을 사용하여 비밀을 배포합니다.

    사양 파일은 다음 예제와 유사합니다.

    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: <secret name>
      namespace: <secret namespace>
    data:
      keytab: <keytab content in Base64>
    

    Kubernetes 비밀을 배포하려면 다음 명령을 실행합니다.

    kubectl apply -f <file>
    

    예를 들어 명령은 다음과 같을 수 있습니다.

    kubectl apply -f sqlmi-keytab-secret.yaml
    

Active Directory 인증에 대한 속성 설정

Azure Arc Active Directory 인증을 위한 Azure Arc 지원 SQL Managed Instance를 배포하려면 사용할 Active Directory 커넥터 인스턴스를 참조하도록 배포 사양 파일을 업데이트합니다. SQL 사양 파일에서 Active Directory 커넥터를 참조하면 Active Directory 인증에 대한 SQL이 자동으로 설정됩니다.

고객 관리형 keytab 모드인 SQL에서 Active Directory 인증을 지원하려면 배포 사양 파일에서 다음 속성을 설정합니다. 일부 속성은 필수이고 일부는 선택 사항입니다.

Required

  • spec.security.activeDirectory.connector.name: Active Directory 인증을 위해 조인할 기존 Active Directory 커넥터 사용자 지정 리소스의 이름입니다. 이 속성에 대한 값을 입력하면 Active Directory 인증이 구현됩니다.
  • spec.security.activeDirectory.accountName: 관리되는 인스턴스용 Active Directory 계정의 이름입니다.
  • spec.security.activeDirectory.keytabSecret: 사용자를 위해 미리 만든 keytab 파일을 호스트하는 Kubernetes 비밀의 이름입니다. 이 비밀은 관리되는 인스턴스와 동일한 네임스페이스에 있어야 합니다. 이 매개 변수는 고객 관리형 keytab 모드의 Active Directory 배포에만 필요합니다.
  • spec.services.primary.dnsName: 기본 SQL 엔드포인트의 DNS 이름을 입력합니다.
  • spec.services.primary.port: 기본 SQL 엔드포인트의 포트 번호를 입력합니다.

선택 사항

  • spec.security.activeDirectory.connector.namespace: Active Directory 인증을 위해 조인할 기존 Active Directory 커넥터의 Kubernetes 네임스페이스입니다. 값을 입력하지 않으면 SQL 네임스페이스가 사용됩니다.
  • spec.services.readableSecondaries.dnsName: 보조 SQL 엔드포인트의 DNS 이름을 입력합니다.
  • spec.services.readableSecondaries.port: 보조 SQL 엔드포인트의 포트 번호를 입력합니다.

배포 사양 파일 준비

다음으로, SQL Managed Instance를 배포할 YAML 사양 파일을 준비합니다. 사용하는 모드의 경우 사양 파일에 배포 값을 입력합니다.

참고 항목

두 모드의 사양 파일에서 YAML 예제의 admin-login-secret 값은 기본 인증을 제공합니다. 매개 변수 값을 사용하여 관리되는 인스턴스에 로그인한 다음 Active Directory 사용자 및 그룹에 대한 로그인을 만들 수 있습니다. 자세한 내용은 Active Directory 통합 Azure Arc 지원 SQL Managed Instance에 연결을 참조하세요.

다음 예제에서는 고객 관리형 keytab 모드에 대한 사양 파일을 보여줍니다.

apiVersion: v1
data:
  password: <your Base64-encoded password>
  username: <your Base64-encoded username>
kind: Secret
metadata:
  name: admin-login-secret
type: Opaque
---
apiVersion: sql.arcdata.microsoft.com/v3
kind: SqlManagedInstance
metadata:
  name: <name>
  namespace: <namespace>
spec:
  backup:
    retentionPeriodInDays: 7
  dev: false
  tier: GeneralPurpose
  forceHA: "true"
  licenseType: LicenseIncluded
  replicas: 1
  security:
    adminLoginSecret: admin-login-secret
    activeDirectory:
      connector:
        name: <Active Directory connector name>
        namespace: <Active Directory connector namespace>
      accountName: <Active Directory account name>
      keytabSecret: <keytab secret name>
  services:
    primary:
      type: LoadBalancer
      dnsName: <primary endpoint DNS name>
      port: <primary endpoint port number>
    readableSecondaries:
      type: LoadBalancer
      dnsName: <secondary endpoint DNS name>
      port: <secondary endpoint port number>
  storage:
    data:
      volumes:
      - accessMode: ReadWriteOnce
        className: local-storage
        size: 5Gi
    logs:
      volumes:
      - accessMode: ReadWriteOnce
        className: local-storage
        size: 5Gi

관리되는 인스턴스 설정

고객 관리형 keytab 모드와 시스템 관리형 keytab 모드 모두에 대해 준비된 사양 YAML 파일을 사용하여 관리되는 인스턴스를 배포합니다.

  1. 파일을 저장합니다. 다음 단계의 예제에서는 사양 파일 이름에 sqlmi.yaml을 사용하지만 파일 이름을 선택할 수 있습니다.

  2. 다음 명령을 실행하고 사양을 사용하여 인스턴스를 배포합니다.

    kubectl apply -f <specification file name>
    

    예를 들어, 명령은 다음과 같을 수 있습니다.

    kubectl apply -f sqlmi.yaml