標籤:github cti retrieve virt -name 計算 col blank 執行
前不久給公司搭測試環境,其中涉及到了某組件在容器中使用 kerberos 身分識別驗證串連 SQL Server 資料庫的問題。
Windows 容器本身並不能加入域,但可以通過 gMSA 運行容器使容器進程擁有 gMSA 的身份,這樣一來只需要在 SQL Server 裡添加此 gMSA 的 login 就可以達成目的。注意必須使用 gMSA,普通 MSA 帳號在容器中使用會出問題。
第一次建立 gMSA 帳號前,需要先建立 KDS(Key Distribute Service)根密鑰(如已建立,可忽略此步驟):
Add-KDSRootKey –EffectiveImmediately
然後,你需要等待漫長的 10 個小時,完成密鑰的複製……好吧,如果是做實驗,可以如此省略這 10 個小時:
Add-KdsRootKey –EffectiveTime ((get-date).addhours(-10))
建立 gMSA:
New-ADServiceAccount -Name Service1 -DNSHostName service1.contoso.com -PrincipalsAllowedToRetrieveManagedPassword [ComputerName1$, ComputerName2$...] -KerberosEncryptionType RC4, AES128, AES256
其中 -DNSHostName 只是一個 group 的名字,不需要把它加入到你的 DNS 中。 -PrincipalsAllowedToRetrieveManagedPassword 則是 host 你的容器的伺服器名,注意 AD 上電腦名稱也是一個帳戶,所以後邊要加“$”。
下一步,要在容器的 host 上安裝 gMSA
1 // 安裝 AD 的 PowerShell Module 2 Install-WindowsFeature RSAT-AD-PowerShell 3 4 // 安裝 gMSA 5 Install-ADServiceAccount Service1 6 7 // 測試 8 Test-ADServiceAccount Service1 9 10 // 顯示 “True” 測試通過
接下來,要在容器中使用 gMSA,需要為 docker 建立 CredentialSpec,我們需要 Virtualization-Documentation 中的 CredentialSpec.psm1,它在 Virtualization-Documentation/windows-server-container-tools/ServiceAccounts 中,你可以選擇把整個項目 clone 下來,或者建立名為 CredentialSpec.psm1 的文字檔,然後將檔案內容粘進去。然後,執行以下 PS 命令:
1 Import-Module ./CredentialSpec.psm12 New-CredentialSpec -Name Service1 -AccountName Service1
接下來,可以運行容器了:
docker run -it --security-opt "credentialspec=file://Service1.json" microsoft/windowsservercore nltest /parentdomain
輸出你的 AD 名稱,說明運行成功。
在 Windows 容器中使用 gMSA