了解如何使用以下方法之一将 Azure 应用服务上运行的 ASP.NET Core 应用连接到 Azure 应用程序配置:
- 系统分配的托管标识 (SMI)
- 用户分配的托管标识 (UMI)
- 服务主体
- 连接字符串
本教程使用 Azure CLI 完成以下任务:
- 设置 Azure 资源
- 在 Web 应用与应用程序配置之间创建连接
- 生成应用并将其部署到 Azure 应用服务
先决条件
登录 Azure
在 Azure CLI 中运行 az login
以登录到 Azure。
设置 Azure 资源
首先创建 Azure 资源。
克隆以下示例存储库:
git clone https://github.com/Azure-Samples/serviceconnector-webapp-appconfig-dotnet.git
将 Web 应用部署到 Azure
按照以下步骤创建应用服务并部署示例应用。 请确保你具有“订阅参与者”或“所有者”角色。
创建应用服务,并部署使用系统分配的托管标识来与应用程序配置交互的示例应用。
# 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
参数 |
说明 |
示例 |
位置 |
选择附近的位置。 使用 az account list-locations --output table 列出位置。 |
eastus |
资源组名称 |
你将使用此资源组来组织完成本教程所需的所有 Azure 资源。 |
service-connector-tutorial-rg |
应用服务名称 |
应用服务名称用作 Azure 中的资源名称,并用于以服务器终结点 https://<app-service-name>.azurewebsites.com 的形式构成应用的完全限定域名。 此名称在整个 Azure 中必须唯一,允许的字符仅包括 A -Z 、0 -9 和 - 。 |
webapp-appconfig-smi |
创建应用服务,并部署使用用户分配的托管标识来与应用程序配置交互的示例应用。
# 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
参数 |
说明 |
示例 |
位置 |
选择附近的位置。 使用 az account list-locations --output table 列出位置。 |
eastus |
资源组名称 |
你将使用此资源组来组织完成本教程所需的所有 Azure 资源。 |
service-connector-tutorial-rg |
应用服务名称 |
应用服务名称用作 Azure 中的资源名称,并用于以服务器终结点 https://<app-service-name>.azurewebsites.com 的形式构成应用的完全限定域名。 此名称在整个 Azure 中必须唯一,允许的字符仅包括 A -Z 、0 -9 和 - 。 |
webapp-appconfig-umi |
创建用户分配的托管标识。 将输出保存到临时记事本中。
az identity create --resource-group $RESOURCE_GROUP_NAME -n "myIdentity"
创建应用服务,并部署使用服务主体来与应用程序配置交互的示例应用。
# 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
参数 |
说明 |
示例 |
位置 |
选择附近的位置。 使用 az account list-locations --output table 列出位置。 |
eastus |
资源组名称 |
你将使用此资源组来组织完成本教程所需的所有 Azure 资源。 |
service-connector-tutorial-rg |
应用服务名称 |
应用服务名称用作 Azure 中的资源名称,并用于以服务器终结点 https://<app-service-name>.azurewebsites.com 的形式构成应用的完全限定域名。 此名称在整个 Azure 中必须唯一,允许的字符仅包括 A -Z 、0 -9 和 - 。 |
webapp-appconfig-sp |
创建服务主体,确保将 yourSubscriptionID
替换为你的实际订阅 ID。 将输出保存到临时记事本中。
az ad sp create-for-rbac --name myServicePrincipal --role Contributor --scopes /subscriptions/{yourSubscriptionID}/resourceGroups/$RESOURCE_GROUP_NAME
警告
Microsoft 建议使用最安全的可用身份验证流。 本过程中介绍的身份验证流程需要非常高的信任度,并携带其他流中不存在的风险。 请仅在无法使用其他更安全的流(例如托管标识)时才使用此流。
创建应用服务,并部署使用连接字符串来与应用程序配置交互的示例应用。
# 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
参数 |
说明 |
示例 |
位置 |
选择附近的位置。 使用 az account list-locations --output table 列出位置。 |
eastus |
资源组名称 |
你将使用此资源组来组织完成本教程所需的所有 Azure 资源。 |
service-connector-tutorial-rg |
应用服务名称 |
应用服务名称用作 Azure 中的资源名称,并用于以服务器终结点 https://<app-service-name>.azurewebsites.com 的形式构成应用的完全限定域名。 此名称在整个 Azure 中必须唯一,允许的字符仅包括 A -Z 、0 -9 和 - 。 |
webapp-appconfig-cs |
创建 Azure 应用程序配置存储
APP_CONFIG_NAME='my-app-config'
az appconfig create -g $RESOURCE_GROUP_NAME -n $APP_CONFIG_NAME --sku Free -l eastus
将测试配置文件导入 Azure 应用程序配置。
使用系统分配的托管标识将测试配置文件导入 Azure 应用程序配置。
运行 cd 进入文件夹 ServiceConnectorSample
将 ./sampleconfigs.json 测试配置文件导入应用程序配置存储。 如果使用的是 Cloud Shell,请在运行该命令之前上传 sampleconfigs.json。
az appconfig kv import -n $APP_CONFIG_NAME --source file --format json --path ./sampleconfigs.json --separator : --yes
使用用户分配的托管标识将测试配置文件导入 Azure 应用程序配置。
运行 cd 进入文件夹 ServiceConnectorSample
将 ./sampleconfigs.json 测试配置文件导入应用程序配置存储。 如果使用的是 Cloud Shell,请在运行该命令之前上传 sampleconfigs.json。
az appconfig kv import -n $APP_CONFIG_NAME --source file --format json --path ./sampleconfigs.json --separator : --yes
使用服务主体将测试配置文件导入 Azure 应用程序配置。
运行 cd 进入文件夹 ServiceConnectorSample
将 ./sampleconfigs.json 测试配置文件导入应用程序配置存储。 如果使用的是 Cloud Shell,请在运行该命令之前上传 sampleconfigs.json。
az appconfig kv import -n $APP_CONFIG_NAME --source file --format json --path ./sampleconfigs.json --separator : --yes
警告
Microsoft 建议使用最安全的可用身份验证流。 本过程中介绍的身份验证流程需要非常高的信任度,并携带其他流中不存在的风险。 请仅在无法使用其他更安全的流(例如托管标识)时才使用此流。
使用连接字符串将测试配置文件导入 Azure 应用程序配置。
运行 cd 进入文件夹 ServiceConnectorSample
将 ./sampleconfigs.json 测试配置文件导入应用程序配置存储。 如果使用的是 Cloud Shell,请在运行该命令之前上传 sampleconfigs.json。
az appconfig kv import -n $APP_CONFIG_NAME --source file --format json --path ./sampleconfigs.json --separator : --yes
将 Web 应用连接到应用程序配置
在 Web 应用程序与应用程序配置存储之间创建连接。
使用系统分配的托管标识身份验证在 Web 应用程序与应用程序配置存储之间创建连接。 此连接是通过服务连接器实现的。
az webapp connection create appconfig -g $RESOURCE_GROUP_NAME -n $APP_SERVICE_NAME --app-config $APP_CONFIG_NAME --tg $RESOURCE_GROUP_NAME --connection "app_config_smi" --system-identity
system-identity
表示系统分配的托管标识 (SMI) 身份验证类型。 服务连接器还支持以下身份验证:用户分配的托管标识 (UMI)、连接字符串(机密)和服务主体。
使用用户分配的托管标识身份验证在 Web 应用程序与应用程序配置存储之间创建连接。 此连接是通过服务连接器实现的。
az webapp connection create appconfig -g $RESOURCE_GROUP_NAME -n $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
表示用户分配的托管标识身份验证类型。 服务连接器还支持以下身份验证:系统分配的托管标识、连接字符串(机密)和服务主体。
可通过两种方式查找 client-id
:
- 在 Azure CLI 中,输入
az identity show -n "myIdentity" -g $RESOURCE_GROUP_NAME --query 'clientId'
。
- 在 Azure 门户中,打开先前创建的托管标识,然后在“概述”中获取“客户端 ID”下的值。
使用服务主体在 Web 应用程序与应用程序配置存储之间创建连接。 此连接是通过服务连接器实现的。
az webapp connection create appconfig -g $RESOURCE_GROUP_NAME -n $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
表示服务主体身份验证类型。 服务连接器还支持以下身份验证:系统分配的托管标识 (UMI)、用户分配的托管标识 (UMI) 和连接字符串(机密)。
使用连接字符串在 Web 应用程序与应用程序配置存储之间创建连接。 此连接是通过服务连接器实现的。
az webapp connection create appconfig -g $RESOURCE_GROUP_NAME -n $APP_SERVICE_NAME --app-config $APP_CONFIG_NAME --tg $RESOURCE_GROUP_NAME --connection "app_config_cs" --secret
secret
表示连接字符串身份验证类型。 服务连接器还支持以下身份验证:系统分配的托管标识、用户分配的托管标识和服务主体。
验证连接
- 若要检查连接是否正常,请在浏览器中通过
https://<myWebAppName>.azurewebsites.net/
导航到你的 Web 应用。 该网站打开后,你会看到它显示“Hello. Your Azure WebApp is connected to App Configuration by ServiceConnector now”。
工作原理
在下面了解服务连接器在幕后为每种身份验证类型管理哪些配置。
服务连接器为你管理连接配置:
- 设置 Web 应用的
AZURE_APPCONFIGURATION_ENDPOINT
,以允许应用程序访问它并获取应用程序配置终结点。 访问示例代码。
- 激活 Web 应用的系统分配的托管身份验证,并为应用程序配置授予数据读取者角色,以允许应用程序使用 Azure.Identity 中的 DefaultAzureCredential 向应用程序配置进行身份验证。 访问示例代码。
服务连接器为你管理连接配置:
- 设置 Web 应用的
AZURE_APPCONFIGURATION_ENDPOINT
、AZURE_APPCONFIGURATION_CLIENTID
,以允许应用程序访问它并在代码中获取应用程序配置终结点;
- 激活 Web 应用的用户分配的托管身份验证,并为应用程序配置授予数据读取者角色,以允许应用程序使用 Azure.Identity 中的 DefaultAzureCredential 向应用程序配置进行身份验证。 访问示例代码。
服务连接器为你管理连接配置:
- 设置 Web 应用的
AZURE_APPCONFIGURATION_ENDPOINT
,以允许应用程序访问它并获取应用程序配置终结点。 访问示例代码。
- 将服务主体凭据保存到 WebApp AppSettings
AZURE_APPCONFIGURATION_CLIENTID
。 AZURE_APPCONFIGURATION_TENANTID
、AZURE_APPCONFIGURATION_CLIENTSECRET
,并向服务主体授予应用程序配置数据读取者角色,以便可以使用 Azure.Identity 中的 ClientSecretCredential
在代码中向应用程序配置进行身份验证。
服务连接器为你管理连接配置:
- 设置 Web 应用的
AZURE_APPCONFIGURATION_CONNECTIONSTRING
,以允许应用程序访问它并获取应用程序配置连接字符串。 访问示例代码。
- 激活 Web 应用的系统分配的托管身份验证,并为应用程序配置授予数据读取者角色,以允许应用程序使用 Azure.Identity 中的 DefaultAzureCredential 向应用程序配置进行身份验证。 访问示例代码。
有关详细信息,请参阅服务连接器内部机制。
测试(可选)
(可选)执行以下测试:
更新应用程序配置存储中键 SampleApplication:Settings:Messages
的值。
az appconfig kv set -n <myAppConfigStoreName> --key SampleApplication:Settings:Messages --value hello --yes
通过 https://<myWebAppName>.azurewebsites.net/
导航到你的 Azure Web 应用,然后刷新页面。 你将看到消息已更新为“hello”。
清理资源
完成后,如果不再使用这些 Azure 资源,请运行 az group delete
命令将其删除。 此命令将删除资源组及其中的所有资源。
az group delete -n <myResourceGroupName> --yes
后续步骤
参考下面列出的教程来详细了解服务连接器。