ApsaraDB RDS データベースアクセスのセキュリティを強化するために、ApsaraDB RDS アカウントのユーザー名とパスワードを Key Management Service (KMS) シークレットに保存します。アプリケーションは、Alibaba Cloud SDK、Secret SDK、KMS Agent、または KMS インスタンス SDK を使用して、KMS からこれらのシークレットを動的に取得できます。シークレットのローテーションを設定して、アカウント漏洩のリスクを最小限に抑えることもできます。このトピックでは、ApsaraDB RDS シークレットの管理方法と使用方法について説明します。
仕組み
ApsaraDB RDS シークレットを使用すると、アプリケーションで静的なデータベースアカウント構成を行う必要がなくなります。KMS でデータベースアカウントの ApsaraDB RDS シークレットを作成すると、アプリケーションは GetSecretValue 操作を呼び出して、取得したシークレットを使用してデータベースにアクセスできます。
ApsaraDB RDS アカウントのユーザー名とパスワードを KMS に保存した後、ApsaraDB RDS でそれらを変更または削除してサービスの中断を招かないようにしてください。
ApsaraDB RDS シークレットのローテーション方法
KMS は、シークレットをローテーションするときに ApsaraDB RDS アカウントのパスワードを変更しますが、ユーザー名は同じままです。シークレットのローテーションは通常即時に行われます。2 分以上かかる場合は、関連付けられている ApsaraDB RDS インスタンスとアカウントが正しく機能していることを確認してください。
ローテーションの失敗を避けるために、ローテーション中にシークレットに関連付けられている ApsaraDB RDS インスタンスまたはアカウントを削除しないでください。
KMS は、ApsaraDB RDS シークレットのシングルアカウントホスティングとデュアルアカウントホスティングの両方をサポートしており、それぞれに異なるローテーションポリシーがあります。
シングルアカウント
パスワードのローテーションでは、アカウントの新しいパスワードが作成されます。このプロセス中、パスワードが切り替えられているときに、現在のバージョンのシークレットに一時的にアクセスできなくなる可能性があります。そのため、再試行ポリシーを設定することをお勧めします。
マルチアカウント
シークレットを作成するときに、ApsaraDB RDS アカウントのユーザー名とパスワードを持っている場合、KMS は最初のローテーション中に 2 番目のアカウントを作成します。後続のローテーションでは、KMS は 2 つのアカウント間でパスワードの変更を交互に行います。次の図は、このプロセスを示しています。
制限事項
サポートされている ApsaraDB RDS データベースには、ApsaraDB RDS for MySQL、ApsaraDB RDS for MariaDB、ApsaraDB RDS for SQL Server (SQL Server 2017 クラスタ版を除く)、および ApsaraDB RDS for PostgreSQL が含まれます。
ApsaraDB RDS アカウントのユーザー名とパスワードを複数のシークレットに保存しないでください。1 つのシークレットをローテーションするとパスワードが更新され、他のシークレットのシークレット値は ApsaraDB RDS データベースへのログインに使用できなくなります。
前提条件
RAM ユーザーまたは RAM ロールを使用して ApsaraDB RDS シークレットを管理する場合は、Alibaba Cloud アカウントがシステムポリシー AliyunKMSSecretAdminAccess を RAM ユーザーまたは RAM ロールに付与していることを確認してください。詳細については、「RAM ユーザーに権限を付与する」または「RAM ロールに権限を付与する」をご参照ください。
ステップ 1: ApsaraDB RDS シークレットを作成する
シークレットを作成するときに、シークレットの自動ローテーションを設定できます。これは、シークレットの漏洩のリスクを軽減するのに役立ちます。
KMS コンソール にログインします。上部のナビゲーションバーで、リージョンを選択します。左側のナビゲーションウィンドウで、 を選択します。
データベース資格情報 タブをクリックし、インスタンス管理 を選択して、 をクリックします。構成が完了したら、[確認] をクリックします。
説明複数の ApsaraDB RDS シークレットを一度に作成することはできません。
ApsaraDB RDS シークレットを作成すると、システムは自動的にサービスロール AliyunServiceRoleForKMSSecretsManagerForRDS を作成し、権限ポリシー AliyunServiceRolePolicyForKMSSecretsManagerForRDS を付与します。KMS はこのロールを引き受けて、ApsaraDB RDS アカウントのパスワードのローテーションなど、ApsaraDB RDS シークレットを管理します。
RAM コンソールにログインして、サービスロールとポリシーの詳細を表示できます。詳細については、「RAM ロールの情報を表示する」および「ポリシーの基本情報を表示する」をご参照ください。
パラメーター
説明
データベースタイプ
作成するデータベースシークレットの種類。 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 は、このパラメーターの値に基づいてシークレットを定期的に更新します。
説明
シークレットの説明。
ポリシー設定
シークレットのポリシー設定。詳細については、「概要」をご参照ください。
デフォルトのポリシーを使用し、シークレットを作成した後にビジネス要件に基づいてポリシーを変更できます。
ステップ 2: ApsaraDB RDS シークレットをアプリケーションに統合する
KMS は、Secret JDBC Client、Secret Client、Alibaba Cloud SDK、KMS Agent、および KMS インスタンス SDK を提供して、GetSecretValue (OpenAPI) または GetSecretValue (KMS インスタンス API) (非推奨) 操作を呼び出して、ApsaraDB RDS シークレットの値を取得します。
サービスの信頼性を高めるために、アプリケーションに堅牢なエラー再試行メカニズムを実装することをお勧めします。
KMS は複数の認証方式を提供します。セキュリティを強化するために、ECS インスタンス RAM ロールまたは標準 RAM ロールの使用を優先することをお勧めします。
エンドポイント:
共有ゲートウェイエンドポイント: 「エンドポイント」をご参照ください。
専用ゲートウェイエンドポイント:
{INSTANCE_ID}.cryptoservice.kms.aliyuncs.com.
メソッド | 適用可能なシナリオ | サポートされているゲートウェイ |
説明 Secret JDBC Client は、ビジネスロジック、ベストプラクティス、および設計パターンをカプセル化します。データベース接続が確立された後、JDBC インターフェースを介してデータベース接続認証を直接完了し、データベースにアクセスできます。 |
| |
アプリケーションは、Java 8 以降、Go、または Python で開発されています。 |
| |
アプリケーションは、Java 8 以降 (Alibaba Cloud SDK V1.0 を使用した Java 6 以降)、PHP、Go、Python、.NET (C# のみ)、C++、TypeScript、および Swift をサポートしています。 |
| |
|
| |
KMS インスタンス SDK (非推奨) | アプリケーションは、Java 8 以降、PHP、Go、Python、または .NET (C# のみ) で開発されています。 | 専用ゲートウェイ |
次のステップ
ApsaraDB RDS シークレットをローテーションする
ローテーション中、KMS は ApsaraDB RDS に関連付けられたアカウントのパスワードの変更をリクエストします。アプリケーションのダウンタイムを回避するために、ローテーションする前にすべてのアプリケーションが KMS から ApsaraDB RDS シークレットを取得していることを確認してください。
シークレットに関連付けられている ApsaraDB RDS のインスタンスまたはアカウントが削除された場合、KMS はシークレットをローテーションできません。ローテーション前にアカウントチェックを実施し、KMS がチェックの成功を確認した後にのみ続行してください。
シークレットの自動ローテーションを設定して、シークレット漏洩のリスクを軽減できます。シークレットが漏洩した場合、KMS コンソールでシークレットをすぐにローテーションして、侵入のリスクを排除できます。
KMS コンソール にログインします。上部のナビゲーションバーで、リージョンを選択します。左側のナビゲーションウィンドウで、 を選択します。
データベース資格情報 タブをクリックし、インスタンス管理 を選択し、すぐにローテーションするシークレットを見つけて、操作 列の 詳細 をクリックします。
シークレット詳細ページの下部にある Versions セクションで、Configure Rotation をクリックします。
自動ローテーション: [自動ローテーション] を有効にする場合は、6 時間から 365 日の範囲でローテーション期間を選択します。
すぐにローテーション: シークレットをすぐにローテーションするには、このオプションを選択します。
シークレットの値を確認する
KMS は、シークレットによって保護されているアカウントが、関連付けられている ApsaraDB RDS インスタンスに属しているかどうかを確認します。属している場合は、シークレットをローテーションできます。属していない場合は、シークレットを削除して新しいシークレットを作成します。
KMS コンソール にログインします。上部のナビゲーションバーで、リージョンを選択します。左側のナビゲーションウィンドウで、 を選択します。
データベース資格情報 タブをクリックし、インスタンス管理 を選択し、ターゲットシークレットを見つけて、操作 列の 詳細 をクリックします。
Versions セクションで、Check Account をクリックします。確認が完了したら、結果を表示します。
ApsaraDB RDS シークレットを削除する
サービス障害を防ぐために、削除する前に ApsaraDB RDS シークレットが使用中でないことを確認してください。
ApsaraDB RDS シークレットを即座に削除するか、削除タスクをスケジュールできます。ApsaraDB RDS シークレットを削除すると、KMS からのみ削除されます。関連付けられたユーザー名とパスワードは ApsaraDB RDS にそのまま残ります。
KMS コンソール にログインします。上部のナビゲーションバーで、リージョンを選択します。左側のナビゲーションウィンドウで、 を選択します。
データベース資格情報 タブをクリックし、インスタンス管理 を選択し、削除するシークレットを見つけて、操作 列の Schedule Deletion をクリックします。
Schedule Deletion ダイアログボックスで、シークレットを削除する方法を選択し、[OK] をクリックします。
Schedule Deletion を選択した場合は、[保持期間] (7 ~ 30 日) を設定します。スケジュールされた削除期間が終了すると、KMS はシークレットを削除します。
Delete Immediately を選択すると、システムはすぐにシークレットを削除します。
スケジュールされた削除期間中に、操作 列の [OK] をクリックして、削除をキャンセルできます。
シークレットのタグを設定する
タグを使用して、シークレットを分類および管理できます。タグは、キーと値のペアで構成されます。
タグキーまたはタグ値の長さは最大 128 文字で、文字、数字、スラッシュ (/), バックスラッシュ (\), アンダースコア (_), ハイフン (-), ピリオド (.), プラス記号 (+), 等号 (=), コロン (:), アットマーク (@), スペースを含めることができます。
タグキーは aliyun または acs: で始めることはできません。
シークレットごとに最大 20 個のキーと値のペアを設定できます。
シークレットのタグを追加する
ソリューション | 説明 |
方法 1: [シークレット] ページでタグを追加するシークレット |
|
方法 2: [シークレットの詳細] ページでタグを追加するシークレットの詳細 |
|
複数のシークレットのタグを一度に設定する
KMS コンソール にログインします。上部のナビゲーションバーで、リージョンを選択します。左側のナビゲーションウィンドウで、 を選択します。
シークレットの種類に基づいてタブをクリックし、インスタンス管理 ドロップダウンリストから必要なインスタンス ID を選択し、シークレットリストから目的のシークレットを選択します。
タグを追加する: シークレットリストの下部にある [タグの追加] をクリックします。 [タグの追加] ダイアログボックスで、複数の タグを追加[タグキー] と [タグ値] を入力し、[OK] をクリックします。表示されるメッセージで、[閉じる] をクリックします。
タグを削除する: シークレットリストの下部にある [タグの削除] をクリックします。 [一括削除] ダイアログボックスで、削除するタグを選択し、[削除] をクリックします。表示されるメッセージで、[閉じる] をクリックします。閉じる