@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/powershell-credential-secretmanagement/#article>
    schema:about <https://comcomponent.com/knowledge/powershell/>, <https://comcomponent.com/knowledge/plaintext-credential-risk/> ;
    schema:mentions <https://comcomponent.com/knowledge/securestring/>, <https://comcomponent.com/knowledge/pscredential/>, <https://comcomponent.com/knowledge/get-credential/>, <https://comcomponent.com/knowledge/export-clixml/>, <https://comcomponent.com/knowledge/dpapi/>, <https://comcomponent.com/knowledge/secretmanagement/>, <https://comcomponent.com/knowledge/secretstore/>, <https://comcomponent.com/knowledge/azure-key-vault/>, <https://comcomponent.com/knowledge/gmsa/>, <https://comcomponent.com/knowledge/managed-identity/>, <https://comcomponent.com/knowledge/entra-id/>, <https://comcomponent.com/knowledge/script-block-logging/>, <https://comcomponent.com/knowledge/protected-event-logging/>, <https://comcomponent.com/knowledge/psscriptanalyzer/>, <https://comcomponent.com/knowledge/active-directory/>, <https://comcomponent.com/knowledge/task-scheduler/>, <https://comcomponent.com/knowledge/log-credential-exposure/> .

<https://comcomponent.com/knowledge/powershell/> a skos:Concept ;
    skos:prefLabel "PowerShell"@ja ;
    skos:definition "オブジェクトパイプラインとエラー処理機構を持つ、Microsoftが最も堅牢で最新のWindows自動化に推奨するコマンドラインシェル兼スクリプト言語。"@ja ;
    skos:altLabel "Windows PowerShell" ;
    skos:altLabel "pwsh" ;
    skos:altLabel "PowerShell 7" ;
    ks:uses <https://comcomponent.com/knowledge/pscredential/> ;
    ks:uses <https://comcomponent.com/knowledge/securestring/> .

<https://comcomponent.com/knowledge/plaintext-credential-risk/> a skos:Concept ;
    skos:prefLabel "平文パスワードの埋め込みリスク"@ja ;
    skos:definition "パスワードをスクリプトに平文で書くことで、Git履歴・共有フォルダ・ログなどコピーが生まれる経路すべてが漏えい経路になる問題。"@ja ;
    skos:altLabel "スクリプトへのパスワード直書き"@ja ;
    ks:mayCause <https://comcomponent.com/knowledge/log-credential-exposure/> ;
    ks:verifiedBy <https://comcomponent.com/knowledge/psscriptanalyzer/> .

<https://comcomponent.com/knowledge/pscredential/> a skos:Concept ;
    skos:prefLabel "PSCredential"@ja ;
    skos:definition "ユーザー名とSecureStringのパスワードをひとまとめにした.NET/PowerShellの資格情報オブジェクト。"@ja ;
    skos:altLabel "PSCredentialオブジェクト"@ja ;
    ks:uses <https://comcomponent.com/knowledge/securestring/> .

<https://comcomponent.com/knowledge/get-credential/> a skos:Concept ;
    skos:prefLabel "Get-Credential"@ja ;
    skos:definition "ユーザー名とパスワードの入力を促し、PSCredentialオブジェクトを返すコマンドレット。"@ja ;
    ks:implements <https://comcomponent.com/knowledge/pscredential/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/plaintext-credential-risk/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/task-scheduler/> .

<https://comcomponent.com/knowledge/securestring/> a skos:Concept ;
    skos:prefLabel "SecureString"@ja ;
    skos:definition "文字列を暗号化して保持する.NETのクラス。暗号化はWindowsでのみ行われ、.NET公式は新規開発での使用を推奨していない。"@ja .

<https://comcomponent.com/knowledge/task-scheduler/> a skos:Concept ;
    skos:prefLabel "タスクスケジューラの無人実行"@ja ;
    skos:definition "指定したアカウントで、スケジュールやログオンなどのトリガーに従いプログラムを実行するWindowsの仕組み。ログオン種別(対話トークン・パスワード保存・S4Uなど)の設定によっては、ユーザーがログオンしていなくても実行できる。"@ja .

