Azure Active Directory を使用して BLOB へのアクセスを認可する

Azure Storage では、Azure Active Directory (Azure AD) を使用して BLOB データへの要求を認可することがサポートされています。 Azure AD では、Azure ロールベースのアクセス制御 (Azure RBAC) を使用して、サービス プリンシパル (ユーザー、グループ、またはアプリケーションのサービス プリンシパルである可能性があります) にアクセス許可を付与します。 セキュリティ プリンシパルは、Azure AD によって認証されて、OAuth 2.0 トークンを返します。 その後、そのトークンを、Blob service に対する要求を認可するために使用できます。

Azure AD を使用して認可すると、共有キーによる認可よりも優れたセキュリティと使いやすさが実現されます。 Microsoft では、必要最小限の特権でアクセスできるようにするために、可能な場合は BLOB アプリケーションで Azure AD の認可を使用することをお勧めします。

Azure AD での承認は、すべてのパブリック リージョンおよび国内クラウド内のすべての汎用および BLOB ストレージ アカウントに対して使用できます。 Azure AD の認可は、Azure Resource Manager デプロイ モデルで作成されたストレージ アカウントにおいてのみサポートされます。

Blob Storage ではさらに、Azure AD 資格情報で署名された Shared Access Signature (SAS) を作成することもサポートされています。 詳細については、Shared Access Signatures を使用したデータへの制限付きアクセスの許可に関するページを参照してください。

BLOB に対する Azure AD の概要

セキュリティ プリンシパル (ユーザー、グループ、またはアプリケーション) が BLOB リソースにアクセスしようとする場合、BLOB を匿名アクセスに利用できる場合を除き、要求は承認される必要があります。 Azure AD では、リソースへのアクセスは 2 段階のプロセスです。

  1. まず、セキュリティ プリンシパルの ID が認証され、OAuth 2.0 トークンが返されます。

    認証の手順では、アプリケーションが実行時に OAuth 2.0 アクセス トークンを要求する必要があります。 アプリケーションが Azure VM、仮想マシン スケール セット、または Azure Functions アプリなどの Azure エンティティ内から実行されている場合、マネージド ID を使用して BLOB データにアクセスできます。

  2. 次に、そのトークンが Blob service への要求の一部として渡され、指定されたリソースへのアクセスを認可するためにサービスによって使用されます。

    承認の手順では、要求を行うセキュリティ プリンシパルに 1 つまたは複数の Azure RBAC ロールを割り当てる必要があります。 詳細については、「アクセス権の Azure ロールを割り当てる」を参照してください。

ポータル、PowerShell、または Azure CLI で Azure AD アカウントを使用する

Azure portal で Azure AD アカウントを使用してデータにアクセスする方法については、「Azure portal からのデータ アクセス」を参照してください。 Azure AD アカウントを使用して Azure PowerShell または Azure CLI コマンドを呼び出す方法については、「PowerShell または Azure CLI からのデータ アクセス」を参照してください。

Azure AD を使用してアプリケーション コードでアクセスを承認する

Azure AD を使用して Azure Storage へのアクセスを認可するには、次のいずれかのクライアント ライブラリを使用して OAuth 2.0 トークンを取得します。

  • ほとんどの開発シナリオでは、Azure ID クライアント ライブラリをお勧めします。
  • Microsoft Authentication Library (MSAL) は、特定の高度なシナリオに適している場合があります。

Azure ID クライアント ライブラリ

Azure ID クライアント ライブラリを使用すると、Azure SDK を使用して Azure Active Directory (Azure AD) での承認用の OAuth 2.0 アクセス トークンを取得するプロセスが簡単になります。 .NET、Java、Python、JavaScript、Go 用の最新バージョンの Azure Storage クライアント ライブラリは、各言語用の Azure ID ライブラリに統合され、Azure Storage 要求を承認するためのアクセス トークンを取得するための簡単で安全な手段が提供されます。

Azure ID クライアント ライブラリの利点は、アプリケーションが開発環境または Azure のどちらで実行されているかにかかわらず、同じコードを使用してアクセス トークンを取得できることです。 Azure ID クライアント ライブラリからは、セキュリティ プリンシパルのためのアクセス トークンが返されます。 コードが Azure で実行されている場合は、セキュリティ プリンシパルは、Azure リソース用のマネージド ID、サービス プリンシパル、またはユーザーやグループのいずれでもかまいません。 開発環境では、クライアント ライブラリにより、ユーザーまたはサービス プリンシパルにテストのためのアクセス トークンが提供されます。

