gMSA for Windows Container - 觀念

前言

為什麼 gMSA

如何用 gMSA

  • 在 Domain Controller 上建立 Computer Object (可省略)。
  • 在 Server 或 Workstation 上執行加入 AD 流程 (GUI or Cli),此時它就會跟 AD 建立一個 trust relationship。
  • 重開機完成加入 AD domain 流程。

AD 部份

  • 要在 AD domain 啟用 gMSA 的功能。
  • gMSA 在 AD 裡的名稱是 $ 結尾,Microsoft 有提過 gMSA 是從 Computer Object 變形而成的。
  • 在設定資源權限時,物件類型要選 Service Account,例如在設定 MSSQL DB 權限時。
  • Account 的使用權是套用在 Domain Computer 上,所以 Windows node 要 AD domain。
  • 密碼的管理將由 AD domain controller 控制,也就是說當你要 Access MSSQL DB,再也不用換密碼了,
  • 因為 AP 的 connection string 不用放 credential,就不用擔心 password leak 的問題,因為沒有人知道密碼,這相對更安全。
  • 更快速。因為 gMSA 可以授權給 AD group 使用,所以只要你的 domain computer 是這 AD group 一員就可以立即使用,也就是說自動化要規劃好(註一)。
  • 一台 Domain computer 可以用多個的 gMSA。
  • 如果有 Windows node auto scaling 的需求,建議跟 AD admin 申請一個 OU 的 delegation,要有 computer Object creation and removal 權限。

Docker 部份

  • 加入 AD 的 Windows Docker host (VM 以來的習慣稱法)上的 container 都可以透過參數使用 gMSA (註五)。
  • 承上,目前所知無法在 Docker host 上限縮部份的 Docker container 可以或不可以使用 gMSA。

Kubernetes 部份

  • 一個 Kubernetes Cluster 可以用多個 gMSA,但每一台 Windows node 都要被授權使用那些 gMSA。
  • 在 Kubernetes 上,Kubernetes cluster admin 透過 CRD 管理那一個 Namespace 的那一個 Service Account 可以用那一個 gMSA,Windows Pod 宣告要用該 Namespace 下被授權的 Service Account。這邊的關係要清楚,要不然得不到你要的結果(註五)。
  • 宣告用 gMSA 的 Pod 在啟動時會呼叫一個 Kubernetes Cluster 內的 web service,該 Service 會檢查這個 Namespace 裡的這個 Pod 可不可以用宣告的 gMSA。
  • 承上,如果沒權限使用該 gMSA,Cluster 不會允許你的 Pod 長出來。
  • 在 Cluster 內的 gMSA web service,目前的版本是只能運作在 Linux node(註二)。
  • Kubernetes Deployment / Cronjob / DemandSet / Stateful 產生出來的 Pod 都可以使用 gMSA (註三)。
  • 在 2020/12 目前為止,Linux Pod 不能用 gMSA,因為它不是跑在 Windows node 上。未來不知道,也許 Microsoft 又丟出震撼彈。

補充

New-CredentialSpec -AccountName WebApp01

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store