<https://comcomponent.com/knowledge/export-clixml/> a skos:Concept ;
    skos:prefLabel "Export-Clixml(資格情報ファイル)"@ja ;
    skos:definition "資格情報などのオブジェクトをXMLファイルへ保存するコマンドレット。Windowsでは保存内容がDPAPIで暗号化され、保存したユーザー・マシンでしか復号できない。"@ja ;
    skos:altLabel "Import-Clixml" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/plaintext-credential-risk/> .

<https://comcomponent.com/knowledge/dpapi/> a skos:Concept ;
    skos:prefLabel "DPAPI"@ja ;
    skos:definition "実行中のマシン上でアプリの秘密情報を保護するWindowsのデータ保護API。"@ja ;
    skos:altLabel "データ保護API"@ja .

<https://comcomponent.com/knowledge/secretmanagement/> a skos:Concept ;
    skos:prefLabel "SecretManagementモジュール"@ja ;
    skos:definition "秘密の保管場所(ボールト)への統一インターフェースを提供するPowerShellモジュール。実際の保存は拡張ボールトが担う。"@ja ;
    skos:altLabel "Microsoft.PowerShell.SecretManagement" ;
    ks:uses <https://comcomponent.com/knowledge/secretstore/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/plaintext-credential-risk/> .

<https://comcomponent.com/knowledge/secretstore/> a skos:Concept ;
    skos:prefLabel "SecretStoreモジュール"@ja ;
    skos:definition "ローカルファイルに暗号化保存するMicrosoft製の拡張ボールト。SecretManagementの既定のボールト実装として使われる。"@ja ;
    skos:altLabel "Microsoft.PowerShell.SecretStore" ;
    ks:incompatibleWith <https://comcomponent.com/knowledge/gmsa/> .

<https://comcomponent.com/knowledge/azure-key-vault/> a skos:Concept ;
    skos:prefLabel "Azure Key Vault"@ja ;
    skos:definition "秘密情報を安全に保管できるAzureのシークレット管理サービスで、Power Automateの資格情報の保管先として設定できる。"@ja ;
    skos:altLabel "Key Vault" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/plaintext-credential-risk/> .

<https://comcomponent.com/knowledge/gmsa/> a skos:Concept ;
    skos:prefLabel "gMSA(group Managed Service Account)"@ja ;
    skos:definition "パスワードの自動生成・自動更新とSPN管理の簡素化を提供するActive Directoryドメインのサービスアカウント。ドメインコントローラー側のKDSルートキーの準備を前提とする。"@ja ;
    skos:altLabel "グループ管理サービスアカウント"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/plaintext-credential-risk/> ;
    ks:requires <https://comcomponent.com/knowledge/active-directory/> .

<https://comcomponent.com/knowledge/active-directory/> a skos:Concept ;
    skos:prefLabel "Active Directory(AD DS)"@ja ;
    skos:definition "オンプレミスのWindowsドメインを構成するディレクトリサービス。"@ja ;
    skos:altLabel "AD DS" ;
    skos:altLabel "Active Directory Domain Services" ;
    skos:altLabel "オンプレAD"@ja .

<https://comcomponent.com/knowledge/managed-identity/> a skos:Concept ;
    skos:prefLabel "マネージドID"@ja ;
    skos:definition "Azure上のリソースに割り当てたEntra ID上のIDを使い、資格情報を保存せずにトークンを取得して認証する仕組み。"@ja ;
    skos:altLabel "Managed Identity" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/plaintext-credential-risk/> ;
    ks:requires <https://comcomponent.com/knowledge/entra-id/> .

<https://comcomponent.com/knowledge/entra-id/> a skos:Concept ;
    skos:prefLabel "Microsoft Entra ID"@ja ;
    skos:definition "Microsoftのクラウド型ID・アクセス管理基盤。"@ja ;
    skos:altLabel "Entra ID" ;
    skos:altLabel "Azure AD" ;
    skos:altLabel "Azure Active Directory" .