Azure ID クライアント ライブラリによって返されるアクセス トークンは、トークン資格情報にカプセル化されています。 その後、トークン資格情報を使用してサービス クライアント オブジェクトを取得し、Azure Storage に対する承認された操作の実行で使用できます。 アクセス トークンとトークン資格情報を取得する簡単な方法は、Azure ID クライアント ライブラリによって提供される DefaultAzureCredential クラスを使用することです。 DefaultAzureCredential では、複数の異なる資格情報の種類を順番に試行して、トークン資格情報の取得を試みます。 DefaultAzureCredential は、開発環境と Azure の両方で機能します。

次の表は、さまざまなシナリオでデータへのアクセスを承認するための追加情報を示しています。

言語 .NET Java JavaScript Python Go
Azure AD での認証の概要 Azure サービスを使用して .NET アプリケーションを認証する方法 Java と Azure ID を使用した Azure 認証 Azure SDK を使用して JavaScript アプリを Azure に対して認証する Azure SDK を使用して Python アプリを Azure に対して認証する
開発者サービス プリンシパルを使用した認証 サービス プリンシパルを使用してローカル開発中に Azure サービスに対して .NET アプリを認証する サービス プリンシパルを使用した Azure 認証 サービス プリンシパルを使用して Azure サービスに対して JS アプリを認証する サービス プリンシパルを使用したローカル開発時に Azure サービスに対して Python アプリを認証する サービス プリンシパルによる Azure SDK for Go 認証
開発者またはユーザー アカウントを使用した認証 開発者アカウントを使用したローカル開発時に Azure サービスに対して .NET アプリを認証する ユーザー資格情報を使用した Azure 認証 開発アカウントを使用して Azure サービスに対して JS アプリを認証する 開発者アカウントを使用したローカル開発時に Azure サービスに対して Python アプリを認証する Azure SDK for Go での Azure 認証
Azure でホストされるアプリからの認証 Azure SDK for .NET を使用して Azure リソースに対して Azure でホストされるアプリを認証する Azure でホストされる Java アプリケーションを認証する Azure SDK for JavaScript を使用した Azure リソースに対する Azure ホスト JavaScript アプリの認証 Azure SDK for Python を使用して Azure リソースに対して Azure でホストされるアプリを認証する マネージド ID を使用して Azure SDK for Go で認証を行う
オンプレミス アプリからの認証 オンプレミスでホストされている .NET アプリから Azure リソースに対して認証する オンプレミスの JavaScript アプリを Azure リソースに対して認証する オンプレミスでホストされている Python アプリから Azure リソースに対して認証する
ID クライアント ライブラリの概要 .NET 用 Azure ID クライアント ライブラリ Java 用 Azure ID クライアント ライブラリ JavaScript 用 Azure ID クライアント ライブラリ Python 用 Azure ID クライアント ライブラリ Go 用 Azure ID クライアント ライブラリ

Microsoft Authentication Library (MSAL)

Microsoft では可能であれば Azure ID クライアント ライブラリを使用することをお勧めしますが、MSAL ライブラリは特定の高度なシナリオで使用するのに適している場合があります。 詳細については、MSAL の詳細に関するページを参照してください。

MSAL を使用して Azure Storage にアクセスするための OAuth トークンを取得する場合は、Azure AD リソース ID を指定する必要があります。 Azure AD リソース ID は、Azure リソースへのアクセスを与える目的で、発行されたトークンを利用できる対象ユーザーを示します。 Azure Storage の場合、リソース ID は 1 つのストレージ アカウントに固有となるか、あらゆるストレージ アカウントに適用されます。

次の表では、リソース ID に指定できる値の詳細についてまとめています。 Azure Storage のリソース ID は、すべてのパブリック クラウドとソブリン クラウドで同じです。

Resource ID 説明
https://<account>.blob.core.windows.net 特定のストレージ アカウントのサービス エンドポイント。 この値を使用し、その特定の Azure Storage アカウントとサービスに対してのみ要求を承認するためのトークンを取得します。 実際のストレージ アカウントの名前に値を置き換えます。
https://storage.azure.com/ あらゆる Azure Storage アカウントへの要求を承認するトークンを取得するために使用します。

アクセス権の Azure ロールを割り当てる

Azure Active Directory (Azure AD) では、Azure RBAC を通じて、セキュリティで保護されたリソースへのアクセス権が承認されます。 BLOB データへのアクセスに使用される一般的なアクセス許可セットを含む一連の組み込み RBAC ロールは、Azure Storage によって定義されます。 BLOB データにアクセスするためのカスタム ロールを定義することもできます。 BLOB アクセス用の Azure ロールの割り当ての詳細については、「BLOB データにアクセスするための Azure ロールを割り当てる」を参照してください。

