Key Management Service (KMS) を使用すると、データベースのパスワード、AccessKey ペア、SSH 認証情報などの機密データをシークレットとして保存し、プログラムで取得できます。このガイドでは、KMS コンソールでシークレットを作成し、Alibaba Cloud SDK for Java を使用してその値を取得する方法について説明します。
前提条件
開始する前に、以下を確認してください:
KMS インスタンスが作成され、有効化されていること。詳細は、「KMS インスタンスの購入と有効化」をご参照ください。
その KMS インスタンスで対称キーが作成されていること。詳細は、「キーの作成」をご参照ください。
対称キーとシークレットは、同じ KMS インスタンスに属している必要があります。
ステップ 1:シークレットの作成
KMS コンソールにログインします。上部のナビゲーションバーでリージョンを選択します。左側のナビゲーションウィンドウで、[リソース] > [シークレット] を選択します。
[シークレット] ページで、作成したいシークレットの種類のタブをクリックし、[インスタンス ID] ドロップダウンリストからインスタンスを選択し、[シークレットの作成] をクリックします。
表示されるパネルで、シークレットタイプのパラメーターを入力し、[OK] をクリックします。
パラメーターはシークレットタイプによって異なります。ユースケースに合った以下のセクションをご参照ください。
汎用シークレット
汎用シークレットは、API キー、OAuth トークン、証明書、またはカスタムのキーと値のペアなど、あらゆる機密値を保存します。
汎用シークレットは作成時の回転をサポートしていません。作成後に汎用シークレットを回転させるには、「汎用シークレットの管理と使用」をご参照ください。
| パラメーター | 説明 |
|---|---|
| シークレット名 | リージョン内で一意の名前。 |
| シークレット値 | 保存する機密データ。構造化データの場合は [シークレットキー/値] を、非構造化データの場合は [プレーンテキスト] を選択します。最大サイズ: 30,720 バイト (30 KB)。 |
| 初期バージョン | このシークレット値のバージョンラベル。デフォルトは v1 です。 |
| CMK | このシークレットの暗号化に使用される対称キー。同じ KMS インスタンスに属している必要があります。RAM ユーザーとロールには、このキーに対して GenerateDataKey を呼び出す権限が必要です。 |
| タグ | (任意) シークレットを分類およびフィルターするためのキーと値のペア。各キーまたは値は最大 128 文字で、文字、数字、スラッシュ (/)、バックスラッシュ (\\)、アンダースコア (_)、ハイフン (-)、ピリオド (.)、プラス記号 (+)、等号 (=)、コロン (:)、アットマーク (@)、およびスペースを含めることができます。タグキーは aliyun または acs: で始めることはできません。シークレットごとに最大 20 個のタグを付与できます。 |
| 説明 | (任意) シークレットの説明。 |
| 詳細設定 > ポリシー設定 | (任意) このシークレットへのアクセスを制御するためのリソースベースのポリシー。この設定をスキップした場合、デフォルトポリシーが適用されます。 |
RAM シークレット
RAM シークレットは、RAM ユーザーの AccessKey ペアを管理し、自動回転をサポートします。
| パラメーター | 説明 |
|---|---|
| RAM ユーザーの選択 | AccessKey ペアを管理する RAM ユーザー。ユーザーは少なくとも 1 つの AccessKey ペアを持っている必要があります。シークレット名は RAM ユーザーの名前に基づいて自動的に生成されます。 |
| シークレット値 | 選択した RAM ユーザーの AccessKey Secret。最大サイズ:30,720 バイト (30 KB)。 |
| CMK | このシークレットの暗号化に使用される対称キー。同じ KMS インスタンスに属している必要があります。RAM ユーザーとロールには、このキーに対して GenerateDataKey を呼び出す権限が必要です。 |
| タグ | (任意) シークレットを分類するためのキーと値のペア。各キーまたは値は最大 128 文字で、文字、数字、スラッシュ (/)、バックスラッシュ (\\)、アンダースコア (_)、ハイフン (-)、ピリオド (.)、プラス記号 (+)、等号 (=)、コロン (:)、アットマーク (@)、およびスペースを含めることができます。タグキーは aliyun または acs: で始めることはできません。シークレットごとに最大 20 個のタグを付与できます。 |
| 自動回転 | AccessKey ペアを自動的に回転させるかどうか。 |
| 日数 (7 日~365 日) | 回転間隔。自動回転が有効な場合にのみ必須です。 |
| 説明 | (任意) シークレットの説明。 |
| 詳細設定 > ポリシー設定 | (任意) このシークレットのリソースベースのポリシー。 |
データベースシークレット (ApsaraDB RDS)
ApsaraDB RDS では、[単一シークレットの作成] のみがサポートされています。
| パラメーター | 説明 |
|---|---|
| データベースタイプ | [ApsaraDB RDS シークレット] を選択します。 |
| シークレット名 | リージョン内で一意の名前。 |
| ApsaraDB RDS インスタンス | 管理対象の ApsaraDB RDS インスタンス。 |
| アカウント管理 | KMS が回転中にデータベースアカウントを管理する方法:[デュアルアカウントの管理] (推奨) — KMS は同一の権限を持つ 2 つのアカウントを維持します。回転中に接続が中断されることはありません。アプリケーションのワークロードにはこれを使用します。[シングルアカウントの管理] — KMS は 1 つのアカウントを管理します。回転中に現在のシークレットバージョンが一時的に利用できなくなる可能性があります。特権アカウントや手動の O&M (運用保守) アカウントにはこれを使用します。 |
| CMK | このシークレットの暗号化に使用される対称キー。同じ KMS インスタンスに属している必要があります。RAM ユーザーとロールには、このキーに対して GenerateDataKey を呼び出す権限が必要です。 |
| タグ | (任意) シークレットを分類するためのキーと値のペア。各キーまたは値は最大 128 文字で、文字、数字、スラッシュ (/)、バックスラッシュ (\\)、アンダースコア (_)、ハイフン (-)、ピリオド (.)、プラス記号 (+)、等号 (=)、コロン (:)、アットマーク (@)、およびスペースを含めることができます。タグキーは aliyun または acs: で始めることはできません。シークレットごとに最大 20 個のタグを付与できます。 |
| 自動回転 | データベースの認証情報を自動的に回転させるかどうか。 |
| 回転期間 | 回転間隔 (6 時間~365 日)。自動回転が有効な場合にのみ必須です。 |
| 説明 | (任意) シークレットの説明。 |
| 詳細設定 > ポリシー設定 | (任意) このシークレットのリソースベースのポリシー。 |
デュアルアカウントのオプション:
[アカウント作成] タブ:ユーザー名のプレフィックスを指定し、データベースを選択して権限を設定します。シークレットの構成を確定すると、KMS がアカウントを作成します。
[既存アカウントのインポート] タブ:ユーザー名を選択し、現在のパスワードを指定します。
アカウント作成時に設定されたものと同じパスワードを使用してください。ユーザー名とパスワードが一致しない場合、KMS は最初の回転時に正しい認証情報を取得します。
シングルアカウントのオプション:
[アカウント作成] タブ:ユーザー名のプレフィックスを指定し、アカウントタイプ ([標準アカウント] または [特権アカウント]) を選択します。標準アカウントの場合は、データベースを選択して権限も設定します。
[既存アカウントのインポート] タブ:ユーザー名を選択し、そのパスワードを指定します。
データベースシークレット (PolarDB)
[単一シークレットの作成] のみがサポートされています。デュアルモードの新規アカウントのみがサポートされており、対象は PolarDB for MySQL と PolarDB for PostgreSQL のみです。
| パラメーター | 説明 |
|---|---|
| データベースタイプ | [PolarDB シークレット] を選択します。 |
| シークレット名 | リージョン内で一意の名前。 |
| PolarDB クラスター | 管理対象の PolarDB クラスター。 |
| アカウント管理 | [デュアルアカウントの管理] のみがサポートされています。KMS は同一の権限を持つ 2 つの標準アカウントを維持します。回転中に接続が中断されることはありません。 |
| シークレット値 | [アカウント作成] のみがサポートされています。ユーザー名のプレフィックス、権限、およびデータベースを指定します。シークレットの構成を確定すると、KMS がアカウントを作成します。アカウント名は一意である必要があります。 |
| CMK | このシークレットの暗号化に使用される対称キー。同じ KMS インスタンスに属している必要があります。RAM ユーザーとロールには、このキーに対して GenerateDataKey を呼び出す権限が必要です。 |
| タグ | (任意) シークレットを分類するためのキーと値のペア。各キーまたは値は最大 128 文字で、文字、数字、スラッシュ (/)、バックスラッシュ (\\)、アンダースコア (_)、ハイフン (-)、ピリオド (.)、プラス記号 (+)、等号 (=)、コロン (:)、アットマーク (@)、およびスペースを含めることができます。タグキーは aliyun または acs: で始めることはできません。シークレットごとに最大 20 個のタグを付与できます。 |
| 自動回転 | 認証情報を自動的に回転させるかどうか。 |
| ローテーション期間 | 回転間隔 (6 時間~365 日)。自動回転が有効な場合にのみ必須です。 |
| 説明 | (任意) シークレットの説明。 |
| 詳細設定 > ポリシー設定 | (任意) このシークレットのリソースベースのポリシー。 |
データベースシークレット (ApsaraDB for Redis)
[単一シークレットの作成] と [複数シークレットの一括作成] の両方がサポートされています。以下の例では、[単一シークレットの作成] を使用します。
新規アカウントのみ管理できます。既存の ApsaraDB for Redis アカウントはインポートできません。
| パラメーター | 説明 |
|---|---|
| データベースタイプ | [ApsaraDB for Redis シークレット] を選択します。 |
| シークレット名 | リージョン内で一意の名前。 |
| ApsaraDB for Redis/Tair インスタンス | 管理対象の ApsaraDB for Redis インスタンス。 |
| アカウント管理 | [デュアルアカウントの管理] のみがサポートされています。 |
| シークレット値 | ユーザー名のプレフィックスを入力します。KMS は ApsaraDB for Redis の操作を呼び出して、同じ権限を持つ 2 つのアカウントを作成します。例えば、user と入力すると、KMS は user と user_clone を作成します。権限:[読み取り/書き込み] または [読み取り専用] (両方のアカウントは同じ権限レベルを共有します)。 |
| CMK | このシークレットの暗号化に使用される対称キー。同じ KMS インスタンスに属している必要があります。RAM ユーザーとロールには、このキーに対して GenerateDataKey を呼び出す権限が必要です。 |
| タグ | (任意) シークレットを分類するためのキーと値のペア。各キーまたは値は最大 128 文字で、文字、数字、スラッシュ (/)、バックスラッシュ (\\)、アンダースコア (_)、ハイフン (-)、ピリオド (.)、プラス記号 (+)、等号 (=)、コロン (:)、アットマーク (@)、およびスペースを含めることができます。タグキーは aliyun または acs: で始めることはできません。シークレットごとに最大 20 個のタグを付与できます。 |
| 自動回転 | 認証情報を自動的に回転させるかどうか。 |
| 回転期間 | 回転間隔 (6 時間~365 日)。自動回転が有効な場合にのみ必須です。 |
| 説明 | (任意) シークレットの説明。 |
| 詳細設定 > ポリシー設定 | (任意) このシークレットのリソースベースのポリシー。 |
ECS シークレット
ECS シークレットは、Elastic Compute Service (ECS) インスタンス上のユーザーのログイン認証情報 (パスワードまたは SSH キーペア) を管理します。
| パラメーター | 説明 |
|---|---|
| シークレット名 | リージョン内で一意の名前。 |
| 管理対象インスタンス | 管理対象の ECS インスタンス。 |
| 管理対象ユーザー | ECS インスタンス上の既存のユーザー。例:root (Linux) または Administrator (Windows)。 |
| 初期シークレット値 | 保存する認証情報。[パスワード] (ユーザーのログインパスワード) または [キーペア] (SSH キーペア) を選択します。下記の「SSH キーペアの取得」をご参照ください。最大サイズ:30,720 バイト (30 KB)。 |
| CMK | このシークレットの暗号化に使用される対称キー。同じ KMS インスタンスに属している必要があります。RAM ユーザーとロールには、このキーに対して GenerateDataKey を呼び出す権限が必要です。 |
| タグ | (任意) シークレットを分類するためのキーと値のペア。各キーまたは値は最大 128 文字で、文字、数字、スラッシュ (/)、バックスラッシュ (\\)、アンダースコア (_)、ハイフン (-)、ピリオド (.)、プラス記号 (+)、等号 (=)、コロン (:)、アットマーク (@)、およびスペースを含めることができます。タグキーは aliyun または acs: で始めることはできません。シークレットごとに最大 20 個のタグを付与できます。 |
| 自動回転 | 認証情報を自動的に回転させるかどうか。 |
| ローテーション期間 | 回転間隔 (1 時間~365 日)。自動回転が有効な場合にのみ必須です。 |
| 説明 | (任意) シークレットの説明。 |
| 詳細設定 > ポリシー設定 | (任意) このシークレットのリソースベースのポリシー。 |
有効なシークレット値を入力してください。値が無効な場合、KMS から取得したパスワードやキーペアは、シークレットが最初に回転されるまで ECS インスタンスへのログインに使用できません。
SSH キーペアの取得
オプション 1:ECS で作成したキーペアを使用する
秘密鍵:ECS で SSH キーペアを作成すると、ブラウザは自動的に秘密鍵を
<key-pair-name>.pemとしてダウンロードします。詳細は、「SSH キーペアの作成」をご参照ください。公開鍵:詳細は、「公開鍵情報の表示」をご参照ください。
オプション 2:ローカルでキーペアを生成する
ssh-keygen を実行して、3072 ビットの RSA キーペアを生成します:
ssh-keygen -t RSA -b 3072 -m PEM -f ~/.ssh/sshKey_demo -N ""これにより、2 つのファイルが生成されます:
~/.ssh/sshKey_demo— 秘密鍵~/.ssh/sshKey_demo.pub— 公開鍵
ステップ 2:シークレットの取得
この例では、Alibaba Cloud SDK for Java V2.0 を使用して GetSecretValue を呼び出します。
必要な権限: AliyunKMSSecretUserAccess および AliyunKMSCryptoUserAccess
環境のセットアップ
1. Java 開発キット (JDK) のインストール
JDK 8 以降をダウンロードしてインストールします。インストールを確認します:
java -version2. SDK の依存関係の追加
プロジェクトに以下の Maven の依存関係を追加します。Alibaba Cloud SDK V2.0 を使用していることを確認してください。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>kms20160120</artifactId>
<version>1.2.3</version>
</dependency>3. アクセス認証情報の作成
この例では、認証に AccessKey ペアを使用します。他の認証方式については、「アクセス認証情報の管理」をご参照ください。
RAM コンソールで RAM ユーザーの AccessKey ペアを作成します。詳細は、「AccessKey ペアの作成」をご参照ください。

