ByProduct - 副産物

IT FukuSanButsu Blog

社内インフラエンジニアの自宅からはじまるIT
自宅のPCに向き合いながら気づいたことや個人的な知見をまとめています


プロフィール
しらせ(HN)
とあるIT企業のインフラエンジニア。プライベートでは開発もちょっとやります。
※本ブログの内容はすべて個人の見解であり、所属する企業とは関連ありません。
2023/09/30 暫く更新停止中m
プロフィールを読む
カテゴリ別
内部リンク
相互リンク
Twitter
来訪
1068642 [合計]
850 [今日]
491 [昨日]
Powered by
Powered by AWS Cloud Computing

【AD】gMSA(グループ管理サービスアカウント)を使ってみる(後半)

2020/11/14
2021/06/01

ActiveDirectory


お疲れ様です。
しらせです。

前回(【AD】gMSAアカウントを使ってみる(前半))に引き続き今回は実際にグループ管理サービスアカウント(通称gMSA)を使ってみたいと思います。
gMSAについてはMicrosoft社の公式資料も少なく、一部誤解や勘違いが残っている可能性があります。ご了承ください。

もくじ

gMSAの作成

まずは、ドメインコントローラー上でgMSAを作成します。

KdsRootKeyの作成

作成に当たっては、ドメインサービス上にKdsRootkeyが1つ以上作成されている必要があります。
これは、gMSAのパスワードをキー配布サービス(KDS)が管理するためのルートキーになります。

すでにキーがあるかどうかを確認します。
PowerShellを起動して以下のコマンドを実行して結果が返ってくれば、キーは作成済みの状態です。

Get-KdsRootKey

もしもキーが1つも作成されていない場合は以下のコマンドを実行することで作成が可能です。
こちらのコマンドは何回でも実行ができますが、実行する回数だけキーが作成されてしまいます!
調べた限りではgMSAがどのキーに紐づくか確認ができませんので、基本的には1つだけ作成されている状態が良いかもしれません。

Add-KdsRootKey -EffectiveTime ((Get-Date).addhours(-10))

すでにキーがあるにも関わらず新たに作成してしまった場合は以下のように確認コマンドで2つ表示されます。
※あとで手動で消すことも可能です。

キー配布サービス KDS ルート キーの作成 - docs.microsoft.com

gMSAの作成

gMSAの作成ではいくつかオプションが存在しています。
特に注意したいのが以下のオプションです。

  • Name
  • DNSHostName
  • ManagedPasswordIntervalInDays
  • PrincipalsAllowedToRetrieveManagedPassword

NameDNSHostNameは、このgMSAアカウントを指す名前になります。実行先のサーバを指定するものではありません。
ManagedPasswordIntervalInDaysは、KDSにより自動更新されるパスワードの間隔(日)を指定します。後で変更ができません。後で変更したい場合はアカウントの再作成になります。(これは改善してほしい。。)
PrincipalsAllowedToRetrieveManagedPasswordは、gMSAの使用を許可するサーバを指定します。複数指定が可能で後から変更も可能です。
他にもKerberosEncryptionTypeなどの指定も可能ですが、こちらは既定で「RC4、AES128、AES256」が指定されるみたいです。

gMSAの作成はPowerShellから以下のコマンドで実行します。
アカウントの作成が完了するとコマンドの実行後に何も表示されず、プロンプトが返って来るだけの状態になります。

New-ADServiceAccount -Name gmsa_test -DNSHostName gmsa_test -ManagedPasswordIntervalInDays 1 -PrincipalsAllowedToRetrieveManagedPassword server01$,server02$

アカウントの実態は「CN=Managed Service Accounts,DC=domain,DC=local」に作成されます。

サーバでの利用

ドメインコントローラ上でgMSAの作成が完了したら続いてはgMSAを利用するサーバ側で設定を行います。
今回はタスクスケジューラの実行アカウントをgMSAにして、1分毎にサーバに保存されたファイルに文字を追記する処理を実装してみます。

フォルダの用意

gMSAがファイルの読み書きが可能なフォルダを作成します。

今回は以下のようなフォルダを作りました。

C:\gMSA_test