<https://comcomponent.com/knowledge/log-credential-exposure/> a skos:Concept ;
    skos:prefLabel "ログ・トランスクリプトへの資格情報の漏えい"@ja ;
    skos:definition "スクリプトブロックログやトランスクリプションが有効な環境で、処理中に扱われた資格情報や機微データがイベントログ・ファイルへそのまま記録されてしまうこと。"@ja .

<https://comcomponent.com/knowledge/script-block-logging/> a skos:Concept ;
    skos:prefLabel "スクリプトブロックログ"@ja ;
    skos:definition "PowerShellが処理する全スクリプトブロックの内容をイベントログに記録する機能。"@ja ;
    skos:altLabel "Script Block Logging" .

<https://comcomponent.com/knowledge/protected-event-logging/> a skos:Concept ;
    skos:prefLabel "保護されたイベントログ(Protected Event Logging)"@ja ;
    skos:definition "対象のイベントログの内容をCMS(暗号メッセージ構文)の公開鍵で暗号化して書き込み、秘密鍵を持つ場所でだけ復号できるようにする仕組み。"@ja ;
    skos:altLabel "Protected Event Logging" ;
    ks:mitigates <https://comcomponent.com/knowledge/log-credential-exposure/> .

<https://comcomponent.com/knowledge/psscriptanalyzer/> a skos:Concept ;
    skos:prefLabel "PSScriptAnalyzer"@ja ;
    skos:definition "PowerShellスクリプトを静的解析するMicrosoft公式のツール。"@ja .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/pscredential/> ;
    schema:description "PowerShellはユーザー名とパスワードをひとまとめにしたPSCredentialオブジェクトで資格情報を受け渡す"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.security/get-credential> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/get-credential/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/pscredential/> ;
    schema:description "Get-Credentialはユーザー名とパスワードの入力を促し、PSCredentialオブジェクトを返す"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.security/get-credential> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/pscredential/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/securestring/> ;
    schema:description "PSCredentialはパスワードをSecureStringとして内部に保持し、画面には表示しない"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.security.securestring> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/get-credential/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/plaintext-credential-risk/> ;
    schema:description "人がその場で実行するスクリプトでは、Get-Credentialで都度入力させることが平文パスワード埋め込みへの基本対策になる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.security/get-credential> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/get-credential/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/task-scheduler/> ;
    schema:description "無人実行のタスクはGet-Credentialで人に聞くわけにいかないため、対話入力に依存する取得方法は使えない"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/export-clixml> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/export-clixml/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/dpapi/> ;
    schema:description "Windows上でExport-Clixmlを実行した場合、資格情報オブジェクトのパスワードはDPAPIで現在のユーザーとマシンに紐づけて暗号化される。LinuxやmacOSのPowerShellにはDPAPIがなく、パスワードはUnicodeの文字配列として書き出されるだけで暗号化されない"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/export-clixml> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/task-scheduler/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/export-clixml/> ;
    schema:description "タスクスケジューラの無人実行でパスワード入力なしに認証するには、実行アカウント自身が保存したExport-Clixmlの資格情報ファイルを使う構成が最小構成の実用解になる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/export-clixml> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/export-clixml/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/plaintext-credential-risk/> ;
    schema:description "無人実行で秘密が1〜2個の場合、Export-ClixmlによるDPAPI保存が平文埋め込みを避ける最小構成の実用解になる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/export-clixml> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/secretmanagement/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/secretstore/> ;
    schema:description "SecretManagementはボールトへの統一インターフェースで、ローカル保存にはSecretStoreを拡張ボールトとして使う"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/secretmanagement/overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/secretmanagement/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/azure-key-vault/> ;
    schema:description "拡張ボールトにAzure Key Vaultを選ぶ場合、SecretManagementは保存先をAzure Key Vaultへ差し替えられる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/secretmanagement/how-to/using-azure-keyvault> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/secretmanagement/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/plaintext-credential-risk/> ;
    schema:description "秘密が複数あり保存先を将来差し替えたい場合は、Set-Secret/Get-Secretで一元管理するSecretManagement+SecretStoreを使う"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/secretmanagement/overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/secretstore/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/export-clixml/> ;
    schema:description "SecretStoreを無人実行で使うには、ボールトパスワードをExport-ClixmlでDPAPI保護したファイルに退避してUnlock-SecretStoreで解錠する構成が公式に案内されている"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/secretmanagement/how-to/using-secrets-in-automation> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/secretstore/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/gmsa/> ;
    schema:description "SecretManagementは$env:LOCALAPPDATAとDPAPIに依存しており、プロファイルを持たないgMSAのような管理されたアカウントでは動作しない"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/secretmanagement/get-started/understanding-secretmanagement> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/gmsa/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/plaintext-credential-risk/> ;
    schema:description "実行アカウント自体に接続先の権限を与え、gMSAでパスワード管理をOSに任せることが最優先の現実解になる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-server/identity/ad-ds/manage/group-managed-service-accounts/group-managed-service-accounts/group-managed-service-accounts-overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/gmsa/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/active-directory/> ;
    schema:description "gMSAはドメインの管理されたアカウントであり、Active Directoryのドメイン機能を前提とする"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-server/identity/ad-ds/manage/group-managed-service-accounts/group-managed-service-accounts/manage-group-managed-service-accounts> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/task-scheduler/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/gmsa/> ;
    schema:description "gMSAを実行アカウントに選ぶ場合、Windowsサービスだけでなくタスクスケジューラのタスクの実行アカウントにも使える"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-server/identity/ad-ds/manage/group-managed-service-accounts/group-managed-service-accounts/manage-group-managed-service-accounts> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/managed-identity/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/plaintext-credential-risk/> ;
    schema:description "クラウド資源への接続は、キーの保存よりマネージドIDの利用を優先すべきとされる"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/identity/managed-identities-azure-resources/overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/managed-identity/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/entra-id/> ;
    schema:description "マネージドIDはEntra ID上のIDを使ってトークンを取得し、資格情報を管理せずに認証する仕組み"@ja ;
    ks:evidence <https://learn.microsoft.com/entra/identity/managed-identities-azure-resources/overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/plaintext-credential-risk/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/log-credential-exposure/> ;
    schema:description "スクリプトに平文で書かれたパスワードは、コマンドラインや変数として扱われた時点でスクリプトブロックログやトランスクリプトにそのまま記録されうるため、ログへの資格情報漏えいにつながる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/scripting/learn/deep-dives/add-credentials-to-powershell-functions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/script-block-logging/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/log-credential-exposure/> ;
    schema:description "スクリプトブロックログを有効にすると、処理したスクリプトブロックの内容がイベントログに記録され、資格情報などの機微データが含まれうる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_logging_windows> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/protected-event-logging/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/log-credential-exposure/> ;
    schema:description "保護されたイベントログは、対象のログ内容をCMSの公開鍵で暗号化して書き込み、秘密鍵を持つ安全な場所でだけ復号できるようにする"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_logging_windows> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/plaintext-credential-risk/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/psscriptanalyzer/> ;
    schema:description "スクリプト内の平文からConvertTo-SecureStringへ変換する書き方は、PSScriptAnalyzerの静的解析でエラーとして検出できる"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/psscriptanalyzer/rules/avoidusingconverttosecurestringwithplaintext> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/powershell/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/securestring/> ;
    schema:description "PowerShellはGet-CredentialやSecretManagementなど標準の道具でSecureStringを前提としており、平文文字列で持ち回るよりは露出が減る"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.security.securestring> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/azure-key-vault/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/plaintext-credential-risk/> ;
    schema:description "クラウド資源・複数サーバーで共有する秘密は、マシン局所のDPAPIでは共有できないため、Azure Key Vaultのような専用ボールトに保存する"@ja ;
    ks:evidence <https://learn.microsoft.com/powershell/utility-modules/secretmanagement/how-to/using-azure-keyvault> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
