Azure Blob Storage SFTPのEntra ID認証がGAに|影響範囲と管理者対応

Azure Blob Storage SFTPのMicrosoft Entra IDベースアクセスは、2026年7月7日時点で全リージョンの一般提供(GA)に到達しました。結論からいえば、既存のSFTP接続が突然使えなくなる更新ではありません。一方、従業員や取引先に長期間有効なパスワードやSSH鍵を配布している組織は、Microsoft Entra ID方式への移行を優先的に検討すべきです。(マイクロソフトAzure)

Microsoft Entra ID方式では、ユーザー、グループ、サービスプリンシパル、外部ゲストを既存のID管理に組み込み、Azure RBAC、ABAC、ACLでSFTP経由のBlobアクセスを制御できます。ただし、短時間有効なOpenSSH証明書への対応、権限設計の見直し、監査ログの有効化が必要です。この記事では、影響範囲、管理者が行う設定、監査・検知への影響、対応の優先順位を整理します。

目次

Azure Blob Storage SFTP / Microsoft Entra IDのGAとは

Azure Blob Storageは、ストレージアカウントに対してネイティブなSFTPエンドポイントを提供しています。これまでは、ストレージアカウント内に作成する「ローカルユーザー」と、パスワードまたはSSH公開鍵を組み合わせる方式が中心でした。

今回一般提供されたMicrosoft Entra IDベースアクセスでは、次の流れで接続します。

  1. Azure CLI、Azure PowerShell、SDKなどでMicrosoft Entra IDに認証する
  2. RSA公開鍵を渡し、OpenSSH証明書を取得する
  3. 秘密鍵とOpenSSH証明書を使い、対応するSFTPクライアントから接続する

OpenSSH証明書の有効期間は65分です。SFTPクライアントにMicrosoft Entra IDのパスワードを直接入力する方式ではなく、先にMicrosoft Entra IDへ認証して短時間有効な証明書を取得する仕組みです。(Microsoft Learn)

従来方式との違い

項目ローカルユーザー方式Microsoft Entra ID方式
IDの管理場所ストレージアカウントごとMicrosoft Entra IDで一元管理
認証方法パスワードまたはSSH鍵Entra ID認証後に取得するOpenSSH証明書と秘密鍵
証明情報の有効期間管理者が更新するまで利用されることが多いOpenSSH証明書は65分
利用できる主体ストレージアカウントのローカルユーザーユーザー、グループ、サービスプリンシパル、外部ゲスト
アクセス制御ローカルユーザー権限とACLAzure RBAC、ABAC、ACL
多要素認証パスワードと鍵を組み合わせるMFAは非対応Entra IDへのサインイン段階でMFAを利用可能
クライアント要件一般的なSFTPクライアントOpenSSH証明書に対応したクライアント
ID削除時の対応ストレージアカウントごとに削除Entra IDのユーザーやグループから一元的に解除可能

従来のローカルユーザー方式も、引き続き公式ドキュメントで利用可能な認証方式として案内されています。今回のGAは、既存環境を自動的に移行する変更ではなく、Microsoft Entra ID方式を本番利用できる選択肢として追加するものです。(Microsoft Learn)

何が保護され、何は変わらないのか

Microsoft Entra IDベースアクセスで強化されるのは、主にSFTP経由でBlobデータへアクセスする際の「誰が」「何をできるか」という部分です。

対象今回のGAによる影響
SFTP利用者の本人確認Entra IDのユーザーやサービスプリンシパルで管理可能
コンテナーやデータへの権限Azure RBAC、ABAC、ACLを利用可能
従業員の異動・退職グループやアカウントの変更をアクセス権に反映しやすい
取引先のアクセスMicrosoft Entra External IDのゲストを利用可能
バッチ処理サービスプリンシパルを利用可能
ネットワーク公開範囲自動では変更されない
ストレージアカウントの管理権限Blobデータへの権限とは別に管理が必要
既存ローカルユーザー自動削除・自動移行されない
REST APIやAzCopyなどの接続SFTPとは別の接続方式として引き続き利用可能

ID認証を導入してもネットワーク制限は必要

Microsoft Entra ID認証に切り替えても、SFTPエンドポイントのネットワーク公開範囲が自動的に狭まるわけではありません。必要に応じて、ストレージファイアウォール、仮想ネットワーク、プライベートエンドポイントなどで接続元を制限します。

Azure Blob StorageのSFTPはプラットフォームレベルのサービスであるため、SFTPを有効にしていないストレージアカウントでもポート22が応答する場合があります。未構成の場合は接続が切断されるため、ポートスキャンの結果だけでSFTPの有効・無効を判断するのは適切ではありません。Azureの構成情報を基に棚卸ししてください。(Microsoft Learn)