この時、フォルダに対してgMSAが操作に必要な適切な権限を追加する必要があります。
アカウントは「サービスアカウント」になりますので種別を選択しないと出てきません。

スクリプトの用意

スクリプトは簡単に2行だけ。

日付を取得して書き出すだけです。
これをtuiki.ps1として保存します。

$d = (date).tostring()
echo $d >> C:\gMSA_test\tsuiki.txt

タスクスケジューラの登録

タスクスケジューラへの登録方法はいくつかありますが、調べた結果以下のようなやり方がよさそうです。
適宜中身を修正しながら4つのコマンドを全て実行するとタスクスケジューラへの登録までができます。

# 1.プリンシパルのオブジェクト作成
$User = New-ScheduledTaskPrincipal -UserId "test\gmsa_test$" -LogonType Password

# 2.タスクスケジューラのアクション作成、powershellの実行とその引数の指定
$Act = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "C:\gMSA_test\tsuiki.ps1"

# 3.トリガーの指定、1分間隔
$Time = New-ScheduledTaskTrigger -Once -At 0am -RepetitionInterval (New-TimeSpan -Minutes 1)

# 4.タスクスケジューラの登録
Register-ScheduledTask Service -TaskName "test4" -Action $Act -Trigger $Time -Principal $User

登録が正常に終わると登録した内容が表示されます。
タスクスケジューラを確認すると確かにタスクが追加されました。

実行アカウントは「gmsa_test$」となっていますね。
実際にファイルへ追記も開始されています。

その他のコマンドや情報

gMSAの運用として必要そうなPowerShellコマンドや情報を以下にまとめてみました。

コマンド

(確認コマンド)gMSAが実行可能なサーバの確認:ドメインコントローラ上

Get-ADServiceAccount -Identity gmsa_test -Properties * | select PrincipalsAllowedToRetrieveManagedPassword | %{$_.PrincipalsAllowedToRetrieveManagedPassword}

(確認コマンド)gMSAがサーバで利用可能かを確認:サーバ側

Test-ADServiceAccount gmsa_test

(削除コマンド)gMSAをドメインから削除する:ドメインコントローラ上
※ActiveDirectoryユーザーとコンピューターからも削除できます。

remove-ADServiceAccount -Identity gmsa_test

参考になった情報

◆Group Managed Service Accounts on Windows Server 2012 - spanougakis.wordpress.com
https://spanougakis.wordpress.com/2013/10/16/group-managed-service-accounts-on-windows-server-2012/

◆Windows Server 2012以降の“グループの”管理されたサービスアカウント(gMSAs)について - yamanxworld.blogspot.com
https://yamanxworld.blogspot.com/2013/10/windows-server-2012gmsas.html

◆Powershellでタスクスケジューラ登録 - qiita.com
https://qiita.com/kotetsu75/items/cdaab1776444ab3303b0

◆グループ管理サービスアカウント - azuread.net
https://azuread.net/2013/09/12/%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E7%AE%A1%E7%90%86%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88/

◆AWS Managed Microsoft ADでグループ管理サービスアカウント(gMSA)を作成する - dev.classmethod.jp
https://dev.classmethod.jp/articles/how-to-create-gmsa-on-microsoft-ad/

◆スケジュールされたタスクにグループ管理サービスアカウント(gMSA)を使用する - www.it-swarm-ja.tech
https://www.it-swarm-ja.tech/ja/security/%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%95%E3%82%8C%E3%81%9F%E3%82%BF%E3%82%B9%E3%82%AF%E3%81%AB%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E7%AE%A1%E7%90%86%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%EF%BC%88gmsa%EF%BC%89%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B/960190012/

◆gMSA ベースのサービスは、Windows Server 2012 R2 のドメインでパスワードを変更した後ログインできません。 - support.microsoft.com
https://support.microsoft.com/ja-jp/help/2998082/gmsa-based-services-can-t-log-on-after-a-password-change-in-a-windows
※昔gMSAがリリースされた当時にめちゃくちゃ悩まされたバグがいつのまにか修正されていました(笑)

以上
おつかれさまでした。



View:6889 この記事をツイート!