Alibaba Cloud SDK を使用して GetSecretValue を呼び出し、共有ゲートウェイまたは専用ゲートウェイのいずれかを通じてシークレット値を取得します。両ゲートウェイの違いはクライアント初期化のみであり、リクエストおよび例外処理のコードは同一です。
ゲートウェイの選択
| 共有ゲートウェイ | 専用ゲートウェイ | |
|---|---|---|
| 使用タイミング | パブリックネットワークまたは VPC 経由で KMS にアクセスする一般的なワークロード | 強化された隔離機能を備えた専用 KMS インスタンスを必要とするワークロード |
| エンドポイントフォーマット | パブリックネットワーク:kms.<REGION_ID>.aliyuncs.com / VPC:kms-vpc.<REGION_ID>.aliyuncs.com | <KMS_INSTANCE_ID>.cryptoservice.kms.aliyuncs.com |
| CA 証明書 | 不要 | SDK V2.0:必須 / SDK V1.0:未対応 — client.SetHTTPSInsecure(true) を使用して HTTPSInsecure を true |
前提条件
作業を開始する前に、以下の準備が整っていることを確認してください。
KMS にシークレットが作成済みの Alibaba Cloud アカウント (root ユーザー)
ALIBABA_CLOUD_ACCESS_KEY_IDおよびALIBABA_CLOUD_ACCESS_KEY_SECRETが環境変数として設定されていること
ソースコード内に AccessKey ペアを保存すると、認証情報の漏洩リスクがあります。本番ワークロードには、Security Token Service (STS) トークン を使用してください。
共有ゲートウェイ経由でのシークレット値の取得
完全なサンプルコード
package com.aliyun.sample;
import com.aliyun.tea.*;
public class Sample {
/**
* AccessKey ID および AccessKey Secret を使用してクライアントを初期化します。
* @return Client
* @throws Exception
*/
public static com.aliyun.kms20160120.Client createClient() throws Exception {
// プロジェクトコードが漏洩した場合、AccessKey ペアも漏洩し、アカウント内のリソースが危険にさらされる可能性があります。以下のコードは参考例です。
// よりセキュアな STS トークンの使用を推奨します。認証方式の詳細については、https://www.alibabacloud.com/help/sdk/developer-reference/v2-manage-access-credentials をご参照ください。
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 必須。コードの実行環境に ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// 必須。コードの実行環境に ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// エンドポイントの詳細については、https://api.alibabacloud.com/product/Kms をご参照ください。
config.endpoint = "kms.ap-southeast-1.aliyuncs.com";
return new com.aliyun.kms20160120.Client(config);
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
com.aliyun.kms20160120.Client client = Sample.createClient();
com.aliyun.kms20160120.models.GetSecretValueRequest getSecretValueRequest = new com.aliyun.kms20160120.models.GetSecretValueRequest()
.setSecretName("test****");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// サンプルコードをコピーして実行する場合は、必要に応じて API オペレーションの応答を表示する独自のコードを記述してください。
client.getSecretValueWithOptions(getSecretValueRequest, runtime);
} catch (TeaException error) {
// 実際のビジネスシナリオに基づき慎重に例外を処理し、プロジェクト内で例外を無視しないでください。この例で表示されるエラーメッセージは参考用です。
// エラーメッセージを出力
System.out.println(error.getMessage());
// トラブルシューティング用 URL を提供
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// 実際のビジネスシナリオに基づき慎重に例外を処理し、プロジェクト内で例外を無視しないでください。この例で表示されるエラーメッセージは参考用です。
// エラーメッセージを出力
System.out.println(error.getMessage());
// トラブルシューティング用 URL を提供
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
}サンプルコードの解説
クライアントの初期化
エンドポイントを、ご利用のリージョンに対応する共有ゲートウェイアドレスに設定します。この例では、シンガポール (ap-southeast-1) のパブリックネットワークエンドポイントを使用しています。
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// エンドポイントの詳細については、https://api.alibabacloud.com/product/Kms をご参照ください。
config.endpoint = "kms.ap-southeast-1.aliyuncs.com";GetSecretValue の呼び出し
test**** を実際の SecretName に置き換えてください。
com.aliyun.kms20160120.models.GetSecretValueRequest getSecretValueRequest = new com.aliyun.kms20160120.models.GetSecretValueRequest()
.setSecretName("test****");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
client.getSecretValueWithOptions(getSecretValueRequest, runtime);
} catch (TeaException error) {
System.out.println(error.getMessage());
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
System.out.println(error.getMessage());
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}応答にはシークレット値とメタデータが含まれます。応答フィールドの完全な一覧については、GetSecretValue をご参照ください。
専用ゲートウェイ経由でのシークレット値の取得
完全なサンプルコード
package com.aliyun.sample;
import com.aliyun.tea.*;
public class Sample {
/**
* AccessKey ID および AccessKey Secret を使用してクライアントを初期化します。
* @return Client
* @throws Exception
*/
public static com.aliyun.kms20160120.Client createClient() throws Exception {
// プロジェクトコードが漏洩した場合、AccessKey ペアも漏洩し、アカウント内のリソースが危険にさらされる可能性があります。以下のコードは参考例です。
// よりセキュアな STS トークンの使用を推奨します。認証方式の詳細については、https://www.alibabacloud.com/help/sdk/developer-reference/v2-manage-access-credentials をご参照ください。
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 必須。コードの実行環境に ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// 必須。コードの実行環境に ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// 専用ゲートウェイエンドポイント
config.endpoint = "kst-hzz65f176a0ogplgq****.cryptoservice.kms.aliyuncs.com";
// KMS インスタンス CA 証明書
config.ca = "-----BEGIN CERTIFICATE-----MIIDuzCCAqOgAwIBAgIJALTKwWAjvbMiMA0GCS****";
return new com.aliyun.kms20160120.Client(config);
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
com.aliyun.kms20160120.Client client = Sample.createClient();
com.aliyun.kms20160120.models.GetSecretValueRequest getSecretValueRequest = new com.aliyun.kms20160120.models.GetSecretValueRequest()
.setSecretName("test****");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// サンプルコードをコピーして実行する場合は、必要に応じて API オペレーションの応答を表示する独自のコードを記述してください。
client.getSecretValueWithOptions(getSecretValueRequest, runtime);
} catch (TeaException error) {
// 実際のビジネスシナリオに基づき慎重に例外を処理し、プロジェクト内で例外を無視しないでください。この例で表示されるエラーメッセージは参考用です。
// エラーメッセージを出力
System.out.println(error.getMessage());
// トラブルシューティング用 URL を提供
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// 実際のビジネスシナリオに基づき慎重に例外を処理し、プロジェクト内で例外を無視しないでください。この例で表示されるエラーメッセージは参考用です。
// エラーメッセージを出力
System.out.println(error.getMessage());
// トラブルシューティング用 URL を提供
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
}分析例
クライアントの初期化
専用ゲートウェイでは、KMS インスタンスのエンドポイントと CA 証明書という 2 つの追加フィールドが必要です。
// 専用ゲートウェイエンドポイント
config.endpoint = "kst-hzz65f176a0ogplgq****.cryptoservice.kms.aliyuncs.com";
// KMS インスタンス CA 証明書
config.ca = "-----BEGIN CERTIFICATE-----MIIDuzCCAqOgAwIBAgIJALTKwWAjvbMiMA0GCS****";kst-hzz65f176a0ogplgq**** をご利用の KMS インスタンス ID に、CA 証明書の値を KMS インスタンスからダウンロードした CA 証明書にそれぞれ置き換えてください。
SDK V1.0 は CA 証明書をサポートしていません。client.SetHTTPSInsecure(true) を使用して、代わりに HTTPSInsecure を true に設定してください。
GetSecretValue の呼び出し
リクエストおよび例外処理のコードは共有ゲートウェイの例と同一です。test**** を実際の SecretName に置き換えてください。
com.aliyun.kms20160120.models.GetSecretValueRequest getSecretValueRequest = new com.aliyun.kms20160120.models.GetSecretValueRequest()
.setSecretName("test****");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
client.getSecretValueWithOptions(getSecretValueRequest, runtime);
} catch (TeaException error) {
System.out.println(error.getMessage());
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
System.out.println(error.getMessage());
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}