Key Vault のログ記録を有効にする方法How to enable Key Vault logging

1 つまたは複数のキー コンテナーを作成したら、いつ、どのように、誰によってキー コンテナーがアクセスされるのかを監視するのが一般的です。After you create one or more key vaults, you'll likely want to monitor how and when your key vaults are accessed, and by whom. 機能の詳細については、Key Vault のログ記録に関するページを参照してください。For full details on the feature, see Key Vault logging.

ログに記録される内容:What is logged:

  • 認証されたすべての REST API 要求。これには、アクセス許可がないため、システム エラーのため、または不正な要求の結果として、失敗した要求が含まれます。All authenticated REST API requests, including failed requests as a result of access permissions, system errors, or bad requests.
  • キー コンテナー自体に関する操作。これには、作成、削除、キー コンテナーのアクセス ポリシーの設定、キー コンテナー属性 (タグなど) の更新が含まれます。Operations on the key vault itself, including creation, deletion, setting key vault access policies, and updating key vault attributes such as tags.
  • 次の操作を含む、キー コンテナーのキーとシークレットに関する操作。Operations on keys and secrets in the key vault, including:
    • これらのキーまたはシークレットの作成、変更、または削除。Creating, modifying, or deleting these keys or secrets.
    • 署名、確認、暗号化、復号化、キーのラップとラップ解除、シークレットの取得、およびキーとシークレット (およびそのバージョン) の一覧表示。Signing, verifying, encrypting, decrypting, wrapping and unwrapping keys, getting secrets, and listing keys and secrets (and their versions).
  • 結果として 401 応答が発生する、認証されていない要求。Unauthenticated requests that result in a 401 response. たとえば、ベアラー トークンを持たない要求、形式が正しくない要求、有効期限切れの要求、または無効なトークンを持つ要求です。Examples are requests that don't have a bearer token, that are malformed or expired, or that have an invalid token.
  • 期限切れ間近、期限切れ、コンテナーのアクセス ポリシーが変更された場合の Event Grid の通知イベント (新しいバージョンのイベントはログに記録されません)。Event Grid notification events for near expiry, expired and vault access policy changed (new version event is not logged). キー コンテナーに作成されたイベント サブスクリプションがあるかどうかに関係なく、イベントはログに記録されます。Events are logged regardless if there is event subscription created on key vault. 詳細については、Key Vault 用の Event Grid イベント スキーマに関するページを参照してください。For more information see, Event Grid event schema for Key Vault

前提条件Prerequisites

このチュートリアルを完了するには次の準備が必要です。To complete this tutorial, you must have the following:

  • 使用している既存の Key Vault。An existing key vault that you have been using.
  • Azure Cloud Shell - Bash 環境Azure Cloud Shell - Bash environment
  • Azure 上に確保された Key Vault のログを格納するための十分なストレージ。Sufficient storage on Azure for your Key Vault logs.

このガイド コマンドは、Bash を環境として Cloud Shell 用にフォーマットされています。This guide commands are formatted for Cloud Shell with Bash as an environment.

Key Vault サブスクリプションに接続するConnect to your Key Vault subscription

キーのログ記録を設定する最初の手順は、キー コンテナーを含むサブスクリプションに接続することです。The first step in setting up key logging is connecting to subscription containing your key vault. これは、アカウントに複数のサブスクリプションが関連付けられている場合に特に重要です。This is especially important if you have multiple subscriptions associated with your account.

Azure CLI では、az account list コマンドを使用してすべてのサブスクリプションを表示してから、az account set を使用してその 1 つに接続できます。With the Azure CLI, you can view all your subscriptions using the az account list command, and then connect to one using az account set:

az account list

az account set --subscription "<subscriptionID>"

Azure PowerShell では、最初に Get-AzSubscription コマンドレットを使用してサブスクリプションを一覧表示してから、Set-AzContext コマンドレットを使用してその 1 つに接続できます。With Azure PowerShell, you can first list your subscriptions using the Get-AzSubscription cmdlet, and then connect to one using the Set-AzContext cmdlet:

Get-AzSubscription

Set-AzContext -SubscriptionId "<subscriptionID>"

ログ用のストレージ アカウントを作成するCreate a storage account for your logs

既存のストレージ アカウントをログのために使用できますが、ここでは Key Vault のログ専用に新しいストレージ アカウントを作成します。Although you can use an existing storage account for your logs, we'll create a new storage account dedicated to Key Vault logs.

また、管理を容易にするために、キー コンテナーが含まれているリソース グループと同じリソース グループを使用します。For additional ease of management, we'll also use the same resource group as the one that contains the key vault. Azure CLI のクイックスタートAzure PowerShell のクイックスタートでは、このリソース グループの名前は myResourceGroup で、場所は eastus になっています。In the Azure CLI quickstart and Azure PowerShell quickstart, this resource group is named myResourceGroup, and the location is eastus. これらの値は、必要に応じて実際の値に置き換えてください。Replace these values with your own, as applicable.

ストレージ アカウント名を指定する必要もあります。We will also need to provide a storage account name. ストレージ アカウント名は、一意であり、長さが 3 ~ 24 文字で、数字と小文字のみを使用する必要があります。Storage account names must be unique, between 3 and 24 characters in length, and use numbers and lower-case letters only. 最後に、"Standard_LRS" SKU のストレージ アカウントを作成します。Lastly, we will be creating a storage account of the "Standard_LRS" SKU.

Azure CLI では、az storage account create コマンドを使用します。With the Azure CLI, use the az storage account create command.

az storage account create --name "<your-unique-storage-account-name>" -g "myResourceGroup" --sku "Standard_LRS"

Azure PowerShell では、New-AzStorageAccount コマンドレットを使用します。With Azure PowerShell, use the New-AzStorageAccount cmdlet. リソース グループに対応する場所を指定する必要があります。You will need to provide the location that corresponds to the resource group.

 New-AzStorageAccount -ResourceGroupName myResourceGroup -Name "<your-unique-storage-account-name>" -Type "Standard_LRS" -Location "eastus"

どちらの場合も、ストレージ アカウントの "id" を書き留めます。In either case, note the "id" of the storage account. Azure CLI の操作では、出力で "id" が返されます。The Azure CLI operation returns the "id" in the output. Azure PowerShell で "id" を取得するには、Get-AzStorageAccount を使用して、その出力を変数 $sa に割り当てます。To obtain the "id" with Azure PowerShell, use Get-AzStorageAccount and assigned the output to a the variable $sa. この後は、$sa.id によってストレージ アカウントを参照できます。(この記事の後方では "$Sa.Context "プロパティも使用されます。)You can then see the storage account with $sa.id. (The "$sa.Context" property will also be used, later in this article.)

$sa = Get-AzStorageAccount -Name "<your-unique-storage-account-name>" -ResourceGroup "myResourceGroup"
$sa.id

ストレージ アカウントの "id" は、"/subscriptions/<お使いのサブスクリプション ID>/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/<お使いの一意のストレージ アカウント名>" という形式になります。The "id" of the storage account will be in the format "/subscriptions//resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/".

注意

既存のストレージ アカウントを使用する場合は、それが、目的のキー コンテナーと同じサブスクリプションを使用している必要があり、クラシック デプロイ モデルではなく Azure Resource Manager デプロイ モデルを使用する必要があります。If you decide to use an existing storage account, it must use the same subscription as your key vault, and it must use the Azure Resource Manager deployment model, rather than the classic deployment model.

キー コンテナーのリソース ID を取得するObtain your key vault Resource ID

CLI のクイックスタートPowerShell のクイックスタートでは、一意の名前を持つキーを作成しました。In the CLI quickstart and PowerShell quickstart, you created a key with a unique name. 以下の手順では、再度その名前を使用します。Use that name again in the steps below. キー コンテナーの名前を覚えていない場合は、Azure CLI の az keyvault list コマンドまたは Azure PowerShell の Get-AzKeyVault コマンドレットを使用して名前を一覧表示できます。If you cannot remember the name of your key vault, you can use the Azure CLI az keyvault list command or the Azure PowerShell Get-AzKeyVault cmdlet to list them.

