Microsoft Entra ID を使用して BLOB への SSH ファイル転送プロトコル (SFTP) アクセスを承認する

Azure Blob Storage SFTP では、Microsoft Entra ID ベースのアクセスがサポートされます。 以前は、Azure Blob Storage SFTP ではローカル ユーザー ベースのアクセスのみがサポートされており、認証にはパスワードまたは SSH 秘密キーが必要です。 この機能を使用すると、ユーザーはローカル ユーザーを作成して保守することなく、Microsoft Entra IDを適用して SFTP 経由でAzureストレージ アカウントに接続できます。

Microsoft Entra ID ベースのアクセスは、ロールベースのアクセス制御 (RBAC)、多要素認証 (MFA)、Microsoft Entra ID アクセス制御リスト (ACL) など、Azure Blob Storage SFTP に多くの利点をもたらします。

主な利点

  • ローカル ユーザー管理を排除 する - Microsoft Entra ID ベースのアクセスを使用することで、ストレージ アカウントごとにローカル SFTP ユーザーを作成、ローテーション、保守する必要はありません。 Microsoft Entra ID は認証を処理するため、運用上のオーバーヘッドと構成の複雑さが大幅に軽減されます。

  • エンタープライズ グレードの ID とセキュリティ - SFTP アクセスでは Microsoft Entra ID を使用します。これにより、次のことが可能になります。

    • 一元化された ID ライフサイクル管理
    • Microsoft Entra ID を介した MFA を含む強力な認証
    • エンタープライズ IAM 標準に準拠した一貫したセキュリティ体制
    • この方法では、静的で有効期間の長いローカル資格情報と比較してセキュリティが向上します。
  • ネイティブ Azure RBAC、ABAC、ACL 統合 - SFTP の承認は、Azure Blob Storage の既存のアクセス制御モデルと一致します。

    • ロールベースのアクセス制御 (RBAC)
    • 属性ベースのアクセス制御 (ABAC)
    • POSIX スタイルのアクセス制御リスト (ACL)
    • ユーザーは、REST、SDK、ポータルのアクセスに使用されるのと同じロールとアクセス許可を SFTP に適用できます。
  • SFTP オンボードの高速化 - Microsoft Entra ID アカウントはユビキタスであるため、ユーザーは次のことができます。

    • 既存のユーザー、グループ、およびサービス プリンシパルを再利用する
    • 時間のかかるローカル ユーザーの作成とキーの配布を回避する
    • セットアップ手順を減らして SFTP の稼働時間を短縮する
    • SFTP ベースのワークフローにおける価値実現までの時間を大幅に短縮する
  • セキュリティで保護された外部コラボレーション - Microsoft Entra ID 外部 ID を使用することで、完全な制御と監査可能性を維持しながら、個別の ID システムを管理することなく、パートナーやベンダーに SFTP アクセスを安全に付与できます。

概要

次の概要では、このプロセスに関連する主要な手順について説明します。 最初に Microsoft Entra ID を使用して認証し、OpenSSH 証明書を取得し、最後に互換性のあるクライアントまたは SDK を使用して Azure Blob Storage SFTP に接続します。 以降のセクションでは、これらの各手順について詳しく説明します。

  1. Azure CLI、PowerShell、SDK などを使用して Microsoft Entra ID で認証します。

  2. 公開キーを渡して、Microsoft Entra ID から OpenSSH 証明書を取得します。

  3. OpenSSH 証明書をサポートする SFTP クライアントまたは SDK を使用して、手順 2 の OpenSSH 証明書と公開キーを使用して Azure Storage に接続します。

    パスワード ベースの認証はサポートされていません。SFTP クライアントには、パスワード入力用の Microsoft Entra ID ユーザー エクスペリエンスを提供するためのネイティブの Microsoft Entra ID 統合がないためです。

Microsoft Entra ID を使用した Azure Blob Storage への接続

OpenSSH 証明書の生成

次の例に示すように、Azure CLI az sftp コマンドを使用して OpenSSH 証明書を生成します。

