SQL Server on Linux의 keytab 회전

적용 대상:SQL Server - Linux

조직의 보안 모범 사례에 따라 mssql.conf에서 network.privilegedadaccount 제공된 Windows Active Directory 계정 또는 SQL Server 서비스의 SPN(서비스 사용자 이름)을 소유하는 다른 계정에 대해 정기적으로 암호를 회전해야 할 수 있습니다. 계정의 암호를 변경하는 데 지원되는 방법이 이 문서에 설명되어 있습니다. 암호 변경은 Linux에서 SQL Server 서비스를 다시 시작할 필요 없이 적용됩니다.

adutil 도구는 keytab을 업데이트하는 데 사용됩니다. adutil 명령은 도메인 조인 컴퓨터에서 실행해야 합니다. adutil 및 도구 다운로드 방법에 대한 자세한 내용은 adutil - Active Directory 유틸리티 소개를 참조하세요.

Active Directory에서 업데이트하기 전에 keytab의 새 암호를 다음 kvno 번호로 업데이트하는 것이 중요합니다. 다음 kvno 번호를 사용하면 암호 변경 후 SQL Server 서비스를 다시 시작할 필요가 없습니다. 먼저 Active Directory에서 암호를 업데이트한 다음 keytab을 변경하는 경우 ACTIVE Directory 인증이 제대로 작동하도록 SQL Server 서비스를 다시 시작해야 합니다.

keytab 교체 시나리오

예제를 살펴보겠습니다. SQL Server on Linux에 Active Directory 인증이 이미 활성화되어 있습니다. mssql.conf 파일에서 network.privilegedadaccountsqluser로 설정했습니다. 계정이 sqluser@CONTOSO.COM Active Directory에 이미 만들어졌으며 keytab도 기본 위치에 /var/opt/mssql/secrets/mssql.keytab생성되었습니다. 이제 sqluser@CONTOSO.COM의 암호를 변경하려고 합니다. 따라야 하는 단계는 다음과 같습니다.

  1. 도메인에 가입된 컴퓨터에 adutil을 설치합니다.

  2. kinit 명령을 사용하여 Kerberos TGT(Ticket Granting Ticket)를 얻거나 갱신합니다. kinit 명령에 권한 있는 계정을 사용합니다. 이 계정에는 도메인에 연결할 수 있는 권한이 있어야 하며 도메인에 계정 및 SPN을 만들 수 있어야 합니다. 이 경우 CONTOSO.COM이라는 도메인에서 계정 및 SPN을 만들 수 있는 권한이 있는 계정 privilegeduser@CONTOSO.COM을 사용합니다.

    kinit privilegeduser@CONTOSO.COM
    
  3. kinit를 실행하여 TGT를 가져오고 갱신한 후에는 network.privilegedadaccount의 현재 kvno 번호를 쿼리합니다. 이 예제의 경우 sqluser@CONTOSO.COM입니다.

    kvno sqluser@CONTOSO.COM
    

mssql-conf를 사용하여 keytab을 회전하거나 adutil을 사용하여 keytab을 수동으로 회전하도록 선택할 수 있습니다.

mssql-conf를 사용하여 keytab 회전

