阿里云代理商-阿里云服务器-阿里云数据库-重庆典名科技

阿里云云服务器ECS实例使用实例自定义数据

发布时间: 2020-11-02 13:53:13文章作者: 网站编辑阅读量: 377

  典名科技本文主要介绍阿里云云服务器ECS实例使用实例自定义数据,包括生成实例、配置实例、查看实例、修改实例、自定义、配置管理账号,以及使用实例标识。

生成实例自定义数据


实例自定义数据是一种自定义实例启动行为及传入数据的功能。

背景信息

Windows实例和Linux实例都支持实例自定义数据功能,该主要有两种用途:
  • 作为实例自定义脚本,在启动实例时执行。
  • 作为普通数据,将一定的信息传入实例中,您可以在实例中引用这些数据。

生成Linux实例自定义数据

在Linux实例中,您可以通过多种脚本配置实例自定义数据,包括User-Data脚本、Cloud Config脚本、Include文件、Gzip压缩脚本、 Upstart Job脚本等。Linux实例自定义数据功能采用开源的cloud-init架构,以实例元数据为数据来源,自动化配置Linux实例属性。

如果您制作的是Include文件或Gzip压缩脚本,需要上传脚本文件到可用的存储服务中并获取链接,并设置链接有效期为您的期望值。推荐您使用阿里云对象存储OSS制作链接。

生成Linux实例自定义数据的操作步骤如下:

  1. 使用编辑器(例如,Notepad++)创建文本文件。
  2. 在文本文件中编辑实例自定义数据的相关脚本。
    脚本第一行必须满足脚本类型的格式要求。不同脚本的格式要求以及示例如下:
    • User-Data脚本
      User-Data可以是一个Shell脚本。具有以下特点:
      • 首行固定为#!,例如#!/bin/sh
      • 在Base64编码前脚本内容不能超过16 KB。
      • 仅在首次启动实例时执行一次。
      User-Data脚本示例如下:
      #!/bin/sh
      echo "Hello World. The time is now $(date -R)!" | tee /root/output10.txt
      service httpd start
      chkconfig httpd on
      实例创建完成后,启动并连接实例,执行命令cat [file],查看脚本的执行结果。
      [root@XXXXX2z ~]# cat output10.txt
      Hello World. The time is now Mon, 24 Jul 2017 13:03:19 +0800!
    • Cloud Config脚本
      Cloud Config脚本是实现实例自定义数据最简单的方式,其交互方式非常友善。您可以使用Cloud Config脚本预先配置实例的部分服务,如更新yum源、导入SSH密钥、安装依赖包等。具有以下特点:
      • 首行固定为#cloud-config,且页首不能有空格。
      • 需要以YAML文件的方式呈现。
      • 在Base64编码前脚本内容不能超过16 KB。
      • 根据您配置的服务不同,实例自定义数据的运行频率也会不同。
      Cloud Config脚本示例如下:
      #cloud-config
      apt:
      primary:
      - arches: [default]
      uri: http://us.archive.ubuntu.com/ubuntu/
      bootcmd:
      - echo 192.168.1.130 us.archive.ubuntu.com >> /etc/hosts
      实例创建完成后,启动并连接实例,查看运行结果。
    • Include文件
      Include文件的内容由脚本链接组成,一行一个链接。实例启动时,cloud-init读取Include文件中脚本链接里的内容,一旦在某一行读取脚本内容时出错,实例停止读取自定义数据。具有以下特点:
      • Include文件首行固定为#include且页首不能有空格。
      • Include文件中脚本链接包含的内容在Base64编码前脚本内容不能超过16 KB。
      • 实例自定义数据的运行频率跟随Include文件中配置的脚本类型。
      Include文件示例如下:
      #include
      http://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/UserData/myscript.sh

      实例创建完成后,启动并连接实例,查看执行结果。

    • Gzip压缩脚本
      使用User-Data脚本、Cloud Config脚本和Include文件时,均要求在Base64编码前脚本内容不能超过16 KB。若您的脚本内容有超出16 KB的趋势,可以采用Gzip压缩脚本。将脚本文件压缩后制作成脚本链接,以Include文件的形式呈现。具有以下特点:
      • Gzip压缩脚本首行固定为#include,且页首不能有空格。
      • 实例自定义数据的运行频率跟随脚本类型。
      Gzip压缩脚本示例如下:
      #include
      http://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/config.gz

      如果您制作的是Gzip压缩脚本文件,您需要压缩脚本文件为.gz格式。

    • Upstart Job
      使用Upstart Job脚本时,您需要为实例安装upstart作为init system,目前采用upstart的操作系统有CentOS 6、Ubuntu 10/12/14以及Debian 6/7。Upstart Job脚本将您的实例自定义数据放到/etc/init目录下。具有以下特点:
      • Upstart Job脚本首行固定为#upstart-job,且页首不能有空格。
      • 每次启动实例均会执行您的实例自定义数据。
      Upstart Job脚本示例如下:
      #upstart-job
      description "upstart test"
      start on runlevel [2345]
      stop on runlevel [!2345]
      exec echo "Hello World. The time is now $(date -R)!" | tee /root/output.txt
  3. 调试脚本文件以确认内容正确。