az login
az sftp cert --file ~/.ssh/my_cert.pub

セキュリティ上の理由から、証明書は 65 分間だけ有効です。 有効期限が切れた後、コマンドを再実行して新しい証明書を取得する必要があります。

必要に応じて、独自の SSH キー ペアを生成し、証明書をダウンロードするときに使用できます。

SSH キー ペアを生成する: Microsoft Entra ID では RSA 証明書のみがサポートされるため、RSA キーを使用する必要があります。

ssh-keygen -t rsa

次のキー ファイルが生成されます。

File Name/ファイル名 キーの種類
id_rsa 秘密キー
id_rsa.pub 公開キー

次のコマンドを使用して、生成されたキーを使用して SSH 証明書を生成します。

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

サービス プリンシパルを使用している場合は、クライアント シークレットまたは証明書を使用してサインインできます。

証明書を使用してサインインするには、次のコマンドを使用します。

az login --service-principal -u <application_id_or_client_id> --tenant <tenant_id> --certificate <path_to_certificate>

クライアント シークレットを使用してサインインするには、次のコマンドを使用します。

az login --service-principal -u <application_id_or_client_id> -p <secret_value> --tenant <tenant_id>

認証後、同じコマンドを実行して証明書をダウンロードします。

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

OpenSSH 証明書の内容を確認する [省略可能]

OpenSSH 証明書を表示するには、次のコマンドを使用します。

ssh-keygen -L -f ~/.ssh/my_cert.pub

出力では、 Principals セクションにユーザー名が含まれています。

証明書の出力の [プリンシパル] セクションのスクリーンショット。

セキュリティ上の理由から、OpenSSH 証明書は 65 分間有効です。 この期間が経過したら、新しい証明書を要求して、それ以上のトランザクションを開始する必要があります。

OpenSSH を使用してストレージ アカウントに接続する

SFTP コマンドを使用して接続する

sftp -o PubkeyAcceptedKeyTypes="rsa-sha2-256-cert-v01@openssh.com,rsa-sha2-256" -o IdentityFile="~/.ssh/id_rsa" -o CertificateFile="~/.ssh/my_cert.pub" <storageaccountname>.<username>@<storageaccountname>.blob.core.windows.net

プリンシパルが username@domain.com形式を使用する場合は、コマンドのドメイン セクションを除外し、ユーザー名部分のみを使用してください。

ユーザープリンシパルとサービスプリンシパルの両方がサポートされています。 サービス プリンシパルの場合は、接続文字列のユーザー名の代わりにサービス プリンシパル ID を使用します。

コンテナー名を接続文字列に直接追加したり、Home ディレクトリ経由で設定したりすることはできません。

接続したら、次のコマンドを使用して、SFTP 経由でファイルを Azure Storage にアップロードします。

put <local-file-path>

アクセス許可拒否エラーが発生した場合は、ストレージ BLOB データ共同作成者やストレージ BLOB データ所有者など、必要な Azure ロールがあることを確認します。

SFTP デスクトップ クライアントを使用して接続する