RAM ユーザーに、AliyunKMSSecretUserAccess と AliyunKMSCryptoUserAccess のシステムポリシーをアタッチして、必要な権限を付与します。詳細は、「RAM ユーザーへの権限付与」をご参照ください。

KMS は 2 種類のアクセス制御をサポートしています:
ID ベースのポリシー:RAM ID にポリシーをアタッチして、実行可能な操作を定義します。詳細は、「RAM を使用したアクセス制御の実装」をご参照ください。
リソースベースのポリシー:KMS リソース (キーとシークレット) に直接ポリシーをアタッチして、誰がアクセスできるかを定義します。詳細は、「キーポリシー」および「シークレットポリシー」をご参照ください。
4. インスタンス CA 証明書のダウンロード
[インスタンス] ページで、[ソフトウェアキー管理] または [ハードウェアキー管理] タブをクリックし、ご利用のインスタンスを選択します。
インスタンス ID または [操作] 列の [詳細] をクリックします。
インスタンス詳細ページで、[インスタンス CA 証明書] の横にある [ダウンロード] をクリックします。
証明書ファイルを保存します。デフォルトでは PrivateKmsCA_kst-******.pem という名前です。
5. VPC エンドポイントの記録
インスタンス詳細ページで、ご利用のインスタンスの Virtual Private Cloud (VPC) エンドポイントをコピーします。

