CreateAccount - 创建用户名密码

更新时间:

开源客户端访问云消息队列 RabbitMQ 版服务端时,需要传入用户名和密码进行权限认证,认证通过才允许访问服务端。云消息队列 RabbitMQ 版支持通过阿里云访问控制(RAM)的AccessKey和AccessKey Secret生成用户名和密码。

接口说明

背景信息

开源客户端访问云消息队列 RabbitMQ 版服务端时,需要传入用户名和密码进行权限认证,认证通过才允许访问服务端。 云消息队列 RabbitMQ 版支持通过阿里云访问控制(RAM)的 AccessKey 和 AccessKey Secret 生成用户名和密码。

注意事项

  • 创建静态用户名密码所属的实例需处于服务中状态。
  • 一个实例下的 AccessKey 和静态用户名密码一一对应,即一个实例下的一个 AccessKey 只能创建一个静态用户名密码。
  • 如果需要更新静态用户名密码,您可以删除该静态用户名密码后重新创建。

用户名计算示例代码

请求参数中的 userName 的参数值,需要由实例 ID 和 AccessKey ID 构造字符串并进行 Base64 编码得出。具体的计算方法如下:

    public class Base64Utils {
         public static final Charset UTF8 = Charset.forName("UTF-8");
         /\*\*
         *解码 base64 字符串
         \* @param str
         \* @return
         \*/
         public static String decode(String str) {
              return new String(Base64.getDecoder().decode(str.getBytes(UTF8)), UTF8);
         }
        
         public static String encode(String bytes) {
              return new String(Base64.getEncoder().encode(bytes.getBytes(UTF8)), UTF8);
          }

         public static void main(String[] args) {
              String example = "this is a example";
              System.out.println(encode(example));
              System.out.println(decode(encode(example)));

        }
        public static void main(String[] args) {
              //使用您的实例 ID 以及购买该实例的账号 AK,组成字符串。
              String str = "2:${instanceId}:${ak}";

              //生成 API 使用的 userName。
              String userName = encode(example);
              System.out.println("userName=" + userName);

              String decodeStr = decode(userName);
              System.out.println("originStr=" + decodeStr);
        }
    }

签名算法示例代码

请求参数中 signature 和 secretSign 的参数值,需要由指定的静态用户名的创建时间戳和 AccessKey Secret 进行加密算法计算得出。具体的算法和示例代码如下:

public static String hamcsha1(byte[] data, byte[] key) throws NoSuchAlgorithmException, InvalidKeyException {
        SecretKeySpec signingKey = new SecretKeySpec(key, "HmacSHA1");
        Mac mac = Mac.getInstance("HmacSHA1");
        mac.init(signingKey);
        return byte2hex(mac.doFinal(data));
    }

    public static String byte2hex(byte[] b) {
        StringBuilder hs = new StringBuilder();
        String stmp;
        for (int n = 0; b != null && n < b.length; n++) {
            stmp = Integer.toHexString(b[n] & 0XFF);
            if (stmp.length() == 1) {
                hs.append('0');
            }
            hs.append(stmp);
       } 
       return hs.toString().toUpperCase();
    }
     public static void main(String[] args) throws InvalidKeyException, NoSuchAlgorithmException {
          //createTimestamp 即是 API 的 createTimestamp 参数。
         String createTimestamp = String.valueOf(System.currentTimeMillis());
         System.out.println("timestamp:" + createTimestamp);

          //您账号的 sk。
         String sk = "${sk}";

          //生成 API 使用的 SecretSign。
         String SecretSign = hamcsha1(sk.getBytes(), timestamp.getBytes());
         System.out.println("SecretSign:" + SecretSign);

          //生成 API 使用的 signature。
         String signature = hamcsha1(timestamp.getBytes(), sk.getBytes());
         System.out.println("signature:" + signature);
    }

调试

您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。

授权信息

下表是API对应的授权信息,可以在RAM权限策略语句的Action元素中使用,用来给RAM用户或RAM角色授予调用此API的权限。具体说明如下:

  • 操作:是指具体的权限点。
  • 访问级别:是指每个操作的访问级别,取值为写入(Write)、读取(Read)或列出(List)。
  • 资源类型:是指操作中支持授权的资源类型。具体说明如下:
    • 对于必选的资源类型,用背景高亮的方式表示。
    • 对于不支持资源级授权的操作,用全部资源表示。
  • 条件关键字:是指云产品自身定义的条件关键字。
  • 关联操作:是指成功执行操作所需要的其他权限。操作者必须同时具备关联操作的权限,操作才能成功。