生成Windows实例自定义数据

Windows实例自定义数据由ECS自主研发,为Windows实例提供运行初始化脚本的能力。Windows实例自定义数据支持Bat批处理程序和PowerShell脚本。

生成Windows实例自定义数据的操作步骤如下:

  1. 使用编辑器(例如,Notepad++)创建文本文件。
  2. 在文本文件中编辑实例自定义数据的相关脚本。
    脚本第一行必须满足脚本类型的格式要求。不同脚本的格式要求以及示例如下:
    • Bat批处理程序具有以下特点:
      • 首行固定为[bat],且页首不能有空格。
      • 在Base64编码前,自定义数据内容必须小于16 KB。
      • 只能输入半角字符,不能有多余字符。
      Bat批处理程序示例如下:
      [bat]
      echo "bat test" > c:\1.txt
      实例创建完成后,连接实例查看执行结果,在C:\盘添加了1.txt文本文件。
    • PowerShell具有以下特点:
      • 首行固定为[powershell],且页首不能有空格。
      • 在Base64编码前,自定义数据内容必须小于16 KB。
      • 只能输入半角字符,不能有多余字符。
      PowerShell示例如下:
      [powershell]
      write-output "Powershell Test" | Out-File C:\2.txt
  3. 调试脚本文件以确认内容正确。

后续步骤

脚本准备完成后,您可以使用脚本配置实例自定义数据。

如何通过控制台配置实例自定义数据。

背景信息

配置实例自定义数据时,请注意:
  • 仅网络类型为专有网络VPC的实例支持配置实例自定义数据。
  • 实例如果采用了已停售的实例规格,必须是I/O优化实例。其他实例规格无I/O优化限制。
  • 在Base64编码前自定义数据内容不能超过16 KB。
    说明 用于执行的实例自定义数据必须为Base64编码形式,如果您不使用ECS控制台提供的Base64编码服务,请自行将实例自定义数据转换为可用形式。
  • 实例必须使用公共镜像或继承于公共镜像的自定义镜像,且只支持下列操作系统:
    系统平台操作系统
    WindowsWindows Server 2008 R2及以后的操作系统
    Linux
    • CentOS
    • Ubuntu
    • SUSE Linux Enterprise
    • OpenSUSE
    • Debian
    • Alibaba Cloud Linux

操作步骤

  1. 创建一台Linux实例。
    创建实例时,在高级选项中的实例自定义数据文本框中输入自定义数据。若您的自定义数据已经过Base64加密,则选中输入已采用 Base64 编码
  2. 实例启动后,远程连接到目标实例。具体步骤请参见连接方式导航

    实例开始运行时(Running),系统首先以管理员或者root权限运行实例自定义数据,其次运行初始化或/etc/init信息。

  3. 根据您指定的自定义数据查看运行结果。
    如果出现故障,您需要注意查看相关日志文件。以下为在CentOS实例上使用Upstart Job脚本配置自定义数据的输出示例:

    从上面的结果中您可以看到,在实例的/etc/init文件夹中生成了一个part-001.conf启动任务文件。



如何查看已有的实例自定义数据。

前提条件

您已配置实例自定义数据。

背景信息

您可以通过指定服务器(100.100.100.200)查看实例自定义数据。