シークレット値の取得
以下の例では、SDK クライアントを初期化し、GetSecretValue を呼び出します。この例では、VPC エンドポイントと CA 証明書を使用して KMS インスタンスに接続します。
コードを実行する前に、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 {
/**
* KMS クライアントを初期化します。
*
* endpoint:KMS インスタンスの VPC エンドポイント。
* 例:kst-hzz65f176a0ogplgq****.cryptoservice.kms.aliyuncs.com
* ca: インスタンス詳細ページからダウンロードした CA 証明書の内容。
*/
public static com.aliyun.kms20160120.Client createClient() throws Exception {
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"));
config.endpoint = "<インスタンスの VPC エンドポイント>";
config.ca = "<インスタンスの CA 証明書>";
return new com.aliyun.kms20160120.Client(config);
}
public static void main(String[] args_) throws Exception {
com.aliyun.kms20160120.Client client = Sample.createClient();
com.aliyun.kms20160120.models.GetSecretValueRequest request =
new com.aliyun.kms20160120.models.GetSecretValueRequest()
.setSecretName("<SecretName>");
com.aliyun.teautil.models.RuntimeOptions runtime =
new com.aliyun.teautil.models.RuntimeOptions();
try {
client.getSecretValueWithOptions(request, 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);
}
}
}実行前に以下のプレースホルダーを置き換えてください:
| プレースホルダー | 説明 | 例 |
|---|---|---|
<インスタンスの VPC エンドポイント> | インスタンス詳細ページの VPC エンドポイント | kst-hzz65f176a0ogplgq****.cryptoservice.kms.aliyuncs.com |
<インスタンスの CA 証明書> | PrivateKmsCA_kst-******.pem ファイルの内容 | (証明書の文字列全体を貼り付けます) |
<SecretName> | 取得するシークレットの名前 | my-db-password |
次のステップ
シークレットの概要 — シークレットのタイプとライフサイクル管理について学びます。
汎用シークレットの管理と使用 — 作成後に汎用シークレットの回転を構成します。
キーポリシーおよびシークレットポリシー — キーとシークレットに対してきめ細かなアクセス制御を設定します。
KMS キーの理解 — KMS がサポートする対称キーのタイプについて学びます。