senhasegura について
senhasegura(Segura)の特権アクセス管理向け統合スキルです。認証、認証情報・SSH キー API、シークレット配布、関連ワークフローを扱い、Claude Code 用のオプション MCP サーバー連携も記載します。
主な機能
- 01A2A OAuth 2.0 の設定
- 02PAM 認証情報・SSH キー API
- 03CI/CD 向け DSM シークレット
- 04Kubernetes シークレット同期
- 05パスワードローテーションのワークフロー
- 06MCP 連携のリファレンス
活用シーン
- 01OAuth クライアントの設定
- 02CI/CD パイプラインでのシークレット取得
- 03DSM シークレットの Kubernetes 同期
- 04SSH キーの登録やローテーション
MCP 対応
Claude Code 向けのオプション MCP サーバー連携を説明し、関連リファレンスと実装ファイルを案内します。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ julianobarbosa/ claude-code-skills --skill senhaseguraインストール後、Claude Code で/senhaseguraを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
Authentication.mdDsm.mdIntegrations.mdPamApi.mdTroubleshooting.mdReferences/AzurePipelinesExample.yamlDsmConfigExample.yamlExternalSecretExample.yamlGithubActionsExample.yamlGitlabCiExample.yamlMappingExample.jsonMcpIntegration.mdOAuth1Legacy.mdPythonClient.pyPythonSdk.mdSecretStoreExample.yamlTypescriptClient.tsTools/SenhaseguraMcpServer.tsWorkflows/InjectCiCdSecrets.mdRegisterSshKey.mdRotatePasswords.mdSetupA2A.mdSyncKubernetesSecrets.md詳細
Senhasegura
スキルタイプ: ライブラリ/API リファレンス(タイプ 1)+データ取得(タイプ 3)。
senhasegura(Segura)Privileged Access Management プラットフォームの実践的な統合ガイドです。A2A OAuth 2.0 認証、PAM Core の認証情報および SSH キー API、CI/CD 向け DevOps Secret Manager(DSM)、Kubernetes 向け External Secrets Operator、MySafe、オプトイン方式の MCP サーバーについて説明します。
音声通知(呼び出し時)
curl -s -X POST http://localhost:31337/notify \
-H "Content-Type: application/json" \
-d '{"message": "Running the Senhasegura skill"}' \
> /dev/null 2>&1 &
ワークフローの振り分け
| トリガー | ワークフロー |
|---|---|
| 「A2A をセットアップ」「senhasegura アプリケーションを作成」「初回の OAuth クライアント」 | Workflows/SetupA2A.md |
| 「Kubernetes にシークレットを同期」「ESO + senhasegura DSM」 | Workflows/SyncKubernetesSecrets.md |
| 「パスワードをローテーション」「ローテーションをスケジュール」「Executions モジュール」 | Workflows/RotatePasswords.md |
「パイプラインでシークレットを取得」「CI/CD で DSM runb」 | Workflows/InjectCiCdSecrets.md |
| 「SSH キーを登録」「SSH キーのローテーションを管理」 | Workflows/RegisterSshKey.md |
リファレンスの振り分け
| トピック | ファイル |
|---|---|
| OAuth 2.0 フロー、A2A アプリケーションの作成、トークンのキャッシュ | Authentication.md |
| PAM Core エンドポイント — 認証情報、保管、SSH キー | PamApi.md |
| DSM CLI、runb、mapping.json、External Secrets Operator | Dsm.md |
| MySafe、Python/TypeScript クライアント、CI/CD パイプラインのテンプレート | Integrations.md |
| エラー、デバッグモード、レート制限、よくある障害 | Troubleshooting.md |
| MCP サーバー(オプトイン方式の Claude Code 統合) | References/McpIntegration.md + Tools/SenhaseguraMcpServer.ts |
| レガシー OAuth 1.0 リファレンス | References/OAuth1Legacy.md |
| Python SDK リファレンス(PAI 標準は TypeScript+Bun) | References/PythonSdk.md |
注意点
senhasegura の挙動のうち、分かりにくく、ユーザーが問題に遭遇しやすいものをまとめています。新たに判明した項目があれば追加してください。
| # | 注意点 |
|---|---|
| 1 | GET /iso/coe/senha?credentialId=N は認証情報を自動的に保管状態にロックします。 実行後は必ず DELETE /iso/pam/credential/custody/N を実行してください。そうしないと、手動で解除するまで認証情報が保管されたままになります。並行ジョブでは、2 回目の取得時にデッドロックが発生します。 |
| 2 | OAuth 2.0 アクセストークンの TTL は 3600s です。401 のリトライ時ではなく、期限切れの 60 秒前をバッファとしてキャッシュを更新してください。401 のリトライが集中すると IDP に過剰な負荷をかけ、レート制限が発動します。 |
| 3 | /iso/coe/senha はレガシー A2A v1 のパスワード取得経路です。/api/pam/credential/{id} が返すのはメタデータのみです。現在もレガシー経路が使われているため、削除するリファクタリングはしないでください。 |
| 4 | A2A の認可で指定する IP 制限は、senhasegura から見た HTTP の送信元 IPと照合されます。Kubernetes の場合は Pod の IP ではなく、送信 NAT の IP です。クラスターの送信 IP を許可リストに追加してください。ESO の障害は、汎用的な「could not get provider client」エラーとして表面化します。 |
| 5 | DSM runb は、シークレットを現在の作業ディレクトリにある .runb.vars に書き込みます。作業ディレクトリがリポジトリのルートだと、誤ってコミットされるおそれがあります。必ず tmpdir から実行するか、SENHASEGURA_SECRETS_FILE=/tmp/runb.$$.vars を設定してください。 |
| 6 | External Secrets Operator のプロバイダーキーは senhasegura(小文字)、モジュールは DSM(大文字)です。大文字と小文字が混在すると、プロバイダーが見つからなくても通知されず、ESO は明確なエラーを出さずに調整に失敗します。 |
| 7 | dsm runb --tool-name <X> が受け付ける値は github、azure-devops、gitlab、linux です。Linux コンテナー以外(Windows ランナーなど、または環境が未指定の場合)で linux を使用すると、CI ログでシークレット値がマスキングされず、ログに漏えいします。 |
| 8 | References/ 内の Python および TypeScript クライアントは、getPassword を直接呼び出しても保管状態を自動解除しません。 try/finally を使用する withPassword(...)/password_context(...) ヘルパーを使用してください。 |
| 9 | トークンエンドポイントは /iso/oauth2/token です。/api/ ではなく /iso/ であることに注意してください。Senhasegura のパス形式では、/iso/(レガシー/コンソール)と /api/(新しい REST)が一貫せずに混在しています。 |
| 10 | 多くのエンタープライズ環境では内部 CA が使われています。ignoreSslCertificate: true/SENHASEGURA_INSECURE: true を使うのは、ローカルでのデバッグに限ってください。適切な方法は、ca フィールドを使って CA バンドルを ESO にマウントすることです。 |
クイックリファレンス
# 1. Get token (1h TTL)
TOKEN=$(curl -s -X POST "$SENHASEGURA_URL/iso/oauth2/token" \
-d "grant_type=client_credentials" \
-d "client_id=$SENHASEGURA_CLIENT_ID" \
-d "client_secret=$SENHASEGURA_CLIENT_SECRET" | jq -r '.access_token')
# 2. List credentials
curl -H "Authorization: Bearer $TOKEN" "$SENHASEGURA_URL/api/pam/credential"
# 3. Get password (auto-locks custody — see Gotcha #1)
curl -H "Authorization: Bearer $TOKEN" \
"$SENHASEGURA_URL/iso/coe/senha?credentialId=123"
# 4. Release custody (REQUIRED after step 3)
curl -X DELETE -H "Authorization: Bearer $TOKEN" \
"$SENHASEGURA_URL/iso/pam/credential/custody/123"
# 5. DSM secret fetch via CLI
dsm runb --tool-name github \
--application my-app --system production --environment prod
source .runb.vars && rm -f .runb.vars
環境変数
SENHASEGURA_URL="https://senhasegura.example.com"
SENHASEGURA_CLIENT_ID="oauth2-client-id"
SENHASEGURA_CLIENT_SECRET="oauth2-client-secret"
# DSM CLI optionals
SENHASEGURA_CONFIG_FILE="/path/to/config.yaml"
SENHASEGURA_MAPPING_FILE="/path/to/mapping.json"
SENHASEGURA_SECRETS_FILE="/tmp/runb.$$.vars" # don't write into repo root
SENHASEGURA_TIMEOUT="30"
# SENHASEGURA_INSECURE — local debug only; mount the CA bundle in prod
ドキュメントへのリンク
- 公式ドキュメント
- A2A モジュール
- DSM モジュール
- PAM Core API リファレンス
- GitHub の DSM CLI
- External Secrets Operator — senhasegura プロバイダー
実行ログ
ワークフローを実行するたびに追記してください。
echo '{"ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","skill":"Senhasegura","workflow":"WORKFLOW_USED","input":"8_WORD_SUMMARY","status":"ok|error","duration_s":SECONDS}' \
>> ~/.claude/PAI/MEMORY/SKILLS/execution.jsonl
コメント
Markdown 対応