你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:使用 .NET Core 创建管理组

管理组是一些容器,可以帮助跨多个订阅管理访问权限、策略和符合性。 可以创建这些容器来构建可以与 Azure PolicyAzure 基于角色的访问控制配合使用的有效且高效的层次结构。 若要详细了解管理组,请参阅使用 Azure 管理组整理资源

在目录中创建的第一个管理组可能需要最多 15 分钟才能完成。 一些进程会首次运行以在 Azure 中为目录设置管理组服务。 在进程完成后将显示通知。 有关详细信息,请参阅管理组的初始设置

先决条件

  • 如果没有 Azure 订阅,请在开始之前创建一个免费帐户。

  • Azure 服务主体,包括 clientId 和 clientSecret 。 如果你没有与 Azure Policy 一起使用的服务主体,或想要创建一个新的服务主体,请参阅用于 .NET 身份验证的 Azure 管理库。 跳到安装 .NET Core 包的步骤,我们将在接下来的步骤中执行此安装。

  • 如果未启用层次结构保护,则租户中的任何 Microsoft Entra ID 用户都可在未分配有管理组写入权限的情况下创建管理组。 这个新的管理组成为根管理组或默认管理组的子级,并且创建者获配“所有者”角色。 管理组服务允许此功能,因此不需要在根级别分配角色。 创建根管理组后,用户无权访问它。 若要开始使用管理组,可以通过该服务在根级别创建初始管理组。 有关更多信息,请参阅每个目录的根管理组

Azure Cloud Shell

Azure 托管 Azure Cloud Shell(一个可通过浏览器使用的交互式 shell 环境)。 可以将 Bash 或 PowerShell 与 Cloud Shell 配合使用来使用 Azure 服务。 可以使用 Cloud Shell 预安装的命令来运行本文中的代码,而不必在本地环境中安装任何内容。

若要启动 Azure Cloud Shell,请执行以下操作:

选项 示例/链接
选择代码或命令块右上角的“试用”。 选择“试用”不会自动将代码或命令复制到 Cloud Shell。 显示 Azure Cloud Shell 的“试用”示例的屏幕截图。
转到 https://shell.azure.com 或选择“启动 Cloud Shell”按钮可在浏览器中打开 Cloud Shell。 用于启动 Azure Cloud Shell 的按钮。
选择 Azure 门户右上角菜单栏上的 Cloud Shell 按钮。 显示 Azure 门户中的 Cloud Shell 按钮的屏幕截图

若要使用 Azure Cloud Shell,请执行以下操作:

  1. 启动 Cloud Shell。

  2. 选择代码块(或命令块)上的“复制”按钮以复制代码或命令。

  3. 在 Windows 和 Linux 上选择 Ctrl+Shift+V,或在 macOS 上选择 Cmd+Shift+V 将代码或命令粘贴到 Cloud Shell 会话中。

  4. 选择“Enter”运行代码或命令。

应用程序设置

若要使 .NET Core 能够管理管理组,请创建新的控制台应用程序并安装所需的包。

  1. 请确保安装最新的 .NET Core(至少为 3.1.8)。 如果尚未安装,请前往 dotnet.microsoft.com 下载。

  2. 初始化名为“mgCreate”的新 .NET Core 控制台应用程序:

    dotnet new console --name "mgCreate"
    
  3. 将目录切换到新项目文件夹,并安装 Azure Policy 所需的包:

    # Add the Azure Policy package for .NET Core
    dotnet add package Microsoft.Azure.Management.ManagementGroups --version 1.1.1-preview
    
    # Add the Azure app auth package for .NET Core
    dotnet add package Microsoft.Azure.Services.AppAuthentication --version 1.6.1
    
  4. 用以下代码替换默认的 program.cs,并保存更新的文件:

    using System;
    using System.Collections.Generic;
    using System.Threading.Tasks;
    using Microsoft.IdentityModel.Clients.ActiveDirectory;
    using Microsoft.Rest;
    using Microsoft.Azure.Management.ManagementGroups;
    using Microsoft.Azure.Management.ManagementGroups.Models;
    
    namespace mgCreate
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                string strTenant = args[0];
                string strClientId = args[1];
                string strClientSecret = args[2];
                string strGroupId = args[3];
                string strDisplayName = args[4];
    
                var authContext = new AuthenticationContext($"https://login.microsoftonline.com/{strTenant}");
                var authResult = await authContext.AcquireTokenAsync(
                       "https://management.core.windows.net",
                       new ClientCredential(strClientId, strClientSecret));
    
                using (var client = new ManagementGroupsAPIClient(new TokenCredentials(authResult.AccessToken)))
                {
                    var mgRequest = new CreateManagementGroupRequest
                    {
                        DisplayName = strDisplayName
                    };
                    var response = await client.ManagementGroups.CreateOrUpdateAsync(strGroupId, mgRequest);
                }
            }
        }
    }
    
  5. 生成并发布 mgCreate 控制台应用程序:

    dotnet build
    dotnet publish -o {run-folder}
    

创建管理组

在本快速入门中,你将在根管理组中创建一个新的管理组。

  1. 将目录更改为使用先前的 dotnet publish 命令定义的 {run-folder}

  2. 在终端中输入以下命令:

    mgCreate.exe `
       "{tenantId}" `
       "{clientId}" `
       "{clientSecret}" `
       "{groupID}" `
       "{displayName}"
    

上述命令使用以下信息:

  • {tenantId} - 替换为租户 ID
  • {clientId} -替换为服务主体的客户端 ID
  • {clientSecret} -替换为服务主体的客户端机密
  • {groupID} - 替换为新的管理组的 ID
  • {displayName} - 替换为新的管理组的易记名称

结果是根管理组中的一个新的管理组。

清理资源

  • 通过门户删除新的资源组。

  • 如果要删除 .NET Core 控制台应用程序和已安装的包,可以删除 mgCreate 项目文件夹。

后续步骤

在本快速入门中,你创建了一个管理组来整理资源层次结构。 管理组可以包含订阅或其他管理组。

要详细了解管理组以及如何管理资源层次结构,请继续执行以下操作: