mcpField
D
dv-security

dv-security

github.com/microsoftセキュリティ248210 回インストール今日更新
リポジトリ

dv-security について

dv-security は、Dataverse 環境のセキュリティロールを管理するスキルで、ロール割り当てや自身の権限昇格を行う管理者向けです。変更前の内容提示と確認を求め、Dataverse CLI で割り当ての反映を検証します。

主な機能

  1. 01ユーザーへのセキュリティロール割り当て
  2. 02環境をまたいだ一括割り当て
  3. 03ロール割り当て結果の検証
  4. 04手順に沿った自己昇格
  5. 05Microsoft Purview への昇格監査記録

活用シーン

  1. 01環境内でユーザーにロールを付与
  2. 02複数環境に同じロールを割り当て
  3. 03割り当ての成功を確認
  4. 04割り当て失敗後に自己昇格を申請

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/microsoft/dataverse-skills --skill dv-security

インストール後、Claude Code で/dv-securityを入力して読み込まれたか確認します。

詳細

スキル:セキュリティ — ロールの割り当てと自己昇格

このスキルでは、ロールの変更にファーストパーティ CLI の PAC CLI を使用し、Dataverse CLI で確認します。 ロール操作に Python スクリプトを書かないでください。

実行前にプレビューする

ロールの付与と自己昇格は破壊的な操作です(セキュリティ態勢を変更し、Purview に記録されます)。実行前に、対象ユーザー、ロール、環境を平易な文章でプレビューしてください。不明な値にはプレースホルダー(<ENV_URL>、<USER_EMAIL>)を使用し、同じターンで確認と不足している値の提示を求めてください。pac admin のコードブロックは表示しないでください。セキュリティ変更を承認するために、ユーザーが CLI の構文を読む必要はありません。

重要な原則: 最初の応答を読めば、これから行われる操作をユーザーが判断できるようにしてください。「どの環境ですか?」だけでは不十分です。1 行の平易な文章でプレビューすれば、この要件を満たせます。

例

ロールの割り当て(ユーザー指定済み、環境未指定):

  • ❌「対象の環境を指定してください。」
  • ✅「[email protected] に <ENV_URL> の System Administrator を割り当てます。続行するには確認し、対象環境の URL(または一覧表示して一括処理する場合は all)を指定してください。」

すべての環境での管理者アクセス:

  • ❌「メールアドレスを指定してください。」
  • ✅「環境の一覧を取得し、<YOUR_UPN> に各環境で System Administrator を並列で割り当てます。いずれかの環境で assign-user が失敗した場合は、その環境について自己昇格に切り替えます(Purview に記録されます)。続行するには確認し、UPN を指定してください。」

スキルの対象範囲

必要な操作代わりに使用
テーブル、列、リレーションシップの作成または変更dv-metadata
組織の設定、監査、一括削除、保持の管理dv-admin
レコードのクエリまたは読み取りdv-query
レコードの書き込み、更新、削除dv-data
テナントレベルのガバナンス(DLP、環境のライフサイクル)pac admin --help

前提条件

  • PAC CLI がインストールされ、認証済みであること(pac auth create)
  • 対象環境で System Administrator ロールを持っていること(自己昇格の場合は Global/PP/D365 Admin)
  • 有効な認証プロファイルがあること:pac auth list
  • ヘッドレス/送信先制限ホスト:SDK はロール/ユーザー/ビジネスユニットの操作を処理します。PAC のみの操作にはサービスプリンシパルを使用してください。python scripts/auth.py --check で送信先への接続を確認します。詳しくは dv-connect/references/headless-hosts.md を参照してください。

ユーザーにセキュリティロールを割り当てる

pac admin assign-user --user <email-or-object-id> --role "System Administrator" --environment <url>
引数
引数エイリアス必須説明
--user-uはいユーザーのメールアドレス(UPN)または Azure AD オブジェクト ID
--role-rはいセキュリティロール名(例:System Administrator、Basic User)
--environment-envはい対象環境の URL または ID
--application-user-auいいえユーザーをアプリケーションユーザー(サービスプリンシパル)として扱います
--business-unit-buいいえビジネスユニット ID。既定では呼び出し元のビジネスユニットが使用されます

割り当てを確認する — 終了コード 0 は成功の証明ではありません

pac admin assign-user は、失敗した場合でも終了コード 0 を返します(環境を解決できない、ロール名が誤っている、ユーザーが不明など)。終了コードが正常だからといって、成功したと判断しないでください。

  1. 終了コードだけでなく、出力を確認してください。 失敗しても終了コードは 0 ですが、エラー(environment ... not found、role ... does not exist)が出力されます。出力にエラーが含まれている場合は停止してください。
  2. 使用した --environment と完全に一致する値で確認してください。再解決したり短縮したりしないでください。別の ID を指定すると、誤った組織で気付かないまま「成功」します。Dataverse CLI の読み取りでユーザーのロールをクエリします。
