アプリケーションのソースコードに AccessKey ペアをハードコーディングすることは、一般的なセキュリティリスクです。コードやデプロイされたアーティファクトを検査できる人なら誰でも、認証情報を不正に取得できてしまいます。RAM シークレットを使用すると、RAM ユーザーの AccessKey ペアを Key Management Service (KMS) に保存し、ローテーションできます。これにより、アプリケーションはビルド時に認証情報を埋め込むのではなく、ランタイムに有効な認証情報を取得します。
このトピックでは、KMS の権限付与、RAM シークレットの作成、アプリケーションへの統合、およびシークレットのライフサイクル管理について説明します。
仕組み

RAM ユーザーの AccessKey ペアを RAM シークレットとして保存した後、アプリケーションをシークレット名のみで設定します。実行時、アプリケーションは GetSecretValue を呼び出して現在の AccessKey ペアを取得します。シークレットを回転すると、KMS が RAM 内に新しい AccessKey ペアを作成し、新しい認証情報を現在のシークレット値として書き込み、古い AccessKey ペアを削除します。アプリケーションは、次回の取得時にコード変更なしで新しい認証情報を使用します。
使用制限:RAM シークレットとして管理できるのは、RAM ユーザーの AccessKey ペアのみです。Alibaba Cloud アカウント (root ユーザー) の AccessKey ペアは管理できません。
シークレットのローテーション
KMS は、2 つのローテーション方法をサポートしています:
| ローテーション方法 | 使用する状況 | ローテーション期間 |
|---|---|---|
| 自動ローテーション | RAM シークレットは、それを定期的に読み取るアプリケーションに組み込まれています。 | 約 2 日 (推奨:3 か月以内) |
| 即時ローテーション | シークレットが漏洩した場合の緊急対応、またはアプリケーションがシークレットを取得する際に手動でローテーションをトリガーする場合。 | 10 分~ 2 日 (推奨:漏洩したシークレットは 30 分、それ以外は 2 日) |
ローテーションの進行中にシークレットに関連付けられている RAM ユーザーを削除しないでください。削除するとローテーションが失敗します。
シークレットのローテーション中は、自動ローテーションポリシーを設定したり、即時ローテーションをトリガーしたりすることはできません。
前提条件
開始する前に、以下を確認してください:
購入済みで有効化された KMS インスタンス
シークレットの暗号化に使用する、KMS インスタンスで作成された対称キー。詳細については、「キーの作成」をご参照ください。
(RAM ユーザーまたは RAM ロールを使用する場合に必須) シークレットの管理に使用する RAM ユーザーまたは RAM ロールに、AliyunKMSSecretAdminAccess および AliyunRAMReadOnlyAccess システムポリシーがアタッチされていること。詳細については、「RAM ユーザーへの権限付与」または「RAM ロールへの権限付与」をご参照ください。
Alibaba Cloud アカウントに AliyunKMSManageRAMCredentialsRole または AliyunKMSManagedRAMCrendentialsRole サービスリンクロールが既にある場合は、ステップ 1 をスキップしてください。KMS には、RAM ユーザーの AccessKey ペアを管理する権限が既に付与されています。
ステップ 1:RAM ユーザーの AccessKey ペアを管理する権限を KMS に付与
KMS コンソールにログインします。上部のナビゲーションバーでリージョンを選択します。左側のナビゲーションウィンドウで、[リソース] > [シークレット] を選択します。
[カスタマー管理シークレット] タブをクリックし、[RAM シークレット] タイプを見つけ、[インスタンス ID] ドロップダウンリストから必要なインスタンス ID を選択し、[シークレットの作成] をクリックします。
[RAM シークレットの作成] パネルで、[KMS に AccessKey ペアへのアクセスを許可] をクリックします。
[クラウドリソースアクセス権限付与] ページで: 権限付与が完了すると、KMS は自動的に AliyunKMSManageRAMCredentialsRole サービスリンクロールを作成し、AliyunKMSManageRAMCredentialsRolePolicy 権限ポリシーをアタッチします。KMS はこのロールを使用して RAM シークレットを管理し、シークレットのローテーションを実行します。サービスリンクロールとポリシーの詳細を表示するには、「RAM ロールの情報の表示」および「ポリシーの情報の表示」をご参照ください。
AliyunKMSManageRAMCredentialsRole または AliyunKMSManagedRAMCrendentialsRole ロールを持たない RAM 管理者の場合は、[承認に同意] をクリックします。
それ以外の場合は、[クラウドリソースアクセス承認] リンクを RAM 管理者または Alibaba Cloud アカウントの所有者に送信して、権限付与を完了してもらいます。
RAM シークレット作成ページに戻り、更新ボタンをクリックして続行します。
ステップ 2:RAM シークレットの作成
KMS コンソールにログインします。上部のナビゲーションバーでリージョンを選択します。左側のナビゲーションウィンドウで、[リソース] > [シークレット] を選択します。
[カスタマー管理シークレット] タブをクリックし、[RAM シークレット] タイプを見つけ、[インスタンス ID] ドロップダウンリストから必要なインスタンス ID を選択し、[シークレットの作成] をクリックします。
パラメーターを設定し、[OK] をクリックします。
| パラメーター | 説明 |
|---|---|
| [RAM ユーザーの選択] | 管理する AccessKey ペアを持つ RAM ユーザーです。この RAM ユーザーは、少なくとも 1 つの AccessKey ペアを持っている必要があります。詳細については、「AccessKey ペアの作成」をご参照ください。シークレット名は RAM ユーザー名から自動生成され、リージョン内で一意です。 |
| [シークレット値] | RAM ユーザーの AccessKey シークレットです。最大サイズは 30,720 バイト (30 KB) です。 |
| [CMK] | シークレット値を暗号化するために使用されるカスタマーマスターキー (CMK) です。キーとシークレットは同じ KMS インスタンスに属している必要があり、キーは対称キーである必要があります。RAM ユーザーまたはロールの場合、このキーを使用して GenerateDataKey を呼び出す権限が必要です。サポートされているキータイプについては、「対称キーと非対称キーの仕様」をご参照ください。 |
| [タグ] | シークレットを分類および管理するためのキーと値のペアです。各タグキーと値は、文字、数字、/、\、_、-、.、+、=、:、@、およびスペースを使用して、最大 128 文字まで設定できます。タグキーは aliyun または acs: で始めることはできません。1 つのシークレットにつき、最大 20 個のキーと値のペアを設定できます。 |
| [自動ローテーション] | シークレットの自動ローテーションを有効にするかどうかを指定します。 |
| [日数 (7 日~ 365 日)] | 自動ローテーションの間隔です。自動ローテーションが有効な場合にのみ必須です。 |
| 説明 | シークレットの任意の説明です。 |
| [詳細設定] > [ポリシー設定] | シークレットのリソースポリシーです。詳細については、「シークレットポリシーの概要」をご参照ください。デフォルトポリシーを使用し、作成後に調整することができます。 |
ステップ 3:RAM シークレットをアプリケーションに統合
以下のいずれかの方法を使用して GetSecretValue を呼び出し、ランタイムに RAM シークレットを取得します。セキュリティを強化するため、ハードコーディングされた認証情報ではなく、ECS インスタンス RAM ロールまたは標準の RAM ロールを使用して認証することを推奨します。
アプリケーションにリトライメカニズムを実装して、一時的なエラーを処理し、信頼性を向上させてください。
エンドポイント:
共有ゲートウェイ: 「エンドポイント」をご参照ください。
専用ゲートウェイ:{INSTANCE_ID}.cryptoservice.kms.aliyuncs.com| 方法 | 最適な用途 | サポートされているゲートウェイ |
|---|---|---|
| RAM シークレットプラグイン | Java 8以降、Go、またはPythonのアプリケーションで、サポートされているSDKバージョン | 共有ゲートウェイ、専用ゲートウェイ |
| シークレットクライアント | Java 8+、Go、または Python アプリケーション | 共有ゲートウェイ、専用ゲートウェイ |
| Alibaba Cloud SDK | Java 8+ (SDK V1.0 では Java 6+)、PHP、Go、Python、.NET (C# のみ)、C++、TypeScript、または Swift のアプリケーション | 専用ゲートウェイ (推奨)、共有ゲートウェイ |
| KMS エージェント | 多くのアプリケーションが KMS にアクセスするマルチアプリケーションデプロイメント。標準の HTTP API を介して任意の言語をサポートします。 | 専用ゲートウェイ (推奨)、共有ゲートウェイ |
| KMS インスタンス SDK (非推奨) | Java 8+、PHP、Go、Python、または .NET (C# のみ) のアプリケーション | 専用ゲートウェイのみ |
シークレットのライフサイクル管理
RAM シークレットのローテーション
KMS コンソールにログインします。上部のナビゲーションバーでリージョンを選択します。左側のナビゲーションウィンドウで、[リソース] > [シークレット] を選択します。
[カスタマー管理シークレット] タブをクリックし、[RAM シークレット] タイプを見つけ、[インスタンス ID] ドロップダウンリストから必要なインスタンス ID を選択し、対象のシークレットを見つけて、[アクション] 列の [詳細] をクリックします。
ローテーションポリシーを設定します:
自動ローテーション:右上隅の [ローテーションの設定] をクリックし、[自動ローテーション] を有効または無効にしてから、[OK] をクリックします。
即時ローテーション:右上隅の [今すぐローテーション] をクリックします。[ローテーションの設定] ダイアログボックスで、[ローテーションウィンドウ] を 10 分から 2 日の間の値に設定し、[OK] をクリックします。
RAM シークレットの削除
RAM シークレットを削除すると、Secrets Manager からのみ削除されます。関連付けられている RAM ユーザーの AccessKey ペアは RAM からは削除されません。
削除する前に、シークレットが使用中でないことを確認してください。アクティブなシークレットを削除すると、サービス障害が発生する可能性があります。
KMS コンソールにログインします。上部のナビゲーションバーでリージョンを選択します。左側のナビゲーションウィンドウで、[リソース] > [シークレット] を選択します。
[カスタマー管理シークレット] タブをクリックし、[RAM シークレット] タイプを見つけ、[インスタンス ID] ドロップダウンリストから必要なインスタンス ID を選択し、対象のシークレットを見つけて、[アクション] 列の [削除のスケジューリング] をクリックします。
[削除のスケジューリング] ダイアログボックスで、削除方法を選択し、[OK] をクリックします:
削除の予約: 保持期間 (7~30 日) を設定します。期間が終了すると、KMS はシークレットを削除します。保持期間中は、[操作] 列の [OK] をクリックすると削除をキャンセルできます。
すぐに削除:KMS はシークレットをすぐに削除します。
タグの管理
タグは、シークレットを分類および管理するためのキーと値のペアです。各タグキーと値は最大 128 文字です。タグキーは aliyun または acs: で始めることはできません。各シークレットは最大 20 個のキーと値のペアをサポートします。
単一のシークレットにタグを追加する
タグは、[シークレット一覧] ページまたは [シークレットの詳細] ページから追加できます。
[シークレット] リストページから:
KMS コンソールにログインします。上部のナビゲーションバーでリージョンを選択します。左側のナビゲーションウィンドウで、[リソース] > [シークレット] を選択します。
シークレットタイプに基づいてタブをクリックし、[インスタンス ID] ドロップダウンリストから必要なインスタンス ID を選択し、目的のシークレットを見つけ、[タグ] 列の
アイコンをクリックします。[追加] をクリックします。[タグの編集] ダイアログボックスで、1 つ以上の [タグキー] と [タグ値] のペアを入力し、[OK] をクリックします。[閉じる] をクリックして確認メッセージを閉じます。
[シークレット詳細] ページから:
KMS コンソールにログインします。上部のナビゲーションバーでリージョンを選択します。左側のナビゲーションウィンドウで、[リソース] > [シークレット] を選択します。
シークレットのタイプに基づいてタブをクリックし、[インスタンス ID] ドロップダウンリストから必要なインスタンス ID を選択し、対象のシークレットを見つけて、[アクション] 列の [詳細] をクリックします。
[シークレット詳細] ページで、[タグ] の横にある
アイコンをクリックします。[タグの編集] ダイアログボックスで、1 つ以上の [タグキー] と [タグ値] のペアを入力し、[OK] をクリックします。[閉じる] をクリックして確認メッセージを閉じます。
複数のシークレットのタグを一度に追加または削除する
KMS コンソールにログインします。上部のナビゲーションバーでリージョンを選択します。左側のナビゲーションウィンドウで、[リソース] > [シークレット] を選択します。
シークレットのタイプに基づいてタブをクリックし、[インスタンス ID] ドロップダウンリストから必要なインスタンス ID を選択し、リストから対象のシークレットを選択します。
リストの下部で:
タグの追加:[タグの追加] をクリックします。[タグの追加] ダイアログボックスで、1 つ以上の [タグキー] と [タグ値] のペアを入力し、[OK] をクリックします。[閉じる] をクリックして確認メッセージを閉じます。
タグの削除: [タグの削除] をクリックします。[一括削除] ダイアログボックスで、削除するタグを選択し、[キャンセル] をクリックします。確認メッセージを閉じるには、[閉じる] をクリックします。
アカウントのチェック
アカウントチェック機能は、RAM シークレットに関連付けられている RAM ユーザーがまだ存在し、シークレットに保存されている AccessKey ID が RAM ユーザーの現在の AccessKey ID と一致することを確認します。
KMS コンソールにログインします。上部のナビゲーションバーでリージョンを選択します。左側のナビゲーションウィンドウで、[リソース] > [シークレット] を選択します。
[カスタマー管理シークレット] タブをクリックし、[RAM シークレット] タイプを見つけ、[インスタンス ID] ドロップダウンリストから必要なインスタンス ID を選択し、対象のシークレットを見つけて、[アクション] 列の [詳細] をクリックします。
[バージョン] セクションで、[アカウントのチェック] をクリックし、結果を確認します。