Azure Storage アカウントの共有キーによる承認を禁止する

Azure ストレージ アカウントに対するセキュリティで保護されたすべての要求を承認する必要があります。 既定では、Azure Active Directory (Azure AD) の資格情報、または共有キーによる承認用のアカウント アクセス キーを使用して、要求を承認することができます。 これら 2 種類の承認では、Azure AD の方がセキュリティが優れ、共有キーより使いやすいので、Microsoft ではそちらをお勧めします。 Azure AD を使用してクライアントに要求の認証を要求するには、共有キーで認証されたストレージ アカウントへの要求を許可しないようにします。

ストレージ アカウントの共有キーによる承認を禁止すると、それ以降、そのアカウントに対するアカウント アクセスキーによる承認の要求はすべて、Azure Storage によって拒否されます。 Azure AD によって承認されるセキュリティで保護された要求のみが成功します。 Azure AD の使用に関する詳細については、「Azure Storage 内のデータへのアクセスを認可する」を参照してください。

ストレージ アカウントの AllowSharedKeyAccess プロパティは既定では未設定で、明示的に設定されるまで値を返しません。 このプロパティの値が null または true の場合、ストレージ アカウントでは共有キーによって承認される要求が許可されます。

この記事では、DRAG (検出-修復-監査-ガバナンス) フレームワークを使用して、ストレージ アカウントに対する共有キー認可を継続的に管理する方法について説明します。

前提条件

いずれかのストレージ アカウントで共有キー アクセスを禁止する前に、次の操作を行います。

共有キーを禁止したときの SAS トークンに対する影響を理解する

ストレージ アカウントに対して共有キー アクセスを禁止すると、Azure Storage では、SAS の種類と、要求の対象のサービスに基づいて、SAS トークンが処理されます。 次の表では、ストレージ アカウントの AllowSharedKeyAccess プロパティが false のときの、SAS の各種類の承認方法と、Azure Storage によるその SAS の処理方法を示します。

SAS の種類 承認の種類 AllowSharedKeyAccess が false の場合の動作
ユーザー委任 SAS(BLOB ストレージのみ) Azure AD 要求は許可されます。 Microsoft では、セキュリティ向上のため、可能な限りユーザー委任 SAS を使用することを推奨しています。
サービス SAS 共有キー すべての Azure Storage サービスの要求が拒否されます。
アカウント SAS 共有キー すべての Azure Storage サービスの要求が拒否されます。

Azure Monitor での Azure のメトリックとログでは、さまざまな種類の共有アクセス署名は区別されません。 Azure メトリックス エクスプローラーの [SAS] フィルター、および Azure Monitor の Azure Storage ログでの [SAS] フィールドのどちらでも、すべての種類の SAS で承認された要求が報告されます。 ただし、共有アクセス署名の種類が異なると、承認方法が異なり、共有キー アクセスが禁止されたときの動作が異なります。

  • サービス SAS トークンまたはアカウント SAS トークンは、共有キーを使用して承認されるので、AllowSharedKeyAccess プロパティが false に設定されていると、Blob Storage への要求では許可されません。
  • ユーザー委任 SAS は、Azure AD を使用して承認されるので、AllowSharedKeyAccess プロパティが false に設定されていても、Blob Storage への要求で許可されます。

ストレージ アカウントへのトラフィックを評価するときは、「クライアント アプリケーションによって使用されている承認の種類を検出する」で説明されているメトリックとログに、ユーザー委任 SAS を使用して行われた要求が含まれている可能性があることに注意してください。

Shared Access Signature の詳細については、「Shared Access Signatures (SAS) を使用して Azure Storage リソースへの制限付きアクセスを許可する」を参照してください。

Azure の他のツールおよびサービスとの互換性を検討する

多くの Azure サービスは、Azure Storage との通信に共有キーによる承認が使用されています。 ストレージ アカウントに対する共有キーによる承認を禁止すると、これらのサービスはそのアカウントのデータにアクセスできなくなり、アプリケーションに悪影響が及ぶ可能性があります。

一部の Azure ツールでは、Azure AD 承認を使用して Azure Storage にアクセスするオプションが提供されています。 次の表では、一般的な Azure ツールと、Azure AD を使用して Azure Storage への要求を承認できるかどうかに関する注意事項を示します。

