Azure リソースに対するマネージド ID を使用して BLOB およびキュー データへのアクセスを認証するAuthorize access to blob and queue data with managed identities for Azure resources

Azure の Blob およびキュー ストレージは、Azure Active Directory (Azure AD) 認証を Azure リソースのマネージド ID を使用してサポートします。Azure Blob and Queue storage support Azure Active Directory (Azure AD) authentication with managed identities for Azure resources. Azure リソースのマネージド ID により、Azure 仮想マシン (VM) で実行されているアプリケーション、関数アプリ、仮想マシン スケール セット、およびその他のサービスから Azure AD 資格情報を使用して、BLOB およびキューのデータへのアクセスを認証することができます。Managed identities for Azure resources can authorize access to blob and queue data using Azure AD credentials from applications running in Azure virtual machines (VMs), function apps, virtual machine scale sets, and other services. Azure リソースのマネージド ID を Azure AD 認証と一緒に使用することで、クラウドで動作するアプリケーションに資格情報を保存することを避けることができます。By using managed identities for Azure resources together with Azure AD authentication, you can avoid storing credentials with your applications that run in the cloud.

この記事では、Azure リソースにマネージド ID を使用して Azure VM から Blob またはキュー データへのアクセスを認証する方法について示します。This article shows how to authorize access to blob or queue data from an Azure VM using managed identities for Azure Resources. また、開発環境でコードをテストする方法についても説明します。It also describes how to test your code in the development environment.

VM 上のマネージド ID を有効にするEnable managed identities on a VM

Azure リソースのマネージド ID を使用して VM から BLOB およびキューへのアクセスを認証するには、最初に VM で Azure リソースのマネージド ID を有効にする必要があります。Before you can use managed identities for Azure Resources to authorize access to blobs and queues from your VM, you must first enable managed identities for Azure Resources on the VM. Azure リソースのマネージド ID を有効にする方法については、次の記事のいずれかを参照してください。To learn how to enable managed identities for Azure Resources, see one of these articles:

マネージド ID の詳細については、Azure リソースのマネージド ID に関するページを参照してください。For more information about managed identities, see Managed identities for Azure resources.

Azure ID ライブラリを使用した認証Authenticate with the Azure Identity library

Azure ID クライアント ライブラリでは、Azure SDK に対する Azure AD トークン認証のサポートが提供されています。The Azure Identity client library provides Azure Azure AD token authentication support for the Azure SDK. .NET、Java、Python、および JavaScript 用の最新バージョンの Azure Storage クライアント ライブラリは、Azure ID ライブラリと統合され、Azure Storage 要求を承認するための OAuth 2.0 トークンを取得するための簡単で安全な手段を提供します。The latest versions of the Azure Storage client libraries for .NET, Java, Python, and JavaScript integrate with the Azure Identity library to provide a simple and secure means to acquire an OAuth 2.0 token for authorization of Azure Storage requests.

Azure ID クライアント ライブラリの利点は、アプリケーションが開発環境または Azure のどちらで実行されているかにかかわらず、同じコードを使用して認証できることです。An advantage of the Azure Identity client library is that it enables you to use the same code to authenticate whether your application is running in the development environment or in Azure. .NET 対応の Azure ID クライアント ライブラリでは、セキュリティ プリンシパルが認証されます。The Azure Identity client library for .NET authenticates a security principal. コードが Azure 上で実行されている場合、セキュリティ プリンシパルは Azure リソースに対するマネージド ID です。When your code is running in Azure, the security principal is a managed identity for Azure resources. 開発環境では、マネージド ID が存在しないため、クライアント ライブラリはテスト目的でユーザーまたはサービス プリンシパルのいずれかを認証します。In the development environment, the managed identity does not exist, so the client library authenticates either the user or a service principal for testing purposes.

認証後、Azure ID クライアント ライブラリでは、トークン資格情報を取得します。After authenticating, the Azure Identity client library gets a token credential. このトークン資格情報は、Azure Storage に対して操作を実行するために作成するサービス クライアント オブジェクトにカプセル化されます。This token credential is then encapsulated in the service client object that you create to perform operations against Azure Storage. このライブラリは、適切なトークン資格情報を取得することにより、これをユーザーに代わってシームレスに処理します。The library handles this for you seamlessly by getting the appropriate token credential.

.NET 用 Azure ID クライアント ライブラリの詳細については、「.NET 用 Azure ID クライアント ライブラリ」を参照してください。For more information about the Azure Identity client library for .NET, see Azure Identity client library for .NET. Azure ID クライアント ライブラリのリファレンス ドキュメントについては、「Azure.Identity 名前空間」を参照してください。For reference documentation for the Azure Identity client library, see Azure.Identity Namespace.

