PowerShell Secrets Managementモジュールが開発者向けに公開されました

2020.02.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

しばたです。
以前紹介した新しい認証情報管理のためのMicrosoft.PowerShell.SecretsManagementモジュールがDevelopment Releaseという形で開発者向けに公開されました。

PowerShellの新しい認証情報管理(PowerShell Secrets Management)について

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-SecretGet-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は受け付けるがコードのプルリクエストはまだ受け付けない方針となっています。
コードのプルリクエストはある程度実装が固まった後で受け付けるのでしょう。

情報ストアの追加について

情報ストアの追加方法についてはこちらのブログで説明されており、コニュニティによる開発を期待している様です。

こちらの詳細については私もまだ読み込めていないので、別途記事を書きたいと思います。

最後に

以上となります。
初めてのリリースという事でまだまだ制約は多いですが今後に期待したいモジュールです。

脚注

  1. このモジュールはこれまで何の情報も公開されておらず、PowerShellのリポジトリを追うのが趣味の私も初見です...