다음을 통해 공유


SQL Server on Linux의 keytab 회전

적용 대상: SQL Server - Linux

조직의 보안 모범 사례에 따라 제공된 network.privilegedadaccount mssql.confWindows 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.privilegedadaccount sqluser. 계정이 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. TGT를 가져오거나 갱신하기 위해 실행 kinit 한 후에는 현재 kvno 번호를 쿼리합니다 network.privilegedadaccount. 이 예제의 경우 sqluser@CONTOSO.COM입니다.

    kvno sqluser@CONTOSO.COM
    

mssql-conf를 사용하여 키 탭을 회전하거나 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 세부 정보를 제공합니다. 이 예에서 privilegedadaccountsqluser입니다.

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

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

    선택 사항: 명령과 함께 mssql-conf setup-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에서 사용하고 파일의 옵션을 network.kerberoskeytabfile 사용하여 설정하는 현재 키탭의 mssql.conf 경로입니다.

-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에서 계정 암호 변경

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