データにアクセスするためのロールベースのアクセス制御 (RBAC) ロールを割り当てるAssign role-based access control (RBAC) roles for access to data

Azure AD セキュリティ プリンシパルが Blob またはキュー データにアクセスしようとする場合、そのセキュリティ プリンシパルはリソースへのアクセス許可を保持している必要があります。When an Azure AD security principal attempts to access blob or queue data, that security principal must have permissions to the resource. セキュリティ プリンシパルが Azure 内のマネージド ID であるか、開発環境でコードを実行している Azure AD ユーザー アカウントであるかにかかわらず、Azure Storage での Blob またはキュー データへのアクセスを許可する RBAC ロールをセキュリティ プリンシパルに割り当てる必要があります。Whether the security principal is a managed identity in Azure or an Azure AD user account running code in the development environment, the security principal must be assigned an RBAC role that grants access to blob or queue data in Azure Storage. RBAC 経由でのアクセス許可の割り当てについては、「Azure Active Directory を使用して Azure Blob およびキューへのアクセスを承認します」にある「アクセス権に RBAC ロールを割り当てる」というタイトルのセクションを参照してください。For information about assigning permissions via RBAC, see the section titled Assign RBAC roles for access rights in Authorize access to Azure blobs and queues using Azure Active Directory.

開発環境でユーザーを認証するAuthenticate the user in the development environment

開発環境でコードを実行している場合は、認証が自動的に処理されるか、使用しているツールに応じてブラウザー ログインが必要になることがあります。When your code is running in the development environment, authentication may be handled automatically, or it may require a browser login, depending on which tools you're using. たとえば、Microsoft Visual Studio では、アクティブな Azure AD ユーザー アカウントが自動的に認証に使用されるように、シングル サインオン (SSO) がサポートされています。For example, Microsoft Visual Studio supports single sign-on (SSO), so that the active Azure AD user account is automatically used for authentication. SSO の詳細については、アプリケーションへのシングル サインオンに関するページを参照してください。For more information about SSO, see Single sign-on to applications.

他の開発ツールでは、Web ブラウザー経由でログインするように求められる場合があります。Other development tools may prompt you to login via a web browser.

開発環境でサービス プリンシパルを認証するAuthenticate a service principal in the development environment

開発環境で Web ブラウザーによるシングル サインオンまたはログインがサポートされていない場合は、サービス プリンシパルを使用して開発環境から認証を受けることができます。If your development environment does not support single sign-on or login via a web browser, then you can use a service principal to authenticate from the development environment.

サービス プリンシパルを作成するCreate the service principal

Azure CLI を使用してサービス プリンシパルを作成し、RBAC ロールを割り当てるには、az ad sp create-for-rbac コマンドを呼び出します。To create a service principal with Azure CLI and assign an RBAC role, call the az ad sp create-for-rbac command. 新しいサービス プリンシパルに割り当てる Azure Storage データ アクセス ロールを指定します。Provide an Azure Storage data access role to assign to the new service principal. さらに、ロール割り当て用のスコープを指定します。Additionally, provide the scope for the role assignment. Azure Storage 用に提供されている組み込みロールの詳細については、「Azure リソースの組み込みロール」を参照してください。For more information about the built-in roles provided for Azure Storage, see Built-in roles for Azure resources.

サービス プリンシパルにロールを割り当てるための十分なアクセス許可がない場合は、アカウント所有者または管理者にロールの割り当ての実行を依頼しなければならない可能性があります。If you do not have sufficient permissions to assign a role to the service principal, you may need to ask the account owner or administrator to perform the role assignment.

次の例では、Azure CLI を使用して新しいサービス プリンシパルを作成し、ストレージ BLOB データ閲覧者ロールをアカウント スコープで割り当てています。The following example uses the Azure CLI to create a new service principal and assign the Storage Blob Data Reader role to it with account scope

az ad sp create-for-rbac \
    --name <service-principal> \
    --role "Storage Blob Data Reader" \
    --scopes /subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>

az ad sp create-for-rbac コマンドによって、サービス プリンシパルのプロパティの一覧が JSON 形式で返されます。The az ad sp create-for-rbac command returns a list of service principal properties in JSON format. これらの値をコピーして、次の手順で必要な環境変数を作成するために使用できるようにします。Copy these values so that you can use them to create the necessary environment variables in the next step.

{
    "appId": "generated-app-ID",
    "displayName": "service-principal-name",
    "name": "http://service-principal-uri",
    "password": "generated-password",
    "tenant": "tenant-ID"
}

重要

RBAC ロールの割り当ての反映には数分かかることがあります。RBAC role assignments may take a few minutes to propagate.

環境変数の設定Set environment variables

Azure ID クライアント ライブラリでは、実行時に 3 つの環境変数から値を読み取って、サービス プリンシパルが認証されます。The Azure Identity client library reads values from three environment variables at runtime to authenticate the service principal. 次の表で、各環境変数に設定する値について説明します。The following table describes the value to set for each environment variable.

環境変数Environment variable Value
AZURE_CLIENT_ID サービス プリンシパル用のアプリ IDThe app ID for the service principal
AZURE_TENANT_ID サービス プリンシパルの Azure AD テナント IDThe service principal's Azure AD tenant ID
AZURE_CLIENT_SECRET サービス プリンシパル用に生成されたパスワードThe password generated for the service principal

重要

環境変数を設定したら、コンソール ウィンドウを閉じて再度開きます。After you set the environment variables, close and re-open your console window. Visual Studio または他の開発環境を使用している場合は、新しい環境変数を登録するために開発環境の再起動が必要である可能性があります。If you are using Visual Studio or another development environment, you may need to restart the development environment in order for it to register the new environment variables.

詳細については、ポータルでの Azure アプリ用の ID 作成に関するページを参照してください。For more information, see Create identity for Azure app in portal.

クライアント ライブラリ パッケージをインストールするInstall client library packages

注意

ここに示す例では、Azure Storage クライアント ライブラリバージョン 12 を使用します。The examples shown here use the Azure Storage client library version 12. バージョン 12 クライアント ライブラリは、Azure SDK に含まれています。The version 12 client library is part of the Azure SDK. Azure SDK の詳細については、GitHub で Azure SDK リポジトリを参照してください。For more information about the Azure SDK, see the Azure SDK repository on GitHub.

BLOB ストレージ パッケージをインストールするには、NuGet パッケージ マネージャー コンソールから次のコマンドを実行します。To install the Blob storage package, run the following command from the NuGet package manager console:

Install-Package Azure.Storage.Blobs

ここに示す例では、Azure AD の資格情報で認証するために、.NET 用 Azure ID クライアント ライブラリの最新バージョンも使用されます。The examples shown here also use the latest version of the Azure Identity client library for .NET to authenticate with Azure AD credentials. パッケージをインストールするには、NuGet パッケージ マネージャー コンソールから次のコマンドを実行します。To install the package, run the following command from the NuGet package manager console:

Install-Package Azure.Identity

.NET コード例: ブロック BLOB を作成する.NET code example: Create a block blob

Azure ID と Azure Storage クライアント ライブラリを使用するために、次の using ディレクティブをコードに追加します。Add the following using directives to your code to use the Azure Identity and Azure Storage client libraries.

using Azure;
using Azure.Identity;
using Azure.Storage.Blobs;
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;

Azure Storage への要求を承認するためにコード上で使用できるトークン資格情報を取得するには、DefaultAzureCredential クラスのインスタンスを作成します。To get a token credential that your code can use to authorize requests to Azure Storage, create an instance of the DefaultAzureCredential class. 次のコード例では、認証済みのトークン資格情報を取得し、それを使用してサービス クライアント オブジェクトを作成した後、サービス クライアントを使用して新しい Blob をアップロードする方法を示します。The following code example shows how to get the authenticated token credential and use it to create a service client object, then use the service client to upload a new blob:

async static Task CreateBlockBlobAsync(string accountName, string containerName, string blobName)
{
    // Construct the blob container endpoint from the arguments.
    string containerEndpoint = string.Format("https://{0}.blob.core.windows.net/{1}",
                                                accountName,
                                                containerName);

    // Get a credential and create a client object for the blob container.
    BlobContainerClient containerClient = new BlobContainerClient(new Uri(containerEndpoint),
                                                                    new DefaultAzureCredential());

    try
    {
        // Create the container if it does not exist.
        await containerClient.CreateIfNotExistsAsync();

        // Upload text to a new block blob.
        string blobContents = "This is a block blob.";
        byte[] byteArray = Encoding.ASCII.GetBytes(blobContents);

        using (MemoryStream stream = new MemoryStream(byteArray))
        {
            await containerClient.UploadBlobAsync(blobName, stream);
        }
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

注意

Azure AD を使用して BLOB またはキュー データに対する要求を承認するには、それらの要求に HTTPS を使用する必要があります。To authorize requests against blob or queue data with Azure AD, you must use HTTPS for those requests.

次のステップNext steps