次のいずれかの方法を使用して、Azure App Serviceで実行されている ASP.NET Core アプリをAzure App Configurationに接続する方法について説明します:
- システム割り当てマネージド ID (SMI)
- ユーザー割り当てマネージド ID (UMI)
- サービス プリンシパル
- 接続文字列
このチュートリアルでは、Azure CLI を使用して以下のタスクを実了します:
- Azure リソースの設定
- Web アプリとApp Configuration間の接続を作成する
- お客様のアプリをビルドして Azure App Service にデプロイします
Prerequisites
Azure へのサインイン
Azure CLI で az login を実行して Azure にサインインします。
Azure リソースの設定
まず、Azure リソースを作成します。
次のサンプルリポジトリをクローンする:
git clone https://github.com/Azure-Samples/serviceconnector-webapp-appconfig-dotnet.git
Web アプリを Azure にデプロイする。
次のステップに従って App Service を作成し、サンプル アプリをデプロイします。 サブスクリプションの 共同作成者 ロールまたは 所有者 ロールがあることを確認します。
アプリ サービスを作成し、システム割り当てマネージド ID を使用して App Config と対話するサンプル アプリをデプロイします。
# Change directory to the SMI sample
cd serviceconnector-webapp-appconfig-dotnet\system-managed-identity
# Create a web app
LOCATION='eastus'
RESOURCE_GROUP_NAME='service-connector-tutorial-rg'
APP_SERVICE_NAME='webapp-appconfig-smi'
az webapp up --location $LOCATION --resource-group $RESOURCE_GROUP_NAME --name $APP_SERVICE_NAME
| Parameter |
Description |
Example |
| Location |
近くの場所を選択します。 場所を一覧表示するには、az account list-locations --output table を使用します。 |
eastus |
| リソース グループ名 |
このリソース グループを使用して、このチュートリアルを完了するために必要なすべての Azure リソースを整理します。 |
service-connector-tutorial-rg |
| App Service の名前 |
アプリ サービス名は、Azure のリソースの名前として使用され、サーバー エンドポイントの形式でアプリの完全修飾ドメイン名を形成するために使用されます。 有効な文字は、A-Z、0-9、および - です。 Azure はランダムな文字列を追加して、サーバー エンドポイントをすべての Azure で一意にします。 |
webapp-appconfig-smi |
アプリ サービスを作成し、ユーザー割り当てマネージド ID を使用して App Config と対話するサンプル アプリをデプロイします。
# Change directory to the UMI sample
cd serviceconnector-webapp-appconfig-dotnet\user-assigned-managed-identity
# Create a web app
LOCATION='eastus'
RESOURCE_GROUP_NAME='service-connector-tutorial-rg'
APP_SERVICE_NAME='webapp-appconfig-umi'
az webapp up --location $LOCATION --resource-group $RESOURCE_GROUP_NAME --name $APP_SERVICE_NAME
| Parameter |
Description |
Example |
| Location |
近くの場所を選択します。 場所を一覧表示するには、az account list-locations --output table を使用します。 |
eastus |
| リソース グループ名 |
このリソース グループを使用して、このチュートリアルを完了するために必要なすべての Azure リソースを整理します。 |
service-connector-tutorial-rg |
| App Service の名前 |
アプリ サービス名は、Azure のリソースの名前として使用され、サーバー エンドポイントの形式でアプリの完全修飾ドメイン名を形成するために使用されます。 有効な文字は、A-Z、0-9、および - です。 Azure はランダムな文字列を追加して、サーバー エンドポイントをすべての Azure で一意にします。 |
webapp-appconfig-umi |
ユーザー割り当てマネージド ID を作成します。 出力を一時メモ帳に保存します。
az identity create --resource-group $RESOURCE_GROUP_NAME --name "myIdentity"
アプリサービス を作成し、サービス プリンシパルを使用して App Config と対話するサンプル アプリをデプロイします。
# Change directory to the service principal sample
cd serviceconnector-webapp-appconfig-dotnet\service-principal
# Create a web app
LOCATION='eastus'
RESOURCE_GROUP_NAME='service-connector-tutorial-rg'
APP_SERVICE_NAME='webapp-appconfig-sp'
az webapp up --location $LOCATION --resource-group $RESOURCE_GROUP_NAME --name $APP_SERVICE_NAME
| Parameter |
Description |
Example |
| Location |
近くの場所を選択します。 場所を一覧表示するには、az account list-locations --output table を使用します。 |
eastus |
| リソース グループ名 |
このリソース グループを使用して、このチュートリアルを完了するために必要なすべての Azure リソースを整理します。 |
service-connector-tutorial-rg |
| App Service の名前 |
アプリ サービス名は、Azure のリソースの名前として使用され、サーバー エンドポイントの形式でアプリの完全修飾ドメイン名を形成するために使用されます。 有効な文字は、A-Z、0-9、および - です。 Azure はランダムな文字列を追加して、サーバー エンドポイントをすべての Azure で一意にします。 |
webapp-appconfig-sp |
サービス プリンシパルを作成する。 必ず、 yourSubscriptionID を実際のサブスクリプション ID に置き換えてください。 出力を一時メモ帳に保存します。
az ad sp create-for-rbac --name myServicePrincipal --role Contributor --scopes /subscriptions/{yourSubscriptionID}/resourceGroups/$RESOURCE_GROUP_NAME
Warning
Microsoft では、利用可能な最も安全な認証フローを使用することをお勧めします。 この手順で説明する認証フローでは、アプリケーションで非常に高い信頼が必要です。 他のフローに存在しないリスクが伴います。 このフローは、マネージド ID など、より安全な他のフローが利用できない場合にのみ使用してください。
アプリ サービスを作成し、接続文字列を使用して App Config と対話するサンプル アプリをデプロイします。
# Change directory to the service principal sample
cd serviceconnector-webapp-appconfig-dotnet\connection-string
# Create a web app
LOCATION='eastus'
RESOURCE_GROUP_NAME='service-connector-tutorial-rg'
APP_SERVICE_NAME='webapp-appconfig-cs'
az webapp up --location $LOCATION --resource-group $RESOURCE_GROUP_NAME --name $APP_SERVICE_NAME
| Parameter |
Description |
Example |
| Location |
近くの場所を選択します。 場所を一覧表示するには、az account list-locations --output table を使用します。 |
eastus |
| リソース グループ名 |
このリソース グループを使用して、このチュートリアルを完了するために必要なすべての Azure リソースを整理します。 |
service-connector-tutorial-rg |
| App Service の名前 |
アプリ サービス名は、Azure のリソースの名前として使用され、サーバー エンドポイントの形式でアプリの完全修飾ドメイン名を形成するために使用されます。 有効な文字は、A-Z、0-9、および - です。 Azure はランダムな文字列を追加して、サーバー エンドポイントをすべての Azure で一意にします。 |
webapp-appconfig-cs |
Azure App Configuration ストアを作成します。
APP_CONFIG_NAME='my-app-config'
az appconfig create --resource-group $RESOURCE_GROUP_NAME --name $APP_CONFIG_NAME --sku Free --location eastus
テスト構成ファイルをAzure App Configurationにインポートします。
システム割り当てマネージド ID を使用してテスト構成ファイルをAzure App Configurationにインポートします。
ディレクトリをフォルダー ServiceConnectorSampleに変更します。
テスト構成ファイル sampleconfigs.json App Configuration ストアにインポートします。
Cloud Shell を使用している場合は、コマンドを実行する前に sampleconfigs.json アップロードします。
az appconfig kv import --name $APP_CONFIG_NAME --source file --format json --path ./sampleconfigs.json --separator : --yes
ユーザー割り当てマネージド ID を使用してテスト構成ファイルをAzure App Configurationにインポートします。
ディレクトリをフォルダー ServiceConnectorSampleに変更します。
テスト構成ファイル sampleconfigs.json App Configuration ストアにインポートします。
Cloud Shell を使用している場合は、コマンドを実行する前に sampleconfigs.json アップロードします。
az appconfig kv import --name $APP_CONFIG_NAME --source file --format json --path ./sampleconfigs.json --separator : --yes
サービス プリンシパルを使用してテスト構成ファイルをAzure App Configurationにインポートします。
ディレクトリをフォルダー ServiceConnectorSampleに変更します。
テスト構成ファイル sampleconfigs.json App Configuration ストアにインポートします。
Cloud Shell を使用している場合は、コマンドを実行する前に sampleconfigs.json アップロードします。
az appconfig kv import --name $APP_CONFIG_NAME --source file --format json --path ./sampleconfigs.json --separator : --yes
Warning
Microsoft では、利用可能な最も安全な認証フローを使用することをお勧めします。 この手順で説明する認証フローでは、アプリケーションで非常に高い信頼が必要です。 他のフローに存在しないリスクが伴います。 このフローは、マネージド ID など、より安全な他のフローが利用できない場合にのみ使用してください。
接続文字列を使用してテスト構成ファイルをAzure App Configurationにインポートします。
ディレクトリをフォルダー ServiceConnectorSampleに変更します。
テスト構成ファイル sampleconfigs.json App Configuration ストアにインポートします。
Cloud Shell を使用している場合は、コマンドを実行する前に sampleconfigs.json アップロードします。
az appconfig kv import --name $APP_CONFIG_NAME --source file --format json --path ./sampleconfigs.json --separator : --yes
Web アプリをAzure App Configurationに接続する
Web アプリケーションとAzure App Configuration 保存の間に接続を作成します。
システム割り当てマネージド ID 認証を使用して、Web アプリケーションとAzure App Configuration 保存の間に接続を作成します。 この接続は、サービス コネクタ を介して行われます。
az webapp connection create appconfig --resource-group $RESOURCE_GROUP_NAME --name $APP_SERVICE_NAME --app-config $APP_CONFIG_NAME --tg $RESOURCE_GROUP_NAME --connection "app_config_smi" --system-identity
system-identity は、システム割り当てマネージド ID (SMI) 認証の種類を指します。 Service Connector では、ユーザー割り当てマネージド ID (UMI)、接続文字列 (シークレット)、サービス プリンシパルなどの認証もサポートされています。
システム割り当てマネージド ID 認証を使用して、Web アプリケーションとAzure App Configuration 保存の間に接続を作成します。 この接続は、サービス コネクタ を介して行われます。
az webapp connection create appconfig --resource-group $RESOURCE_GROUP_NAME --name $APP_SERVICE_NAME --app-config $APP_CONFIG_NAME --tg $RESOURCE_GROUP_NAME --connection "app_config_umi" --user-identity client-id=<myIdentityClientId> subs-id=<myTestSubsId>
user-identity は、ユーザー割り当てマネージド ID 認証の種類を指します。 Service Connector では、システム割り当てマネージド ID、接続文字列 (シークレット)、サービス プリンシパルの認証もサポートされています。
client-idを検索するには、次の 2 つの方法があります:
- Azure CLI に、
az identity show --name "myIdentity" --resource-group $RESOURCE_GROUP_NAME --query 'clientId'を入力します。
- Azure portal で、先ほど作成したマネージド ID を開き、[ 概要] で [クライアント ID] の値を取得します。
サービス プリンシパルを使い、Web アプリケーションとAzure App Configuration 保存の間に接続を作成します。 この構成は、Service Connector を使用して行われます。
az webapp connection create appconfig --resource-group $RESOURCE_GROUP_NAME --name $APP_SERVICE_NAME --app-config $APP_CONFIG_NAME --tg $RESOURCE_GROUP_NAME --connection "app_config_sp" --service-principal client-id=<mySPClientId> secret=<mySPSecret>
service-principal は、サービス プリンシパル認証の種類を指します。 Service Connector では、システム割り当てマネージド ID (UMI)、ユーザー割り当てマネージド ID (UMI)、接続文字列 (シークレット) の認証もサポートされています。
接続文字列を使い、Web アプリケーションとAzure App Configuration 保存の間に接続を作成します。 この接続は、サービス コネクタ を介して行われます。
az webapp connection create appconfig --resource-group $RESOURCE_GROUP_NAME --name $APP_SERVICE_NAME --app-config $APP_CONFIG_NAME --tg $RESOURCE_GROUP_NAME --connection "app_config_cs" --secret
secret は、接続文字列認証の種類を参照します。 サービス コネクタでは以下の様な、システム割り当てマネージド ID、ユーザー割り当てマネージド ID、サービス プリンシパルなどの認証もサポートされています。
接続の検証
接続が機能しているかどうかを確認するには、Web アプリに移動します。 Web アプリにアクセスする最も簡単な方法は、Azure portal で開く方法です。 [ 概要 ] ページで、[ 既定のドメイン] を選択します。 Web サイトが起動すると、次の情報が表示されます: Hello。これで、Azure WebApp が ServiceConnector によって App Configuration に接続されました。
しくみ
認証の種類ごとに、Service Connector がバックグラウンドで管理する内容を確認します。
サービス コネクタ によって接続構成が管理されます:
- アプリケーションが Web アプリにアクセスし、App Configuration エンドポイントを取得できるように Web アプリ
AZURE_APPCONFIGURATION_ENDPOINTを設定します。
サンプル コードにアクセスします。
- Web アプリのシステム割り当てマネージド認証をアクティブ化し、App Configurationにデータ閲覧者ロールを許可して、アプリケーションが Azure.Identity の DefaultAzureCredential を使用してApp Configurationに対して認証できるようにします。
サンプル コードにアクセスします。
サービス コネクタ によって接続構成が管理されます:
- Web アプリの
AZURE_APPCONFIGURATION_ENDPOINTを設定 AZURE_APPCONFIGURATION_CLIENTID 、アプリケーションがアクセスできるようにし、 コードでアプリ構成エンドポイントを取得します。
- Web アプリのユーザー割り当てマネージド認証をアクティブ化し、App Configurationにデータ閲覧者ロールを許可して、Azure.Identity の DefaultAzureCredential を使用してアプリケーションがApp Configurationに対して認証できるようにします。
サンプル コードにアクセスします。
サービス コネクタ によって接続構成が管理されます:
- アプリケーションが Web アプリにアクセスし、App Configuration エンドポイントを取得できるように Web アプリ
AZURE_APPCONFIGURATION_ENDPOINTを設定します。
サンプル コードにアクセスします。
- サービス プリンシパルの資格情報を WebApp AppSettings
AZURE_APPCONFIGURATION_CLIENTIDに保存します。
AZURE_APPCONFIGURATION_TENANTIDをAZURE_APPCONFIGURATION_CLIENTSECRETし、サービス プリンシパルに App Configuration データ閲覧者ロールを付与します。そのため、Azure.Identity のClientSecretCredentialを使用して、コード内の App Configuration に対してアプリケーションを認証できます。
サービス コネクタ によって接続構成が管理されます:
- アプリケーションが Web アプリにアクセスし、App Configuration 接続文字列を取得できるように Web アプリ
AZURE_APPCONFIGURATION_CONNECTIONSTRINGを設定します。
サンプル コードにアクセスします。
- Web アプリのシステム割り当てマネージド認証をアクティブ化し、App Configurationにデータ閲覧者ロールを許可して、アプリケーションが Azure.Identity の DefaultAzureCredential を使用してApp Configurationに対して認証できるようにします。
サンプル コードにアクセスします。
詳細については、「 Service Connector の内部」を参照してください。
テスト (省略可能)
必要に応じて、次のテストを実行します:
App Configuration Microsoft Store内のキーSampleApplication:Settings:Messagesの値を更新します。
az appconfig kv set --name <myAppConfigStoreName> --key SampleApplication:Settings:Messages --value hello --yes
前述のように Azure Web アプリに移動し、ページを更新します。 メッセージが次に更新されていることがわかります: hello。
リソースをクリーンアップする
完了したら、これらの Azure リソースを今後使用しない場合は、 az group delete コマンドを実行して削除します。 このコマンドは、リソース グループとその中のすべてのリソースを削除します。
az group delete --name <myResourceGroupName> --yes
次のステップ