# Resolve the user's systemuserid, then list their assigned roles.
# --context carries plugin/skill/agent attribution on the managed CLI call.
dataverse api request --target dataverse --method GET \
  --path "/api/data/v9.2/systemusers?%24select=systemuserid&%24filter=internalemailaddress eq '[email protected]'" \
  --environment <same-url-as-assign> \
  --context "app=dataverse-skills/<ver>;skill=dv-security;agent=<agent>"
dataverse api request --target dataverse --method GET \
  --path "/api/data/v9.2/systemusers(<systemuserid>)/systemuserroles_association?%24select=name" \
  --environment <same-url-as-assign> \
  --context "app=dataverse-skills/<ver>;skill=dv-security;agent=<agent>"

最初のクエリで行が返されない場合、サインイン ID は internalemailaddress(Primary Email)ではなく domainname(AAD UPN)に存在する可能性があります。%24filter=domainname eq '<upn>' を使って再試行してください。オブジェクト ID を指定して割り当てた場合は、azureactivedirectoryobjectid eq '<objectid>' で再試行してください。行が見つからないことは、ロール付与が失敗した証明にはなりません。

対象のロールが存在しない場合、割り当ては反映されていません。再実行して出力を確認するか、自己昇格に切り替えてください。


バッチワークフロー:複数の環境にロールを割り当てる

並列で実行してください。決して順番に実行しないでください。

Step 1: pac admin list                                              -> Get all environments
Step 2: Filter by type if needed (e.g., Developer, Sandbox)        -> Identify targets
Step 3: Confirm with user — show list of target environments
Step 4: Run ALL assignments in a single bash call:
pac admin assign-user --user [email protected] --role "System Administrator" --environment https://dev1.crm.dynamics.com &
pac admin assign-user --user [email protected] --role "System Administrator" --environment https://dev2.crm.dynamics.com &
pac admin assign-user --user [email protected] --role "System Administrator" --environment https://dev3.crm.dynamics.com &
wait
Step 5: Verify each landed (exit 0 is not proof — see above), then report ("Assigned + verified on 3/3 environments")

重要:ロールを割り当てる前に、影響を受ける環境を必ず確認し、各割り当てが反映されたことを確認してください。終了コードが正常でも、成功したとは限りません。


テナント管理者による自己昇格(フォールバック)

自己昇格は、他のユーザーへのロール割り当てとは本質的に異なります。 pac admin assign-user <other> は権限を他のユーザーに付与しますが、pac admin self-elevate は権限を呼び出し元に付与します。リスクの性質と監査の扱いが異なるため、確認手順はより厳格です。

pac admin assign-user が「user has not been assigned any roles」というエラーで失敗した場合は、次を使用してください。

pac admin self-elevate --environment https://myorg.crm.dynamics.com
  • グローバル管理者、Power Platform 管理者、または Dynamics 365 管理者の権限が必要です
  • すべての昇格は Microsoft Purview に記録されます
  • --environment を省略した場合は、アクティブな認証プロファイルが使用されます
自己昇格の確認手順(assign-user より厳格)

pac admin self-elevate を実行する前に、エージェントは必ず次の手順を行ってください。

  1. リスクを明示します。 実行前の概要に、次の文言(または同等の表現)を含めます。

    "This grants YOU System Administrator on <env>. The action is logged to Microsoft Purview with your identity and timestamp."

  2. 理由を確認します。 チケット ID、インシデント番号、または "dev sandbox access — no ticket" のような自由記述のメモを、一行で尋ねます。理由を実行前の概要で復唱し、何が記録されるかをユーザーに確認してもらいます。
  3. 上記の(1)と(2)の両方をユーザーが確認した後、明示的な確認を待ちます。 リスクの説明と理由が表示される前に伝えられた単なる「はい」は受け付けないでください。
  4. 黙ってフォールバックしないでください。 pac admin assign-user が失敗した場合は、まず失敗を伝えてから、この手順に従った self-elevate を提案してください。自動的に連続実行してはいけません。

フロー:必ず最初に pac admin assign-user を試してください。admin self-elevate は、上記の手順を条件として実行する、文書化されたフォールバックです。

CLI のフォールバック:pac admin self-elevate がエラーになる場合は、Power Platform Admin Center → 環境を選択 → Access → System Administrator role の順に操作して、手動で自己昇格してください。すべての昇格は引き続き Purview に記録されます。(PAC CLI 2.6.4 では、CLI がバックエンドに空の api-version= を送信するため、コマンドが bolt.authentication.http.AuthenticatedClientException / ApiVersionInvalid で失敗します。)


安全ルール

  • System Administrator ロールを割り当てる前に、必ず確認してください
  • バッチ操作の前に、対象環境の一覧を表示してください
  • 自己昇格は記録され、監査可能です。ユーザーに警告してください

コメント