adutil을 설치하고 mssql-conf통합할 수 있습니다. 즉, mssql-conf를 사용하여 keytab을 회전할 수 있습니다.

  1. 루트 사용자로 로그인하고 사용자로 전환합니다 mssql .

    su mssql
    
  2. kinit 명령을 사용하여 Kerberos TGT(Ticket Granting Ticket)를 얻거나 갱신합니다. kinit 명령에 권한 있는 계정을 사용합니다. 이 계정에는 도메인에 연결할 수 있는 권한이 있어야 하며 도메인에 계정 및 SPN을 만들 수 있어야 합니다. 이 경우 CONTOSO.COM이라는 도메인에서 계정 및 SPN을 만들 수 있는 권한이 있는 계정 privilegeduser@CONTOSO.COM을 사용합니다.

    kinit privilegeduser@CONTOSO.COM
    
  3. mssql-conf 명령을 실행하여 SQL Server keytab 및 network.privilegedadaccount 세부 정보를 제공합니다. 이 예제에서는 다음과 sqluser같습니다privilegedadaccount.

    ./mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser --use-next-kvno'
    

    암호를 입력하라는 메시지가 표시되면 사용하려는 새 암호를 입력합니다. 이 --use-next-kvno 옵션은 현재 kvno + 1을 할당합니다.

    선택 사항: mssql-confsetup-ad-keytab 명령과 함께 옵션을 사용하여 --kvno 특정 kvno를 제공할 수도 있습니다. 먼저 사용자에 대한 현재 kvno 를 가져와야 하며, 그에 따라 새 kvno 를 업데이트해야 합니다. 이는 현재 kvno + 1입니다.

  4. 다음 명령을 사용하여 keytab의 키를 나열할 수 있습니다.

    klist -kte /var/opt/mssql/secrets/mssql.keytab
    

    keytab은 사용자 및 SPN 항목 모두에 대해 다음 kvno 로 업데이트됩니다.

  5. 이제 사용자의 암호를 sqluser 변경할 수 있습니다. 예를 들면 다음과 같습니다.

    Important

    이 단계에서 SQL Server를 다시 시작하라는 메시지가 표시되면 무시할 수 있습니다. Active Directory에서도 암호를 변경해야 합니다.

    bash-4.4$ kinit privilegedaccount@CONTOSO.COM
    Password for privilegedaccount@CONTOSO.COM:
    
    bash-4.4$ ./mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser --use-next-kvno
    sqluser@contoso.com's password:
    Confirm sqluser@contoso.com's password:
    
    SQL Server needs to be restarted in order to adopt the new AD configuration, please run 'systemctl restart mssql-server.service'.
    
    bash-4.4$ klist -kte /var/opt/mssql/secrets/mssql.keytab
    Keytab name: FILE:/var/opt/mssql/secrets/mssql.keytab
    KVNO Timestamp           Principal
    ---- ------------------- ------------------------------------------------------
       4 12/30/2021 14:02:08 sqluser@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       5 12/30/2021 20:06:34 sqluser@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       5 12/30/2021 20:06:34 MSSQLSvc/sql1.contoso.com:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       5 12/30/2021 20:06:34 MSSQLSvc/sql1.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       5 12/30/2021 20:06:34 MSSQLSvc/sql1:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       5 12/30/2021 20:06:34 MSSQLSvc/sql1@CONTOSO.COM (aes256-cts-hmac-sha1-96)
    

adutil을 사용하여 수동으로 keytab 회전

adutil을 사용하여 keytab을 수동으로 업데이트하려면 다음 단계를 참조하세요.

adutil을 사용하여 keytab을 업데이트하면 현재 keytab에 항목이 추가됩니다. 예를 들어 이전 명령의 kvno 번호가 2인 경우 keytab을 업데이트할 때 kvno 번호 3을 사용합니다. 다음은 실행해야 하는 adutil 명령입니다.

  • 환경에 맞게 포트 번호(-p), 호스트 이름(-H), keytab(-k) 경로 및 kvno 번호를 변경합니다.
adutil keytab createauto -k /var/opt/mssql/secrets/mssql.keytab -p 1433 -H mssql.contoso.com --password '<newpassword>' -s MSSQLSvc --kvno 3
adutil keytab create -k /var/opt/mssql/secrets/mssql.keytab -p sqluser --password '<newpassword>' --kvno 3

-k: 는 SQL Server에서 사용 중인 현재 keytab에 대한 경로이며 mssql.conf 파일에서 network.kerberoskeytabfile 옵션을 사용하여 설정됩니다.

-H: 는 SQL Server 호스트의 정규화된 도메인 이름입니다.

-p: 는 첫 번째 명령에서 SQL Server 서비스가 수신하도록 구성된 포트입니다. 두 번째 명령 에서 -p암호를 업데이트하려는 network.privilegedadaccount 를 나타냅니다.

kvno: 값은 현재 kvno + 1이어야 합니다. 현재 kvno 값은 3단계에서 가져온 것입니다.

위의 명령을 실행한 후에는 keytab 항목에 대한 암호화 유형을 선택해야 합니다. 사용자 환경에 적합한 유형을 선택해야 합니다.

keytab 항목 확인

keytab을 업데이트하면 이제 동일한 계정 sqluser@CONTOSO.COM 및 SPN에 대한 kvno 3(신규) 및 kvno 2(기존) keytab의 항목이 표시됩니다. 다음 klist 명령을 실행하여 keytab의 항목을 검사 수 있습니다.

klist -kte /var/opt/mssql/secrets/mssql.keytab

Active Directory에서 계정 암호 변경

마지막 단계는 network.privilegedadaccount 또는 Windows Active Directory에서 SQL Server SPN을 소유하는 계정의 암호를 업데이트하는 것입니다. 이전 시나리오에서는 Active Directory에서 암호를 sqluser@CONTOSO.COM 업데이트해야 합니다. 이전 섹션의 <newpassword> 3단계에서 제공한 암호로 변경합니다. Active Directory 인증은 SQL Server 서비스를 다시 시작할 필요 없이 계속 작동합니다.