Key Management Service (KMS) は、アカウントのパスワードや AccessKey ペアなどのシークレット情報を保存できるシークレット管理機能を提供します。Alibaba Cloud SDK、KMS Instance SDK、またはシークレット SDK をアプリケーションに統合すると、アプリケーションは KMS からシークレット情報を動的に取得できます。これにより、プレーンテキストのシークレット情報に起因する情報漏洩や悪意のある操作のリスクを防ぐのに役立ちます。このトピックでは、シナリオ、要素、ローテーションなど、シークレットに関する基本情報について説明します。
シークレット管理機能の利点
データベースやサーバーへのアクセスに使用されるアカウントのパスワード、SSH キー、AccessKey ペアなどの機密データの漏洩は、データセキュリティに対する主な脅威です。データ漏洩のリスクを軽減するには、シークレットを効果的に保護し、定期的にローテーションする必要があります。シークレット管理機能には、次の利点があります。
高セキュリティの暗号化アルゴリズムを使用してシークレット値を暗号化して保存します。これにより、ハードコーディングされたシークレットによるシークレットや高価値資産の漏洩を防ぎ、データセキュリティを向上させます。
安全で便利なアクセス方法を提供します。これにより、アプリケーションはコードレスまたはローコード方式でシークレットを使用できます。
緊急対応機能を提供します。シークレットを即座にローテーションしても、アプリケーションやサービスは影響を受けません。
説明この機能は、シークレット SDK を使用してアプリケーションに統合された Resource Access Management (RAM) シークレット、データベースシークレット (デュアルアカウント管理モード)、および Elastic Compute Service (ECS) シークレットでのみサポートされます。
動的シークレットを高い頻度でローテーションできます。これにより、ローテーションウィンドウが狭まり、シークレットクラッキングのリスクが軽減されます。
API 操作や Terraform、Resource Orchestration Service (ROS) などの O&M オーケストレーションツールを使用できます。これにより、集中化された大規模なセキュリティ管理の要件を満たします。
シナリオ
次のセクションでは、シークレットの基本的な管理シナリオと使用シナリオについて説明します。次の例では、自己管理データベースのユーザー名とパスワードが KMS で管理されています。
ApsaraDB RDS インスタンスを使用している場合は、ApsaraDB RDS シークレットを使用することをお勧めします。詳細については、「ApsaraDB RDS シークレット」をご参照ください。

セキュリティ管理者は、MyApp という名前のアプリケーションがデータベースにアクセスするために必要なユーザー名とパスワードを設定します。
セキュリティ管理者は、KMS で MyDbCreds という名前の汎用シークレットを作成して、ユーザー名とパスワードを管理します。
MyApp がデータベースにアクセスする必要がある場合、MyApp はシークレット SDK を使用して KMS から MyDbCreds シークレットを取得します。
KMS は暗号文でユーザー名とパスワードを読み取り、暗号文を復号化してから、HTTPS 経由でプレーンテキストを MyApp に返します。
MyApp は KMS から返されたプレーンテキストを読み取って解析し、ユーザー名とパスワードを取得します。その後、MyApp はユーザー名とパスワードを使用してデータベースにアクセスします。
MyApp は KMS の API 操作を呼び出してユーザー名とパスワードを取得します。これにより、ハードコーディングされたシークレットによる機密データの漏洩を防ぎます。次の図は、ハードコーディングされたシークレットと KMS で管理されるシークレットの違いを示しています。

シークレットの要素
シークレットはメタデータと 1 つ以上の シークレットバージョンで構成されます。KMS コンソールにログインし、資格情報管理 ページでシークレットの詳細を表示できます。
メタデータ
シークレットのメタデータには、シークレット名、Alibaba Cloud リソースネーム (ARN)、作成時間、シークレットタイプ、暗号化キー、タグが含まれます。
重要暗号化キーはシークレット値の暗号化にのみ使用されます。キーはシークレットのメタデータの暗号化には使用されません。キーとシークレットは同じ KMS インスタンスに属している必要があり、キーは対称キーである必要があります。

シークレットバージョン
シークレットには複数のバージョンを含めることができます。各シークレットバージョンには、バージョン番号、ステージラベル、およびシークレット値が含まれます。

