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

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

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

この記事では、共有キーによる承認を使用して送信された要求を検出する方法と、ストレージ アカウントの共有キーによる承認を修正する方法について説明します。

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

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

ストレージ アカウントが受信している要求のうち、共有キーまたは 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. [メトリックの追加] を選択します。 [メトリック] ダイアログで、次の値を指定します。

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

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

    Screenshot showing how to configure metric to sum transactions made with Shared Key or SAS

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

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

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

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

Screenshot showing aggregated requests authorized with Shared Key

ストレージ アカウントで共有キーを使用して承認された要求が一定数に達したら通知する警告ルールを構成することもできます。 詳細については、「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 ワークスペースを選択します。

    Screenshot showing how to create a diagnostic setting for logging requests

ストレージ アカウント内の 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 に設定できます。

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

警告

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

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

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

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

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

    Screenshot showing how to disallow Shared Key access for account

共有キーによる承認を無効にした後は、共有キーによる承認を使用してストレージ アカウントに要求を行うと、エラー コード 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 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

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

ストレージ アカウントの 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 管理者ロールに関する記事を参照してください。

共有キーを禁止したときの 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 Storage Explorer Blob Storage と Azure Data Lake Storage Gen2 の場合にのみ、サポートされています。 Queue storage に対する 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 および Table Storage のワークロードの移行

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

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

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

次のステップ