Azure ツール Azure Storage に対する Azure AD 承認
Azure portal サポートされています。 Azure portal からの Azure AD アカウントを使用した承認の詳細については、「Azure portal で BLOB データへのアクセスの承認方法を選択する」を参照してください。
AzCopy Blob Storage の場合、サポートされています。 AzCopy の操作の承認については、AzCopy のドキュメントの「認証資格情報の提供方法を選択する」を参照してください。
Azure ストレージ エクスプローラー BLOB ストレージ、キュー ストレージ、テーブル ストレージ、Azure Data Lake Storage Gen2 でサポートされます。 キュー ストレージに対する Azure AD のアクセスはサポートされていません。 正しい Azure AD テナントを選択してください。 詳細については、「Storage Explorer の概要」を参照してください
Azure PowerShell サポートされています。 Azure AD で BLOB またはキューの操作の PowerShell コマンドを承認する方法の詳細については、「Azure AD の資格情報を使用して PowerShell コマンドを実行して BLOB データにアクセスする」または「Azure AD 資格情報を使用して PowerShell コマンドを実行してキューのデータにアクセスする」を参照してください。
Azure CLI サポートされています。 BLOB およびキューのデータにアクセスするために、Azure AD で Azure CLI コマンドを承認する方法については、Azure AD 資格情報を使用して Azure CLI コマンドを実行して BLOB またはキューのデータにアクセスする方法に関する記事を参照してください。
Azure IoT Hub サポートされています。 詳細については、IoT Hub による仮想ネットワークのサポートに関する記事を参照してください。
Azure Cloud Shell Azure Cloud Shell は、Azure portal の統合シェルです。 Azure Cloud Shell では、ストレージ アカウントの Azure ファイル共有で永続化するためのファイルがホストされています。 そのストレージ アカウントで共有キーによる承認が許可されていない場合、これらのファイルはアクセスできなくなります。 詳細については、「Microsoft Azure Files ストレージの接続」を参照してください。

Azure Cloud Shell でコマンドを実行して、共有キーによるアクセスが禁止されているストレージ アカウントを管理するには、最初に、Azure RBAC でこれらのアカウントに必要なアクセス許可が付与されていることを確認します。 詳細については、「Azure ロールベースのアクセス制御 (Azure RBAC) とは」を参照してください。

Azure AD の条件付きアクセスを使用するための共有キーの認可を禁止する

Azure AD の条件付きアクセスポリシーを使用して Azure Storage アカウントを保護するには、ストレージ アカウントに対する共有キーの認可を禁止する必要があります。

Azure Files ワークロードを移行する

Azure Storage では、Azure AD の認可は、BLOB、テーブル、キューの各ストレージに対する要求についてだけサポートされています。 ストレージ アカウントの共有キーによる認可を禁止した場合、共有キー認可を使用する Azure Files への要求は失敗します。 Azure portal は常に共有キー認可を使用してファイル データにアクセスするため、ストレージ アカウントに対する共有キーを使用した認可を許可しない場合は、Azure portal で Azure Files のデータにアクセスできません。

共有キーによるアカウントへのアクセスを禁止する前に、Azure Files のデータを別のストレージ アカウントに移行すること、または Azure Files のワークロードをサポートするストレージ アカウントに対してこの設定を適用しないことをお勧めします。

ストレージ アカウントに対する共有キー アクセスを禁止しても、Azure Files への SMB 接続には影響しません。

共有キー アクセスを許可するストレージ アカウントを特定する

共有キー アクセスを許可するストレージ アカウントを特定するには、次の 2 つの方法があります。

複数のアカウントに対する共有キーによるアクセスの設定を確認する

ストレージ アカウントのセットについて共有キーによるアクセスの設定を最もすばやく確認するには、Azure portal の Azure Resource Graph エクスプローラーを使用します。 Resource Graph エクスプローラーの使用の詳細については、「クイック スタート:Azure Resource Graph エクスプローラーを使用して初めての Resource Graph クエリを実行する」を参照してください。

Resource Graph エクスプローラーで次のクエリを実行すると、ストレージ アカウントの一覧が返され、各アカウントに対する共有キーによるアクセスの設定が表示されます。

