Microsoft 365でプロフィール写真の変更を禁止する最短手順|myaccount.microsoft.com対策とGraph photoUpdateSettingsの完全解説

ハイブリッド(オンプレ AD 同期)テナントで「ユーザーにプロフィール写真を変えさせたくない」。この要件に最短で応える方法が、Microsoft Graph(Beta)の photoUpdateSettings を使った組織ポリシー化です。本記事は myaccount.microsoft.com を含むクラウド UI 側での変更を確実に止める設計、手順、落とし穴、ロールバックまで実運用レベルで解説します。

目次

結論(先に要点だけ知りたい方向け)

項目結論・解説
適用単位テナント全体のみ。グループ/個人ユーザー単位のスコープは現時点で不可。管理ロール(役割)で「誰が写真を変えられるか」を限定する設計になります。
ハイブリッド同期テナント(オンプレ AD → Entra ID 同期)PATCH /beta/admin/people/photoUpdateSettings に以下の JSON を適用します。
{ "source": "onPremises", "allowedRoles": [] } source を onPremises にすると「オンプレから同期された写真のみ許可」となり、myaccount.microsoft.com/Teams/OWA 等のクラウド UI や API 経由の変更は全ブロック。 allowedRoles はクラウド更新用の許可ロールリスト。onPremises 指定時はクラウド側更新そのものが無効化されるため空配列で問題ありません。
クラウド専用テナントsource に cloud を指定し、allowedRoles に許可する管理ロールの GUID を並べます(例:グローバル管理者・ユーザー管理者・People 管理者)。
{ "source": "cloud", "allowedRoles": [ "62e90394-69f5-4237-9190-012177145e10", // Global Administrator "fe930be7-5e62-47db-91af-98c3a49a38b1", // User Administrator "024906de-61e5-49c8-8572-40335f1e0e10" // People Administrator ] } これにより、指定ロール以外は写真を変更できません。
反映と注意反映まで最大 24 時間程度のラグが発生し得ます。トークンのキャッシュやアプリ側キャッシュも影響するため、テスト時はサインアウト/サインインや Web クライアントのシークレットウィンドウでの再検証が有効。既存のクラウド側写真はロックされるだけで自動削除はされません。
ロールバック既定状態に戻すには DELETE /beta/admin/people/photoUpdateSettings を実行します(作成済みの photoUpdateSettings を削除)。
Beta の留意点本機能は Graph の Beta 版 API です。スキーマや挙動が将来変更される可能性に留意し、必ず検証環境で事前確認してください。

仕組みの概要:photoUpdateSettings で何を制御しているのか

/admin/people/photoUpdateSettings は、組織(テナント)単位で「プロフィール写真の更新をどこから・誰が行えるか」を統一的にコントロールするリソースです。Azure AD(現 Microsoft Entra ID)各サービスに散在していた部分的なブロック(例:OWA ポリシーなど)では myaccount.microsoft.com を止めきれないことがありましたが、photoUpdateSettings なら統一的に UI/API を抑止できます。

プロパティ概要主なポイント
source更新の「発生源」を指定(cloud / onPremises)。cloud:クラウド UI/API からの更新を許可(既定では誰でも可)。 onPremises:オンプレ AD の thumbnailPhoto から同期のみ許可。クラウド UI/API 更新は全面停止。
allowedRolesクラウド更新を許す管理ロールの GUID 配列(source=cloud のときのみ有効)。代表例: Global Administrator(62e90394-69f5-4237-9190-012177145e10) User Administrator(fe930be7-5e62-47db-91af-98c3a49a38b1) People Administrator(024906de-61e5-49c8-8572-40335f1e0e10) 空配列で「誰でも」に見えがちですが、この挙動は source に依存します。
— cloud かつ空配列:全ユーザーが更新可。
— onPremises かつ空配列:クラウド更新自体が無効(よって誰もクラウド経由で変更不可)。
適用スコープテナント全体グループ/ユーザー単位のスコープ分割は不可。細かな制御は「誰ができるか(ロール)」で行う設計。

ハイブリッド環境で「クラウドからの変更を完全禁止」にする手順

前提条件

  • Azure AD Connect または Cloud Sync でオンプレ AD の thumbnailPhoto が同期される構成。
  • Graph へのアクセス権:PeopleSettings.ReadWrite.All(アプリ/委任いずれも可)。委任の場合は People Administrator など適切なロールが必要。
  • テスト用ユーザーと検証ブラウザ(シークレットウィンドウ推奨)。

方法 A:Graph Explorer で設定(UI なしでも実行可)

  1. Graph Explorer にサインインし、バージョンを beta に切り替え、許可 PeopleSettings.ReadWrite.All を付与。
  2. GET https://graph.microsoft.com/beta/admin/people/photoUpdateSettings を実行し、現在の設定を把握(404 の場合は未作成)。
  3. 以下を PATCH 実行。 PATCH https://graph.microsoft.com/beta/admin/people/photoUpdateSettings Content-Type: application/json { "source": "onPremises", "allowedRoles": [] }
  4. HTTP 200 が返れば成功。GET で反映値を再確認。

方法 B:Graph PowerShell(推奨:自動化・再現性確保)

# 1) 必要モジュール(Beta)を推奨
Import-Module Microsoft.Graph.Beta.Identity.DirectoryManagement -ErrorAction Stop

# 2) 接続(委任:PeopleSettings.ReadWrite.All)

Connect-MgGraph -Scopes "PeopleSettings.ReadWrite.All"

# 3) 現状確認

Get-MgBetaAdminPeoplePhotoUpdateSetting

# 4) ハイブリッド方針に更新(クラウド変更を全面禁止)

$body = @{
source       = "onPremises"
allowedRoles = @()
}
Update-MgBetaAdminPeoplePhotoUpdateSetting -BodyParameter $body

# 5) 再確認

Get-MgBetaAdminPeoplePhotoUpdateSetting | Format-List

反映確認(ユーザー体験)

  • myaccount.microsoft.com でテストユーザーが写真変更を試みると、エラー表示・ボタン無効化等により更新できなくなります。
  • Teams/OWA/SharePoint などの UI でもクラウド経由の変更はブロックされます。
  • 反映ラグ(最大 24 時間)やアプリキャッシュの影響を考慮して、認証の更新(サインアウト/サインイン)で再確認してください。

運用:写真を更新したい場合(ハイブリッド)

  1. オンプレ AD の対象ユーザーに対し、thumbnailPhoto 属性を更新(100KB 前後・正方形推奨)。
  2. 同期の促進:Start-ADSyncSyncCycle -PolicyType Delta。
  3. しばらくすると Microsoft 365 側に新しい写真が反映されます。削除したい場合は thumbnailPhoto を空にして同期。
# 例:オンプレ AD で thumbnailPhoto を設定
# ※ 適切にリサイズ・圧縮した JPEG/PNG を用意
$user = "user01"
$photoBytes = [System.IO.File]::ReadAllBytes("C:\photos\user01.jpg")
Set-ADUser $user -Replace @{ thumbnailPhoto = $photoBytes }

# 同期を促進(AADC)
Start-ADSyncSyncCycle -PolicyType Delta

補足:オンプレ AD の thumbnailPhoto はサイズ制限が厳しめです。大きな画像は事前にリサイズ・圧縮してください。クラウド API(/users/{id}/photo/$value)は 4 MB まで受け付けますが、本構成ではクラウド側更新は無効化されています。

クラウド専用テナント:管理者だけ変更できるようにする

クラウド運用の場合は source を cloud にした上で、allowedRoles に許可ロール(GUID)を列挙します。少なくとも People Administrator を中心に、運用体制に応じて Global Administrator や User Administrator を追加します。

PATCH https://graph.microsoft.com/beta/admin/people/photoUpdateSettings
Content-Type: application/json

{
"source": "cloud",
"allowedRoles": [
"024906de-61e5-49c8-8572-40335f1e0e10",  // People Administrator(最小権限原則に合致)
"62e90394-69f5-4237-9190-012177145e10",  // Global Administrator(必要なら)
"fe930be7-5e62-47db-91af-98c3a49a38b1"   // User Administrator(必要なら)
]
}

注意: allowedRoles に列挙されていないロール保持者や一般ユーザーは、myaccount.microsoft.com を含むクラウド UI/API から写真を変更できません。特定の管理者だけに作業を委任したいときは、Privileged Identity Management(PIM)と組み合わせて JIT(Just-In-Time)昇格を用いると監査・ガバナンス観点で堅牢です。

よくある質問(FAQ)

Q. グループ単位やユーザー単位で適用できますか?

A. できません。photoUpdateSettings はテナント全体で 1 つの方針を表すリソースです。粒度は「誰が(どの管理ロールが)」という観点でのみ調整します。

Q. 「完全禁止(オンプレでも不可)」は可能ですか?

A. いいえ。ハイブリッドで source=onPremises を選んだ場合、方針は「オンプレ同期のみ許可」です。よってクラウド経由は全面禁止できますが、オンプレ AD の更新自体を止める機能ではありません。組織のポリシーや運用で統制してください。

Q. OWA の Set-OwaMailboxPolicy -SetPhotoEnabled:$false と何が違いますか?

A. OWA ポリシーはあくまで Exchange Online(OWA)クライアントの UI を抑止するだけで、myaccount.microsoft.com や他の更新経路(Teams 等)を網羅できません。photoUpdateSettings は組織横断でクラウド更新の可否を統一的に制御できます。

Q. 反映に時間がかかるのはなぜ?

A. バックエンドの構成伝播(おおむね最大 24 時間)とクライアント側キャッシュが要因です。検証時はトークン更新(サインアウト/サインイン)やプライベートウィンドウ、Teams のサインアウトなどを併用しましょう。

Q. どのロール GUID を入れればいいですか?

ロール名GUID(テンプレート ID)用途の目安
People Administrator024906de-61e5-49c8-8572-40335f1e0e10プロフィール写真・People 設定の最小権限運用に最適
Global Administrator62e90394-69f5-4237-9190-012177145e10ブレークグラスや例外対応で許可したい場合のみ追加
User Administratorfe930be7-5e62-47db-91af-98c3a49a38b1ユーザー運用部門が写真も扱う場合に検討

補足: GUID はテナント共通のロールテンプレート ID です。PowerShell の Get-MgDirectoryRoleTemplate 等で確認できます。

ロールバック(既定に戻す)

方針をいったん解除して既定状態に戻したい場合は、DELETE を実行します。

DELETE https://graph.microsoft.com/beta/admin/people/photoUpdateSettings

PowerShell(Beta モジュール)の例:

Connect-MgGraph -Scopes "PeopleSettings.ReadWrite.All"
Remove-MgBetaAdminPeoplePhotoUpdateSetting

削除後は GET で存在しない(404)か、再生成された既定が返ることを確認してください。

実装チェックリスト(変更前・変更後)

観点変更前に確認変更後に確認
影響範囲テナント全体で方針が変わることを関係者に周知対象ユーザー全体でクラウド UI から更新できないことを確認
権限PeopleSettings.ReadWrite.All の同意と実行アカウントのロール必要最小限のロールだけが更新できること(source=cloud 運用時)
オンプレ同期thumbnailPhoto の同期が AADC/Cloud Sync で有効かオンプレ更新→クラウド反映の経路が期待通りに機能するか
キャッシュ/伝播検証計画に伝播ラグ(最大 24 時間)を織り込むサインアウト/サインインやシークレットウィンドウで UI 反映を再確認
運用手順写真更新申請~オンプレ更新~同期~通知のランブック整備失敗時の切り戻し(DELETE)と監査ログの取得手順

トラブルシューティング

症状考えられる原因対処
PATCH/DELETE が 403(Forbidden)必要なスコープやロール不足(PeopleSettings.ReadWrite.All/People Administrator 等)スコープ同意とロールを付与して再試行。委任なら昇格(PIM)状態を確認。
GET が 404(Not Found)まだ photoUpdateSettings が作成されていないPATCH(または POST)で初期作成し、その後 GET で確認。
ユーザー側 UI でまだ変更できてしまう伝播ラグ/トークン・アプリキャッシュサインアウトやプライベートウィンドウで再検証。24 時間程度待機してから再確認。
オンプレ更新が M365 に反映されないthumbnailPhoto 未同期、サイズ超過、同期失敗同期ルール・属性サイズ・同期エラーを確認。必要なら Start-ADSyncSyncCycle。

セキュリティとガバナンスのベストプラクティス

  • 最小権限設計:クラウド運用で管理者のみ許可する場合は、まず People Administrator を採用し、Global Administrator は非常用(ブレークグラス)に限定。
  • PIM の活用:JIT 昇格で必要時のみロールを有効化。承認・監査証跡を残す。
  • 監査:構成変更の記録(誰がいつ PATCH/DELETE したか)を定期的にエクスポートし、変更管理台帳に反映。
  • 運用ランブック:写真差し替えの依頼フロー、画像ガイドライン(正方形・適切な解像度・過度な個人情報を含めない)を明文化。
  • 段階展開:検証テナント→パイロット→全社の順に適用。新機能(Beta)である点に留意し、ローリングバック手順(DELETE)を常に準備。

実務でそのまま使える PowerShell サンプル

以下は「現在設定の取得 → 目標状態の適用 → 結果検証 → 必要に応じてロールバック」を一括で行うサンプルです。CI/CD(ランブック)に組み込む際の雛形としてご利用ください。

#Requires -Modules Microsoft.Graph.Beta.Identity.DirectoryManagement
param(
  [ValidateSet("HybridBlockCloud","CloudAdminsOnly","Rollback")]
  [string]$Mode = "HybridBlockCloud"
)

Import-Module Microsoft.Graph.Beta.Identity.DirectoryManagement -ErrorAction Stop
Connect-MgGraph -Scopes "PeopleSettings.ReadWrite.All" | Out-Null

function Show-Current {
try {
$cur = Get-MgBetaAdminPeoplePhotoUpdateSetting -ErrorAction Stop
"Current settings:`n" + ($cur | ConvertTo-Json -Depth 5)
} catch {
"Current settings: NotFound (404) or not created yet."
}
}

Write-Host (Show-Current)

switch ($Mode) {
"HybridBlockCloud" {
$body = @{ source = "onPremises"; allowedRoles = @() }
Update-MgBetaAdminPeoplePhotoUpdateSetting -BodyParameter $body
}
"CloudAdminsOnly" {
$roles = @(
"024906de-61e5-49c8-8572-40335f1e0e10",  # People Administrator
"62e90394-69f5-4237-9190-012177145e10",  # Global Administrator (optional)
"fe930be7-5e62-47db-91af-98c3a49a38b1"   # User Administrator (optional)
)
$body = @{ source = "cloud"; allowedRoles = $roles }
Update-MgBetaAdminPeoplePhotoUpdateSetting -BodyParameter $body
}
"Rollback" {
Remove-MgBetaAdminPeoplePhotoUpdateSetting -ErrorAction Stop
}
}

"--- After ---"
Write-Host (Show-Current)

まとめ

  • グループ単位の制御は不可。テナント全体のみ。
  • ハイブリッドでは source: "onPremises" を設定し、クラウド経由の写真変更を完全ブロック(myaccount.microsoft.com を含む)。
  • クラウド専用では source: "cloud" と allowedRoles を組み合わせ、許可した管理ロールだけに更新を限定。
  • ロールバックは DELETE で既定に戻せる。
  • Beta のため本番反映は段階適用し、常に検証と切り戻し手順を用意。

付録:コマンド・エンドポイント早見表

目的HTTPPowerShell(Beta)
現在設定の取得GET /beta/admin/people/photoUpdateSettingsGet-MgBetaAdminPeoplePhotoUpdateSetting
ハイブリッド(クラウド変更禁止)PATCH /beta/admin/people/photoUpdateSettings
{"source":"onPremises","allowedRoles":[]}
Update-MgBetaAdminPeoplePhotoUpdateSetting -BodyParameter @{source="onPremises";allowedRoles=@()}
クラウド(管理者のみ許可)PATCH /beta/admin/people/photoUpdateSettings
{"source":"cloud","allowedRoles":["..."]}
Update-MgBetaAdminPeoplePhotoUpdateSetting -BodyParameter @{source="cloud";allowedRoles=@("...")}
ロールバック(既定へ)DELETE /beta/admin/people/photoUpdateSettingsRemove-MgBetaAdminPeoplePhotoUpdateSetting

注意事項(再掲)

  • 本機能は Graph Beta です。将来の変更に備え、必ず検証環境での事前テスト・段階適用・監査を徹底してください。
  • UI 上の表示(ボタン有効/無効や警告文言)はサービスごとに差異があります。実体はサーバー側でブロックされます。
  • myaccount.microsoft.com 以外の変更経路(Teams/Delve/OWA など)も方針に従いますが、キャッシュ差で一時的に古い表示が残る場合があります。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次