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。
注意事项
- 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时,需输入accessKeyId和accessKeySecret,示例如下:
- 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()
- Java
SDK
- 直接调用ZStack Cloud RESTful API方式:
- 创建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 } - 生成date:
python get_time.py Thu, 06 Sep 2018 13:54:10 PRCimport 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。 - 生成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) - 发送请求
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。 说明: 删除本地AccessKey,将不能调用API来访问本地云资源。 |
添加第三方AccessKey
在ZStack Cloud主菜单,点击,进入AccessKey 管理界面。点击添加AccessKey,弹出添加AccessKey界面。
可参考以下示例设置相应内容:

图2 添加第三方AccessKey
- 名称:设置第三方AccessKey名称
- 简介:可选项,可留空不填
- AccessKey ID和AccessKey Secret:输入已在第三方申请好的AccessKey ID和AccessKey Secret

第三方Accesskey支持以下操作:
| 操作 | 描述 |
|---|---|
| 添加第三方AccessKey | 添加一个新的第三方AccessKey。 |
| 删除第三方AccessKey | 删除选中的第三方AccessKey。 说明: 删除AccessKey将清除该AccessKey相关的本地资源记录,且该AccessKey授权的API访问权限失效,第三方公有云资源不受影响。 |
注意事项
- admin/平台管理员可以随时删除自己添加的第三方AccessKey以及租户添加的第三方AccessKey。
- 子账户子账户/租户(项目成员)可以随时删除自己添加的第三方AccessKey。