バージョン番号: シークレット値が保存されている場合にのみバージョン番号を生成できます。バージョン番号はシークレット内で一意であり、変更することはできません。バージョン番号は複数のステージラベルに関連付けることができます。各ステージラベルは 1 つのバージョン番号にのみ関連付けることができます。
ステージラベル: ステージラベルはシークレット内で一意です。ステージラベルは、組み込みステージラベルとカスタムステージラベルの 2 つのカテゴリに分類されます。
組み込みステージラベル:
ACSCurrent: シークレットの現在のバージョン。これは、最後に保存されたシークレット値のステータスです。
ACSPrevious: シークレットの以前のバージョン。
ACSPending: シークレットの保留中のバージョン。シークレットのローテーション中に生成されます。ローテーションが完了すると、バージョンは削除されます。
説明シークレット値を取得する操作を呼び出すと、ステージラベルが ACSCurrent のシークレット値が読み取られます。
組み込みステージラベルはポインターとして機能します。たとえば、シークレット値を初めて保存すると、バージョン番号は v1 として記録され、組み込みステージラベルは ACSCurrent になります。その後、別のシークレット値が保存されると、そのシークレット値のバージョン番号は v2 として記録され、v2 のシークレット値の組み込みステージラベルは ACSCurrent になり、v1 のシークレット値のステージラベルは自動的に ACSPrevious に変更されます。
カスタムステージラベル: 各シークレットバージョンに複数のカスタムステージラベルを設定できます。
重要汎用シークレットのみがカスタムバージョン状態をサポートします。カスタムバージョン状態と組み込みバージョン状態の合計数は 8 を超えることはできません。
シークレット値: 保存されているシークレット情報。値は文字列またはバイナリ値です。
説明シークレットのバージョン数が上限を超えた場合、ステージラベルのない最も古いバージョンが削除されます。
シークレットのローテーション
ローテーションとは、シークレットを定期的に新しいバージョンに更新することです。これにより、シークレットのセキュリティが向上します。新しいシークレットバージョンのステージラベルは ACSCurrent に設定されます。アプリケーションは、ステージラベルが ACSCurrent のシークレット値を動的に取得します。
ローテーションプロセス
ローテーション方法
自動ローテーション: ローテーション期間を指定すると、指定した期間が終了したときに KMS が自動的にローテーションを実行します。KMS で RAM シークレット、データベースシークレット、ECS シークレットのローテーション期間を指定できます。KMS で汎用シークレットのローテーション期間を指定することはできません。Function Compute を使用して汎用シークレットを定期的にローテーションできます。
即時ローテーション: シークレットが漏洩した場合、緊急対応としてシークレットを即座にローテーションできます。RAM シークレット、データベースシークレット、ECS シークレットは即時ローテーションをサポートしています。汎用シークレットを即座にローテーションするには、シークレット値を保存する必要があります。
サポートされているシークレットのタイプ
KMS は、汎用シークレット、RAM シークレット、データベースシークレット、ECS シークレットの 4 種類のシークレットをサポートしています。次の表に、シークレットのタイプを示します。
RAM シークレット、データベースシークレット、ECS シークレットはフルマネージドです。KMS でフルマネージドされている前述のタイプのシークレットについては、KMS 内でシークレットのローテーションを実行できます。シークレットステータスの変更やシークレットの削除など、KMS の外部で実行される操作は、シークレットのローテーションを妨げ、KMS から取得されるシークレットの機能に影響します。
シークレットのローテーションを管理する場合は、汎用シークレットを使用できます。
シークレットタイプ | 説明 | ローテーション方法 | リファレンス |
汎用シークレット | 汎用シークレットは、KMS を使用して管理できる基本的なシークレットです。汎用シークレットを使用して、アカウント、AccessKey ペア、OAuth シークレットとトークン、API キーなどの機密データを保存できます。 |
| |
RAM シークレット | RAM シークレットは、KMS でサポートされているフルマネージドシークレットです。RAM シークレットを作成して、RAM ユーザーの AccessKey ペアを保存できます。 |
| |
データベースシークレット | データベースシークレットは、KMS でサポートされているフルマネージドシークレットです。このシークレットを作成して、ApsaraDB RDS や PolarDB サービスによって提供されるようなデータベースインスタンスのユーザー名とパスワードを保存できます。 |
| |
ECS シークレット | ECS シークレットは、KMS でサポートされているフルマネージドシークレットです。ECS シークレットを作成して、ECS インスタンスへのログインに使用されるユーザー名とパスワード、または SSH キーを保存できます。 |
|
課金
シークレットを使用する前に、KMS インスタンスを購入し、インスタンスの購入時にシークレットクォータを設定する必要があります。KMS の課金の詳細については、「課金」をご参照ください。KMS インスタンスの購入方法の詳細については、「KMS インスタンスの購入と有効化」をご参照ください。
アクセス制御と監査
シークレットのセキュリティを確保するために、Resource Access Management (RAM) を使用してシークレットへのアクセスと操作の権限を制御できます。権限ポリシーの設定方法の詳細については、「カスタム権限ポリシー」をご参照ください。
ActionTrail を使用して、シークレットの作成、ローテーション、取得を記録できます。詳細については、「キーとシークレットの使用記録のクエリ」をご参照ください。