SQL Server on Linux의 keytab 회전
적용 대상: SQL Server - Linux
조직의 보안 모범 사례에 따라 제공된 network.privilegedadaccount
mssql.conf
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.privilegedadaccount
sqluser
. 계정이 sqluser@CONTOSO.COM
Active Directory에 이미 만들어졌으며 keytab도 기본 위치에 /var/opt/mssql/secrets/mssql.keytab
만들어집니다. 이제 sqluser@CONTOSO.COM
의 암호를 변경하려고 합니다. 따라야 하는 단계는 다음과 같습니다.
도메인에 가입된 컴퓨터에 adutil을 설치합니다.
kinit
명령을 사용하여 Kerberos TGT(Ticket Granting Ticket)를 얻거나 갱신합니다.kinit
명령에 권한 있는 계정을 사용합니다. 이 계정에는 도메인에 연결할 수 있는 권한이 있어야 하며 도메인에 계정 및 SPN을 만들 수 있어야 합니다. 이 경우 도메인CONTOSO.COM
에서 계정 및 SPN을 만들 수 있는 권한이 있는 계정을privilegeduser@CONTOSO.COM
사용합니다.kinit privilegeduser@CONTOSO.COM
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을 회전할 수 있습니다.
루트 사용자로 로그인하고
mssql
사용자로 전환합니다.su mssql
kinit
명령을 사용하여 Kerberos TGT(Ticket Granting Ticket)를 얻거나 갱신합니다.kinit
명령에 권한 있는 계정을 사용합니다. 이 계정에는 도메인에 연결할 수 있는 권한이 있어야 하며 도메인에 계정 및 SPN을 만들 수 있어야 합니다. 이 경우 도메인CONTOSO.COM
에서 계정 및 SPN을 만들 수 있는 권한이 있는 계정을privilegeduser@CONTOSO.COM
사용합니다.kinit privilegeduser@CONTOSO.COM
mssql-conf 명령을 실행하여 SQL Server keytab 및
network.privilegedadaccount
세부 정보를 제공합니다. 이 예에서privilegedadaccount
는sqluser
입니다../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입니다.다음 명령을 사용하여 keytab의 키를 나열할 수 있습니다.
klist -kte /var/opt/mssql/secrets/mssql.keytab
keytab은 사용자 및 SPN 항목 모두에 대해 다음 kvno 로 업데이트됩니다.
이제
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 서비스를 다시 시작할 필요 없이 계속 작동합니다.