ZStack Logo

ZStack AIOS

AccessKey管理

完整平台用户手册,包含基础云平台能力与 AIOS 相关章节。

AccessKey管理:访问云平台API的身份凭证,具有该云平台完全的权限,包括:AccessKey ID(访问密钥 ID)和AccessKey Secret(秘密访问密钥)。

ZStack Cloud提供两种AccessKey:本地AccessKey和第三方AccessKey:
  • 本地AccessKey:

    ZStack Cloud授权第三方用户调用ZStack Cloud API来访问ZStack Cloud云资源的安全凭证,需严格保密。

  • 第三方AccessKey:

    第三方用户授权ZStack Cloud用户调用第三方API来访问第三方云资源的安全凭证,需严格保密。

说明:
  • AccessKey是平台对API请求进行安全验证的关键因子,请妥善保管。
  • 若某一AccessKey出现泄漏风险,建议及时删除该AccessKey并生成新的AccessKey。

生成本地AccessKey

ZStack Cloud主菜单,点击运营管理 > 访问控制 > AccessKey 管理,进入AccessKey 管理界面。点击生成AccessKey,将生成一个AccessKey。

注意事项

  • Admin/平台管理员可以创建多个AccessKey,子账户/租户(项目成员)可以创建两个AccessKey。
  • Admin/平台管理员可以随时启用、停用或者删除自己创建的AccessKey以及子账户/租户(项目成员)创建的AccessKey。
  • 子账户/租户(项目成员)可以随时启用、停用或者删除自己创建的AccessKey。
  • AccessKey具有该创建者完全的权限。
图1所示:


图1 生成本地AccessKey

第三方平台使用AccessKey调用ZStack Cloud API