操作访问级别资源类型条件关键字关联操作
amqp:GetInstancecreate
  • Instance
    acs:amqp:{#regionId}:{#accountId}:/instances/{#instanceId}
  • amqp:FetchStaticAccount

请求参数

名称类型必填描述示例值
instanceIdstring

消息队列 RabbitMQ 版实例的 ID,表示您需要为哪个实例创建静态用户名密码。

amqp-cn-*********
accountAccessKeystring

您的阿里云账号或 RAM 用户的 AccessKey ID。获取方式,请参见创建 AccessKey

说明 如果您使用 RAM 用户的 AccessKey 创建的静态用户名密码接入消息队列 RabbitMQ 版并收发消息,请确保该 RAM 用户已被授予收发消息权限。更多信息,请参见 RAM 权限策略
LTAI5t8be*******tEJ6vfo
userNamestring

待创建的静态用户名。

该参数值由实例 ID 和 AccessKey ID 构造的字符串经过 Base64 编码得出,具体计算方法,请参见本文中的用户名计算示例代码

LTAI5***********eRZtEJ6vfo
signaturestring

签名,系统将根据请求参数中的签名、AccessKey Secret 签名和用户名计算出静态用户密码。

签名由指定的用户名创建时间戳和 AccessKey ID 进行 HmacSHA1 加密算法计算得出。具体计算方法,请参见本文中的签名算法示例代码

22c2d7d1769cb53c5a6d9213248e2de524******
createTimestamplong

指定该用户名密码创建的时间戳。单位:毫秒。

说明 该时间戳用于计算静态用户密码,由您自定义设置。不是系统生成用户名密码时的时间戳。
1671175303522
secretSignstring

AccessKey Secret 签名,系统将根据请求参数中的签名、AccessKey Secret 签名和用户名计算出静态用户密码。

AccessKey Secret 签名由指定的用户名创建时间戳和 AccessKey ID 进行 HmacSHA1 加密算法计算得出。具体计算方法,请参见本文中的签名算法示例代码

4c1a6367ce4c4255e9617326f9133ac635******

返回参数

名称类型描述示例值
object

返回结果。

RequestIdstring

请求 ID。

FEBA5E0C-50D0-4FA6-A794-4901E5465***
Codeinteger

返回码。返回 200 代表成功。

200
Messagestring

返回信息。

operation success
Successboolean

执行结果是否成功。

true
Dataobject

返回数据。

AccessKeystring

创建该用户名密码所使用的 AccessKey ID。

LTAI5***********eRZtEJ6vfo
Passwordstring

创建的静态用户密码。

OUYwQzM2QjZBRkUxNDRFM***************MzZCNzdDQzoxNjcxNDMwMzkyODI1
CreateTimeStamplong

创建用户名密码的时间戳。单位:毫秒。

1671175303522
InstanceIdstring

消息队列 RabbitMQ 版实例的 ID。

amqp-cn-*********
MasterUIdlong

创建静态用户名密码的 AccessKey 所属的阿里云账号或 RAM 用户的账号 ID。

1565*******973901
UserNamestring

创建的静态用户名。

MjphbXFwLWNuLXVxbTJ6cjc2djAwMzpMVEFJNX*******ZNMWVSWnRFSjZ2Zm8=

示例

正常返回示例

JSON格式

{
  "RequestId": "FEBA5E0C-50D0-4FA6-A794-4901E5465***",
  "Code": 200,
  "Message": "operation success",
  "Success": true,
  "Data": {
    "AccessKey": "LTAI5***********eRZtEJ6vfo",
    "Password": "OUYwQzM2QjZBRkUxNDRFM***************MzZCNzdDQzoxNjcxNDMwMzkyODI1",
    "CreateTimeStamp": 1671175303522,
    "InstanceId": "amqp-cn-*********",
    "MasterUId": 0,
    "UserName": "MjphbXFwLWNuLXVxbTJ6cjc2djAwMzpMVEFJNX*******ZNMWVSWnRFSjZ2Zm8="
  }
}

错误码

访问错误中心查看更多错误码。

控制台操作

除了调用 CreateAccount 接口,您还可以通过云消息队列 RabbitMQ 版控制台创建静态用户名密码。具体操作,请参见静态用户名密码管理