クイック スタート:.NET Web アプリを使用して Azure Key Vault との間でシークレットの設定と取得を行うQuickstart: Set and retrieve a secret from Azure Key Vault by using a .NET web app

このクイック スタートでは、Azure Web アプリケーションから、Azure リソースのマネージド ID を使用して Azure Key Vault から情報を読み取る手順を学習します。In this quickstart, you follow the steps for getting an Azure web application to read information from Azure Key Vault by using managed identities for Azure resources. Key Vault の使用は、情報のセキュリティ維持につながります。Using Key Vault helps keep the information secure. 学習内容は次のとおりです。You learn how to:

  • Key Vault を作成します。Create a key vault.
  • キー コンテナーにシークレットを格納する。Store a secret in the key vault.
  • キー コンテナーからシークレットを取得する。Retrieve a secret from the key vault.
  • Azure AD Web アプリケーションを作成する。Create an Azure web application.
  • Web アプリのマネージド サービス ID を有効にする。Enable a managed service identity for the web app.
  • Web アプリケーションに必要なアクセス許可を付与して、キー コンテナーからデータを読み取るGrant the required permissions for the web application to read data from the key vault.

先に進む前に、Key Vault の基本概念を確認してください。Before we go any further, please read the basic concepts for Key Vault.

注意

Key Vault は、プログラムでシークレットを格納できる中央リポジトリです。Key Vault is a central repository to store secrets programmatically. しかしこれを実行するには、アプリケーションとユーザーが最初に Key Vault に対する認証を行う (シークレットを提示する) 必要があります。But to do so, applications and users need to first authenticate to Key Vault--that is, present a secret. セキュリティのベスト プラクティスに従うために、最初のシークレットのローテーションが定期的に行われる必要があります。In keeping with security best practices, this first secret needs to be rotated periodically.

Azure リソースのマネージド サービス ID を使用すると、Azure で実行されるアプリケーションには、Azure が自動的に管理する ID が付与されます。With managed service identities for Azure resources, applications that run in Azure get an identity that Azure manages automatically. これにより、シークレット導入問題が解決されます。ユーザーとアプリケーションはベスト プラクティスに従うことができ、最初のシークレットのローテーションについて心配する必要がありませんThis helps solve the secret introduction problem so that users and applications can follow best practices and not have to worry about rotating the first secret.

Azure Cloud Shell を使用するUse Azure Cloud Shell

Azure では、ブラウザーを介して使用できる対話型のシェル環境、Azure Cloud Shell がホストされています。Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Cloud Shell では、bashPowerShell のいずれかを使用して Azure サービスを操作できます。Cloud Shell lets you use either bash or PowerShell to work with Azure services. ローカル環境に何もインストールしなくても、Cloud Shell にプレインストールされているコマンドを使用して、この記事のコードを実行できます。You can use the Cloud Shell pre-installed commands to run the code in this article without having to install anything on your local environment.

Azure Cloud Shell を起動するには:To launch Azure Cloud Shell:

オプションOption 例とリンクExample/Link
コード ブロックの右上隅にある [使ってみる] を選択します。Select Try It in the upper-right corner of a code block. [試してみる] を選択しても、コードは Cloud Shell に自動的にコピーされません。Selecting Try It doesn't automatically copy the code to Cloud Shell. Azure Cloud Shell の [使ってみる] の例
https://shell.azure.com に移動するか、 [Cloud Shell を起動する] ボタンを選択して、ブラウザーで Cloud Shell を開きます。Go to https://shell.azure.com or select the Launch Cloud Shell button to open Cloud Shell in your browser. <a href="https://shell.azure.com" title="Azure Cloud Shell を起動する
Azure portal の右上にあるメニュー バーの [Cloud Shell] ボタンを選択します。Select the Cloud Shell button on the top-right menu bar in the Azure portal. Azure Portal の [Cloud Shell] ボタン

Azure Cloud Shell でこの記事のコードを実行するには:To run the code in this article in Azure Cloud Shell:

  1. Cloud Shell を起動します。Launch Cloud Shell.
  2. [コピー] ボタンを選択して、コード ブロックをコードにコピーします。Select the Copy button on a code block to copy the code.
  3. Windows と Linux では Ctrl + Shift + V キー、macOS では Cmd + Shift + V キーを使用して、コードを Cloud Shell セッションに貼り付けます。Paste the code into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS.
  4. Enter キーを押して、コードを実行します。Press Enter to run the code.

