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

このクイック スタートでは、Web アプリを使って Azure Key Vault にシークレットを格納する方法とシークレットを取得する方法について説明します。This quickstart shows you how to store a secret in Azure Key Vault and how to retrieve it by using a web app. Key Vault の使用は、情報のセキュリティ維持につながります。Using Key Vault helps keep the information secure. シークレット値を確認するには、Azure 上でこのクイック スタートを実行する必要があります。To see the secret value, you would have to run this quickstart on Azure. クイック スタートでは、Node.js と Azure リソースのマネージド ID を使用します。The quickstart uses Node.js and managed identities for Azure resources. 学習内容は次のとおりです。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 identity for the web app.
  • Web アプリケーションに必要なアクセス許可を付与して、キー コンテナーからデータを読み取るGrant the required permissions for the web application to read data from the key vault.

先に進む前に、Key Vault の基本的な概念について理解しておいてください。Before you proceed, make sure that you're familiar with 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.

前提条件Prerequisites

  • Node.JSNode.js
  • GitGit
  • Azure CLI 2.0.4 以降。Azure CLI 2.0.4 or later. このクイック スタートでは、Azure CLI をローカルで実行する必要があります。This quickstart requires that you run the Azure CLI locally. バージョンを確認するには、az --version を実行します。Run az --version to find the version. CLI をインストールまたはアップグレードする必要がある場合は、「Install Azure CLI 2.0 (Azure CLI 2.0 のインストール)」を参照してください。If you need to install or upgrade the CLI, see Install Azure CLI 2.0.
  • Azure サブスクリプション。An Azure subscription. Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。If you don't have an Azure subscription, create a free account before you begin.

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 by using the resource group that you created in the previous step. この記事では "ContosoKeyVault" という名前を使用していますが、一意の名前を使用する必要があります。Although this article uses “ContosoKeyVault” as the name, you have to use a unique name. 次の情報を指定します。Provide the following information:

  • キー コンテナー名。Key vault name.
  • リソース グループ名。Resource group name. 名前の文字数は 3 から 24 文字です。使用できる文字は 0-9、a-z、A-Z、およびハイフン (-) のみです。The name must be a string of 3-24 characters and must contain only 0-9, a-z, A-Z, and a hyphen (-).
  • 場所:米国東部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 と呼び、このパスワード内に MySecret という値を格納します。In this tutorial, the password will be called AppSecret and will store the value of MySecret in it.

次のコマンドを入力して、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-node-quickstart.git

依存関係をインストールするInstall dependencies

次のコマンドを実行して依存関係をインストールします。Run the following commands to install dependencies:

cd key-vault-node-quickstart
npm install

このプロジェクトでは、ms-rest-azure および azure-keyvault という 2 つのノード モジュールを使用します。This project uses two Node modules: ms-rest-azure and azure-keyvault.

Web アプリを Azure に発行するPublish the web app to Azure

Azure App Service プランを作成します。Create an Azure App Service plan. このプランには複数の Web アプリを格納することができます。You can store multiple web apps in this plan.

```
az appservice plan create --name myAppServicePlan --resource-group myResourceGroup
```

次に、Web アプリを作成します。Next, create a web app. 次の例では、<app_name> をグローバルに一意のアプリ名に置き換えます (有効な文字は a から z、0 から 9、および - です)。In the following example, replace <app_name> with a globally unique app name (valid characters are a-z, 0-9, and -). ランタイムは NODE|6.9 に設定されています。The runtime is set to NODE|6.9. サポートされているすべてのランタイムを確認するには、az webapp list-runtimes を実行します。To see all supported runtimes, run az webapp list-runtimes.

```
# Bash
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app_name> --runtime "NODE|6.9" --deployment-local-git
```

Web アプリが作成されると、Azure CLI によって次の例のような出力が表示されます。When the web app has been created, the Azure CLI shows output similar to the following example:

```
{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "<app_name>.azurewebsites.net",
  "enabled": true,
  "deploymentLocalGitUrl": "https://<username>@<app_name>.scm.azurewebsites.net/<app_name>.git"
  < JSON data removed for brevity. >
}
```

新しく作成された Web アプリに移動すると、稼働していることが確認できます。Browse to your newly created web app, and you should see that it's functioning. <app_name> を一意のアプリ名に置き換えます。Replace <app_name> with a unique app name.

```
http://<app name>.azurewebsites.net
```

また、上記のコマンドでは、ローカル Git リポジトリから Azure にデプロイできる Git 対応のアプリが作成されます。The preceding command also creates a Git-enabled app that enables you to deploy to Azure from your local Git repository. ローカル Git リポジトリには次の URL が構成されます: https://<username>@<app_name>.scm.azurewebsites.net/<app_name>.gitThe local Git repo is configured with this URL: https://<username>@<app_name>.scm.azurewebsites.net/<app_name>.git.

上記のコマンドが完了した後、ローカル Git リポジトリに Azure リモートを追加できます。After you finish the preceding command, you can add an Azure remote to your local Git repository. <url> を Git リポジトリの URL に置き換えます。Replace <url> with the URL of the Git repo.

```
git remote add azure <url>
```

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.

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

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

このコマンドは、ポータルに移動して、Web アプリケーション プロパティの [Identity / System assigned](ID/システム割り当て済み)[オン] に切り替えることと同等です。This command 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

前のコマンドの出力をメモしておきます。Make note of the output of the previous command. 次のような形式になっています。It should be in the format:

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

次に、キー コンテナーの名前と principalId の値を使用して、次のコマンドを実行します。Then, run the following 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 set

Node アプリを Azure にデプロイしてシークレット値を取得するDeploy the Node app to Azure and retrieve the secret value

次のコマンドを実行して、アプリを Azure にデプロイします。Run the following command to deploy the app to Azure:

git push azure master

この後、ブラウザーから https://<app_name>.azurewebsites.net にアクセスすると、シークレット値を確認できます。After this, when you browse to https://<app_name>.azurewebsites.net, you can see the secret value. <YourKeyVaultName> の名前は、必ず実際のコンテナー名に置き換えてください。Make sure that you replaced the name <YourKeyVaultName> with your vault name.

次の手順Next steps