Key Management Service(KMS)を使用すると、機密データを保存するためのシークレットを作成できます。 シークレットをアプリケーションに統合できます。 これにより、機密データを一元的に管理できます。 このトピックでは、シークレットを作成および取得する方法について説明します。
背景情報
KMS を使用すると、シークレットのライフサイクルを管理できます。 たとえば、シークレットの作成、削除、変更ができます。 アプリケーションコードでは、SDK を使用してシークレットを取得できます。 これにより、アプリケーションにハードコードされたシークレットによって機密データが漏洩するのを防ぐことができます。
KMS を使用すると、汎用シークレット、Resource Access Management(RAM)シークレット、データベースシークレット、および Elastic Compute Service(ECS)シークレットを管理できます。 シークレットの詳細については、「概要」をご参照ください。
使用上の注意
KMS は、キーを使用してシークレットを暗号化します。 キーとシークレットは同じ KMS インスタンスに属している必要があり、キーは対称キーである必要があります。 KMS でサポートされている対称キーの詳細については、「キーの種類」をご参照ください。
前提条件
KMS インスタンスが作成され、有効になっています。 詳細については、「KMS インスタンスを購入して有効にする」をご参照ください。
シークレットの暗号化用の対称キーが KMS インスタンスに作成されています。 詳細については、「キーを作成する」をご参照ください。
ステップ 1:シークレットを作成する
シークレットを作成するときに、シークレットのローテーションを設定できます。 KMS は、シークレットのセキュリティを確保するために、シークレットを定期的に更新します。
KMS コンソール にログインします。 上部のナビゲーションバーで、リージョンを選択します。 左側のナビゲーションウィンドウで、 を選択します。
資格情報管理 ページで、作成するシークレットの種類に基づいてタブをクリックし、インスタンス管理 ドロップダウンリストから必要なインスタンス ID を選択し、資格情報の作成 をクリックします。 表示されるパネルで、パラメータを設定し、[OK] をクリックします。
汎用シークレット
説明汎用シークレットを作成するときに、シークレットのローテーションを設定することはできません。 汎用シークレットをローテーションする方法の詳細については、「汎用シークレットを管理および使用する」をご参照ください。
パラメータ
説明
資格情報名
シークレットの名前。 シークレット名は、現在のリージョン内で一意です。
Secret Value
管理する機密データの種類。 有効な値:[シークレットキー/値] および [プレーンテキスト]。
値の長さは 30,720 バイト(30 KB)を超えることはできません。
Initial Version
シークレットの初期バージョン。 デフォルト値:[v1]。 カスタムバージョン番号を指定することもできます。
CMK
シークレットの現在の値の暗号化に使用されるキー。
重要キーとシークレットは同じ KMS インスタンスに属している必要があります。 キーは対称キーである必要があります。 KMS でサポートされている対称キーの詳細については、「キーの種類と仕様」をご参照ください。
RAM ユーザーまたは RAM ロールである場合は、キーを使用して GenerateDataKey 操作を呼び出す権限を持っている必要があります。
タグ
シークレットに追加するタグ。 タグを使用して、シークレットを分類および管理できます。 タグは、キーと値のペアで構成されます。
説明タグキーまたはタグ値の長さは最大 128 文字で、文字、数字、スラッシュ(/)、バックスラッシュ(\)、アンダースコア(_)、ハイフン(-)、ピリオド(.)、プラス記号(+)、等号(=)、コロン(:)、アットマーク(@)、およびスペースを含めることができます。
タグキーは、aliyun または acs: で始めることはできません。
シークレットごとに最大 20 個のキーと値のペアを設定できます。
説明
シークレットの説明。
ポリシー設定
シークレットのポリシー設定。 詳細については、「概要」をご参照ください。
デフォルトポリシーを使用し、シークレットを作成した後にビジネス要件に基づいてポリシーを変更できます。
RAM シークレット
パラメータ
説明
Select RAM User
シークレットを作成する RAM ユーザー。 選択した RAM ユーザーは、少なくとも 1 つの AccessKey ペアを持っている必要があります。 詳細については、「AccessKey ペアを作成する」をご参照ください。
シークレット名は、RAM ユーザーの名前に基づいて自動的に生成されます。 シークレット名は、現在のリージョン内で一意です。
Secret Value
RAM ユーザーの AccessKey シークレット。
値の長さは 30,720 バイト(30 KB)を超えることはできません。
CMK
シークレットの現在の値の暗号化に使用されるキー。
重要キーとシークレットは同じ KMS インスタンスに属している必要があります。 キーは対称キーである必要があります。 KMS でサポートされている対称キーの詳細については、「キーの種類と仕様」をご参照ください。
RAM ユーザーまたは RAM ロールである場合は、キーを使用して GenerateDataKey 操作を呼び出す権限を持っている必要があります。
タグ
シークレットに追加するタグ。 タグを使用して、シークレットを分類および管理できます。 タグは、キーと値のペアで構成されます。
説明タグキーまたはタグ値の長さは最大 128 文字で、文字、数字、スラッシュ(/)、バックスラッシュ(\)、アンダースコア(_)、ハイフン(-)、ピリオド(.)、プラス記号(+)、等号(=)、コロン(:)、アットマーク(@)、およびスペースを含めることができます。
タグキーは、aliyun または acs: で始めることはできません。
シークレットごとに最大 20 個のキーと値のペアを設定できます。
自動ローテーション
自動シークレットローテーションを有効にするかどうかを指定します。
Days (7 Days to 365 Days)
自動シークレットローテーションの間隔。 この設定は、自動ローテーションを有効にする場合にのみ必須です。
KMS は、このパラメータの値に基づいてシークレットを定期的に更新します。
説明
シークレットの説明。
ポリシー設定
シークレットのポリシー設定。 詳細については、「概要」をご参照ください。
デフォルトポリシーを使用し、シークレットを作成した後にビジネス要件に基づいてポリシーを変更できます。
データベースシークレット(ApsaraDB RDS)
シングル資格情報の作成 のみ選択できます。
パラメータ
説明
データベースタイプ
作成するデータベースシークレットの種類。 ApsaraDB RDS 資格情報 を選択します。
資格情報名
シークレットの名前。 シークレット名は、現在のリージョン内で一意です。
ApsaraDB RDS インスタンス
Alibaba Cloud アカウント内で管理する既存の ApsaraDB RDS インスタンス。
アカウント管理
デュアルアカウント管理(推奨):このモードは、アプリケーションが ApsaraDB RDS インスタンスにアクセスするためにシークレットを使用するシナリオに適しています。 このモードでは、KMS は同じ権限を持つ 2 つのアカウントを管理します。 このモードでは、シークレットがローテーションされるときに、アプリケーションと ApsaraDB RDS インスタンス間の接続が中断されません。
アカウントを作成 タブをクリックし、ユーザー名のプレフィックスを指定し、データベースを選択し、権限を指定します。
説明KMS はアカウントをすぐに作成しません。 KMS は、シークレット情報を確認して確定した後にアカウントを作成します。
存在するアカウントをインポート タブをクリックし、ユーザー名を選択し、ユーザー名のパスワードを指定します。
説明ApsaraDB RDS インスタンスを作成したときにアカウントに指定したパスワードと同じパスワードを指定することをお勧めします。 ユーザー名と指定したパスワードが一致しない場合は、シークレットが最初にローテーションされたときに有効なユーザー名とパスワードを取得できます。
シングルアカウント管理:このモードは、特権アカウントまたは手動 O&M アカウントが管理されるシナリオに適しています。 このモードでは、シークレットがローテーションされるときに、シークレットの現在のバージョンが一時的に使用できなくなる場合があります。
アカウントを作成 タブをクリックし、ユーザー名のプレフィックスを指定し、アカウントの種類を選択します。
[アカウントの種類] パラメータには、標準アカウント または 特権アカウント を選択できます。 標準アカウント を選択した場合は、データベースを選択し、アカウントの権限を指定する必要があります。
存在するアカウントをインポート タブをクリックし、ユーザー名を選択し、ユーザー名のパスワードを指定します。
CMK
シークレットの現在の値の暗号化に使用されるキー。
重要キーとシークレットは同じ KMS インスタンスに属している必要があります。 キーは対称キーである必要があります。 KMS でサポートされている対称キーの詳細については、「キーの種類と仕様」をご参照ください。
RAM ユーザーまたは RAM ロールである場合は、キーを使用して GenerateDataKey 操作を呼び出す権限を持っている必要があります。
タグ
シークレットに追加するタグ。 タグを使用して、シークレットを分類および管理できます。 タグは、キーと値のペアで構成されます。
説明タグキーまたはタグ値の長さは最大128 文字で、文字、数字、スラッシュ(/)、バックスラッシュ(\)、アンダースコア(_)、ハイフン(-)、ピリオド(.)、プラス記号(+)、等号(=)、コロン(:)、アットマーク(@)、およびスペースを含めることができます。
タグキーは、aliyun または acs: で始めることはできません。
シークレットごとに最大 20 個のキーと値のペアを設定できます。
自動ローテーション
自動シークレットローテーションを有効にするかどうかを指定します。
ローテーション期間
自動シークレットローテーションの間隔。 この設定は、自動ローテーションを有効にする場合にのみ必須です。 値の範囲は 6 時間~ 365 日です。
KMS は、このパラメータの値に基づいてシークレットを定期的に更新します。
説明
シークレットの説明。
ポリシー設定
シークレットのポリシー設定。 詳細については、「概要」をご参照ください。
デフォルトポリシーを使用し、シークレットを作成した後にビジネス要件に基づいてポリシーを変更できます。
データベースシークレット(PolarDB)
シングル資格情報の作成 のみ選択できます。 PolarDB シークレットを作成する場合は、デュアルモードの新しいアカウントのみがサポートされていることに注意してください。 新しいアカウントは、PolarDB for MySQL および PolarDB for PostgreSQL のみサポートしています。
パラメータ
説明
データベースタイプ
作成するデータベースシークレットの種類。 [polardb シークレット] を選択します。
資格情報名
シークレットの名前。 シークレット名は、現在のリージョン内で一意です。
[polardb クラスタ]
Alibaba Cloud アカウント内で管理する既存の PolarDB クラスタ。
アカウント管理
デュアルアカウント管理 のみサポートされています。
このモードは、アプリケーションが PolarDB クラスタにアクセスするためにシークレットを使用するシナリオに適しています。 このモードでは、KMS は同じ権限を持つ 2 つのアカウントを管理します。 このモードでは、シークレットがローテーションされるときに、アプリケーションと PolarDB クラスタ間の接続が中断されません。
[シークレット値]
アカウントを作成 のみサポートされています。
新しいアカウントの種類は標準です。 PolarDB クラスタを選択した後、新しいアカウントのユーザー名のプレフィックス、権限、およびデータベースを指定します。
説明KMS はアカウントをすぐに作成しません。 KMS は、シークレット情報を確認して確定した後にアカウントを作成します。
アカウント名は一意である必要があります。 そうしないと、シークレットでアカウントを管理できません。
CMK
シークレットの現在の値の暗号化に使用されるキー。
重要キーとシークレットは同じ KMS インスタンスに属している必要があります。 キーは対称キーである必要があります。 KMS でサポートされている対称キーの詳細については、「キーの種類と仕様」をご参照ください。
RAM ユーザーまたは RAM ロールである場合は、キーを使用して GenerateDataKey 操作を呼び出す権限を持っている必要があります。
タグ
シークレットに追加するタグ。 タグを使用して、シークレットを分類および管理できます。 タグは、キーと値のペアで構成されます。
説明タグキーまたはタグ値の長さは最大 128 文字で、文字、数字、スラッシュ(/)、バックスラッシュ(\)、アンダースコア(_)、ハイフン(-)、ピリオド(.)、プラス記号(+)、等号(=)、コロン(:)、アットマーク(@)、およびスペースを含めることができます。
タグキーは、aliyun または acs: で始めることはできません。
シークレットごとに最大 20 個のキーと値のペアを設定できます。
自動ローテーション
自動シークレットローテーションを有効にするかどうかを指定します。
ローテーション期間
自動シークレットローテーションの間隔。 この設定は、自動ローテーションを有効にする場合にのみ必須です。 値の範囲は 6 時間~ 365 日です。
KMS は、このパラメータの値に基づいてシークレットを定期的に更新します。
説明
シークレットの説明。
ポリシー設定
シークレットのポリシー設定。 詳細については、「概要」をご参照ください。
デフォルトポリシーを使用し、シークレットを作成した後にビジネス要件に基づいてポリシーを変更できます。
データベースシークレット(ApsaraDB for Redis)
シングル資格情報の作成 と Create Bulk Secrets がサポートされています。 次の例では、[単一シークレットの作成] が選択されています。
パラメータ
説明
データベースタイプ
作成するデータベースシークレットの種類。 ApsaraDB for Redis Secrets を選択します。
Secret Name
シークレットの名前。 シークレット名は、現在のリージョン内で一意です。
[apsaradb For Redis/tair インスタンス]
Alibaba Cloud アカウント内で管理する既存の ApsaraDB for Redis インスタンス。
アカウント管理
デュアルアカウント管理 のみサポートされています。
Secret Value
KMS を使用して ApsaraDB for Redis インスタンスのアカウントを管理する場合、新しいアカウントのみ管理できます。 既存のアカウントは管理できません。
Account Name: ユーザー名プレフィックスを入力します。その後、KMS は ApsaraDB for Redis 操作を呼び出して、同じ権限を持つ 2 つのアカウントを作成します。 たとえば、
userというユーザー名プレフィックスを入力すると、userアカウントとuser _cloneアカウントが作成されます。Permissions:有効な値は、Read/Write および Read-Only です。 2 つの ApsaraDB for Redis アカウントは、同じ権限を持っています。
CMK
シークレットの現在の値の暗号化に使用されるキー。
重要キーとシークレットは同じ KMS インスタンスに属している必要があります。 キーは対称キーである必要があります。 KMS でサポートされている対称キーの詳細については、「キーの種類と仕様」をご参照ください。
RAM ユーザーまたは RAM ロールである場合は、キーを使用して GenerateDataKey 操作を呼び出す権限を持っている必要があります。
[タグ]
シークレットに追加するタグ。 タグを使用して、シークレットを分類および管理できます。 タグは、キーと値のペアで構成されます。
説明タグキーまたはタグ値の長さは最大 128 文字で、文字、数字、スラッシュ(/)、バックスラッシュ(\)、アンダースコア(_)、ハイフン(-)、ピリオド(.)、プラス記号(+)、等号(=)、コロン(:)、アットマーク(@)、およびスペースを含めることができます。
タグキーは、aliyun または acs: で始めることはできません。
シークレットごとに最大 20 個のキーと値のペアを設定できます。
自動ローテーション
自動シークレットローテーションを有効にするかどうかを指定します。
ローテーション期間
自動シークレットローテーションの間隔。 この設定は、自動ローテーション を有効にする場合にのみ必須です。 値の範囲は 6 時間~ 365 日です。
KMS は、このパラメータの値に基づいてシークレットを定期的に更新します。
説明
シークレットの説明。
ポリシー設定
シークレットのポリシー設定。 詳細については、「概要」をご参照ください。
デフォルトポリシーを使用し、シークレットを作成した後にビジネス要件に基づいてポリシーを変更できます。
ECS シークレット
パラメータ
説明
資格情報名
シークレットの名前。 シークレット名は、現在のリージョン内で一意です。
Managed Instance
Alibaba Cloud アカウント内で管理する既存の ECS インスタンス。
Managed User
ECS インスタンス上の既存のユーザーの名前(Linux オペレーティングシステムの root ユーザー、Windows オペレーティングシステムの Administrator ユーザーなど)。
Initial Secret Value
値の長さは 30,720 バイト(30 KB)を超えることはできません。
[パスワード]:ECS インスタンスにログインするために使用されるユーザーのパスワード。
[キーペア]:ECS インスタンスにログインするために使用されるユーザーの SSH キーペア。
説明有効なシークレット値を入力してください。 無効なシークレット値を入力した場合、KMS から取得したパスワードまたはキーペアは、ECS シークレットが最初にローテーションされるまで ECS インスタンスへのログインに使用できません。
CMK
シークレットの現在の値の暗号化に使用されるキー。
重要キーとシークレットは同じ KMS インスタンスに属している必要があります。 キーは対称キーである必要があります。 KMS でサポートされている対称キーの詳細については、「キーの種類と仕様」をご参照ください。
RAM ユーザーまたは RAM ロールである場合は、キーを使用して GenerateDataKey 操作を呼び出す権限を持っている必要があります。
タグ
シークレットに追加するタグ。 タグを使用して、シークレットを分類および管理できます。 タグは、キーと値のペアで構成されます。
説明タグキーまたはタグ値の長さは最大 128 文字で、文字、数字、スラッシュ(/)、バックスラッシュ(\)、アンダースコア(_)、ハイフン(-)、ピリオド(.)、プラス記号(+)、等号(=)、コロン(:)、アットマーク(@)、およびスペースを含めることができます。
タグキーは、aliyun または acs: で始めることはできません。
シークレットごとに最大 20 個のキーと値のペアを設定できます。
自動ローテーション
自動シークレットローテーションを有効にするかどうかを指定します。
ローテーション期間
自動シークレットローテーションの間隔。 この設定は、自動ローテーションを有効にする場合にのみ必須です。 値の範囲は 1 時間~ 365 日です。
KMS は、このパラメータの値に基づいてシークレットを定期的に更新します。
説明
シークレットの説明。
ポリシー設定
シークレットのポリシー設定。 詳細については、「概要」をご参照ください。
デフォルトポリシーを使用し、シークレットを作成した後にビジネス要件に基づいてポリシーを変更できます。
ステップ 2:シークレットを取得する
次の例では、Alibaba Cloud SDK for Java を使用します。
準備
環境を準備します。
環境要件
Java Development Kit(JDK)8 以降をダウンロードしてインストールします。
バージョンチェック
ターミナルで
java -versionコマンドを実行して、JDK のバージョンを確認します。SDK for Java をインストールします。
次の Maven 依存関係をプロジェクトに追加します。 その後、Alibaba Cloud SDK の Java パッケージが Maven リポジトリから自動的にダウンロードされます。 Alibaba Cloud SDK V2.0 が使用されていることを確認してください。
<dependency> <groupId>com.aliyun</groupId> <artifactId>kms20160120</artifactId> <version>1.2.3</version> </dependency>API 操作の呼び出しに使用できる認証情報を作成します。
Alibaba Cloud SDK は、複数の RAM ベースの認証方式をサポートしています。 この例では、RAM ユーザーの AccessKey ペアが使用されます。 認証方式の詳細については、「アクセス認証情報を管理する」をご参照ください。
RAM コンソール で RAM ユーザーの AccessKey ペアを作成します。 詳細については、「AccessKey ペアを作成する」をご参照ください。
RAM ユーザーの AccessKey ペアがすでに作成されている場合は、この手順をスキップします。