前提条件Prerequisites

Azure にログインするLog in to Azure

Azure CLI を使用して Azure にログインするには、次のように入力します。To log in to Azure by using the Azure CLI, enter:

az login

リソース グループの作成Create a resource group

az group create コマンドを使ってリソース グループを作成します。Create a resource group by using the az group create command. Azure リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。An Azure resource group is a logical container into which Azure resources are deployed and managed.

リソース グループ名を選択し、プレース ホルダーを入力します。Select a resource group name and fill in the placeholder. 次の例では、米国東部リージョンにリソース グループを作成します。The following example creates a resource group in the East US location:

# To list locations: az account list-locations --output table
az group create --name "<YourResourceGroupName>" --location "East US"

作成したリソース グループは、この記事の全体を通して使用します。The resource group that you just created is used throughout this article.

Key Vault を作成しますCreate a key vault

次に、前の手順で作成したリソース グループにキー コンテナーを作成します。Next you create a key vault in the resource group that you created in the previous step. 次の情報を指定します。Provide the following information:

  • キー コンテナー名:名前の文字数は 3 から 24 文字です。使用できる文字は 0-9、a-z、A-Z、およびハイフン (-) のみです。Key vault name: The name must be a string of 3-24 characters and must contain only 0-9, a-z, A-Z, and a hyphen (-).
  • リソース グループ名。Resource group name.
  • 場所:米国東部Location: East US.
az keyvault create --name "<YourKeyVaultName>" --resource-group "<YourResourceGroupName>" --location "East US"

この時点で、使用している Azure アカウントのみが、この新しいコンテナーで任意の操作を実行することが許可されます。At this point, your Azure account is the only one that's authorized to perform any operations on this new vault.

キー コンテナーにシークレットを追加するAdd a secret to the key vault

シークレットのしくみをよく理解できるように、シークレットを追加します。We're adding a secret to help illustrate how this works. SQL 接続文字列やその他の情報を機密として保持する必要があるのに、アプリケーションで使用可能になるように保管している場合があります。You might be storing a SQL connection string or any other information that you need to keep securely but make available to your application.

次のコマンドを入力して、AppSecret というキー コンテナーにシークレットを作成します。Type the following commands to create a secret in the key vault called AppSecret. このシークレットには、値 MySecret が格納されます。This secret will store the value MySecret.

az keyvault secret set --vault-name "<YourKeyVaultName>" --name "AppSecret" --value "MySecret"

シークレットに格納されている値をプレーンテキストとして表示するには:To view the value contained in the secret as plain text:

az keyvault secret show --name "AppSecret" --vault-name "<YourKeyVaultName>"

このコマンドは、URI を含むシークレットの情報を表示します。This command shows the secret information, including the URI. これらの手順を完了すると、キー コンテナーのシークレットへの URI がわかります。After you complete these steps, you should have a URI to a secret in a key vault. この情報をメモしてください。Make note of this information. 後の手順で必要になります。You'll need it in a later step.

リポジトリを複製するClone the repo

リポジトリを複製して、ソースを編集できるローカル コピーを作成します。Clone the repo to make a local copy where you can edit the source. 次のコマンドを実行します。Run the following command:

git clone https://github.com/Azure-Samples/key-vault-dotnet-core-quickstart.git

ソリューションを開いて編集するOpen and edit the solution

program.cs ファイルを編集し、特定のキー コンテナー名でサンプルを実行します。Edit the program.cs file to run the sample with your specific key vault name:

  1. フォルダー key-vault-dotnet-core-quickstart を参照します。Browse to the folder key-vault-dotnet-core-quickstart.
  2. Visual Studio 2019 で、key-vault-dotnet-core-quickstart.sln ファイルを開きます。Open the key-vault-dotnet-core-quickstart.sln file in Visual Studio 2019.
  3. Program.cs ファイルを開き、プレースホルダー YourKeyVaultName を先ほど作成したキー コンテナーの名前に更新します。Open the Program.cs file and update the placeholder YourKeyVaultName with the name of the key vault that you created earlier.

