オープンソースのクライアントが ApsaraMQ for RabbitMQ サーバーにアクセスする場合、認証のためにユーザー名とパスワードを提供する必要があります。ApsaraMQ for RabbitMQ では、Resource Access Management (RAM) によって提供される AccessKey ID と AccessKey Secret からユーザー名とパスワードを生成できます。
操作説明
背景情報
オープンソースのクライアントが ApsaraMQ for RabbitMQ サーバーにアクセスする場合、認証のためにユーザー名とパスワードを提供する必要があります。認証が成功すると、クライアントはサーバーにアクセスできます。ApsaraMQ for RabbitMQ では、RAM によって提供される AccessKey ID と AccessKey Secret からユーザー名とパスワードを生成できます。
注意事項
-
静的ユーザー名とパスワードを作成するインスタンスは、サービス中の状態である必要があります。
-
1 つのインスタンス内では、AccessKey と静的ユーザー名・パスワードは 1 対 1 でマッピングされます。つまり、1 つのインスタンス内で各 AccessKey に対して作成できる静的ユーザー名とパスワードは 1 つだけです。
-
静的ユーザー名とパスワードを更新するには、既存のものを削除して新しいものを作成する必要があります。
ユーザー名計算のサンプルコード
`userName` リクエストパラメーターの値は、Base64 でエンコードされた文字列です。この文字列は、インスタンス ID と AccessKey ID から構成されます。以下のサンプルコードは、その値の計算方法を示しています。
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Base64Utils {
public static final Charset UTF8 = StandardCharsets.UTF_8;
/**
* Decode a Base64 string
*
* @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) {
// インスタンス ID と、インスタンスの購入に使用したアカウントの AccessKey ID から文字列を構成します。
String str = "2:${instanceId}:${ak}";
// API 呼び出し用の userName を生成します。
String userName = encode(str);
System.out.println("userName=" + userName);
String decodeStr = decode(userName);
System.out.println("originStr=" + decodeStr);
}
}
署名アルゴリズムのサンプルコード
`signature` および `secretSign` リクエストパラメーターの値は、暗号化アルゴリズムを使用して計算されます。このアルゴリズムでは、静的ユーザー名の作成タイムスタンプと AccessKey Secret が使用されます。以下のサンプルコードは、このアルゴリズムを示しています。
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class SignatureUtils {
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);
// ご利用のアカウントの AccessKey Secret。
String sk = "${sk}";
// API 呼び出し用の SecretSign を生成します。
String SecretSign = hamcsha1(sk.getBytes(), createTimestamp.getBytes());
System.out.println("SecretSign:" + SecretSign);
// API 呼び出し用の signature を生成します。
String signature = hamcsha1(createTimestamp.getBytes(), sk.getBytes());
System.out.println("signature:" + signature);
}
}
今すぐお試しください
テスト
RAM 認証
リクエストパラメーター
|
パラメーター |
型 |
必須 / 任意 |
説明 |
例 |
| instanceId |
string |
必須 |
ApsaraMQ for RabbitMQ インスタンスの ID。静的ユーザー名とパスワードを作成するインスタンスを指定します。 |
amqp-cn-********* |
| accountAccessKey |
string |
必須 |
ご利用の Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID。AccessKey ID の取得方法の詳細については、「AccessKey の作成」をご参照ください。 説明
RAM ユーザーの AccessKey を使用して、ApsaraMQ for RabbitMQ へのアクセスやメッセージの送受信を行うための静的ユーザー名とパスワードを作成する場合、その RAM ユーザーに必要な権限が付与されていることを確認してください。詳細については、「RAM アクセスポリシー」をご参照ください。 |
yourAccessKeyID |
| userName |
string |
必須 |
作成する静的ユーザー名。 このパラメーターの値は、インスタンス ID と AccessKey ID から構成される Base64 でエンコードされた文字列です。値の計算方法の詳細については、このトピックの「ユーザー名計算のサンプルコード」セクションをご参照ください。 |
Mjo**************** |
| signature |
string |
必須 |
署名。システムは、署名、AccessKey Secret の署名、およびユーザー名に基づいて静的パスワードを計算します。 署名は、指定されたユーザー名の作成タイムスタンプと AccessKey ID に対して HmacSHA1 アルゴリズムを使用して計算されます。署名の計算方法の詳細については、このトピックの「署名アルゴリズムのサンプルコード」セクションをご参照ください。 |
22c2d7d1769cb53c5a6d9213248e2de524****** |
| createTimestamp |
integer |
必須 |
ユーザー名とパスワードが作成された日時を示すタイムスタンプ。単位:ミリ秒。 説明
このタイムスタンプは静的パスワードの計算に使用されます。この値はカスタマイズ可能です。これは、ユーザー名とパスワードが作成されたときにシステムが生成するタイムスタンプではありません。 |
1671175303522 |
| secretSign |
string |
必須 |
AccessKey Secret の署名。システムは、署名、AccessKey Secret の署名、およびユーザー名に基づいて静的パスワードを計算します。 AccessKey Secret の署名は、指定されたユーザー名の作成タイムスタンプと AccessKey ID に対して HmacSHA1 アルゴリズムを使用して計算されます。署名の計算方法の詳細については、このトピックの「署名アルゴリズムのサンプルコード」セクションをご参照ください。 |
4c1a6367ce4c4255e9617326f9133ac635****** |
| Remark |
string |
任意 |
静的ユーザーに関する備考。 |
*** environment |
レスポンスフィールド
|
フィールド |
型 |
説明 |
例 |
|
object |
返された結果。 |
||
| RequestId |
string |
リクエスト ID。 |
FEBA5E0C-50D0-4FA6-A794-4901E5465*** |
| Code |
integer |
リターンコード。値が 200 の場合は、リクエストが成功したことを示します。 |
200 |
| Message |
string |
返されたメッセージ。 |
operation success |
| Success |
boolean |
リクエストが成功したかどうかを示します。 |
true |
| Data |
object |
返されたデータ。 |
|
| AccessKey |
string |
ユーザー名とパスワードの作成に使用された AccessKey ID。 |
LTAI**************** |
| Password |
string |
作成された静的パスワード。 |
OUYwQzM2QjZBRkUxNDRFM***************MzZCNzdDQzoxNjcxNDMwMzkyODI1 |
| CreateTimeStamp |
integer |
ユーザー名とパスワードが作成されたタイムスタンプ。単位:ミリ秒。 |
1671175303522 |
| InstanceId |
string |
ApsaraMQ for RabbitMQ インスタンスの ID。 |
amqp-cn-********* |
| MasterUId |
integer |
AccessKey を所有する Alibaba Cloud アカウントまたは RAM ユーザーの ID。この AccessKey は、静的ユーザー名とパスワードの作成に使用されます。 |
1565***********01 |
| UserName |
string |
作成された静的ユーザー名。 |
MjphbXFwLWNuLXVxbTJ6cjc2djAwMzpMVEFJNX*******ZNMWVSWnRFSjZ2Zm8= |
| Remark |
string |
備考。 |
***环境 |
例
成功レスポンス
JSONJSON
{
"RequestId": "FEBA5E0C-50D0-4FA6-A794-4901E5465***",
"Code": 200,
"Message": "operation success",
"Success": true,
"Data": {
"AccessKey": "LTAI****************",
"Password": "OUYwQzM2QjZBRkUxNDRFM***************MzZCNzdDQzoxNjcxNDMwMzkyODI1",
"CreateTimeStamp": 1671175303522,
"InstanceId": "amqp-cn-*********",
"MasterUId": 0,
"UserName": "MjphbXFwLWNuLXVxbTJ6cjc2djAwMzpMVEFJNX*******ZNMWVSWnRFSjZ2Zm8=",
"Remark": "***环境"
}
}
エラーコード
完全なリストについては、「エラーコード」をご参照ください。
変更履歴
完全なリストについては、「変更履歴」をご参照ください。