操作步骤

  1. 远程连接实例。
  2. 在实例内部运行以下命令查看实例自定义数据:
    • Linux实例:
      curl http://100.100.100.200/latest/user-data
    • Windows实例:
      Invoke-RestMethod http://100.100.100.200/latest/user-data/

如何通过控制台修改已有的实例自定义数据。

前提条件

  • 您已配置实例自定义数据。
  • 修改实例自定义数据之前,您必须停止实例。

背景信息

修改自定义数据后,实例是否会重新运行修改过的自定义数据取决于脚本类型和模块类型,例如:
  • 如果您通过Shell脚本配置自定义数据,例如User-Data脚本,不运行修改后的自定义数据。
  • 如果自定义数据配置的是类似Byobu、Set Hostname和Set Passwords之类的模块,不运行修改后的自定义数据。
  • 如果自定义数据配置的是类似bootcmd、update_etc_hosts和yum_add_repo之类的模块,运行修改后的自定义数据。
说明 对于按量付费VPC类型实例,若您修改自定义数据后需要立即启动实例时,建议您关闭停机不收费选项。

操作步骤

  1. 登录ECS管理控制台
  2. 在左侧导航栏,单击实例与镜像 > 实例
  3. 在顶部菜单栏左上角处,选择地域。
  4. 选中需要修改自定义数据的实例,并在操作列中,单击更多 > 实例设置 > 设置用户数据
  5. 在弹出的对话框中填入信息后单击确定
    设置用户数据

在创建Linux实例时如何使用实例自定义数据配置 yum 源、NTP 服务和 DNS 服务。您也可以使用这个脚本自定义 Windows 实例的 NTP 服务和 DNS 服务。

背景信息

目前,实例启动时,阿里云会为实例自动配置预定义的 yum 源、NTP 服务和 DNS 服务。如果您需要自行管理 yum 源、NTP 服务和 DNS 服务,可以使用实例自定义数据,但需要注意:
  • 如果您自定义了 yum 源,阿里云官方将不再提供 yum 源相关支持。
  • 如果您自定义了 NTP 服务,阿里云官方不再提供相关时间服务。

