チュートリアル: Azure Database for MySQL - フレキシブル サーバーの資格情報を Azure Key Vault で管理する
[アーティクル] 08/15/2024
3 人の共同作成者
フィードバック
この記事の内容
適用対象: Azure Database for MySQL - フレキシブル サーバー
Azure Database for MySQL フレキシブル サーバーの接続文字列を Azure Key Vault に格納して、機密情報が安全に管理され、許可されているユーザーまたはアプリケーションのみがアクセスできるようにします。 さらに、接続文字列に対する変更は、アプリケーション コードを変更することなく、Key Vault 内で簡単に反映させることができます。
前提条件
Azure サブスクリプションが必要です。 まだサブスクリプションをお持ちでない場合は、開始する前に無料アカウント を作成してください。
シークレットへのアクセスはすべて、Azure Key Vault 経由で行われます。 このクイックスタートでは、Azure portal 、Azure CLI 、または Azure PowerShell を使用してキー コンテナーを作成します。 Key Vault の管理とアクセスに必要なアクセス許可があることを確認します。
アプリケーションに使用しているフレームワークに基づいて、.NET、Java、PHP、Python のどれかをインストールします。
Key Vault にシークレットを追加する
コンテナーにシークレットを追加するには、次の手順に従います。
Azure portal で、新しいキー コンテナーに移動します。
Key Vault の設定ページで、 [シークレット] を選択します。
[生成/インポート] を選択します。
[シークレットの作成] ページで、次の情報を指定します。
[アップロード オプション] :手動。
[名前] : シークレットの名前を入力します。 シークレットの名前は、キー コンテナー内で一意である必要があります。 名前は、文字で始まり、0 から 9、a から z、A から Z、および - のみを使った 1 から 127 文字の文字列である必要があります。 名前付けの詳細については、Key Vault のオブジェクト、識別子、バージョン管理 に関するセクションを参照してください。
値 : シークレットの値を入力します。 Key Vault API はシークレット値を文字列として受け取って返します。
他の値は既定値のままにしておきます。 [作成] を選択します
シークレットが正常に作成されたことを示すメッセージが表示されたら、一覧でそのシークレットを選択できます。
詳細については、「Azure Key Vault の概要 」を参照してください
Key Vault 設定で、適切なアクセス ポリシーを構成して、Key Vault から Azure Database for MySQL フレキシブル サーバーの接続文字列を取得する必要があるユーザーまたはアプリケーションにアクセス権を付与します。 シークレットに対する "Get" 操作に必要なアクセス許可が付与されていることを確認します。
Azure portal で、Key Vault リソースに移動します。
[アクセス ポリシー] 、[作成] の順に選択します。
[キーのアクセス許可] 、[シークレットのアクセス許可] 、および [証明書のアクセス許可] でアクセス許可を選択します。
[プリンシパル] 選択ウィンドウで検索フィールドにユーザー、アプリ、またはサービス プリンシパルの名前を入力し、適切な結果を選択します。 アプリにマネージド ID を使用している場合は、アプリ自体の名前を検索して選択します。
アクセス ポリシーの変更を確認し、[作成] を選択してアクセス ポリシーを保存します。
[アクセス ポリシー] ページに戻り、アクセス ポリシーが表示されていることを確認します。
Azure Database for MySQL フレキシブル サーバーの接続文字列を取得する
アプリケーションまたはスクリプトで、Azure Key Vault SDK またはクライアント ライブラリを使用して認証し、Key Vault から Azure Database for MySQL フレキシブル サーバーの接続文字列を取得します。 Key Vault にアクセスするには、適切な認証資格情報とアクセス許可を指定する必要があります。 Azure Key Vault から Azure Database for MySQL フレキシブル サーバーの接続文字列を取得したら、それをアプリケーションで使用して Azure Database for MySQL フレキシブル サーバーのデータベースへの接続を確立できます。 取得した接続文字列をパラメーターとしてデータベース接続のコードに渡します。
接続文字列を取得するコード サンプル
Key Vault シークレットから接続文字列を取得するコード サンプルをいくつか次に示します。
このコードでは、Azure SDK for .NET を使用しています。 Key Vault の URI と、取得したいシークレット (接続文字列) の名前を定義します。 次に、アプリケーションが Key Vault にアクセスするための認証情報を表す新しい DefaultAzureCredential オブジェクトを作成します。
using System;
using System.Threading.Tasks;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
namespace KeyVaultDemo
{
class Program
{
static async Task Main(string[] args)
{
var kvUri = "https://my-key-vault.vault.azure.net/";
var secretName = "my-db-conn-string";
var credential = new DefaultAzureCredential();
var client = new SecretClient(new Uri(kvUri), credential);
var secret = await client.GetSecretAsync(secretName);
var connString = secret.Value;
Console.WriteLine($"Connection string retrieved: {connString}");
}
}
}
この Java コードでは、Azure SDK for Java を使用して Azure Key Vault と通信します。 まずは、Key Vault の URL と、取得したいシークレット (接続文字列) の名前を定義します。 次に、SecretClientBuilder クラスを使用して SecretClient オブジェクトを作成します。 Key Vault URL を設定し、Microsoft Entra ID で認証するための DefaultAzureCredential を指定します。 DefaultAzureCredential は、環境変数、マネージド ID、Visual Studio Code 認証など、使用可能な資格情報を使用して自動的に認証を行います。
次に、SecretClient の getSecret メソッドを使用してシークレットを取得します。 メソッドは KeyVaultSecret オブジェクトを返します。そこから、getValue メソッドを使用してシークレット値を取得できます。 最後に、取得した接続文字列をコンソールに出力します。 keyVaultUrl 変数と secretName 変数は、必ず自分の Key Vault URL とシークレット名で置き換えてください。 次に、新しい SecretClient オブジェクトを作成し、Key Vault URI と資格情報オブジェクトを渡します。 その後、クライアント オブジェクトで GetSecretAsync メソッドを呼び出し、取得したいシークレットの名前を渡すことができます。
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;
import com.azure.security.keyvault.secrets.models.KeyVaultSecret;
public class KeyVaultDemo {
public static void main(String[] args) {
String keyVaultUrl = "https://my-key-vault.vault.azure.net/";
String secretName = "my-db-conn-string";
SecretClient secretClient = new SecretClientBuilder()
.vaultUrl(keyVaultUrl)
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
KeyVaultSecret secret = secretClient.getSecret(secretName);
String connString = secret.getValue();
System.out.println("Connection string retrieved: " + connString);
}
}
この PHP コードでは、最初に必要な自動読み込みファイルを要求し、必要なクラスを Azure SDK for PHP からインポートします。 $keyVaultUrl 変数は Azure Key Vault の URL で、$secretName 変数は取得したいシークレット (接続文字列) の名前で定義します。 次に、Microsoft Entra ID で認証するための DefaultAzureCredential オブジェクトを作成します。これにより、環境から使用可能な資格情報が自動的に取得されます。
次に SecretClient オブジェクトを作成し、Key Vault URL と資格情報オブジェクトを渡して、Key Vault で認証します。 SecretClient の getSecret メソッドは、$secretName を渡すことでシークレットを取得できます。 メソッドは KeyVaultSecret オブジェクトを返します。そこから、getValue メソッドを使用してシークレット値を取得できます。 最後に、取得した接続文字列をコンソールに出力します。 必要な Azure SDK パッケージがインストールされていることと、PHP プロジェクトに自動読み込みファイルが正しく含まれていることを確認します。
require_once 'vendor/autoload.php';
use Azure\Identity\DefaultAzureCredential;
use Azure\Security\KeyVault\Secrets\SecretClient;
$keyVaultUrl = 'https://my-key-vault.vault.azure.net/';
$secretName = 'my-db-conn-string';
$credential = new DefaultAzureCredential();
$client = new SecretClient($keyVaultUrl, $credential);
$secret = $client->getSecret($secretName);
$connString = $secret->getValue();
echo 'Connection string retrieved: ' . $connString;
この Python コードでは、まず Azure SDK for Python から必要なモジュールをインポートします。 key_vault_url 変数は Azure Key Vault の URL で、secret_name 変数は取得したいシークレット (接続文字列) の名前で定義します。 次に、Microsoft Entra ID で認証するための DefaultAzureCredential オブジェクトを作成します。 DefaultAzureCredential は、環境変数、マネージド ID、Visual Studio Code 認証など、使用可能な資格情報を使用して自動的に認証を行います。
次に SecretClient オブジェクトを作成し、Key Vault URL と資格情報オブジェクトを渡して、Key Vault で認証します。 SecretClient の get_secret メソッドは、secret_name を渡すことでシークレットを取得できます。 メソッドは KeyVaultSecret オブジェクトを返します。そこから、value プロパティを使用してシークレット値を取得できます。 最後に、取得した接続文字列をコンソールに出力します。 key_vault_url 変数と secret_name 変数は、必ず自分の Key Vault URL とシークレット名で置き換えてください。
from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient
key_vault_url = "https://my-key-vault.vault.azure.net/"
secret_name = "my-db-conn-string"
credential = DefaultAzureCredential()
secret_client = SecretClient(vault_url=key_vault_url, credential=credential)
secret = secret_client.get_secret(secret_name)
conn_string = secret.value
print("Connection string retrieved:", conn_string)
次のステップ
Azure Key Vault クライアント ライブラリ