Secrets Manager に格納された汎用シークレットは、自動的にローテーションされません。汎用シークレットをローテーションするには、API を使用して新しいシークレットバージョンをプッシュします。選択するローテーションパスは、システムが新しい認証情報を自ら生成できるか、あるいは外部の手順を事前に実行する必要があるかによって異なります。
仕組み
ローテーション中に Secrets Manager と連携する役割は以下の 2 つです。
| ロール | 説明 |
|---|---|
| シークレットプロデューサー | 新しい認証情報を生成し、CreateSecret および PutSecretValue を使用して Secrets Manager に書き込む、運用・保守(O&M)システムまたは管理者です。 |
| シークレットコンシューマー | シークレット名を指定して GetSecretValue を呼び出して認証情報を取得するアプリケーションです。Secrets Manager は常に ACSCurrent とマークされたバージョンを返します。 |

前提条件
開始する前に、以下の条件を満たしていることを確認してください。
Secrets Manager に初期のシークレットバージョンが格納されており、ACSCurrent とマークされていること
アプリケーションがランタイム時にシークレット名を指定して GetSecretValue を呼び出し、認証情報を取得するように設定されていること
ローテーションパスの選択
| シングルコールローテーション | マルチコールローテーション | |
|---|---|---|
| 使用タイミング | システムが新しい認証情報を自動生成できる場合(例:OAuth 2.0 アプリケーションの App シークレット) | システムが認証情報を生成できない場合(例:ApsaraDB RDS のデータベースアカウントや Elastic Compute Service (ECS) の SSH キーなど)、人がまたは外部システムが事前に作成する必要があります。 |
| 必要な API 呼び出し数 | 1 回(PutSecretValue) | 4 回(ステップ間で検証ウィンドウを確保) |
| サービス停止リスク | ニアゼロ:新しい値が直ちに現在値になります | なし:新しいバージョンを昇格させるまで、従来の認証情報は引き続きアクティブなままです |
単一の API 呼び出しによるローテーション
この方法は、システムが自身でシークレットを生成する場合(例:OAuth 2.0 システムがアプリケーションシークレットを自動生成する場合)に使用します。
OAuth 2.0 システム内で新しいアプリケーションシークレットを生成します。
新しいシークレットを Secrets Manager に格納します。この呼び出しにより、新しいバージョンが ACSCurrent とマークされ、以前のバージョンは ACSPrevious に降格されます。
aliyun kms PutSecretValue \ --SecretName MyOAuthAppSecret \ --SecretData sample-app-secret \ --VersionId v2アプリケーションが更新された値を取得できることを確認します。GetSecretValue を呼び出し、返される値が新しいシークレットであることを確認します。
複数の API 呼び出しによるローテーション
この方法は、外部システムで新しい認証情報を作成し、それを ACSCurrent として有効化する前に検証する必要がある場合(例:データベースアカウントのパスワードローテーション)に使用します。
新しい認証情報を ACSCurrent に昇格させる前に、カスタムラベル(例:MyPendingLabel)を付与してステージングすることで、検証ウィンドウを確保できます。ローテーション途中で何らかのエラーが発生した場合でも、従来の ACSCurrent バージョンはそのまま維持されるため、アプリケーションは継続して正常に動作します。
以下の例では、Secrets Manager で管理されるデータベースのユーザー名およびパスワードをローテーションします。
ステップ 1:ランダムパスワードの生成
GetRandomPassword を呼び出して新しいパスワードを生成します。
aliyun kms GetRandomPassword --ExcludePunctuation trueSecrets Manager は RandomPassword 値を返します。
{
"RequestId": "e36ca295-6e47-4dfb-9df1-48d19df41545",
"RandomPassword": "v2GwsgcuNylyYw9JGJNE5yBViGSi****"
}ステップ 2:保留ラベル付きで新しい認証情報の格納
新しいユーザー名およびパスワードを、MyPendingLabel とマークされた新しいシークレットバージョンとして格納します。既存の ACSCurrent および ACSPrevious バージョンは変更されないため、このステップ中もアプリケーションは引き続き正常に動作します。
aliyun kms PutSecretValue \
--SecretName db_cred \
--SecretData "{\"uname\": \"alice\", \"pwd\": \"v2GwsgcuNylyYw9JGJNE5yBViGSiZ****\"}" \
--VersionId v2 \
--VersionStages "[\"MyPendingLabel\"]"ステップ 3:データベースへの新しい認証情報の登録
v2 バージョンの認証情報を使用して、新しいデータベースアカウントを作成します。この時点で、v2 バージョンの db_cred のみがデータベースに対して認証可能です。ACSCurrent への昇格は、このステップが成功した後に行う必要があります。
ステップ 4:新しいバージョンの昇格
新しい認証情報の登録および検証が完了したら、バージョンステージを更新して v2 をアクティブなバージョンにします。
aliyun kms UpdateSecretVersionStage \
--SecretName db_cred \
--VersionStage ACSCurrent \
--MoveToVersion v2ステップ 5:ローテーションの検証
GetSecretValue を呼び出し、Secrets Manager が v2 の認証情報(ユーザー名 alice および新しいパスワード)を返すことを確認します。
次のステップ
ApsaraDB RDS で管理されるデータベースの場合、動的シークレットを使用すると、Secrets Manager がローテーションを自動的に処理します。詳細については、「動的 ApsaraDB RDS シークレットの概要」をご参照ください。