在 Azure 中使用用户分配的托管标识
介绍
先前的指南介绍了如何使用系统分配的托管标识与 Azure Stroage Blob以及如何使用系统分配的托管标识与 Azure SQL 数据库。但是,Azure 对每个 Azure 订阅的角色分配设置了 2,000 个限制。如果您拥有大量 Azure 资源,每个资源都有各自的系统分配标识和细粒度的角色分配,那么您很快就会遇到此角色分配限制。
在本指南中,你将了解如何预配用户分配的托管标识、为其分配角色以及在各种资源之间共享它们。这可以降低管理成本,因为你需要管理的服务主体更少。
确保您拥有最新版本的Azure CLI才能开始使用。
创建用户分配的身份
开始使用用户分配标识的简单方法是使用 Azure CLI。它允许你仅用几行代码创建多个 Azure 资源。本指南使用带有 PowerShell 的 Azure CLI。
$rg = "rg-pl-demo"
$id = "id-blogging-app"
$app = "app-blog"
$storage = "stblog"
az group create -l "australiaeast" -g $rg
$principalId = az identity create -g $rg -n $id -o tsv --query "id"
首先,创建一个资源组并在其中创建一个托管标识。资源组允许您一起组织和管理多个 Azure 资源。这包括分配权限或一起删除组中的所有资源。
用户分配的身份是资源组内出现的另一个资源。这很方便,因为如果您删除资源组,身份将自动被删除。相比之下,服务主体或应用程序注册需要单独管理。上面的代码创建了用户分配的身份,并将自动生成的principalId保存到变量中,以便您以后使用它。
将用户分配的标识链接到 Azure 资源
您可以将创建的标识分配给一个或多个资源。使用下面的代码片段,您可以创建 Azure 应用服务计划和应用服务。然后,您可以使用上面创建的标识。
# create an app service plan and app service
$plan = "plan-blog"
$app = "web-blog-pl"
$runtime = 'dotnetcore"|"3.1'
az appservice plan create -g $rg -n $plan --is-linux --sku F1
az webapp create -g $rg -p $plan -n $app -r $runtime
# assign the id you created before
az webapp identity assign --identities $principalId -g $rg -n $app
$storage = "stblogpl"
az storage account create -g $rg -n $storage -l "australiaeast" --sku "Standard_LRS"
# assign roles
$principalId = az identity create -g $rg -n $id -o tsv --query "principalId"
az role assignment create --role "Storage Blob Data Contributor" --assignee $principalId
应用服务可以具有多个用户分配的标识。在上面的示例中,您将一个标识分配给应用服务并为其赋予存储 Blob 数据贡献者角色。当您将此标识分配给另一个 Azure 资源时,该资源已经具有此角色,从而减少了角色分配的总数。
使用托管标识更新代码
如前所述,您的应用服务可以分配有多个身份。为了使身份验证正常工作,您需要提供您创建的托管身份的客户端 ID 。
为此,您可以使用 Azure 的新Azure.Identity nuget 包。
services.AddAzureClients(cfg =>
{
var managedIdentityClientId = Configuration["ManagedIdentityClientId"];
var options = new DefaultAzureCredentialOptions
{
ManagedIdentityClientId = managedIdentityClientId
};
var id = new Azure.Identity.DefaultAzureCredential(options);
cfg.AddBlobServiceClient(Configuration.GetSection("Storage")).WithCredential(id);
});
上述代码从配置(例如环境变量或AppSettings.json文件)中读取ManagedIdentityClientId。然后将其用作Azure.Identity.DefaultAzureCredential 类的参数。
DefaultAzureCredential是最简单的身份验证方式,因为它会自动遍历各种身份验证流程。在开发计算机上运行此代码时,它将使用 Visual Studio 或 Azure CLI 凭据。在应用服务环境中,它将使用托管标识。
注意:当您为其分配身份和角色时,可能需要几分钟才能更新。如果您遇到问题,请尝试重新部署应用程序并重新启动应用服务实例。
结论
用户分配的托管标识简化了安全性,因为您无需管理凭据。目前并非所有资源都受支持,但它们可以访问越来越多支持 Azure AD 身份验证的 Azure 资源。您可以通过阅读Microsoft 文档中支持 Azure 资源托管标识的服务来了解更多信息。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~