创建AccessKey后,第三方平台可以使用AccessKey调用ZStack Cloud API,方法如下:
  • SDK方式:
    以创建云主机(CreateVmInstance)为例,使用AccessKey调用ZStack Cloud API时,需输入accessKeyIdaccessKeySecret,示例如下:
    • Java SDK
      CreateVmInstanceAction action = new CreateVmInstanceAction();
      action.name = "vm1";
      action.instanceOfferingUuid = "ae97ced44efc3314b8f7798972b4ba1a";
      action.imageUuid = "da119f7906513eccabf271991c35a65e";
      action.l3NetworkUuids = asList("cc0e4c5e77df3af68e59668e7f9e06c5");
      action.dataDiskOfferingUuids = asList("19d22d051b063d379a2816daaf431838","905d94a6abb5398fa1995f6398e3f6fc");
      action.clusterUuid = "a0468dc645223f67bd0f2ab95276bbae";
      action.description = "this is a vm";
      action.strategy = "InstantStart";
      action.accessKeyId = "Fnxc7KIQAdGTvXfx8OjC";
      action.accessKeySecret = "Do0AJUGVPrT9iJZlc1QOtk7kzEusYidyqJxSmKOb";
      CreateVmInstanceAction.Result res = action.call();
    • Python SDK
      action = CreateVmInstanceAction()
      action.name = "vm1"
      action.instanceOfferingUuid = "ae97ced44efc3314b8f7798972b4ba1a"
      action.imageUuid = "da119f7906513eccabf271991c35a65e"
      action.l3NetworkUuids = ["cc0e4c5e77df3af68e59668e7f9e06c5"]
      action.dataDiskOfferingUuids = ["19d22d051b063d379a2816daaf431838", "905d94a6abb5398fa1995f6398e3f6fc"]
      action.clusterUuid = "a0468dc645223f67bd0f2ab95276bbae"
      action.description = "this is a vm"
      action.strategy = "InstantStart"
      action.accessKeyId = "Fnxc7KIQAdGTvXfx8OjC"
      action.accessKeySecret = "Do0AJUGVPrT9iJZlc1QOtk7kzEusYidyqJxSmKOb"
      res = action.call()
  • 直接调用ZStack Cloud RESTful API方式:
    1. 创建AccessKey:
      CreateAccessKey accountUuid=dff4fb9bbff14e97a67ab894c7b8c528 userUuid=dff4fb9bbff14e97a67ab894c7b8c528
      {
          "inventory": {
              "AccessKeyID": "N3Tf05yXZUmSjCf6mYIB",
              "AccessKeySecret": "XAlrsYvswmnEV3X1KWNs1WfZHD6aBIIphmI0rX9S",
              "accountUuid": "dff4fb9bbff14e97a67ab894c7b8c528",
              "createDate": "Sep 6, 2018 1:50:06 PM",
              "lastOpDate": "Sep 6, 2018 1:50:06 PM",
              "userUuid": "dff4fb9bbff14e97a67ab894c7b8c528",
              "uuid": "ae353717ca7b4182bb87fb5d010235e8"
          },
          "success": true
      }
    2. 生成date
      python get_time.py
      Thu, 06 Sep 2018 13:54:10 PRC
      import datetime
      import time
       
      date = time.time()
      #EEE, dd MMM yyyy HH:mm:ss z
      str = datetime.datetime.fromtimestamp(date).strftime('%a, %d %b %Y %H:%M:%S PRC')
      print str
      说明: 时间格式必须为EEE, dd MMM yyyy HH:mm:ss zzz
    3. 生成digest
      # python get_accesskey.py "vvSZpmj4cnB53qUDmm6E" "8heumeFTvIeZxkTGfEYvVi9qVVPd9ffQNDALSPPb" \
      "GET" "Fri, 06 Aug 2021 17:58:34 PRC" "/v1/vm-instances"
      args: Namespace(acesskey_id='vvSZpmj4cnB53qUDmm6E', acesskey_secret='8heumeFTvIeZxkTGfEYvVi9qVVPd9ffQNDALSPPb', \
      date='Fri, 06 Aug 2021 17:58:34 PRC', method='GET', uri='/v1/vm-instances')
      Signature: hPToRHeHdV49D4u20G8OlE0yJho=
      Authoration ZStack vvSZpmj4cnB53qUDmm6E:hPToRHeHdV49D4u20G8OlE0yJho=
      #/usr/bin/python
      import base64
      import hmac
      import sha
      import argparse
      from hashlib import sha1
       
      parser = argparse.ArgumentParser(description='calculate zstack access key digit.')
      parser.add_argument('acesskey_id')
      parser.add_argument('acesskey_secret')
      parser.add_argument('method')
      parser.add_argument('date')
      parser.add_argument('uri')
       
      args = parser.parse_args()
       
      print "args: %s" % args
      h = hmac.new(args.acesskey_secret, args.method + "\n"
                                          + args.date + "\n"
                                          + args.uri, sha1)
      Signature = base64.b64encode(h.digest())
      print "Signature: %s" % Signature
      print "Authoration %s" % ("ZStack " + args.acesskey_id + ":" + Signature)
    4. 发送请求
      curl -H "Authorization:ZStack N3Tf05yXZUmSjCf6mYIB:S3vm7u7/+n+sIQe72lgia08I30U=" \
      -H "Content-Type:application/x-www-form-urlencoded" \
      -H "Date:Thu, 06 Sep 2018 13:54:10 PRC" \
      -X GET http://172.20.11.134:8080/zstack/v1/vm-instances

本地AccessKey支持以下操作:

操作 描述
生成本地AccessKey 生成一个新的本地AccessKey。
启用本地AccessKey 启用处于停用状态的本地AccessKey。
停用本地AccessKey 停用选中的本地AccessKey。
删除本地AccessKey 删除选中的本地AccessKey。
说明: 删除本地AccessKey,将不能调用API来访问本地云资源。

添加第三方AccessKey

ZStack Cloud主菜单,点击运营管理 > 访问控制 > AccessKey 管理,进入AccessKey 管理界面。点击添加AccessKey,弹出添加AccessKey界面。

可参考以下示例设置相应内容:
  • 名称:设置第三方AccessKey名称
  • 简介:可选项,可留空不填
  • AccessKey IDAccessKey Secret:输入已在第三方申请好的AccessKey ID和AccessKey Secret
图2所示:


图2 添加第三方AccessKey

第三方Accesskey支持以下操作:

操作 描述
添加第三方AccessKey 添加一个新的第三方AccessKey。
删除第三方AccessKey 删除选中的第三方AccessKey。
说明: 删除AccessKey将清除该AccessKey相关的本地资源记录,且该AccessKey授权的API访问权限失效,第三方公有云资源不受影响。

注意事项

  • admin/平台管理员可以随时删除自己添加的第三方AccessKey以及租户添加的第三方AccessKey。
  • 子账户子账户/租户(项目成员)可以随时删除自己添加的第三方AccessKey。