管理プレーンのロールだけではデータにアクセスできない

Azureの「所有者」「共同作成者」「閲覧者」「ストレージアカウント共同作成者」と、Blobデータ用のロールは別物です。

管理プレーンのロールだけを割り当てても、原則としてBlobデータへの読み書き権限は付与されません。SFTPでデータへアクセスさせるには、Storage Blob Data Readerなどのデータ用ロール、またはACLが必要です。

ただし、一部の管理ロールはストレージアカウントキーを取得できるため、データ用ロールだけでなく、キーへアクセスできる管理者の範囲も確認する必要があります。(Microsoft Learn)

自社に対応が必要か判断する基準

利用状況優先度判断
Azure Blob StorageのSFTPを使用していない直ちに対応する必要はない
従業員にローカルユーザーを発行しているEntra IDのユーザー・グループへの移行を検討
取引先ごとにパスワードやSSH鍵を発行している外部ゲストとグループによる管理を検討
長期利用のSSH秘密鍵でバッチ接続しているサービスプリンシパルと短時間証明書による接続を検証
マネージドIDで接続したい要調査現時点ではSFTPのEntra ID認証でマネージドIDは非対応
SFTPクライアントを長期間更新していないOpenSSH証明書への対応状況を確認
ホームディレクトリ前提の接続設定があるEntra ID方式ではホームディレクトリが非対応のため修正が必要
監査ログを保存していない移行前に診断設定を有効化
プレビュー版を検証済み中~高GA版として権限、クライアント、ログを再テスト

特に注意したいのは、無人バッチ処理です。サービスプリンシパルは利用できますが、マネージドIDは現時点で対応していません。また、Microsoft Entra ID方式はRSA証明書のみをサポートし、ECDSA証明書、ホームディレクトリ、接続文字列へのコンテナー名の追加には対応していません。(Microsoft Learn)

管理者が行う設定と移行手順

SFTP利用環境を棚卸しする

最初に、ストレージアカウントではなく「接続処理」を単位として棚卸しします。同じストレージアカウントでも、従業員、取引先、夜間バッチで移行方法が異なるためです。

最低限、次の項目を整理してください。

  • SFTPを有効にしているストレージアカウント
  • ローカルユーザー名と利用者
  • パスワードまたはSSH鍵の利用状況
  • 人が操作する接続か、無人バッチか
  • 使用しているSFTPクライアントとバージョン
  • 接続元IPアドレスやネットワーク
  • アクセス対象のコンテナー、ディレクトリ、ファイル
  • 必要な操作が読み取り、書き込み、削除のどこまでか
  • 接続時間帯と証明書更新の方法
  • 診断ログの保存先と保持期間

SFTPを利用するストレージアカウントには、階層型名前空間が必要です。また、一般用途v2またはPremiumブロックBlobアカウントなど、SFTPの前提条件を満たしている必要があります。(Microsoft Learn)

利用者ごとにEntra IDの主体を決める

利用者推奨する主体設計のポイント
社内の担当者Entra IDセキュリティグループ個人へ直接権限を付与しない
複数部署の利用者用途別セキュリティグループ読み取り用と書き込み用を分ける
取引先担当者外部ゲストとセキュリティグループ契約終了時にゲストとグループ所属を見直す
無人バッチサービスプリンシパル証明書取得処理と再接続処理を自動化する
Azure上のワークロードサービスプリンシパルなどマネージドID非対応を前提に設計する

ACLには個人ユーザーを直接登録するのではなく、Microsoft Entra IDのセキュリティグループを登録する方法が推奨されています。グループを利用すれば、異動や退職時にディレクトリ階層全体のACLを書き換えず、グループのメンバー変更で対応できます。(Microsoft Learn)

Azure RBACとACLを最小権限で設計する

代表的なBlobデータ用ロールは次のとおりです。

ロール主な権限推奨する利用者
Storage Blob Data Reader読み取り、一覧表示参照専用の利用者
Storage Blob Data Contributor読み取り、書き込み、削除ファイルを送受信する利用者
Storage Blob Data Owner全データ操作、所有者変更、ACL変更データ管理者に限定

Storage Blob Data Ownerを一般利用者へ付与すると、ファイル操作だけでなく、所有者やACLの変更まで可能になります。通常のファイル送受信であれば、最初からOwnerを付与せず、ReaderまたはContributorから検討します。(Microsoft Learn)

ACLで広すぎるRBAC権限を狭めることはできない

権限設計で最も失敗しやすいのが、ストレージアカウント全体にStorage Blob Data Contributorを付与した後、ACLで特定ディレクトリだけに制限しようとする設計です。

Azure Storageでは、最初にAzure RBACとABACが評価され、そこでアクセスが許可されるとACLは評価されません。そのため、RBACで付与済みの権限をACLで拒否することはできません。

ディレクトリ単位で分離する場合は、次のいずれかを採用します。

  • 上位スコープのRBACを付けず、ACLで必要なディレクトリだけを許可する
  • コンテナースコープなど、可能な限り狭い範囲でRBACを割り当てる
  • ABACの条件を利用し、属性に基づいて対象を絞る
  • 読み取り用と書き込み用のグループを分ける

「広いRBAC権限を付与し、ACLで制限する」という考え方は避けてください。(Microsoft Learn)

OpenSSH証明書による接続をテストする

Azure CLIを利用する場合の基本的な流れは次のとおりです。

ssh-keygen -t rsa

az login

az sftp cert \
  --public-key-file ~/.ssh/id_rsa.pub \
  --file ~/.ssh/my_cert.pub

取得した証明書と秘密鍵を使って接続します。

sftp \
  -o PubkeyAcceptedKeyTypes="[email protected],rsa-sha2-256" \
  -o IdentityFile="~/.ssh/id_rsa" \
  -o CertificateFile="~/.ssh/my_cert.pub" \
  <storage-account>.<user-name>@<storage-account>.blob.core.windows.net

OpenSSH証明書は65分で期限切れになります。バッチ処理では、証明書ファイルを長期間使い回すのではなく、処理開始前や再接続前に新しい証明書を取得する設計が必要です。(Microsoft Learn)

接続テストでは、次の点も確認してください。

  • Entra IDのUPNが[email protected]の場合、接続ユーザー名ではドメイン部分を除く
  • サービスプリンシパルでは、ユーザー名の代わりにサービスプリンシパルIDを使う
  • 接続文字列へコンテナー名を直接含めない
  • 接続後にcdで対象コンテナーへ移動する
  • ホームディレクトリを前提にしない
  • WinSCPを利用する場合は、OpenSSH証明書対応バージョンを使用する

Microsoftのドキュメントでは、WinSCPのOpenSSH証明書対応はバージョン6.0以降と案内されています。古いクライアントや組み込み製品では対応していない可能性があるため、本番移行前の接続試験が欠かせません。(Microsoft Learn)

小さな範囲で移行してからローカルユーザーを廃止する

最初から全接続を切り替えるのではなく、重要度の低いコンテナーや一つの取引先を対象に試行します。

試行時には、少なくとも次の操作を確認します。

  • コンテナーとディレクトリの一覧表示
  • ファイルのダウンロード
  • ファイルのアップロードと上書き
  • ファイル名の変更
  • ファイルの削除
  • 権限がないディレクトリへのアクセス拒否
  • 証明書失効後の再取得と再接続
  • 想定外のIPアドレスからの接続拒否
  • ログへのユーザー、IPアドレス、操作対象の記録

移行完了後は、不要になったローカルユーザーを削除し、配布済みのパスワードやSSH秘密鍵を回収・廃棄します。ローカルユーザーを残したままでは、Entra IDへ移行しても旧経路が認証手段として残るためです。

監査・検知への影響

Microsoft Entra ID方式へ移行すると、BlobアクセスログでRequesterObjectIdRequesterTenantIdRequesterUpnRequesterAppIdなどの情報を利用しやすくなります。これにより、単なる接続元IPアドレスだけでなく、どのEntra IDユーザーやアプリケーションが操作したかを追跡できます。(Microsoft Learn)

ただし、Azure Storageのリソースログは自動的に長期保存されるわけではありません。ログを検索・保持するには、Blobサービスに診断設定を作成し、Log Analyticsワークスペース、Event Hubs、ストレージアカウントなどへ送信する必要があります。一般的にはStorageReadStorageWriteStorageDeleteを対象にします。(Microsoft Learn)

最初に実際のログ値を確認する

ProtocolAuthenticationTypeに記録される値を推測してアラートを作るのではなく、試行接続後に実際の値を確認します。

StorageBlobLogs
| where TimeGenerated > ago(24h)
| summarize Requests = count()
    by Protocol, AuthenticationType, Category
| order by Requests desc

確認できた値を基に、SFTPかつMicrosoft Entra ID経由の操作だけを抽出する条件を作成します。

Entra ID主体による操作を確認する

StorageBlobLogs
| where TimeGenerated > ago(24h)
| where isnotempty(RequesterObjectId)
| project
    TimeGenerated,
    AccountName,
    Category,
    OperationName,
    StatusCode,
    StatusText,
    CallerIpAddress,
    RequesterUpn,
    RequesterObjectId,
    RequesterAppId,
    RequesterTenantId,
    ObjectKey,
    Uri