Azure AD セキュリティ プリンシパルは、Azure リソースのユーザー、グループ、アプリケーション サービス プリンシパル、またはマネージド ID の場合があります。 セキュリティ プリンシパルに割り当てられた RBAC ロールによって、指定されたリソースに対するそのプリンシパルのアクセス許可が決まります。 BLOB アクセス用の Azure ロールの割り当ての詳細については、「BLOB データにアクセスするための Azure ロールを割り当てる」を参照してください。

場合によっては、BLOB リソースへのきめ細かなアクセスを有効にしたり、ストレージ リソースに対するロールの割り当てが多数ある場合にアクセス許可を簡略化したりする必要があります。 Azure 属性ベースのアクセス制御 (Azure ABAC) を使用して、ロール割り当てに関する条件を構成できます。 カスタム役割で条件を使用したり、組み込みロールを選択したりすることができます。 ABAC を使用した Azure ストレージ リソースの条件の構成に関する詳細については、「Azure ロールの割り当て条件を使用して BLOB へのアクセスを承認する (プレビュー)」を参照してください。 BLOB データ操作でサポートされる条件の詳細については、「Azure Storage 内での Azure のロールの割り当て条件のアクションと属性 (プレビュー)」を参照してください。

Note

Azure ストレージ アカウントを作成するとき、Azure AD を介してデータにアクセスするためのアクセス許可は自動的に割り当てられません。 Blob Storage にアクセスするための Azure ロールを自分自身に明示的に割り当てる必要があります。 これは、サブスクリプション、リソース グループ、ストレージ アカウント、あるいはコンテナーのレベルで割り当てることができます。

リソースのスコープ

セキュリティ プリンシパルに Azure RBAC ロールを割り当てる前に、セキュリティ プリンシパルに必要なアクセスのスコープを決定します。 ベスト プラクティスとしては、常にできるだけ狭いスコープのみを付与するのが最善の方法です。 より広い範囲で定義されている Azure RBAC ロールは、その下のリソースによって継承されます。

Azure BLOB リソースへのアクセスのスコープは、次のレベルで指定できます (最も狭いスコープから順に示します)。

  • 個々のコンテナー。 このスコープでは、ロールの割り当ては、コンテナー内のすべての BLOB と、コンテナーのプロパティおよびメタデータに適用されます。
  • ストレージ アカウント。 このスコープでは、ロールの割り当てはすべてのコンテナーとその BLOB に適用されます。
  • リソース グループです。 このスコープでは、ロールの割り当ては、リソース グループ内のすべてのストレージ アカウントのすべてのコンテナーに適用されます。
  • サブスクリプション。 このスコープでは、ロールの割り当ては、サブスクリプション内のすべてのリソース グループ内の、すべてのストレージ アカウントのすべてのコンテナーに適用されます。
  • 管理グループ。 このスコープでは、ロールの割り当ては、管理グループ内のすべてのサブスクリプション内のすべてのリソース グループ内のすべてのストレージ アカウントのすべてのコンテナーに適用されます。

Azure RBAC ロールの割り当てのスコープの詳細については、「Azure RBAC のスコープについて」を参照してください。

BLOB 用の Azure 組み込みロール

Azure RBAC には、Azure AD と OAuth を使用して BLOB データへのアクセスを承認するために、複数の組み込みロールが用意されています。 Azure Storage のデータ リソースへのアクセス許可を付与するロールの例を次に示します。

Azure 組み込みロールをセキュリティ プリンシパルに割り当てる方法については、「BLOB データにアクセスするための Azure ロールを割り当てる」を参照してください。 Azure RBAC ロールとそのアクセス許可を一覧表示する方法については、「Azure ロールの定義を一覧表示する」を参照してください。

Azure Storage の組み込みロールの定義方法については、「ロール定義について」を参照してください。 Azure カスタム ロールの作成については、「Azure カスタム ロール」を参照してください。

データ アクセスに対して明示的に定義されたロールによってのみ、セキュリティ プリンシパルによる BLOB データへのアクセスが許可されます。 所有者共同作成者ストレージ アカウント共同作成者などの組み込みロールでは、セキュリティ プリンシパルによるストレージ アカウントの管理は許可されますが、Azure AD を介したそのアカウント内の BLOB データへのアクセスは提供されません。 ただし、ロールに Microsoft.Storage/storageAccounts/listKeys/action が含まれている場合、そのロールが割り当てられているユーザーは、アカウント アクセス キーを使った共有キーによる承認を介してストレージ アカウントのデータにアクセスできます。 詳細については、「Azure portal で BLOB データへのアクセスの承認方法を選択する」を参照してください。

