Azure云计算

如何使用Azure资源管理器的REST API来修改ResourceManage虚拟机管理员登陆凭证

何为Azure 资源管理器(Azure Resource Manager)?

Azure 资源管理器是(简称ARM) Azure 的部署和管理服务。 它提供一个管理层用于在 Azure 订阅中创建、更新和删除资源。 部署后,可以使用访问控制、锁和标记等管理功能来保护和组织资源。

在Azure 开发中,我们可能会需要修改虚拟机管理员的登陆凭证。而许多开发者可能尝试过使用和虚拟机相关的Azure 资源管理器的(ARM) REST API 来修改虚拟机管理员的登陆凭证,但是并不奏效。本篇文章会引导大家如何使用ARM REST API 来修改RM虚拟机的管理员登录凭证。

如何使用Azure资源管理器的REST API来修改ResourceManage虚拟机管理员登陆凭证插图

对于Azure RM 虚拟机而言,要修改管理员登陆凭证需要通过虚拟机插件。对于windows 虚拟机需要安装“VMAccess Agent”插件,而对于Linux虚拟机,需要安装“VMAccess”插件。但是不用担心,安装并通过插件修改登陆凭证只需调用一个API即可。

下面是在Azure中国版以及Azure国际版修改登录凭证的介绍:

API 请求URL(Azure中国版-世纪互联):

PUT management.chinacloudapi.cn/subscriptions/[订阅ID]/resourceGroups/[资源组名]/providers/Microsoft.Compute/virtualMachines/[虚拟机名]/extensions/enablevmaccess?api-version=2016-03-30

API 请求URL(Azure国际版-微软):

PUT management.azure.com/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Compute/virtualMachines/[vm name]/extensions/enablevmaccess?api-version=2016-03-30

Linux 虚拟机请求Body:

{
    "properties": {
      "publisher": "Microsoft.OSTCExtensions",
      "type": "VMAccessForLinux",
      "typeHandlerVersion": "1.4",
      "protectedSettings": {
        "username": "[必填项,string,您vm现在管理员的username]",
        "password": "[可选项,string,新密码 必须符合相关密码要求]",
        "ssh_key": "[可选项,用户的公钥]",
        "reset_ssh": [可选项,boolean,是否重置ssh],
        "remove_user": "[可选项,string,需要删除的管理员名]",
        "expiration": "[可选项,string,不填默认永不过期,格式:2016-01-01]"
      }
    },
"location": "[您虚拟机所在的地域]" 
}

ssh_key支持ssh-rsa和.pem 格式

如果您的公钥格式为ssh-rsa,那么您可以以这样的格式写入:

"ssh_key": "ssh-rsa XXXXXXXX"

如果您的公钥格式为.pem,您可以使用下面的UNIX命令来转化.pem 文件为一能被JSON传输的字符串值:

awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' myCert.pem

然后,以这样的格式写入:

"ssh_key": "-----BEGIN CERTIFICATE-----\nXXXXXXXXXXXXXXXXXXXXXXXX\n-----END CERTIFICATE-----"

Windows虚拟机请求body:

{
    "properties": {
      "publisher": "Microsoft.Compute",
      "type": "VMAccessAgent",
      "typeHandlerVersion": "2.0",
      "protectedSettings": {
        "UserName": "[string,您vm现在管理员的username]",
        "Password": "[新密码,string,必须符合相关密码要求]"
      }
    },
    "location": "您虚拟机所在的地域"
}

注意:请求body中json数据的大小写需要格外注意,特别是请求中“Username”和“Password”这两个属性。


调用上述API可以为您的虚拟机安装所需插件(若之前没有安装),然后修改管理员登录凭证。

请求成功后,可以通过上述REST API的GET方法取得修改状态,在GET方法的返回结果中,有一个provisioningState字段,当该字段的值为“Creating”或者“Updating”时,则安装插件或者修改操作正在进行(整个过程大概有20-30秒)。

provisioningState字段的值为“Succeeded”时,说明操作已经完成,登录凭证已经被修改。如果provisioningState的值很快就变成“Succeeded”,可能请求时出现问题,需要检查请求是否存在问题,因为每次请求都会耗时大概20-30秒。

(END)

文章源自:Dev Chat 在线支持

作者: