PowerShell
type: Concept
definition: オブジェクトパイプラインとエラー処理機構を持つ、Microsoftが最も堅牢で最新のWindows自動化に推奨するコマンドラインシェル兼スクリプト言語。
alternative label: Windows PowerShell
alternative label: pwsh
alternative label: PowerShell 7
uses: PSCredential
uses: SecureString

平文パスワードの埋め込みリスク
type: Concept
definition: パスワードをスクリプトに平文で書くことで、Git履歴・共有フォルダ・ログなどコピーが生まれる経路すべてが漏えい経路になる問題。
alternative label: スクリプトへのパスワード直書き
may cause: ログ・トランスクリプトへの資格情報の漏えい
verified by: PSScriptAnalyzer

PSCredential
type: Concept
definition: ユーザー名とSecureStringのパスワードをひとまとめにした.NET/PowerShellの資格情報オブジェクト。
alternative label: PSCredentialオブジェクト
uses: SecureString

Get-Credential
type: Concept
definition: ユーザー名とパスワードの入力を促し、PSCredentialオブジェクトを返すコマンドレット。
implements: PSCredential
recommended for: 平文パスワードの埋め込みリスク
not recommended for: タスクスケジューラの無人実行

SecureString
type: Concept
definition: 文字列を暗号化して保持する.NETのクラス。暗号化はWindowsでのみ行われ、.NET公式は新規開発での使用を推奨していない。

タスクスケジューラの無人実行
type: Concept
definition: 指定したアカウントで、スケジュールやログオンなどのトリガーに従いプログラムを実行するWindowsの仕組み。ログオン種別(対話トークン・パスワード保存・S4Uなど)の設定によっては、ユーザーがログオンしていなくても実行できる。

Export-Clixml(資格情報ファイル)
type: Concept
definition: 資格情報などのオブジェクトをXMLファイルへ保存するコマンドレット。Windowsでは保存内容がDPAPIで暗号化され、保存したユーザー・マシンでしか復号できない。
alternative label: Import-Clixml
recommended for: 平文パスワードの埋め込みリスク

DPAPI
type: Concept
definition: 実行中のマシン上でアプリの秘密情報を保護するWindowsのデータ保護API。
alternative label: データ保護API

SecretManagementモジュール
type: Concept
definition: 秘密の保管場所(ボールト)への統一インターフェースを提供するPowerShellモジュール。実際の保存は拡張ボールトが担う。
alternative label: Microsoft.PowerShell.SecretManagement
uses: SecretStoreモジュール
recommended for: 平文パスワードの埋め込みリスク

SecretStoreモジュール
type: Concept
definition: ローカルファイルに暗号化保存するMicrosoft製の拡張ボールト。SecretManagementの既定のボールト実装として使われる。
alternative label: Microsoft.PowerShell.SecretStore
incompatible with: gMSA(group Managed Service Account)

Azure Key Vault
type: Concept
definition: 秘密情報を安全に保管できるAzureのシークレット管理サービスで、Power Automateの資格情報の保管先として設定できる。
alternative label: Key Vault
recommended for: 平文パスワードの埋め込みリスク

gMSA(group Managed Service Account)
type: Concept
definition: パスワードの自動生成・自動更新とSPN管理の簡素化を提供するActive Directoryドメインのサービスアカウント。ドメインコントローラー側のKDSルートキーの準備を前提とする。
alternative label: グループ管理サービスアカウント
recommended for: 平文パスワードの埋め込みリスク
requires: Active Directory(AD DS)

Active Directory(AD DS)
type: Concept
definition: オンプレミスのWindowsドメインを構成するディレクトリサービス。
alternative label: AD DS
alternative label: Active Directory Domain Services
alternative label: オンプレAD

マネージドID
type: Concept
definition: Azure上のリソースに割り当てたEntra ID上のIDを使い、資格情報を保存せずにトークンを取得して認証する仕組み。
alternative label: Managed Identity
recommended for: 平文パスワードの埋め込みリスク
requires: Microsoft Entra ID

Microsoft Entra ID
type: Concept
definition: Microsoftのクラウド型ID・アクセス管理基盤。
alternative label: Entra ID
alternative label: Azure AD
alternative label: Azure Active Directory