キー コンテナーの名前を使用して、それのリソース ID を見つけます。Use the name of your key vault to find its Resource ID. Azure CLI では、az keyvault show コマンドを使用します。With Azure CLI, use the az keyvault show command.

az keyvault show --name "<your-unique-keyvault-name>"

Azure PowerShell では、Get-AzKeyVault コマンドレットを使用します。With Azure PowerShell, use the Get-AzKeyVault cmdlet.

Get-AzKeyVault -VaultName "<your-unique-keyvault-name>"

キー コンテナーのリソース ID は、"/subscriptions/<お使いのサブスクリプション ID>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<お使いの一意のキー コンテナー名>" という形式になります。The Resource ID for your key vault will be on the format "/subscriptions//resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/". 次の手順のためにそれを書き留めます。Note it for the next step.

ログの有効化Enable Logging

Azure CLI、Azure PowerShell、または Azure portal を使用して、Key Vault のログを有効にできます。You can enable logging for Key Vault using the Azure CLI, Azure PowerShell, or the Azure portal.

Azure CLIAzure CLI

Azure CLI の az monitor diagnostics-settings create コマンドを、ストレージ アカウント ID とキー コンテナーのリソース ID と共に使用します。Use the Azure CLI az monitor diagnostic-settings create command together with the storage account ID and the key vault Resource ID.

az monitor diagnostic-settings create --storage-account "<storage-account-id>" --resource "<key-vault-resource-id>" --name "Key vault logs" --logs '[{"category": "AuditEvent","enabled": true}]' --metrics '[{"category": "AllMetrics","enabled": true}]'

必要に応じてログのアイテム保持ポリシーを設定できます。そうすることで、指定した期間の後に古いログが自動的に削除されます。Optionally, you can set a retention policy for your logs, so that older logs are automatically deleted after a specified amount of time. たとえば、90 日より古いログを自動的に削除するアイテム保有ポリシーを設定できます。For example, you could set a retention policy that automatically deletes logs older than 90 days.

Azure CLI では、az monitor diagnostic-settings update コマンドを使用します。With the Azure CLI, use the az monitor diagnostic-settings update command.

az monitor diagnostic-settings update --name "Key vault retention policy" --resource "<key-vault-resource-id>" --set retentionPolicy.days=90

ログへのアクセスAccess your logs

Key Vault のログは、指定したストレージ アカウント内の "insights-logs-auditevent" コンテナーに格納されます。Key Vault logs are stored in the "insights-logs-auditevent" container in the storage account that you provided. ログを表示するには、BLOB をダウンロードする必要があります。To view the logs, you have to download blobs.

最初に、コンテナー内のすべての BLOB を一覧表示します。First, list all the blobs in the container. Azure CLI では、az storage blob list コマンドを使用します。With the Azure CLI, use the az storage blob list command.

az storage blob list --account-name "<your-unique-storage-account-name>" --container-name "insights-logs-auditevent"

Azure PowerShell では、Get-AzStorageBlob を使用して、このコンテナー内のすべての BLOB を一覧表示します。次のように入力します。With Azure PowerShell, use the Get-AzStorageBlob list all the blobs in this container, enter:

Get-AzStorageBlob -Container "insights-logs-auditevent" -Context $sa.Context

Azure CLI コマンドまたは Azure PowerShell コマンドレットいずれかの出力からわかるように、BLOB の名前は resourceId=<ARM resource ID>/y=<year>/m=<month>/d=<day of month>/h=<hour>/m=<minute>/filename.json という形式になっています。As you will see from the output of either the Azure CLI command or the Azure PowerShell cmdlet, the name of the blobs are in the format resourceId=<ARM resource ID>/y=<year>/m=<month>/d=<day of month>/h=<hour>/m=<minute>/filename.json. 日付と時刻の値には UTC が使用されます。The date and time values use UTC.

同じストレージ アカウントを使用して複数のリソースのログを収集することができるので、必要な BLOB のみにアクセスしたり、ダウンロードしたりする場合には、BLOB 名に完全なリソース ID を使用すると便利です。Because you can use the same storage account to collect logs for multiple resources, the full resource ID in the blob name is useful to access or download just the blobs that you need. その前に、すべての BLOB をダウンロードする方法を説明します。But before we do that, we'll first cover how to download all the blobs.