resources
| where type =~ 'Microsoft.Storage/storageAccounts'
| extend allowSharedKeyAccess = parse_json(properties).allowSharedKeyAccess
| project subscriptionId, resourceGroup, name, allowSharedKeyAccess

監査モードで共有キー アクセスの Azure Policy を構成する

Azure Policy の [ストレージ アカウントでは、共有キーのアクセスを禁止する必要がある] により、適切なアクセス許可を持つユーザーが、共有キー認可を許可するように新規または既存のストレージ アカウントを構成できなくなります。 このポリシーを監査モードで構成して、共有キー認可が許可されているストレージ アカウントを特定します。 認可に共有キーではなく Azure AD を使用するようにアプリケーションを変更した後は、共有キー アクセスを許可しないようにポリシーを更新することができます。

組み込みポリシーの詳細については、組み込みポリシー定義の一覧にある「ストレージ アカウントでは、共有キーのアクセスを禁止する必要がある」を参照してください。

リソース スコープの組み込みポリシーを割り当てる

Azure portal で組み込みポリシーを適切なスコープに割り当てるには、次の手順に従います。

  1. Azure portal で [ポリシー] を検索し、Azure Policy ダッシュボードを表示します。

  2. [作成] セクションで [割り当て] を選択します。

  3. [ポリシーの割り当て] を選択します。

  4. [ポリシーの割り当て] ページの [基本] タブの [スコープ] セクションで、ポリシー割り当てのスコープを指定します。 [その他] ボタン (...) を選択して、サブスクリプションとオプションのリソース グループを選択します。

  5. [ポリシー定義] フィールドで、[その他] ボタン (...) を選択し、[検索] フィールドに "共有キー アクセス" を入力します。 [ストレージ アカウントでは、共有キーのアクセスを禁止する必要がある] という名前のポリシー定義を選択します。

    組み込みのポリシーを選択して、ストレージ アカウントの共有キー アクセスを許可しないようにする方法を示すスクリーンショット

  6. [Review + create](レビュー + 作成) を選択します。

  7. [確認と作成] タブで、ポリシーの割り当てを確認し、[作成] を選択して、指定したスコープにポリシー定義を割り当てます。

ポリシーへの準拠を監視する

共有キー アクセスのポリシーに準拠するためにストレージ アカウントを監視するには、次の手順に従います。

  1. Azure Policy ダッシュボードの [作成][割り当て] を選択します。

  2. 前のセクションで作成したポリシー割り当てを見つけて選択します。

  3. [コンプライアンスの表示] タブを選択します。

  4. ポリシー要件を満たしていない、ポリシー割り当てのスコープ内のすべてのストレージ アカウントが、コンプライアンス レポートに表示されます。

    共有キー アクセスの組み込みポリシーのコンプライアンス レポートを表示する方法を示すスクリーンショット。

ストレージ アカウントが非準拠である理由の詳細を取得するには、[コンプライアンスの理由][詳細] を選択します。

クライアント アプリケーションによって使用されている承認の種類を検出する

この変更を行う前に、共有キーによる承認を禁止したときのクライアント アプリケーションに対する影響を理解するには、ストレージ アカウントのログとメトリックを有効にします。 その後、一定期間にわたってアカウントに対する要求のパターンを分析することで、要求がどのように承認されているかを判断できます。

ストレージ アカウントが受信している要求のうち、共有キーまたは Shared Access Signature (SAS) で承認されているものの数を確認するには、メトリックを使用します。 それらの要求を送信しているクライアントを特定するには、ログを使用します。

SAS は、共有キーまたは Azure AD のいずれかで認証されます。 共有アクセス署名で行われた要求の解釈については、「Understand how disallowing Shared Key affects SAS tokens (共有キーを禁止すると SAS トークンに与える影響について)」を参照してください。

共有キーで認可される要求の数と頻度を決定する

ストレージ アカウントへの要求がどのように承認されているかを追跡するには、Azure portal で Azure メトリックス エクスプローラーを使用します。 メトリックス エクスプローラーの詳細については、「Azure メトリックス エクスプローラーの概要」を参照してください。

共有キーまたは SAS を使用して行われた要求を追跡するメトリックを作成するには、次の手順のようにします。

  1. Azure Portal のストレージ アカウントに移動します。 [監視] セクションで、 [メトリック] を選択します。

  2. 新しいメトリック ボックスが次のように表示されます。

    新しいメトリック ダイアログのスクリーンショット。

    表示されない場合は、[メトリックの追加] を選択します。

  3. [メトリック] ダイアログで、次の値を指定します。

    1. [スコープ] フィールドは、ストレージ アカウントの名前が設定されたままにします。
    2. [メトリック名前空間]Account に設定します。 このメトリックでは、ストレージ アカウントに対するすべての要求が報告されます。
    3. [メトリック] フィールドを [トランザクション] に設定します。
    4. [集計] フィールドを [合計] に設定します。

    新しいメトリックでは、指定した期間内のストレージ アカウントに対するトランザクション数の合計が表示されます。 結果のメトリックは、次の図のように表示されます。

    共有キーまたは SAS を使用して行われたトランザクション数を合計するようにメトリックを構成する方法を示すスクリーンショット。

  4. 次に、 [フィルターの追加] ボタンを選択して、要求の種類に関するメトリックのフィルターを作成します。

  5. [フィルター] ダイアログで、次の値を指定します。

    1. [プロパティ] の値を [認証] に設定します。
    2. [演算子] フィールドを等号 (=) に設定します。
    3. [値] フィールドで、 [アカウント キー][SAS] を選択します。
  6. 右上隅で、メトリックを表示する期間を選択します。 1 分から 1 か月の範囲で間隔を指定して、要求の集計のきめ細かさを指示することもできます。 たとえば、 [期間] を 30 日に設定し、 [時間の粒度] を 1 日に設定すると、過去 30 日間について 1 日ごとに集計された要求が表示されます。

メトリックを構成すると、ストレージ アカウントに対する要求がグラフに表示されるようになります。 次の図では、共有キーを使用して承認されたか、SAS トークンを使用して行われた要求が示されています。 過去 30 日間の要求が、1 日ごとに集計されています。

共有キーを使用して認可された要求の集計を示すスクリーンショット。

ストレージ アカウントで共有キーを使用して承認された要求が一定数に達したら通知する警告ルールを構成することもできます。 詳細については、「Azure Monitor を使用してメトリック アラートを作成、表示、管理する」を参照してください。

ログを分析し、共有キーまたは SAS による要求を承認しているクライアントを特定する

Azure Storage のログには、要求の承認方法など、ストレージ アカウントに対して行われた要求の詳細が記録されます。 ログを分析することで、共有キーまたは SAS トークンによる要求を承認しているクライアントを特定できます。

承認方法を評価するために、Azure ストレージ アカウントに対する要求をログに記録するには、Azure Monitor の Azure Storage ログを使用できます。 詳細については、「Azure Storage を監視する」を参照してください。

Azure Monitor の Azure Storage ログ記録では、ログ クエリを使用したログ データの分析がサポートされています。 ログに対してクエリを実行するために、Azure Log Analytics ワークスペースを使用できます。 ログ クエリの詳細については、「チュートリアル: Log Analytics クエリの使用方法」を参照してください。

Azure portal での診断設定の作成

Azure Monitor で Azure Storage のデータをログに記録し、Azure Log Analytics で分析するには、まず、データをログに記録する要求の種類とストレージ サービスを指示する診断設定を作成する必要があります。 Azure portal で診断設定を作成するには、これらの手順に従います。

  1. Azure ストレージ アカウントが含まれるサブスクリプションに新しい Log Analytics ワークスペースを作成するか、既存の Log Analytics ワークスペースを使用します。 ストレージ アカウントのログ記録を構成した後、Log Analytics ワークスペースでログを使用できるようになります。 詳細については、「Azure ポータルで Log Analytics ワークスペースを作成する」を参照してください。

  2. Azure Portal のストレージ アカウントに移動します。

  3. [監視] セクションで、[診断設定] を選択します。

  4. 要求をログに記録する Azure Storage サービスを選択します。 たとえば、Blob Storage に対する要求をログに記録するには、 [Blob] を選択します。

  5. [診断設定の追加] を選択します。

  6. 診断設定の名前を指定します。

  7. [カテゴリの詳細][ログ] セクションで、StorageReadStorageWriteStorageDelete を選択して、選択したサービスに対するすべてのデータ要求をログに記録します。

  8. [宛先の詳細] で、 [Log Analytics への送信] を選択します。 以下の図に示すように、ご利用のサブスクリプションと、先ほど作成した Log Analytics ワークスペースを選択します。

    要求のログを記録するための診断設定の作成方法を示すスクリーンショット。