ログ・トランスクリプトへの資格情報の漏えい
type: Concept
definition: スクリプトブロックログやトランスクリプションが有効な環境で、処理中に扱われた資格情報や機微データがイベントログ・ファイルへそのまま記録されてしまうこと。

スクリプトブロックログ
type: Concept
definition: PowerShellが処理する全スクリプトブロックの内容をイベントログに記録する機能。
alternative label: Script Block Logging

保護されたイベントログ(Protected Event Logging)
type: Concept
definition: 対象のイベントログの内容をCMS(暗号メッセージ構文)の公開鍵で暗号化して書き込み、秘密鍵を持つ場所でだけ復号できるようにする仕組み。
alternative label: Protected Event Logging
mitigates: ログ・トランスクリプトへの資格情報の漏えい

PSScriptAnalyzer
type: Concept
definition: PowerShellスクリプトを静的解析するMicrosoft公式のツール。

subject: PowerShell
predicate: uses
object: PSCredential
description: PowerShellはユーザー名とパスワードをひとまとめにしたPSCredentialオブジェクトで資格情報を受け渡す
evidence: get-credential
verified at: 2026-08-01
certainty: established

subject: Get-Credential
predicate: implements
object: PSCredential
description: Get-Credentialはユーザー名とパスワードの入力を促し、PSCredentialオブジェクトを返す
evidence: get-credential
verified at: 2026-08-01
certainty: established

subject: PSCredential
predicate: uses
object: SecureString
description: PSCredentialはパスワードをSecureStringとして内部に保持し、画面には表示しない
evidence: system.security.securestring
verified at: 2026-08-01
certainty: established

subject: Get-Credential
predicate: recommendedFor
object: 平文パスワードの埋め込みリスク
description: 人がその場で実行するスクリプトでは、Get-Credentialで都度入力させることが平文パスワード埋め込みへの基本対策になる
evidence: get-credential
verified at: 2026-08-01
certainty: established

subject: Get-Credential
predicate: notRecommendedFor
object: タスクスケジューラの無人実行
description: 無人実行のタスクはGet-Credentialで人に聞くわけにいかないため、対話入力に依存する取得方法は使えない
evidence: export-clixml
verified at: 2026-08-01
certainty: established

subject: Export-Clixml(資格情報ファイル)
predicate: uses
object: DPAPI
description: Windows上でExport-Clixmlを実行した場合、資格情報オブジェクトのパスワードはDPAPIで現在のユーザーとマシンに紐づけて暗号化される。LinuxやmacOSのPowerShellにはDPAPIがなく、パスワードはUnicodeの文字配列として書き出されるだけで暗号化されない
evidence: export-clixml
verified at: 2026-08-01
certainty: context-dependent

subject: タスクスケジューラの無人実行
predicate: requires
object: Export-Clixml(資格情報ファイル)
description: タスクスケジューラの無人実行でパスワード入力なしに認証するには、実行アカウント自身が保存したExport-Clixmlの資格情報ファイルを使う構成が最小構成の実用解になる
evidence: export-clixml
verified at: 2026-08-01
certainty: context-dependent

subject: Export-Clixml(資格情報ファイル)
predicate: recommendedFor
object: 平文パスワードの埋め込みリスク
description: 無人実行で秘密が1〜2個の場合、Export-ClixmlによるDPAPI保存が平文埋め込みを避ける最小構成の実用解になる
evidence: export-clixml
verified at: 2026-08-01
certainty: established

subject: SecretManagementモジュール
predicate: uses
object: SecretStoreモジュール
description: SecretManagementはボールトへの統一インターフェースで、ローカル保存にはSecretStoreを拡張ボールトとして使う
evidence: overview
verified at: 2026-08-01
certainty: established

subject: SecretManagementモジュール
predicate: uses
object: Azure Key Vault
description: 拡張ボールトにAzure Key Vaultを選ぶ場合、SecretManagementは保存先をAzure Key Vaultへ差し替えられる
evidence: using-azure-keyvault
verified at: 2026-08-01
certainty: context-dependent

subject: SecretManagementモジュール
predicate: recommendedFor
object: 平文パスワードの埋め込みリスク
description: 秘密が複数あり保存先を将来差し替えたい場合は、Set-Secret/Get-Secretで一元管理するSecretManagement+SecretStoreを使う
evidence: overview
verified at: 2026-08-01
certainty: established