必要な権限を RAM ユーザーに付与します。
たとえば、RAM ユーザーがシークレットを取得するための権限を必要とする場合は、システムポリシー AliyunKMSSecretUserAccess および AliyunKMSCryptoUserAccess を RAM ユーザーにアタッチできます。 詳細については、「RAM ユーザーに権限を付与する」をご参照ください。
説明KMS は、次の権限設定方法を提供します。
KMS インスタンスの認証局(CA)証明書を取得します。
インスタンス管理 ページで、[ソフトウェアキー管理] タブまたは [ハードウェアキー管理] タブを選択し、ターゲットインスタンスを選択します。
インスタンス ID または [アクション] 列の [詳細] をクリックします。 [詳細] ページで、[インスタンス CA 証明書] の横にある [ダウンロード] をクリックします。
証明書を安全に保管してください。 ダウンロードしたファイルの名前は、デフォルトで
PrivateKmsCA_kst-******.pemになります。
インスタンスの Virtual Private Cloud(VPC)エンドポイントを取得します。
インスタンスの詳細ページでインスタンスの VPC エンドポイントを記録します。

シークレットの取得
Alibaba Cloud SDK を初期化します。
重要Alibaba Cloud SDK V2.0 が使用されていることを確認してください。 config.endpoint パラメータをインスタンスの VPC エンドポイントに設定し、インスタンスの CA 証明書を設定する必要があります。
public static com.aliyun.kms20160120.Client createClient() throws Exception { // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが危険にさらされる可能性があります。 次のサンプルコードは参照用です。 // セキュリティトークンサービス(STS)トークンを使用してセキュリティを強化することをお勧めします。 認証方式の詳細については、https://www.alibabacloud.com/help/en/sdk/developer-reference/v2-manage-access-credentials?spm=a2c63.p38356.help-menu-262060.d_1_4_1_2.1ad47c23arIlrq を参照してください。 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")); // インスタンスの VPC エンドポイントを入力します。 例:kst-hzz65f176a0ogplgq****.cryptoservice.kms.aliyuncs.com。 config.endpoint = "<インスタンスの VPC エンドポイント>"; // インスタンスの CA 証明書の内容を入力します。 config.ca = "<インスタンスの CA 証明書>"; return new com.aliyun.kms20160120.Client(config); }GetSecretValue 操作を呼び出して、シークレットを取得します。
// このファイルは自動生成されています。編集しないでください。ありがとうございます。 package com.aliyun.sample; import com.aliyun.tea.*; public class Sample { public static com.aliyun.kms20160120.Client createClient() throws Exception { // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが危険にさらされる可能性があります。 次のサンプルコードは参照用です。 // セキュリティトークンサービス(STS)トークンを使用してセキュリティを強化することをお勧めします。 認証方式の詳細については、https://www.alibabacloud.com/help/en/sdk/developer-reference/v2-manage-access-credentials?spm=a2c63.p38356.help-menu-262060.d_1_4_1_2.1ad47c23arIlrq を参照してください。 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")); // インスタンスの VPC エンドポイントを入力します。 例:kst-hzz65f176a0ogplgq****.cryptoservice.kms.aliyuncs.com。 config.endpoint = "<インスタンスの VPC エンドポイント>"; // インスタンスの CA 証明書の内容を入力します。 config.ca = "<インスタンスの CA 証明書>"; 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("<SecretName>"); 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); } } }