Azure CLI では、az storage blob download コマンドを使用して、それに BLOB の名前と、結果を保存するファイルへのパスを渡します。With the Azure CLI, use the az storage blob download command, pass it the names of the blobs, and the path to the file where you wish to save the results.

az storage blob download --container-name "insights-logs-auditevent" --file <path-to-file> --name "<blob-name>" --account-name "<your-unique-storage-account-name>"

Azure PowerShell では、Gt-AzStorageBlobs コマンドレットを使用して BLOB の一覧を取得してから、パイプを使用してそれを Get-AzStorageBlobContent コマンドレットに渡し、選択したパスにログをダウンロードします。With Azure PowerShell, use the Gt-AzStorageBlobs cmdlet to get a list of the blobs, then pipe that to the Get-AzStorageBlobContent cmdlet to download the logs to your chosen path.

$blobs = Get-AzStorageBlob -Container "insights-logs-auditevent" -Context $sa.Context | Get-AzStorageBlobContent -Destination "<path-to-file>"

この 2 番目のコマンドレットを PowerShell で実行すると、BLOB 名に含まれる / 区切り記号によって、宛先フォルダーの下にフォルダー構造全体が作成されます。When you run this second cmdlet in PowerShell, the / delimiter in the blob names creates a full folder structure under the destination folder. この構造は、BLOB をファイルとしてダウンロードし、保存するために使用します。You'll use this structure to download and store the blobs as files.

BLOB を選択的にダウンロードするには、ワイルドカードを使用します。To selectively download blobs, use wildcards. 次に例を示します。For example:

  • 複数の Key Vault を持っている場合に、CONTOSOKEYVAULT3 という名前の Key Vault のみについてログをダウンロードするには、次のようにします。If you have multiple key vaults and want to download logs for just one key vault, named CONTOSOKEYVAULT3:

    Get-AzStorageBlob -Container "insights-logs-auditevent" -Context $sa.Context -Blob '*/VAULTS/CONTOSOKEYVAULT3
    
  • 複数のリソース グループを持っている場合、1 つのリソース グループのみについてログをダウンロードするには、次のように -Blob '*/RESOURCEGROUPS/<resource group name>/*'を使用します。If you have multiple resource groups and want to download logs for just one resource group, use -Blob '*/RESOURCEGROUPS/<resource group name>/*':

    Get-AzStorageBlob -Container "insights-logs-auditevent" -Context $sa.Context -Blob '*/RESOURCEGROUPS/CONTOSORESOURCEGROUP3/*'
    
  • 2019 年 1 月のすべてのログをダウンロードする場合は、次のように -Blob '*/year=2019/m=01/*' を使用します。If you want to download all the logs for the month of January 2019, use -Blob '*/year=2019/m=01/*':

    Get-AzStorageBlob -Container "insights-logs-auditevent" -Context $sa.Context -Blob '*/year=2016/m=01/*'
    

これで、ログの内容を検討する準備が整いました。You're now ready to start looking at what's in the logs. ただし、検討に移る前に、他の 2 つのコマンドを知っておく必要があります。But before we move on to that, you should know two more commands:

ログの読み方の詳細については、Key Vault のログ記録に関するページの「Key Vault のログを解釈する」を参照してくださいFor details on how to read the logs, see Key Vault logging: Interpret your Key Vault logs

Azure Monitor ログの使用Use Azure Monitor logs

Azure Monitor ログの Key Vault ソリューションを使用して、Key Vault の AuditEvent ログを調査することができます。You can use the Key Vault solution in Azure Monitor logs to review Key Vault AuditEvent logs. Azure Monitor ログでは、ログ クエリを使用してデータを分析し、必要な情報を取得します。In Azure Monitor logs, you use log queries to analyze data and get the information you need.

この設定方法などの詳細については、Azure Monitor の Azure Key Vault に関するページをご覧ください。For more information, including how to set this up, see Azure Key Vault in Azure Monitor.

次のステップNext steps