このトピックでは、一般的な秘密ローテーションの一般的なシナリオと関連する操作について説明します。
一般的なシナリオ
シークレットコンシューマーとシークレットプロデューサーは、シークレットマネージャーに基づいてシークレット関連の機能を実装できます。
- Secrets Manager: シークレットを管理します。 たとえば、Secrets Managerは、シークレットの管理に使用できるAPI操作を提供します。
- 秘密の消費者: 秘密を使用するアプリケーション。 例えば、ビジネスアプリケーションは、最新の秘密値を取得するためにGetSecretValue操作を呼び出す。
- シークレットプロデューサー: 運用および保守 (O&M) システムまたはO&M管理者。 たとえば、データセンター、ECS (Elastic Compute Service) インスタンス、またはFunction ComputeがCreateSecret操作を呼び出してシークレットを作成し、PutSecretValue操作を呼び出してシークレットをローテーションします。
前提条件
ジェネリックシークレットをローテーションする前に、次の要件が満たされていることを確認してください。
- シークレットの初期バージョンは、O&Mシステムで生成され、Secrets Managerに保存されます。 Secrets Managerは、初期バージョンをACSCurrentでマークします。
- シークレット値は、シークレットを使用する必要があるアプリケーションによって取得されます。 アプリケーションはGetSecretValue操作を呼び出して秘密値を取得します。 シークレット値を取得するために、アプリケーションは、シークレット名を指定するだけでよい。 Secrets Managerは、ACSCurrentでマークされたバージョンのシークレット値を返します。
単一のAPI操作を呼び出してジェネリックシークレットを回転させる
新しいシークレットが生成され、アプリケーションがアクセスする必要があるシステムで有効になると仮定します。 単一のAPI操作を呼び出して、シークレットをSecrets
Managerに保存し、シークレットを回転させることができます。 例えば、OAuth 2.0システムは、それ自体でアプリケーションシークレットを生成することができる。
Secrets Managerを使用して、アプリケーションのシークレットを管理できます。 次のプロセスは、シークレットのローテーション方法を示しています。
- 管理者は、OAuth 2.0システムで新しいアプリケーションシークレットを生成します。
- 管理者は、Alibaba Cloud CLIを使用して、新しいアプリケーションシークレットをSecrets Managerに保存します。 この新しい秘密バージョンはACSCurrentでマークされています。 元のバージョンのマークがACSCurrentからACSPreviousに変更されます。
aliyun kms PutSecretValue \ -- SecretName MyOAuthAppSecret -- SecretDataサンプル-app-secret \ -- VersionId v2
- アプリケーションは、秘密値を取得するためにGetSecretValue操作を呼び出す。 Secrets Managerは、ACSCurrentでマークされたバージョンの値を返します。 この秘密値は、最新のアプリケーション秘密値である。
複数のAPI操作を呼び出してジェネリックシークレットを回転させる
ほとんどの場合、システムは自動的に秘密を生成できません。 たとえば、ApsaraDB RDSデータベースは自動的にアカウントを生成できず、ECSインスタンスは自動的にSSHキーを生成できません。 新しいsecreを作成し、Secrets Managerに保存してから、MyPendingLabelでシークレットのバージョンをマークできます。 新しいシークレットをシステムに登録します。 次に、MyPendingLabelでマークされたバージョンをSecrets Managerで現在のバージョンに回転します。
次の例は、Alibaba Cloud CLIを使用して、Secrets Managerで管理されるデータベースのユーザー名とパスワードをローテーションする方法を示しています。
- GetRandomPassword 操作を呼び出して、回転プログラムを使用して新しいパスワードとしてランダムな文字列を生成します。
aliyun kms GetRandomPassword-除外句読点true
キー管理サービス (KMS) は、次の結果を返します。
{ "RequestId": "e36ca295-6e47-4dfb-9df1-48d19df41545" 、 "RandomPassword": "v2GwsgcuNylyYw9JGJNE5yBViGSi ****" }
- データベースの新しいユーザー名とパスワードを既存のシークレットの新しいバージョンとして保存します。
次のコマンドを実行して、新しいユーザー名とパスワードを保存し、MyPendingLabelでマークします。 ACSCurrentとACSPreviousでマークされた既存のバージョンは変更されません。
aliyun kms PutSecretValue \ -- SecretName db_cred -- SecretData "{\" uname\": \" alice\", \" pwd\": \" v2GwsgcuNylyYw9JGJNE5yBViGSiZ **** "}" \ -- VersionId v2 \ -- VersionStages "[\" MyPendingLabel\"]"
- 新しいユーザー名とパスワードをデータベースに登録します。
db_credシークレットのv2バージョンのシークレット値のみを使用してデータベースにアクセスできます。
- Secrets ManagerのACSCurrentでシークレットの新しいバージョンをマークします。
aliyun kms UpdateSecretVersionStage \ -- SecretName db_cred \ -- VersionStage ACSCurrent \ -- MoveToVersion v2
- GetSecretValue 操作を呼び出して、シークレット値を取得します。 Secrets Managerは、ACSCurrentでマークされたバージョンの値を返します。 この秘密値には、データベースの最新のユーザー名とパスワードが含まれます。
注 動的ApsaraDB RDSシークレットを使用して、Secrets Managerが自動的にシークレットを回転できるようにすることもできます。 詳細については、「概要」をご参照ください。