ストレージ アカウント内の Azure Storage リソースの種類ごとに、診断設定を作成できます。

診断設定を作成した後、ストレージ アカウントに対する要求が、その設定に従ってログに記録されるようになります。 詳細については、Azure でリソース ログとメトリックを収集するための診断設定の作成に関するページを参照してください。

Azure Monitor の Azure Storage ログで使用できるフィールドのリファレンスについては、「リソース ログ」を参照してください。

共有キーまたは SAS を使用して行われた要求のログのクエリを実行する

Azure Monitor の Azure Storage ログには、ストレージ アカウントに要求を行うために使用された承認の種類が記録されます。 過去 7 日間に共有キーまたは SAS を使用して行われて承認された要求のログを取得するには、Log Analytics ワークスペースを開きます。 次に、以下のクエリを新しいログ クエリに貼り付けて実行します。 このクエリでは、共有キーまたは SAS で承認された要求を最も頻繁に送信した 10 個の IP アドレスが表示されます。

StorageBlobLogs
| where AuthenticationType in ("AccountKey", "SAS") and TimeGenerated > ago(7d)
| summarize count() by CallerIpAddress, UserAgentHeader, AccountName
| top 10 by count_ desc

このクエリに基づいて警告ルールを構成し、共有キーまたは SAS で承認された要求に関する通知を受け取ることもできます。 詳細については、「Azure Monitor を使用してログ アラートを作成、表示、管理する」を参照してください。

共有キーによる承認を修正する

ストレージ アカウントへの要求がどのように承認されているかを分析したら、共有キーによるアクセスを禁止するアクションを実行できます。 ただし、まず、共有キーによる承認を使用しているアプリケーションを、代わりに Azure AD を使用するように更新する必要があります。 「クライアント アプリケーションによって使用されている承認の種類を検出する」の説明に従って、ログとメトリックを監視し、移行を追跡することができます。 Azure AD を使用してストレージ アカウント内のデータにアクセスすることについて詳しくは、「Azure Storage 内のデータへのアクセスを認可する」を参照してください。

共有キーを使用して承認される要求を安全に拒否できることを確信したら、ストレージ アカウントの AllowSharedKeyAccess プロパティを false に設定できます。

警告

現在、共有キーを使用してストレージ アカウントのデータにアクセスしているクライアントがいる場合、ストレージ アカウントへの共有キーによるアクセスを禁止する前に、それらのクライアントを Azure AD に移行することをお勧めします。

共有キー アクセスを許可または禁止するためのアクセス許可