subject: SecretStoreモジュール
predicate: requires
object: Export-Clixml(資格情報ファイル)
description: SecretStoreを無人実行で使うには、ボールトパスワードをExport-ClixmlでDPAPI保護したファイルに退避してUnlock-SecretStoreで解錠する構成が公式に案内されている
evidence: using-secrets-in-automation
verified at: 2026-08-01
certainty: context-dependent

subject: SecretStoreモジュール
predicate: incompatibleWith
object: gMSA(group Managed Service Account)
description: SecretManagementは$env:LOCALAPPDATAとDPAPIに依存しており、プロファイルを持たないgMSAのような管理されたアカウントでは動作しない
evidence: understanding-secretmanagement
verified at: 2026-08-01
certainty: established

subject: gMSA(group Managed Service Account)
predicate: recommendedFor
object: 平文パスワードの埋め込みリスク
description: 実行アカウント自体に接続先の権限を与え、gMSAでパスワード管理をOSに任せることが最優先の現実解になる
evidence: group-managed-service-accounts-overview
verified at: 2026-08-01
certainty: established

subject: gMSA(group Managed Service Account)
predicate: requires
object: Active Directory(AD DS)
description: gMSAはドメインの管理されたアカウントであり、Active Directoryのドメイン機能を前提とする
evidence: manage-group-managed-service-accounts
verified at: 2026-08-01
certainty: established

subject: タスクスケジューラの無人実行
predicate: uses
object: gMSA(group Managed Service Account)
description: gMSAを実行アカウントに選ぶ場合、Windowsサービスだけでなくタスクスケジューラのタスクの実行アカウントにも使える
evidence: manage-group-managed-service-accounts
verified at: 2026-08-01
certainty: context-dependent

subject: マネージドID
predicate: recommendedFor
object: 平文パスワードの埋め込みリスク
description: クラウド資源への接続は、キーの保存よりマネージドIDの利用を優先すべきとされる
evidence: overview
verified at: 2026-08-01
certainty: established

subject: マネージドID
predicate: requires
object: Microsoft Entra ID
description: マネージドIDはEntra ID上のIDを使ってトークンを取得し、資格情報を管理せずに認証する仕組み
evidence: overview
verified at: 2026-08-01
certainty: established

subject: 平文パスワードの埋め込みリスク
predicate: mayCause
object: ログ・トランスクリプトへの資格情報の漏えい
description: スクリプトに平文で書かれたパスワードは、コマンドラインや変数として扱われた時点でスクリプトブロックログやトランスクリプトにそのまま記録されうるため、ログへの資格情報漏えいにつながる
evidence: add-credentials-to-powershell-functions
verified at: 2026-08-01
certainty: established

subject: スクリプトブロックログ
predicate: mayCause
object: ログ・トランスクリプトへの資格情報の漏えい
description: スクリプトブロックログを有効にすると、処理したスクリプトブロックの内容がイベントログに記録され、資格情報などの機微データが含まれうる
evidence: about logging windows
verified at: 2026-08-01
certainty: context-dependent

subject: 保護されたイベントログ(Protected Event Logging)
predicate: mitigates
object: ログ・トランスクリプトへの資格情報の漏えい
description: 保護されたイベントログは、対象のログ内容をCMSの公開鍵で暗号化して書き込み、秘密鍵を持つ安全な場所でだけ復号できるようにする
evidence: about logging windows
verified at: 2026-08-01
certainty: established

subject: 平文パスワードの埋め込みリスク
predicate: verifiedBy
object: PSScriptAnalyzer
description: スクリプト内の平文からConvertTo-SecureStringへ変換する書き方は、PSScriptAnalyzerの静的解析でエラーとして検出できる
evidence: avoidusingconverttosecurestringwithplaintext
verified at: 2026-08-01
certainty: established

subject: PowerShell
predicate: uses
object: SecureString
description: PowerShellはGet-CredentialやSecretManagementなど標準の道具でSecureStringを前提としており、平文文字列で持ち回るよりは露出が減る
evidence: system.security.securestring
verified at: 2026-08-01
certainty: established

subject: Azure Key Vault
predicate: recommendedFor
object: 平文パスワードの埋め込みリスク
description: クラウド資源・複数サーバーで共有する秘密は、マシン局所のDPAPIでは共有できないため、Azure Key Vaultのような専用ボールトに保存する
evidence: using-azure-keyvault
verified at: 2026-08-01
certainty: established