Share via


Azure Blob Storage とのパスワードレス接続を使用するようにアプリケーションを移行する

Azure サービスへのアプリケーション要求は、アカウント アクセス キーまたはパスワードレス接続などの構成を使用して認証される必要があります。 ただしアプリケーションには、可能であればパスワードレス接続を優先的に使用することをお勧めします。 パスワードや秘密鍵を使用する従来の認証方法は、セキュリティ リスクと複雑さが生じます。 パスワードレス接続に移行する利点の詳細については、「Azure サービスのパスワードレス接続」ハブを参照してください。

次のチュートリアルでは、既存のアプリケーションを、パスワードレス接続を使用して接続するように移行する方法について説明します。 アクセス キー、接続文字列、または他のシークレットベースのアプローチのどれを使用しているかに関係なく、これと同じ移行手順が適用される必要があります。

ローカル開発の認証に使用するロールとユーザーを構成する

ローカルで開発する場合は、BLOB データにアクセスするユーザー アカウントに正しいアクセス許可があることを確認します。 BLOB データの読み取りと書き込みを行うには、ストレージ BLOB データ共同作成者が必要です。 このロールを自分に割り当てるには、ユーザー アクセス管理者ロール、または Microsoft.Authorization/roleAssignments/write アクションを含む別のロールに割り当てられている必要があります。 Azure portal、Azure CLI、または Azure PowerShell を使用して、ユーザーに Azure RBAC ロールを割り当てることができます。 ロールの割り当てに使用できるスコープの詳細は、スコープの概要ページでご覧いただけます。

このシナリオでは、最小限の特権の原則に従って、ストレージ アカウントに限定したアクセス許可をユーザー アカウントに割り当てます。 この方法を使って、ユーザーに必要最小限のアクセス許可のみを与え、より安全な運用環境を作成します。

次の例では、ストレージ BLOB データ共同作成者ロールを自分のユーザー アカウントに割り当てます。これにより、そのストレージ アカウント内の BLOB データに対する読み取りと書き込みの両方のアクセス権が付与されます。

重要

ほとんどの場合、ロールの割り当てが Azure に反映されるまでの時間は 1 分から 2 分ですが、まれに 8 分程度までかかる場合があります。 初めてコードを実行したときに認証エラーを受け取る場合は、しばらく待ってから再試行してください。

  1. Azure portal で、メインの検索バーまたは左側のナビゲーションを使ってストレージ アカウントを見つけます。

  2. ストレージ アカウントの概要ページで、左側のメニューから [アクセス制御 (IAM)] を選びます。

  3. [アクセス制御 (IAM)] ページで、[ロールの割り当て] タブを選びます。

  4. 上部のメニューから [+ 追加] を選択し、次に結果のドロップダウン メニューから [ロールの割り当ての追加] を選択します。

    A screenshot showing how to assign a role.

  5. 検索ボックスを使って、結果を目的のロールに絞り込みます。 この例では、ストレージ BLOB データ共同作成者を検索し、一致する結果を選び、[次へ] を選びます。

  6. [アクセスの割り当て先] で、[ユーザー、グループ、またはサービス プリンシパル] を選び、[+ メンバーの選択] を選びます。

  7. ダイアログで、自分の Microsoft Entra ユーザー名 (通常は user@domain メール アドレス) を検索し、ダイアログの下部にある [選択] を選びます。

  8. [レビューと割り当て] を選んで最終ページに移動し、もう一度 [レビューと割り当て] を行ってプロセスを完了します。

サインインしてパスワードレス接続を使用するようにアプリ コードを移行する

ローカル開発には、ロールを割り当てたのと同じ Microsoft Entra アカウントで認証を受けるようにしてください。 Azure CLI や Azure PowerShell などの一般的な開発ツールを使用して認証できます。 認証に使用できる開発ツールは、言語によって異なります。

Azure CLI で次のコマンドを使って Azure にサインインします。

az login

次に、パスワードレス接続を使用するようにコードを更新します。

  1. .NET アプリケーションで DefaultAzureCredential を使用するには、Azure.Identity パッケージをインストールします:

    dotnet add package Azure.Identity
    
  2. ファイルの先頭に、次のコードを追加します:

    using Azure.Identity;
    
  3. Azure Blob Storage に接続する BlobServiceClient を作成する箇所を、コード内で識別します。 次の例に合わせてコードを更新します。

    DefaultAzureCredential credential = new();
    
    BlobServiceClient blobServiceClient = new(
        new Uri($"https://{storageAccountName}.blob.core.windows.net"),
        credential);
    
  1. 必ず、BlobServiceClient の URI のストレージ アカウント名を更新してください。 ストレージ アカウント名は、Azure portal の概要ページで確認できます。

    Screenshot showing how to find the storage account name.

アプリをローカルで実行する

これらの変更をコードに対して行った後、アプリケーションをローカルで実行します。 新しい構成では、Azure CLI、Visual Studio、IntelliJ などのローカルの資格情報を取得する必要があります。 アプリは、Azure のローカル開発ユーザーに割り当てられたロールを使用して、Azure サービスにローカルから接続できます。

Azure ホスティング環境を構成する

