Simple Message Queue (旧称:MNS) の Java SDK を介してリクエストを送信するには、エンドポイントとアクセス認証情報を構成します。SMQ は、長期 AccessKey ペアと一時 Security Token Service (STS) 認証情報をサポートしています。
エンドポイントの構成
SMQ のパブリックエンドポイントまたは内部エンドポイントを aliyun-mns.properties ファイルに設定します。デフォルトでは、SDK はこのファイルを ${user.home}/.aliyun-mns.properties から読み取ります。
| オペレーティングシステム | ファイルパス |
|---|---|
| Linux / macOS | ~/.aliyun-mns.properties |
| Windows | %USERPROFILE%\.aliyun-mns.properties |
ファイルに以下の行を追加します。
mns.accountendpoint=http://120228xxxxxxx.mns.cn-xxxxxx.aliyuncs.comエンドポイントを確認するには、SMQ コンソールを開き、[キューの詳細] または [トピックの詳細] ページに移動します。エンドポイントは [エンドポイント] セクションに表示されます。

アクセス認証情報の構成
SMQ は 2 種類の認証情報をサポートしています。
| 認証情報タイプ | 使用場面 | セキュリティレベル |
|---|---|---|
| 長期アクセス認証情報 (AccessKey ペア) | SMQ への永続的なアクセスが必要なアプリケーション | 標準。3ヶ月ごとにローテーションします。 |
| 一時アクセス認証情報 (STS) | 短期間のアクセス、クロスアカウント認証、または ECS ベースのワークロード | 高。認証情報は自動的に有効期限切れになります。 |
本番環境では一時アクセス認証情報が推奨されます。これらは一定期間後に有効期限が切れ、きめ細かなアクセス制御をサポートするため、認証情報の漏洩リスクを低減します。
長期アクセス認証情報の構成
Resource Access Management (RAM) ユーザーの AccessKey ペアを使用して、永続的なアクセスを行います。
前提条件
RAM ユーザーの AccessKey ペアを作成します。詳細については、「RAM ユーザーの AccessKey ペアを作成する」をご参照ください。
3ヶ月以上使用されている AccessKey ペアはローテーションしてください。使用されなくなった AccessKey ペアは無効化して削除してください。
ステップ 1: 環境変数の設定
AccessKey ペアは、ソースコードに認証情報を埋め込むのではなく、環境変数に保存します。
macOS
ターミナルを開き、以下を実行します。
nano ~/.bash_profileファイルの末尾に以下の行を追加します。
export ALIBABA_CLOUD_ACCESS_KEY_ID=LTA**** export ALIBABA_CLOUD_ACCESS_KEY_SECRET=moiEs****Ctrl+Xを押し、Yを押して保存し、Enterを押して閉じます。変更を適用します。
source ~/.bash_profile設定を確認します。期待される出力:
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRETLTA**** moiEs****
Linux
ターミナルを開き、以下を実行します。
sudo vim /etc/profileファイルの末尾に以下の行を追加します。
export ALIBABA_CLOUD_ACCESS_KEY_ID=LTA**** export ALIBABA_CLOUD_ACCESS_KEY_SECRET=moiEs****Escキーを押して、:wqと入力し、Enterキーを押して、保存して閉じます。変更を適用します。
source /etc/profile設定を確認します。期待される出力:
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRETLTA**** moiEs****
Windows
GUI
以下の手順は Windows 10 を例としています。
[PC] を右クリックし、[プロパティ] を選択します。[システム詳細設定] をクリックします。「システムのプロパティ」ダイアログボックスの「詳細設定」タブで、[環境変数] をクリックします。[ユーザー環境変数またはシステム環境変数] セクションで [新規] をクリックします。
以下の変数を追加します。
変数 例 ALIBABA_CLOUD_ACCESS_KEY_ID LTA**** ALIBABA_CLOUD_ACCESS_KEY_SECRET moiEs**** 設定を確認します。期待される出力:
echo %ALIBABA_CLOUD_ACCESS_KEY_ID% echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%LTA**** moiEs****
CMD
コマンドラインインターフェイスを開きます。
環境変数を設定します。
set ALIBABA_CLOUD_ACCESS_KEY_ID=LTA**** set ALIBABA_CLOUD_ACCESS_KEY_SECRET=moiEs****変数を永続化します。
setx ALIBABA_CLOUD_ACCESS_KEY_ID "%ALIBABA_CLOUD_ACCESS_KEY_ID%" setx ALIBABA_CLOUD_ACCESS_KEY_SECRET "%ALIBABA_CLOUD_ACCESS_KEY_SECRET%"設定を確認します。期待される出力:
echo %ALIBABA_CLOUD_ACCESS_KEY_ID% echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%LTA**** moiEs****
PowerShell
Win+X を押し、必要な範囲に応じて適切な PowerShell オプションを選択します。
現在の会話のみ([Windows PowerShell] を選択):
$env:ALIBABA_CLOUD_ACCESS_KEY_ID = "LTA****"
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "moiEs****"現在のユーザー向けのすべての新しいセッション([Windows PowerShell] を選択):
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'LTA****', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'moiEs****', [System.EnvironmentVariableTarget]::Machine)すべてのユーザー ([Windows PowerShell (Administrator)] を選択):
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'LTA****', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'moiEs****', [System.EnvironmentVariableTarget]::Machine)設定を確認します。
Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_ID
Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_SECRET期待される出力:
LTA****
moiEs****ステップ 2: Java で認証情報をロード
環境変数から AccessKey ペアを取得します。
// Load access credentials from environment variables.
CloudAccount account = new CloudAccount(ServiceSettings.getMNSAccountEndpoint());アクセス認証情報をソースコードに直接埋め込まないでください。認証情報が漏洩すると、リソースが不正アクセスにさらされる可能性があります。代わりに環境変数を使用してください。
一時アクセス認証情報の構成
短期間またはセキュリティに敏感なアクセスには、以下のいずれかの方法を使用します。
| 方法 | ユースケース |
|---|---|
| STS 一時認証情報 | RAM ユーザーの AccessKey ペアを公開せずに、期間限定のアクセスを許可します。 |
| RAM ロール | 特定の権限を持つロールを引き受けるように、RAM ユーザー (同じまたは異なる Alibaba Cloud アカウント) を承認します。 |
| ECS インスタンス RAM ロール | 自動ローテーションする認証情報を使用して、Elastic Compute Service (ECS) インスタンスから SMQ にアクセスします。 |
STS 一時認証情報の構成
RAM ユーザーを作成します。詳細については、「RAM ユーザーを作成する」をご参照ください。
AliyunSTSAssumeRoleAccessポリシーを RAM ユーザーにアタッチします。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。AssumeRole API オペレーションを呼び出して、一時認証情報 (AccessKey ID、AccessKey Secret、およびセキュリティトークン) を取得します。
一時認証情報を環境変数として保存し、Java コードでそれらをロードします。
環境変数の設定
macOS
ターミナルを開き、以下を実行します。
nano ~/.bash_profileファイルの末尾に一時認証情報を追加します。
export MNS_ACCESS_KEY_ID=LTA**** export MNS_ACCESS_KEY_SECRET=moiEs**** export MNS_SESSION_TOKEN=CAES****Ctrl+Xを押して、保存するにはYを押し、閉じるにはEnterを押します。変更を適用します。
source ~/.bash_profile設定を確認します。期待される出力:
echo $MNS_ACCESS_KEY_ID echo $MNS_ACCESS_KEY_SECRET echo $MNS_SESSION_TOKENLTA**** moiEs**** CAES****
Linux
ターミナルを開き、以下を実行します。
sudo vim /etc/profileファイルの末尾に一時認証情報を追加します。
export MNS_ACCESS_KEY_ID=LTA**** export MNS_ACCESS_KEY_SECRET=moiEs**** export MNS_SESSION_TOKEN=CAES****「
Esc」キーを押して、:wqを入力し、「Enter」キーを押して、保存して閉じます。変更を適用します。
source /etc/profile設定を確認します。期待される出力:
echo $MNS_ACCESS_KEY_ID echo $MNS_ACCESS_KEY_SECRET echo $MNS_SESSION_TOKENLTA**** moiEs**** CAES****
Windows
GUI
以下の手順は Windows 10 を例としています。
右クリック [このPC] して、[プロパティ] を選択します。 [詳細なシステム設定] をクリックします。 システムのプロパティ ダイアログボックスで、[詳細設定] タブの [環境変数] をクリックします。 [新規作成] を、[ユーザー変数またはシステム変数] セクションでクリックします。
以下の変数を追加します。
変数 例 MNS_ACCESS_KEY_ID LTA**** MNS_ACCESS_KEY_SECRET moiEs**** MNS_SESSION_TOKEN CAES**** 設定を確認します。期待される出力:
echo %MNS_ACCESS_KEY_ID% echo %MNS_ACCESS_KEY_SECRET% echo %MNS_SESSION_TOKEN%LTA**** moiEs**** CAES****
CMD
コマンドラインインターフェイスを開きます。
環境変数を設定します。
set MNS_ACCESS_KEY_ID=LTA**** set MNS_ACCESS_KEY_SECRET=moiEs**** set MNS_SESSION_TOKEN=CAES****変数を永続化します。
setx MNS_ACCESS_KEY_ID "%MNS_ACCESS_KEY_ID%" setx MNS_ACCESS_KEY_SECRET "%MNS_ACCESS_KEY_SECRET%" setx MNS_SESSION_TOKEN "%MNS_SESSION_TOKEN%"設定を確認します。期待される出力:
echo %MNS_ACCESS_KEY_ID% echo %MNS_ACCESS_KEY_SECRET% echo %MNS_SESSION_TOKEN%LTA**** moiEs**** CAES****
PowerShell
「Win+X」を押して、必要な範囲に応じて適切な PowerShell のオプションを選択します。
現在の会話のみ([Windows PowerShell] を選択):
$env:MNS_ACCESS_KEY_ID = "LTA****"
$env:MNS_ACCESS_KEY_SECRET = "moiEs****"
$env:MNS_SESSION_TOKEN = "CAES****"現在のユーザー向けのすべての新しいセッション([Windows PowerShell] を選択):
[System.Environment]::SetEnvironmentVariable('MNS_ACCESS_KEY_ID', 'LTA****', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('MNS_ACCESS_KEY_SECRET', 'moiEs****', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('MNS_SESSION_TOKEN', 'CAES****', [System.EnvironmentVariableTarget]::Machine)すべてのユーザー([Windows PowerShell (管理者)] を選択):
[System.Environment]::SetEnvironmentVariable('MNS_ACCESS_KEY_ID', 'LTA****', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('MNS_ACCESS_KEY_SECRET', 'moiEs****', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('MNS_SESSION_TOKEN', 'CAES****', [System.EnvironmentVariableTarget]::Machine)設定を確認します。
Get-ChildItem env:MNS_ACCESS_KEY_ID
Get-ChildItem env:MNS_ACCESS_KEY_SECRET
Get-ChildItem env:MNS_SESSION_TOKEN期待される出力:
LTA****
moiEs****
CAES****Java で認証情報をロード
// Load STS temporary credentials from environment variables.
String accessKeyId = System.getenv("MNS_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("MNS_ACCESS_KEY_SECRET");
String sessionToken = System.getenv("MNS_SESSION_TOKEN");
AlibabaCloudCredentials credentials = new BasicSessionCredentials(accessKeyId, accessKeySecret, sessionToken);
AlibabaCloudCredentialsProvider provider = new StaticCredentialsProvider(credentials);アクセス認証情報をソースコードに直接埋め込まないでください。認証情報が漏洩すると、リソースが不正アクセスにさらされる可能性があります。代わりに環境変数を使用してください。
RAM ロールの構成
RAM ロールを使用して、RAM ユーザー (同じまたは異なる Alibaba Cloud アカウント) が特定の権限で SMQ にアクセスできるように承認します。
前提条件
RAM ユーザーの AccessKey ペアを取得します。詳細については、「RAM ユーザーの AccessKey ペアを作成する」をご参照ください。
重要3ヶ月以上使用されている AccessKey ペアはローテーションしてください。使用されなくなった AccessKey ペアは無効化して削除してください。
RAM ロールの Alibaba Cloud Resource Name (ARN) を取得します。ARN は
acs:ram::$accountID:role/$roleNameの形式に従います。詳細については、「RAM ロールの情報を表示する」をご参照ください。
環境変数の設定
macOS
ターミナルを開き、以下を実行します。
nano ~/.bash_profileファイルの末尾に AccessKey ペアとロール ARN を追加します。
export MNS_ACCESS_KEY_ID=LTAI**** export MNS_ACCESS_KEY_SECRET=IrVTNZNy**** export MNS_STS_ROLE_ARN=acs:ram::17464958********:role/mnsststestCtrl+Xを押し、Yを押して保存し、Enterを押して閉じます。変更を適用します。
source ~/.bash_profile設定を確認します。期待される出力:
echo $MNS_ACCESS_KEY_ID echo $MNS_ACCESS_KEY_SECRET echo $MNS_STS_ROLE_ARNLTAI**** IrVTNZNy**** acs:ram::17464958********:role/mnsststest
Linux
ターミナルを開き、以下を実行します。
sudo vim /etc/profileファイルの末尾に AccessKey ペアとロール ARN を追加します。
export MNS_ACCESS_KEY_ID=LTAI**** export MNS_ACCESS_KEY_SECRET=IrVTNZNy**** export MNS_STS_ROLE_ARN=acs:ram::17464958********:role/mnsststestEscを押して、:wqと入力し、Enterを押すと、保存して閉じられます。変更を適用します。
source /etc/profile設定を確認します。期待される出力:
echo $MNS_ACCESS_KEY_ID echo $MNS_ACCESS_KEY_SECRET echo $MNS_STS_ROLE_ARNLTAI**** IrVTNZNy**** acs:ram::17464958********:role/mnsststest
Windows
GUI
以下の手順は Windows 10 を例としています。
[PC] を右クリックし、[プロパティ] を選択します。[システムの詳細設定] をクリックします。「システムのプロパティ」ダイアログボックスで、「詳細設定」タブの [環境変数] をクリックします。[ユーザー環境変数またはシステム環境変数] セクションで [新規] をクリックします。
以下の変数を追加します。
変数 例 MNS_ACCESS_KEY_ID LTAI**** MNS_ACCESS_KEY_SECRET IrVTNZNy**** MNS_STS_ROLE_ARN acs:ram::17464958********:role/mnsststest 設定を確認します。期待される出力:
echo %MNS_ACCESS_KEY_ID% echo %MNS_ACCESS_KEY_SECRET% echo %MNS_STS_ROLE_ARN%LTAI**** IrVTNZNy**** acs:ram::17464958********:role/mnsststest
CMD
コマンドラインインターフェイスを開きます。
環境変数を設定します。
set MNS_ACCESS_KEY_ID=LTAI**** set MNS_ACCESS_KEY_SECRET=IrVTNZNy**** set MNS_STS_ROLE_ARN=acs:ram::17464958********:role/mnsststest変数を永続化します。
setx MNS_ACCESS_KEY_ID "%MNS_ACCESS_KEY_ID%" setx MNS_ACCESS_KEY_SECRET "%MNS_ACCESS_KEY_SECRET%" setx MNS_STS_ROLE_ARN "%MNS_STS_ROLE_ARN%"設定を確認します。期待される出力:
echo %MNS_ACCESS_KEY_ID% echo %MNS_ACCESS_KEY_SECRET% echo %MNS_STS_ROLE_ARN%LTAI**** IrVTNZNy**** acs:ram::17464958********:role/mnsststest
PowerShell
「Win+X」を押して、必要な範囲に応じて適切な PowerShell のオプションを選択します。
現在のセッションのみ ([Windows PowerShell] を選択):
$env:MNS_ACCESS_KEY_ID = "LTAI****"
$env:MNS_ACCESS_KEY_SECRET = "IrVTNZNy****"
$env:MNS_STS_ROLE_ARN = "acs:ram::17464958********:role/mnsststest"現在のユーザー向けのすべての新しいセッション([Windows PowerShell] を選択):
[System.Environment]::SetEnvironmentVariable('MNS_ACCESS_KEY_ID', 'LTAI****', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('MNS_ACCESS_KEY_SECRET', 'IrVTNZNy****', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('MNS_STS_ROLE_ARN', 'acs:ram::17464958********:role/mnsststest', [System.EnvironmentVariableTarget]::Machine)すべてのユーザー([Windows PowerShell (Administrator)] を選択):
[System.Environment]::SetEnvironmentVariable('MNS_ACCESS_KEY_ID', 'LTAI****', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('MNS_ACCESS_KEY_SECRET', 'IrVTNZNy****', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('MNS_STS_ROLE_ARN', 'acs:ram::17464958********:role/mnsststest', [System.EnvironmentVariableTarget]::Machine)設定を確認します。
Get-ChildItem env:MNS_ACCESS_KEY_ID
Get-ChildItem env:MNS_ACCESS_KEY_SECRET
Get-ChildItem env:MNS_STS_ROLE_ARN期待される出力:
LTAI****
IrVTNZNy****
acs:ram::17464958********:role/mnsststestJava での認証情報の読み込み
// STS ロールの引き受けのためのリージョンを指定します (例: 中国 (杭州))。
String region = "cn-hangzhou";
// 環境変数から RAM ユーザーの AccessKey ペアを読み込みます。
String accessKeyId = System.getenv("MNS_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("MNS_ACCESS_KEY_SECRET");
// 環境変数から RAM ロール ARN を読み込みます。
String roleArn = System.getenv("MNS_STS_ROLE_ARN");
// AccessKey ペアと RAM ロール ARN を使用して、認証情報プロバイダーを作成します。
STSAssumeRoleSessionCredentialsProvider credentialsProvider = CredentialsProviderFactory
.newSTSAssumeRoleSessionCredentialsProvider(
region,
accessKeyId,
accessKeySecret,
roleArn
);アクセス認証情報をソースコードに直接埋め込まないでください。認証情報が漏洩すると、ご利用のリソースが不正にアクセスされる可能性があります。代わりに環境変数を使用してください。
ECS インスタンスへの RAM ロールの設定
SMQ に ECS インスタンスからアクセスするには、当該インスタンスに RAM ロールを割り当て、SDK がインスタンスメタデータ URL を通じて自動ローテーションされる一時的な認証情報を取得できるようにします。
ECS インスタンスに RAM ロールを割り当てます。詳細については、「インスタンス RAM ロールを使用した ECS による他の Alibaba Cloud サービスへのアクセス許可」をご参照ください。
RAM ロール名を用いて認証情報プロバイダーを作成します:
// ECS インスタンスにアタッチされた RAM ロールを通じて認証情報を読み込みます。 // 「ecs-ram-role」を実際のロール名に置き換えてください。 CredentialsProvider provider = new InstanceProfileCredentialsProvider("ecs-ram-role");
環境変数の設定は不要です。SDK が自動的に ECS インスタンスのメタデータサービスから一時的な認証情報を取得し、リフレッシュします。