操作步骤

  1. 登录ECS管理控制台
  2. 在左侧导航栏,选择实例与镜像 > 实例
  3. 创建一台实例。
    在配置过程中,需要注意以下配置项:
    • 基础配置页面中,注意以下实例自定义数据相关的配置。
      • 实例规格:选择 I/O 优化实例。
      • 镜像:选择支持的镜像,例如,公共镜像的 CentOS 7.2。
    • 网络和安全组页面中,注意网络类型配置为专有网络
    • 系统配置页面中,在自定义数据输入框中输入如下内容:
      #!/bin/sh
      # Modify DNS
      echo "nameserver 8.8.8.8" | tee /etc/resolv.conf
      # Modify yum repo and update
      rm -rf /etc/yum.repos.d/*
      touch myrepo.repo
      echo "[base]" | tee /etc/yum.repos.d/myrepo.repo
      echo "name=myrepo" | tee -a /etc/yum.repos.d/myrepo.repo
      echo "baseurl=http://mirror.centos.org/centos" | tee -a /etc/yum.repos.d/myrepo.repo
      echo "gpgcheck=0" | tee -a /etc/yum.repos.d/myrepo.repo
      echo "enabled=1" | tee -a /etc/yum.repos.d/myrepo.repo
      yum update -y
      # Modify NTP Server
      echo "server ntp1.aliyun.com" | tee /etc/ntp.conf
      systemctl restart ntpd.service
      							
      说明
      • 第一行必须是#!/bin/sh,前面不能带空格。
      • 全文不能有多余的空格和回车。
      • 您可以根据实例情况定制具体的 DNS、NTP Server 和 yum 源 URL。
      • 上述内容适用于 CentOS 7.2 镜像,如果是其他镜像,请根据需要修改实例自定义脚本。
      • 您也可以使用cloud config类脚本更改 yum 源设置,但是不够灵活,不能适配阿里云对部分 yum 源进行预配置的情况。建议使用script类的脚本修改 yum 源设置。

执行结果

实例启动完成后,登录实例查看具体的效果,如下图所示。

由上图可知,您已经成功自定义了 DNS 服务、NTP 服务和 yum 源。


在创建Linux实例时如何使用实例自定义数据配置管理员账号。您也可以使用脚本自定义 Windows 实例的管理员账号。

背景信息

购买 ECS 实例时,您可以使用实例自定义数据达到以下效果。
  • 不使用 ECS 实例默认自带的 root 用户作为管理员。
  • 创建一个新的管理员账号,并自定义用户名。
  • 新创建的管理员账号在管理该实例的时候只使用 SSH 密钥对进行远程登录,不使用用户密码。
  • 该用户如果需要进行与管理员权限相关的操作,可在免密码的情况下使用sudo提权。

操作步骤

  1. 登录ECS管理控制台
  2. 在左侧导航栏,选择实例与镜像 > 实例
  3. 创建一台实例。
    在配置过程中,需要注意以下配置项:
    • 基础配置页面中,注意以下实例自定义数据相关的配置。
      • 实例规格:选择 I/O 优化实例。
      • 镜像:选择支持的镜像,例如,公共镜像的 CentOS 7.2。
    • 网络和安全组页面中,注意网络类型配置为专有网络
    • 系统配置页面中,在自定义数据输入框中输入如下内容:
      #!/bin/sh
      useradd test
      echo "test   ALL=(ALL)        NOPASSWD:ALL" | tee -a /etc/sudoers
      mkdir /home/test/.ssh
      touch /home/test/.ssh/authorized_keys
      echo "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAhGqhEh/rGbIMCGItFVtYpsXPQrCaunGJKZVIWtINrGZwusLc290qDZ93KCeb8o6X1Iby1Wm+psZY8THE+/BsXq0M0HzfkQZD2vXuhRb4xi1z98JHskX+0jnbjqYGY+Brgai9BvKDXTTSyJtCYUnEKxvcK+d1ZwxbNuk2QZ0ryHESDbSaczlNFgFQEDxhCrvko+zWLjTVnomVUDhdMP2g6fZ0tgFVwkJFV0bE7oob3NOVcrx2TyhfcAjA4M2/Ry7U2MFADDC+EVkpoVDm0SOT/hYJgaVM1xMDlSeE7kzX7yZbJLR1XAWV1xzZkNclY5w1kPnW8qMYuSwhpXzt4gsF0w== rsa-key-20170217" | tee -a /home/test/.ssh/authorized_keys
      							
      说明
      • 第一行必须是#!/bin/sh,前面不能带空格。
      • 全文不要有多余的空格和回车。
      • 最后一行的密钥为您的公钥,您可以自定义。
      • 如果需要做其他的配置,可以直接在脚本中添加。
      • 示例脚本仅限于 CentOS 7.2 镜像,其他镜像请根据操作系统类型进行自定义修改。

执行结果

实例启动完成后,您可以使用自定义的test用户通过 SSH 私钥登录到实例中,同时也可以使用sudo提权,并执行各种需要管理员权限的操作,如图中示例所示。

实例标识的概念和使用方法,并分别给出传入和不传入自定义参数时的示例。

背景信息

作为实例元数据的一部分,实例标识可以帮助您快速辨识并区分ECS实例,为应用程序权限控制和软件激活等提供重要的信任基础。实例标识的所有信息均实时生成,随取即用,并跟随实例信息而动态变化。

实例标识由动态生成的实例标识文档(document)和实例标识签名(signature)组成。

实例标识文档用于描述实例的各种信息,包含的主要属性如下表所示:

属性描述能否变更
account-id实例所属用户账号ID
create-time实例创建时间
instance-id实例ID
mac实例主网卡MAC地址
region-id实例所属的地域ID
serial-number实例的序列号
zone-id实例所属可用区ID
instance-type实例规格实例变更实例规格后会发生变化。

例如:升降配

image-id实例使用的镜像ID实例更换系统盘后会发生变化。

例如:更换系统盘(公共镜像)

private-ip实例的私网IP地址VPC类型实例修改私网IP地址后会发生变化。

例如:修改私网IP地址

实例标识签名采用PKCS#7格式加密,纯数字化,安全可靠。

实例标识签名还支持传入自定义audience参数,audience参数可以是随机字符串、时间戳、规律性变化的信息或者根据算法所生成的数据。传入audience参数后,即使他人获取了标识文档和标识签名的部分信息,也很难猜测到 audience 参数取值,可以有效防止签名被非法冒用。

一旦传入audience参数,您需要同时设置标识文档及标识签名。例如,当您获取标识签名时传入了audience参数,则需要在OpenSSL校验之前,手动把audience参数的信息加入实时生成的标识文档末尾处,格式为"audience":"audience参数取值",参数之间使用半角逗号(,)连接。

在以下场景中,您可以借助实例标识(instance-identity)实现鉴权、授权或者判断运行环境等目的:

  • 传统的线下手动激活的软件授权是一码单用,但由于云上软件的使用时间及场景多变,您可以在上架云市场应用软件时使用实例标识灵活地完成用户授权。
  • 当您在ECS实例中写入敏感数据时,您可以使用实例标识确保当前所写入的位置是您的ECS实例而不是其他环境。
  • 其他需要确认目标服务器来源的场景。

使用实例标识

使用实例标识需要OpenSSL支持,如果您没有配置OpenSSL服务,请前往OpenSSL官网下载并安装OpenSSL服务。此处以CentOS 7.4为例,示范如何使用实例标识。

  1. 远程连接Linux实例。
  2. 运行以下命令获取实例标识文档。
    curl http://100.100.100.200/latest/dynamic/instance-identity/document
  3. 选择一种方式获取实例标识签名。
    • 不传入audience参数:
      curl http://100.100.100.200/latest/dynamic/instance-identity/pkcs7
    • 传入audience参数:
      curl http://100.100.100.200/latest/dynamic/instance-identity/pkcs7?audience=XXXX
  4. 使用OpenSSL认证实例标识。
    openssl smime -verify -in $signature -inform PEM -content $DOCUMENT -certfile AliyunPubkey -noverify > /dev/null
    命令中参数作用如下:
    • $signature处填入您获取的标识签名。
    • $DOCUMENT处填入您获取的标识文档。

      (可选)如果您在第三步传入了audience参数,您需要手动将信息附加到实例标识文档末尾处,格式为"audience":"audience参数取值",参数之间使用半角逗号(,)连接。

    • AliyunPubkey处填入阿里云公有证书。
    以下为阿里云公有证书:
    -----BEGIN CERTIFICATE-----
    MIIDdzCCAl+gAwIBAgIEZmbRhzANBgkqhkiG9w0BAQsFADBsMRAwDgYDVQQGEwdV
    bmtub3duMRAwDgYDVQQIEwdVbmtub3duMRAwDgYDVQQHEwdVbmtub3duMRAwDgYD
    VQQKEwdVbmtub3duMRAwDgYDVQQLEwdVbmtub3duMRAwDgYDVQQDEwdVbmtub3du
    MB4XDTE4MDIyMzAxMjkzOFoXDTM4MDIxODAxMjkzOFowbDEQMA4GA1UEBhMHVW5r
    bm93bjEQMA4GA1UECBMHVW5rbm93bjEQMA4GA1UEBxMHVW5rbm93bjEQMA4GA1UE
    ChMHVW5rbm93bjEQMA4GA1UECxMHVW5rbm93bjEQMA4GA1UEAxMHVW5rbm93bjCC
    ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIJwy5sbZDiNyX4mvdP32pqM
    YMK4k7+5lRnVR2Fky/5uwyGSPbddNXaXzwEm+u4wIsJiaAN3OZgJpYIoCGik+9lG
    5gVAIr0+/3rZ61IbeVE+vDenDd8g/m/YIdYBfC2IbzgS9EVGAf/gJdtDODXrDfQj
    Fk2rQsvpftVOUs3Vpl9O+jeCQLoRbZYm0c5v7jP/L2lK0MjhiywPF2kpDeisMtnD
    /ArkSPIlg1qVYm3F19v3pa6ZioM2hnwXg5DibYlgVvsIBGhvYqdQ1KosNVcVGGQa
    HCUuVGdS7vHJYp3byH0vQYYygzxUJT2TqvK7pD57eYMN5drc7e19oyRQvbPQ3kkC
    AwEAAaMhMB8wHQYDVR0OBBYEFAwwrnHlRgFvPGo+UD5zS1xAkC91MA0GCSqGSIb3
    DQEBCwUAA4IBAQBBLhDRgezd/OOppuYEVNB9+XiJ9dNmcuHUhjNTnjiKQWVk/YDA
    v+T2V3t9yl8L8o61tRIVKQ++lDhjlVmur/mbBN25/UNRpJllfpUH6oOaqvQAze4a
    nRgyTnBwVBZkdJ0d1sivL9NZ4pKelJF3Ylw6rp0YMqV+cwkt/vRtzRJ31ZEeBhs7
    vKh7F6BiGCHL5ZAwEUYe8O3akQwjgrMUcfuiFs4/sAeDMnmgN6Uq8DFEBXDpAxVN
    sV/6Hockdfinx85RV2AUwJGfClcVcu4hMhOvKROpcH27xu9bBIeMuY0vvzP2VyOm
    DoJeqU7qZjyCaUBkPimsz/1eRod6d4P5qxTj
    -----END CERTIFICATE-----

示例一:不传入audience参数

以在云市场上架一份镜像为例,示范如何从应用软件卖家角度使用实例标识。

  1. 进入ECS实例环境。
  2. 确认当前ECS实例使用的镜像是否来自于镜像市场

    具体可以通过Metadata中的product-code项(镜像市场镜像的商品码)和charge-type项(镜像市场镜像的计费方式)。

    curl http://100.100.100.200/latest/meta-data/image/market-place/product-code
    curl http://100.100.100.200/latest/meta-data/image/market-place/charge-type
  3. 在当前工作目录下创建临时文件cert.cer,并保存阿里云公有证书到该文件中。
  4. 辨别实例身份。
    示例脚本如下:
    #!/usr/bin/bash
    function verify_signature_without_audience(){
    curl 100.100.100.200/latest/dynamic/instance-identity/document > document
    echo "-----BEGIN CERTIFICATE-----" > signature
    curl 100.100.100.200/latest/dynamic/instance-identity/pkcs7 >> signature
    echo "" >> signature
    echo "-----END CERTIFICATE-----" >> signature
    openssl smime -verify -in signature -inform PEM -content document -certfile cert.cer -noverify > /dev/null
    }
    verify_signature_without_audience
  5. 若标识返回结果为Verification successful,则放开应用软件的权限控制。

示例二:传入audience参数

同样以在云市场上架一份镜像为例,示范如何从应用软件卖家角度使用实例标识。结合您自定义的audience参数,并在放开权限控制之前,通过应用端Server实现策略控制,防止授权码(License)被非法使用。您的audience参数取值可以是随机字符串、时间戳、规律性变化的信息或者根据您的算法所生成的数据。

  1. 进入ECS实例环境。
  2. 确认当前ECS实例使用的镜像是否来自于镜像市场

    具体可以通过Metadata中的product-code项(镜像市场镜像的商品码)和charge-type项(镜像市场镜像的计费方式)。

    curl http://100.100.100.200/latest/meta-data/image/market-place/product-code
    curl http://100.100.100.200/latest/meta-data/image/market-place/charge-type
  3. 在当前工作目录下创建临时文件cert.cer,并保存阿里云公有证书到该文件中。
  4. 辨别实例身份。
    示例脚本如下:
    #!/usr/bin/bash
    function verify_signature_with_specified_audience(){
    audience=‘your audience’ #此处填入您的audience取值
    document=$(curl 100.100.100.200/latest/dynamic/instance-identity/document)
    audience_json=',"audience":''"'${audience}'"}'
    echo -n ${document%?}${audience_json} > document
    echo "-----BEGIN CERTIFICATE-----" > signature
    curl 100.100.100.200/latest/dynamic/instance-identity/pkcs7?audience=${audience} >> signature
    echo "" >> signature
    echo "-----END CERTIFICATE-----" >> signature
    openssl smime -verify -in signature -inform PEM -content document -certfile cert.cer -noverify > /dev/null
    }
    verify_signature_with_specified_audience
  5. 若标识返回结果为Verification successful,则放开应用软件的权限控制。
  阿里云服务器ECS实例使用实例自定义数据,典名科技就为您介绍到这里,如果您还有什么疑问的话,可以联系我们。
联系客服免费领取更多阿里云产品新购、续费升级折扣,叠加官网活动折上折更优惠