| order by TimeGenerated desc

RequesterObjectIdが記録されていれば、同姓同名やUPN変更の影響を受けにくいオブジェクトIDを軸に調査できます。

失敗が集中しているIDやIPを検知する

StorageBlobLogs
| where TimeGenerated > ago(1h)
| where isnotempty(RequesterObjectId)
| where StatusCode !startswith "2"
| summarize
    Attempts = count(),
    FirstSeen = min(TimeGenerated),
    LastSeen = max(TimeGenerated)
    by AccountName,
       RequesterObjectId,
       RequesterUpn,
       CallerIpAddress,
       OperationName,
       StatusCode,
       StatusText
| where Attempts >= 5
| order by Attempts desc

実運用では、次の事象を優先して検知します。

  • 同じユーザーやサービスプリンシパルによる認証・認可エラーの急増
  • 通常と異なるIPアドレスからの書き込みや削除
  • 想定していないテナントIDによるアクセス
  • 取引先の契約終了後に残っているアクセス
  • 夜間バッチ以外の時間帯に行われた大量操作
  • 移行期限後も残っている旧認証方式の利用
  • 短時間に大量の削除や上書きが行われた操作

なお、Azure Storageの要求ログはベストエフォートで記録されます。ログだけを唯一の証跡と考えず、Entra IDのサインイン情報、Azureの構成変更履歴、業務システム側の転送記録も合わせて確認できる運用にします。(Microsoft Learn)

移行で失敗しやすいポイント

失敗例問題対応
GAになったため自動移行されると思うローカルユーザーはそのまま残る接続単位で明示的に移行する
アカウント全体へContributorを付与する不要なコンテナーにも書き込み・削除できるスコープを狭め、必要に応じてACLを使う
RBACをACLで拒否できると思うRBACで許可されるとACLは評価されない上位のRBAC付与を見直す
バッチでマネージドIDを使おうとする現時点では非対応サービスプリンシパルを検討する
証明書を固定ファイルとして保存する65分後に新規処理や再接続が失敗する処理前に証明書を再取得する
ECDSA鍵を使用するEntra ID方式はRSA証明書のみ対応RSA鍵を用意する
古いSFTPクライアントを使うOpenSSH証明書に対応していない対応バージョンへ更新する
ホームディレクトリを設定するEntra ID方式では非対応接続後に対象コンテナーへ移動する
Entra ID認証だけで安全になったと考えるネットワークの公開範囲は変わらないファイアウォールやプライベートエンドポイントを併用する
移行後もローカルユーザーを残す旧パスワードやSSH鍵で接続できる検証後に不要なローカルユーザーを削除する
診断設定を後回しにする移行時の失敗原因や不正操作を追跡できない試行開始前にログを有効化する

管理者が優先すべき対応

今回のGAは、緊急のサービス停止に対応する更新ではありません。しかし、SFTPの資格情報を個別管理している組織にとっては、ID管理と監査を改善する重要な機会です。

優先順位は次のように整理できます。

最初に行うこと

  • SFTPを有効にしているストレージアカウントを洗い出す
  • ローカルユーザー、SSH鍵、パスワードの利用者を確認する
  • Blobサービスの診断設定を有効にする
  • 人の接続と無人バッチを分ける
  • Microsoft Entra IDへ移行できないクライアントを特定する

次に行うこと

  • 社内利用者と取引先をEntra IDセキュリティグループへ整理する
  • バッチ処理用のサービスプリンシパルを設計する
  • Reader、Contributor、Ownerの割り当てを最小化する
  • RBAC、ABAC、ACLの評価順序を踏まえて権限を設計する
  • 65分の証明書有効期間を前提に再取得処理を組み込む

本番切り替え時に行うこと

  • 一部の接続から段階的に移行する
  • 読み取り、書き込み、削除、拒否動作を検証する
  • ログとアラートの実値を確認する
  • 問題がなければ不要なローカルユーザーを削除する
  • 取引先、グループ、サービスプリンシパルを定期的に棚卸しする

Azure Blob Storage SFTPを利用している場合、まず実施すべきなのは「すぐに全接続を変更すること」ではなく、ローカルユーザーと接続処理の棚卸しです。そのうえで、監査ログを確保し、一つの接続からMicrosoft Entra ID方式を試行してください。権限、クライアント、証明書更新、ネットワーク制限まで確認できれば、安全に本番移行を進められます。

この記事を書いた人

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

コメント

コメントする

目次