PowerShell Secrets Managementモジュールが開発者向けに公開されました
しばたです。
以前紹介した新しい認証情報管理のためのMicrosoft.PowerShell.SecretsManagement
モジュールがDevelopment Releaseという形で開発者向けに公開されました。
PowerShell Teamからのアナウンスは以下となります。
本記事ではこのモジュールを実際に試してみました。
試してみた
細かい説明は後にして最初に動作を試してみます。
私が普段使っている開発機(Windows 10 November 2019 Update(1909) + PowerShell Core 6.2.4)が検証環境です。
モジュールのインストール
Microsoft.PowerShell.SecretsManagement
モジュールはPowerShell Galleryからインストールできます。
モジュールのバージョン付けとしてはVer.0.1.0-alphaとアルファ版の扱いとなっているため-AllowPrerelease
パラメーターを付けてインストールする必要があります。
Install-Module -Name Microsoft.PowerShell.SecretsManagement -AllowPrerelease
Windows PowerShellで試す場合で、環境によってはPowerShellGetのバージョンが古く-AllowPrerelease
パラメーターを使えない場合があるかもしれません。
この場合は先にPowerShellGetのバージョンを上げてください。
コマンドレットの一覧
現時点では以下の7つのコマンドレットが公開されています。
こちらは前の記事から変わりなく、Register-SecretsVault
で各種情報ストアを登録し、Add-Secret
やGet-Secret
コマンドレットでシークレット情報を取り扱います。
C:\> Get-Command -Module Microsoft.PowerShell.SecretsManagement
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Add-Secret 0.1.0 Microsoft.PowerShell.SecretsManagement
Cmdlet Get-Secret 0.1.0 Microsoft.PowerShell.SecretsManagement
Cmdlet Get-SecretInfo 0.1.0 Microsoft.PowerShell.SecretsManagement
Cmdlet Get-SecretsVault 0.1.0 Microsoft.PowerShell.SecretsManagement
Cmdlet Register-SecretsVault 0.1.0 Microsoft.PowerShell.SecretsManagement
Cmdlet Remove-Secret 0.1.0 Microsoft.PowerShell.SecretsManagement
Cmdlet Unregister-SecretsVault 0.1.0 Microsoft.PowerShell.SecretsManagement
情報ストアについて
Get-SecretsVault
を実行してみると初期状態ではローカルマシンの情報ストア(Windowsの資格情報マネージャーを使うもの)のみ存在していました。
ドキュメントを読む限り現時点でもAzure Key Vaultが使える様ですが本記事では追加の情報ストアは使わず進めていきます。
# 初期状態では BuiltInLocalVault (ローカルマシン) のみ存在
C:\> Get-SecretsVault
Name ModuleName ImplementingType
---- ---------- ----------------
BuiltInLocalVault
シークレットを取り扱う
Add-Secret
コマンドレットで新規のシークレットが登録できます。
# シークレットの登録は Add-Secret で行う
Add-Secret -Name 'MySecret' -Secret 'Hello Secret!'
登録したシークレットはGet-Secret
で取得できます。
戻り値は平文ではなくSystem.Security.SecureString
型で返されますので、平文が欲しい場合は-AsPlainText
パラメーターを付けてやります。
# シークレットの取得は Get-Secret で行う
Get-Secret -Name 'MySecret'
# 平文の結果が欲しい場合は -AsPlainText パラメーターを使う
Get-Secret -Name 'MySecret' -AsPlainText
シークレットの一覧が欲しい場合はGet-SecretInfo
コマンドレットを使います。
Get-SecretInfo
シークレットの保存先について
先述の通りローカルマシンの情報ストアはWindowsの資格情報マネージャーを使うのでコントロールパネルからも登録したシークレットを確認することができます。
__PS_[シークレット名]
となっている汎用資格情報がこのモジュールで登録されたシークレットの実体となります。
現時点での制約について
ざっとこんな感じですが、まだ正式リリースではないため幾つかの制約があります。
正式リリース時期について
最初に紹介した通りこのリリースは開発者向けのDevelopment Releaseという形でありモジュールもアルファバージョンです。
まだ機能も確定しておらず破壊的変更も入りうる状態なため本番環境での利用は非推奨となっています。
先述のPowerShell Teamからのアナウンスによれば今年の晩春から初夏ごろにGAさせたい見込みだそうです。
対応プラットフォーム
このモジュールは現時点ではWindows環境でのみ利用可能です。
PowerShell Coreだけでなく、PowerShell 5.1であればWindows PowerShellでも利用可能です。
Windows以外のプラットフォームについてはローカルの情報ストアにどの様な機能やツールを使うか決めかねている様です。
(後述のブログ記事ではLinuxでGNOME Keyringの使用について言及されていますが確定はしていません)
ソースコード・フィードバックについて
このモジュールのソースコードはModulesというリポジトリで管理されています。
このリポジトリではMicrosoft.PowerShell.SecretsManagement
以外にPowerShell Remoting over SSHの設定を補助するためのMicrosoft.PowerShell.RemotingTools
モジュールと幾つかのテキスト処理をまとめたMicrosoft.PowerShell.TextUtility
モジュール[1]が管理されています。
リポジトリのREADMEにもありますが、Issueは受け付けるがコードのプルリクエストはまだ受け付けない方針となっています。
コードのプルリクエストはある程度実装が固まった後で受け付けるのでしょう。
情報ストアの追加について
情報ストアの追加方法についてはこちらのブログで説明されており、コニュニティによる開発を期待している様です。
こちらの詳細については私もまだ読み込めていないので、別途記事を書きたいと思います。
最後に
以上となります。
初めてのリリースという事でまだまだ制約は多いですが今後に期待したいモジュールです。
このモジュールはこれまで何の情報も公開されておらず、PowerShellのリポジトリを追うのが趣味の私も初見です... ↩︎