WinSCP や PuTTY などの SFTP クライアントでは、OpenSSH ベースの認証がサポートされています。 次の手順では、WinSCP を使用して接続する方法を示します。

  1. WinSCP: ユーザー認証用の OpenSSH 証明書のサポートは、バージョン 6.0 (https://winscp.net/tracker/1873) で実装されました

  2. 前の手順から OpenSSH 証明書を取得します (OpenSSH 証明書の生成)

  3. WinSCP で、ホスト名とユーザー名を入力し、[詳細設定] を選択します。

    [詳細設定] オプションが表示された WinSCP ログイン ウィンドウのスクリーンショット。

  4. [SSH] タブで、[認証] セクションに移動します。 前のセクションから取得した秘密キーと証明書ファイルを添付し、[ OK] を選択します。

    秘密キーと証明書フィールドを含む認証設定のスクリーンショット。

  5. Microsoft Entra ID アカウントと OpenSSH 証明書を使用してサインインするには、[ ログイン] を選択します。

    WinSCP ログイン ボタンのスクリーンショット。

次のコマンドを使用して、前の手順で取得した OpenSSH 証明書を使用して接続します。

az sftp connect --storage-account <account_name> --certificate-file ~/.ssh/my_cert.pub

さらに、次のように 1 つのコマンドを使用して、OpenSSH 証明書を取得し、SFTP に接続できます。

az sftp connect
az sftp connect --storage-account <account_name>

コマンドの詳細については、 こちらを参照してください

Azure Blob Storage SFTP の Microsoft Entra ID ベースのアクセス制御モデル

メカニズム 地位 チュートリアル
ロールベースのアクセス制御 (Azure RBAC) サポートされている Azure Data Lake Storage のアクセス制御モデル - Azure Storage |Microsoft Learn
アクセス制御リスト (ACL) サポートされている Azure Data Lake Storage のアクセス制御モデル - Azure Storage |Microsoft Learn
属性ベースのアクセス制御 (Azure ABAC) サポートされている Azure Data Lake Storage のアクセス制御モデル - Azure Storage |Microsoft Learn

権限を評価する方法

SFTP は、Azure Blob Storage のアクセス制御モデルを反映しています。 詳細については、「 Azure Data Lake Storage のアクセス制御モデル」を参照してください。

ホーム Microsoft Entra ID テナントの外部のユーザーに対するアクセスを共有すること

組織では、多くの場合、Azure Blob Storage SFTP アクセスを外部のパートナーや顧客と共有する必要があります。 Microsoft Entra 外部 ID は、Azure Blob Storage SFTP を有効にして外部コラボレーターへの安全なアクセスを提供することで、この要件に対処できます。 この機能により、効率的で安全な接続とストレージ リソースとの対話が可能になります。 Microsoft Entra ID 外部 ID 機能を使用することで、組織は外部エンティティとのコラボレーションを可能にしながら、強力なアクセス制御とセキュリティ対策を維持できます。 ゲスト ユーザーの追加について詳しくは、こちらをご覧ください。

既知の問題と制限事項

  • Microsoft Entra IDを使用した SFTP では、マネージド ID 承認はサポートされていません。

  • Microsoft Entra ID のサポートは、SSH 証明書と公開キー認証に限定されます。

  • RSA 証明書のみがサポートされています。 ECDSA はサポートされていません。

  • ホーム ディレクトリの設定はサポートされていません。

  • 接続文字列にコンテナー名を含めることはできません。 ユーザーはストレージ アカウントのルートに接続し、"ディレクトリの変更" (cd) コマンドを使用して移動先のコンテナーとディレクトリに移動します。

  • chownchgrp には、所有権またはスーパーユーザーのアクセス許可を管理する必要があります。

  • chmod には、変更権限またはスーパーユーザー権限が必要です。

Troubleshooting

コンテナーを開くと、"アクセスが拒否されました" で失敗する

WinSCP を使用してストレージ アカウントに接続でき、サインイン後にコンテナーの一覧を表示できる場合でも、 Access denied エラーが発生する可能性があります。

このエラーは、WinSCP が入力 するすべてのディレクトリの正規化 を自動的に試行するため、発生する可能性があります。 つまり、 すべてのcd またはディレクトリの一覧に対して、"true" 絶対パスを把握するために 1 つ以上の追加のプロトコル要求が送信されます。

  • ルート ディレクトリにコンテナーが表示されます
  • 各コンテナーは 仮想 chroot として機能します。 その中に入ると、上や外に出ることはできません。
  • パスは 仮想であり、物理ではありません。 Azure では、コンテナー上の /ベースの絶対トラバーサルはサポートされていません。

次のいずれかのオプションを使用して、この問題を解決します。

  • シンボリック リンクの解決を無効にします。 Advanced->Environment->Directories に移動し、シンボリック リンクの解決を解除します。

  • リモート ディレクトリを設定します。 Advanced->Environment->Directories に移動し、リモート ディレクトリを "\<container-name>" に設定します。 この値を設定すると、サインイン後に指定したコンテナーを直接入力します。

こちらも参照ください