ストレージ アカウントの AllowSharedKeyAccess プロパティを設定するには、ストレージ アカウントを作成および管理するためのアクセス許可が必要です。 これらのアクセス許可を提供する Azure ロールベースのアクセス制御 (Azure RBAC) ロールには、Microsoft.Storage/storageAccounts/write または Microsoft.Storage/storageAccounts/* アクションが含まれます。 このアクションの組み込みロールには、次のようなロールがあります。

これらのロールでは、Azure Active Directory (Azure AD) を使用してストレージ アカウントのデータにアクセスすることはできません。 ただし、アカウント アクセス キーへのアクセスを許可する Microsoft.Storage/storageAccounts/listkeys/action が含まれています。 このアクセス許可では、ユーザーがアカウント アクセス キーを使用して、ストレージ アカウント内のすべてのデータにアクセスできます。

ユーザーがストレージ アカウントに対する共有キー アクセスを許可または禁止できるようにするには、ロール割り当てのスコープをストレージ アカウント以上のレベルにする必要があります。 ロール スコープの詳細については、「Azure RBAC のスコープについて」を参照してください。

これらのロールを割り当てる際には、ストレージ アカウントを作成したり、そのプロパティを更新したりする機能を必要とするユーザーにのみ割り当てるように、注意してください。 最小限の特権の原則を使用して、ユーザーに、それぞれのタスクを実行するのに必要な最小限のアクセス許可を割り当てるようにします。 Azure RBAC でアクセスを管理する方法の詳細については、「Azure RBAC のベスト プラクティス」を参照してください。

Note

従来のサブスクリプション管理者ロールであるサービス管理者と共同管理者には、Azure Resource Manager の所有者ロールと同等のものが含まれています。 所有者ロールにはすべてのアクションが含まれているため、これらの管理者ロールのいずれかを持つユーザーも、ストレージ アカウントを作成および管理できます。 詳細については、従来のサブスクリプション管理者ロール、Azure ロール、および Azure AD 管理者ロールに関する記事を参照してください。

共有キー認可を無効にする

必要なアクセス許可を持つアカウントを使用して、Azure portal、PowerShell、または Azure CLI で共有キー認可を無効にします。

Azure portal でストレージ アカウントに対する共有キーによる承認を禁止するには、次の手順のようにします。

  1. Azure Portal のストレージ アカウントに移動します。

  2. [設定] から [構成] 設定を探します。

  3. [Allow storage account key access](ストレージ アカウント キーのアクセスを許可する)[無効] に設定します。

    ストレージ アカウントに対する共有キー アクセスを禁止する方法を示すスクリーンショット。

共有キーによる承認を無効にした後は、共有キーによる承認を使用してストレージ アカウントに要求を行うと、エラー コード 403 (許可されていません) で失敗します。 そのストレージ アカウントではキーに基づく認可が許可されていないことを示すエラーが、Azure Storage から返されます。

AllowSharedKeyAccess プロパティは、Azure Resource Manager デプロイ モデルを使用するストレージ アカウントのみでサポートされています。 Azure Resource Manager デプロイ モデルを使用しているストレージ アカウントの詳細については、「ストレージ アカウントの種類」を参照してください。

共有キーによるアクセスが許可されないことを確認する

共有キーによる承認が許可されないことを確認するには、アカウント アクセス キーを使用してデータ操作の呼び出しを試みます。 次の例では、アクセス キーを使用してコンテナーの作成を試みています。 ストレージ アカウントで共有キーによる承認が許可されていない場合、この呼び出しは失敗します。 かっこ内のプレースホルダー値を独自の値に置き換えることを忘れないでください。

az storage container create \
    --account-name <storage-account> \
    --name sample-container \
    --account-key <key> \
    --auth-mode key

Note

匿名の要求は承認されず、ストレージ アカウントとコンテナーが匿名パブリック読み取りアクセス用に構成されている場合は続行されます。 詳細については、コンテナーと BLOB の匿名パブリック読み取りアクセスの構成に関するページを参照してください。

Azure Policy の準拠を監視する

目的のストレージ アカウントでの共有キー アクセスを禁止したら、先ほど作成したポリシーへの継続的な準拠を監視し続けます。 監視結果に基づき、必要に応じて適切なアクションを実行します。これには、ポリシーのスコープの変更、より多くのアカウントでの共有キー アクセスの禁止、修復に時間がかかるアカウントに対する共有キー アクセスの許可などが含まれます。

共有キー アクセスを許可しないように Azure Policy を更新する

ポリシー [ストレージ アカウントでは、共有キーのアクセスを禁止する必要がある] に対して前に作成した Azure Policy 割り当ての適用を開始するには、ポリシー割り当ての [効果][拒否] に変更して、許可されているユーザーがストレージ アカウントに対して共有キー アクセスを許可しないようにします。 ポリシーの効果を変更するには、次の手順を実行します。

  1. Azure Policy ダッシュボードで、前に作成したポリシー割り当てを見つけて選択します。

  2. [割り当ての編集] を選択します。

  3. [パラメーター] タブに移動します。

  4. [入力またはレビューが必要なパラメーターのみを表示する] チェックボックスをオフにします。

  5. [効果] ドロップダウンで [監査][拒否] に変更し、[確認と保存] を選択します。

  6. [確認と保存] タブで変更点を確認し、[保存] を選択します。

注意

ポリシーの変更が反映されるまで、最大で 30 分かかる場合があります。

次のステップ