データ サービスと管理サービスの両方に対する Azure Storage 用の Azure 組み込みロールの詳細については、「Azure RBAC の Azure 組み込みロール」の「ストレージ」セクションを参照してください。 さらに、Azure でアクセス許可を提供するさまざまな種類のロールの詳細については、「Azure ロール、Azure AD ロール、および従来のサブスクリプション管理者ロール」を参照してください。

重要

Azure ロールの割り当ての反映には最大で 30 分かかる可能性があります。

データ操作用のアクセス許可

特定の Blob service の操作を呼び出すために必要なアクセス許可の詳細については、「データ操作呼び出しのアクセス許可」を参照してください。

Azure AD アカウントでのアクセス データ

Azure portal、PowerShell、または Azure CLI 経由での BLOB データへのアクセスは、ユーザーの Azure AD アカウントを使用するか、アカウント アクセス キー (共有キーによる認可) を使用することによって認可できます。

注意事項

共有キーを使用した承認は、安全性が低い可能性があるため、お勧めしません。 最適なセキュリティを確保するには、「Azure Storage アカウントの共有キーによる承認を禁止する」の説明に従って、ストレージ アカウントの共有キーによる承認を無効にします。

アクセス キーと接続文字列の使用は、運用環境や機密データにアクセスしない概念実証アプリまたは開発プロトタイプに限定する必要があります。 それ以外の場合は、Azure リソースに対する認証時に、Azure SDK で使用できるトークンベースの認証クラスを常に優先する必要があります。

Microsoft では、クライアントが Azure AD または Shared Access Signature (SAS) を使用して、Azure Storage 内のデータへのアクセスを承認することをお勧めします。 詳細については、「Azure Storage 内のデータへのアクセスを承認する」を参照してください。

Azure portal からのデータ アクセス

Azure portal では、Azure AD アカウントまたはアカウント アクセス キーのいずれかを使用して、Azure ストレージ アカウントの BLOB データにアクセスできます。 Azure portal で使用する認証スキームは、お客様に割り当てられている Azure ロールに応じて異なります。

BLOB データにアクセスしようとすると、Azure portal によって、まず Microsoft.Storage/storageAccounts/listkeys/action を持つ Azure ロールが割り当てられているかどうかが確認されます。 このアクションを持つロールが割り当てられている場合、Azure portal では共有キー承認によって BLOB データにアクセスするためのアカウント キーが使用されます。 このアクションを持つロールが割り当てられていない場合、Azure portal は Azure AD アカウントを使用してデータへのアクセスを試みます。

Azure AD アカウントを使用して Azure portal から BLOB データにアクセスするには、その BLOB データにアクセスするためのアクセス許可が必要です。また、Azure portal でストレージ アカウント リソース内を移動するためのアクセス許可も必要です。 Azure Storage によって提供されている組み込みロールでは BLOB リソースへのアクセス権が付与されますが、ストレージ アカウント リソースへのアクセス許可は付与されません。 このため、ポータルへのアクセスには、スコープがストレージ アカウント以上のレベルに設定された、閲覧者ロールなどの Azure Resource Manager ロールの割り当ても必要です。 リーダー役割は最も制限の厳しいアクセス許可を付与しますが、ストレージ アカウントの管理リソースへのアクセス権を付与する別の Azure Resource Manager ロールも受け入れることができます。 Azure AD アカウントを使用した Azure portal 内のデータ アクセスのためにユーザーにアクセス許可を割り当てる方法の詳細については、「BLOB データへのアクセスのための Azure ロールを割り当てる」を参照してください。

Azure portal では、コンテナーに移動すると、どの認可スキームが使用されているかが示されます。 ポータルでのデータ アクセスの詳細については、「Azure portal で BLOB データへのアクセスの承認方法を選択する」を参照してください。

PowerShell または Azure CLI からのデータ アクセス

Azure CLI と PowerShell では、Azure AD の資格情報を使ったサインインをサポートします。 サインインした後、セッションはその資格情報で実行されます。 詳細については、次のいずれかの記事を参照してください。

機能サポート

Data Lake Storage Gen2、Network File System (NFS) 3.0 プロトコル、または SSH ファイル転送プロトコル (SFTP) を有効にすると、この機能のサポートが影響を受ける場合があります。

これらの機能のいずれかを有効にした場合は、「Azure ストレージ アカウントにおける Blob Storage 機能のサポート」を参照して、この機能のサポートを評価してください。

Azure AD を使用した BLOB データ操作の承認は、REST API バージョン 2017-11-09 以降でのみサポートされています。 詳細については、「Azure Storage サービスのバージョン管理」を参照してください。

次のステップ