このソリューションでは、AppAuthentication ライブラリと KeyVault NuGet ライブラリが使用されます。This solution uses AppAuthentication and KeyVault NuGet libraries.

アプリの実行Run the app

Visual Studio 2019 のメイン メニューで、 [デバッグ] > [デバッグなしで開始] と選択します。From the main menu of Visual Studio 2019, select Debug > Start without debugging. ブラウザーが表示されたら、 [バージョン情報] ページに移動します。When the browser appears, go to the About page. AppSecret の値が表示されます。The value for AppSecret is displayed.

Azure に Web アプリケーションを発行するPublish the web application to Azure

このアプリを Azure に発行し、Web アプリとしてライブであることと、シークレット値を取得することを確認します。Publish this app to Azure to see it live as a web app, and to see that you can fetch the secret value:

  1. Visual Studio で、key-vault-dotnet-core-quickstart プロジェクトを選択します。In Visual Studio, select the key-vault-dotnet-core-quickstart project.
  2. [発行] > [開始] の順に選択します。Select Publish > Start.
  3. 新しい App Service を作成し、 [発行] を選択します。Create a new App Service, and then select Publish.
  4. アプリ名を keyvaultdotnetcorequickstart に変更します。Change the app name to keyvaultdotnetcorequickstart.
  5. 作成 を選択します。Select Create.

Web アプリのマネージド ID を有効にするEnable a managed identity for the web app

Azure Key Vault は、資格情報およびその他のキーやシークレットを安全に保管する方法を提供しますが、コードは Key Vault に認証してそれらを取得する必要があります。Azure Key Vault provides a way to securely store credentials and other keys and secrets, but your code needs to authenticate to Key Vault to retrieve them. Azure リソースのマネージド ID は、Azure Active Directory (Azure AD) で自動的に管理されている ID を Azure サービスに付与することで、この問題を簡単に解決します。Managed identities for Azure resources overview makes solving this problem simpler, by giving Azure services an automatically managed identity in Azure Active Directory (Azure AD). この ID を使用して、コードに資格情報が含まれていなくても、Key Vault を含む Azure AD の認証をサポートする任意のサービスに認証することができます。You can use this identity to authenticate to any service that supports Azure AD authentication, including Key Vault, without having any credentials in your code.

Azure CLI で assign-identity コマンドを実行して、このアプリケーションの ID を作成します。In the Azure CLI, run the assign-identity command to create the identity for this application:

az webapp identity assign --name "keyvaultdotnetcorequickstart" --resource-group "<YourResourceGroupName>"

注意

この手順のコマンドは、ポータルに移動して、Web アプリケーション プロパティの [Identity / System assigned](ID/システム割り当て済み)[オン] に切り替えることと同等です。The command in this procedure is the equivalent of going to the portal and switching the Identity / System assigned setting to On in the web application properties.

アプリケーションにアクセス許可を割り当ててキー コンテナーからシークレットを読み取るAssign permissions to your application to read secrets from Key Vault

アプリケーションを Azure に発行するときの出力をメモします。Make a note of the output when you publish the application to Azure. 次の形式にする必要があります。It should be of the format:

    {
      "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "type": "SystemAssigned"
    }
    

次に、キー コンテナーの名前と PrincipalId の値を使用してこのコマンドを実行します。Then, run this command by using the name of your key vault and the value of PrincipalId:


az keyvault set-policy --name '<YourKeyVaultName>' --object-id <PrincipalId> --secret-permissions get list

これで、アプリケーションを実行すると、取得されたシークレットの値が表示されます。Now when you run the application, you should see your secret value retrieved. 上記のコマンドでは、アプリ サービスの ID に、キー コンテナーに対する get および list 操作を行うアクセス許可を付与しています。In the preceding command, you're giving the identity of the app service permissions to do get and list operations on your key vault.

リソースのクリーンアップClean up resources

リソース グループと仮想マシン、関連するすべてのリソースは、不要になったら削除してください。Delete the resource group, virtual machine, and all related resources when you no longer need them. そのためには、キー コンテナーのリソース グループを選択し、 [削除] を選択します。To do so, select the resource group for the key vault and select Delete.

キー コンテナーは、az keyvault delete コマンドを使用して削除します。Delete the key vault by using the az keyvault delete command:

az keyvault delete --name
                   [--resource-group]
                   [--subscription]

次の手順Next steps