パスワードレス接続を使用するようにアプリケーションを構成し、ローカルから実行しました。そのアプリケーションを Azure にデプロイすれば、同じコードで Azure サービスに対する認証を行うことができます。 以下のセクションでは、マネージド ID を使用してAzure Blob Storage に接続するようにデプロイされたアプリケーションを構成する方法について説明します。

マネージド ID を作成する

ユーザー割り当てマネージド ID は、Azure portal または Azure CLI を使用して作成できます。 アプリケーションでは、ID を使用して他のサービスに対する認証が行われます。

  1. Azure portal の上部で、"マネージド ID" を検索します。 [マネージド ID] の結果を選択します。
  2. [マネージド ID] 概要ページの上部にある [+ 作成] を選択します。
  3. [基本] タブで、次の値を入力します。
    • サブスクリプション: 目的のサブスクリプションを選択します。
    • リソース グループ: 目的のリソース グループを選択します。
    • リージョン: ご自分の場所に近いリージョンを選びます。
    • 名前: MigrationIdentity など、ID のわかりやすい名前を入力します。
  4. ページ下部にある [確認と作成] を選択します。
  5. 検証チェックが完了したら、[作成] を選択します。 Azure で、新しいユーザー割り当て ID が作成されます。

リソースが作成されたら、[Go to resource] (リソースに移動) を選択して、マネージド ID の詳細を表示します。

A screenshot showing how to create a user assigned managed identity.

マネージド ID を Web アプリに関連付ける

作成したマネージド ID を使用するように Web アプリを構成する必要があります。 Azure portal または Azure CLI を使用して、アプリに ID を割り当てます。

ID をアプリに関連付けるには、Azure portal で次の手順を実行します。 これらの同じ手順は、次の Azure サービスに適用されます。

  • Azure Spring Apps
  • Azure Container Apps
  • Azure の仮想マシン
  • Azure Kubernetes Service
  1. Web アプリの概要ページに移動します。

  2. 左側のナビゲーションから、[ID] を選択します。

  3. [ID] ページで、[ユーザー割り当て済み] タブに切り替えます。

  4. [+ 追加] を選択して、[ユーザー割り当てマネージド ID の追加] ポップアップを開きます。

  5. ID を作成するために使用したサブスクリプションを選択します。

  6. 名前で MigrationIdentity を検索し、検索結果から選択します。

  7. [追加] を選択して、ID をアプリに関連付けます。

    Screenshot showing how to create a user assigned identity.

マネージド ID にロールを割り当てる

次に、作成したマネージド ID に、ストレージ アカウントへのアクセス許可を付与する必要があります。 ローカル開発ユーザーの場合と同じように、マネージド ID にロールを割り当ててアクセス許可を付与します。

  1. ストレージ アカウントの概要ページに移動し、左側のナビゲーションから [アクセス制御 (IAM)] を選択します。

  2. [ロールの割り当ての追加] を選択します

    Screenshot showing how to add a role to a managed identity.

  3. [ロール] 検索ボックスで「ストレージ BLOB データ共同作成者」を検索します。これは BLOB のデータ操作を管理する目的で一般的に使用されるロールです。 ユース ケースに合った適切なロールであれば何でも割り当てることができます。 一覧から [ストレージ BLOB データ共同作成者] を選択し、[次へ] を選択します。

  4. [ロールの割り当てを追加] 画面の [アクセスの割り当て先] オプションで [マネージド ID] を選択します。 次に、[+ メンバーの選択] を選択します。

  5. ポップアップで、作成したマネージド ID を名前で検索し、結果から選択します。 [選択] を選択してポップアップ メニューを閉じます。

    Screenshot showing how to select the assigned managed identity.

  6. [次へ] を何度か選択して [レビューと割り当て] を選択すれば、ロールの割り当ては完了です。

アプリケーション コードを更新する

Azure にデプロイする際に作成した特定のマネージド ID を検索するように、アプリケーション コードを構成する必要があります。 シナリオによっては、アプリのマネージド ID を明示的に設定することで、他の環境 ID が誤って検出されて自動的に使用されるのを防ぐこともできます。

  1. マネージド ID の概要ページで、クライアント ID の値をクリップボードにコピーします。

  2. 次の言語固有の変更を適用します。

    DefaultAzureCredentialOptions オブジェクトを作成し、それを DefaultAzureCredential に渡します。 ManagedIdentityClientId プロパティをクライアント ID に設定します。

    DefaultAzureCredential credential = new(
        new DefaultAzureCredentialOptions
        {
            ManagedIdentityClientId = managedIdentityClientId
        });
    
  3. 構成の更新を適用するために、この変更を行った後にコードを Azure に再デプロイします。

アプリをテストする

更新したコードをデプロイしたら、ホストされているアプリケーションにブラウザーでアクセスします。 ストレージ アカウントに対してアプリから正常に接続できるはずです。 Azure 環境にロールの割り当てが反映されるまでに数分かかる場合があることに留意してください。 これでローカル環境と運用環境のどちらでも動作するようにアプリケーションが構成されました。開発者がアプリケーション自体でシークレットを管理する必要はありません。

次の手順

このチュートリアルでは、アプリケーションをパスワードレス接続に移行する方法について説明しました。

この記事で説明されている概念の詳細については、次のリソースを参照してください。