アプリケーションがアカウントのパスワードやアクセスキーなどのシークレットにアクセスする必要がある場合、Key Management Service (KMS) を使用して、それらをシークレットとして保管できます。その後、アプリケーションは Alibaba Cloud SDK、KMS Instance SDK、またはシークレット SDK を使用して、KMS からシークレットを動的に取得できます。これにより、プレーンテキストでシークレットを保管することによって引き起こされる情報漏洩や悪意のある操作を防ぎます。
シークレット管理の必要性
データベースのアカウントパスワード、サーバーのアカウントパスワード、SSH キー、アクセスキーなどのシークレットの漏洩は、データセキュリティに対する大きな脅威です。データ漏洩のリスクを低減するためには、シークレットを効果的に保護し、定期的にローテーションすることが不可欠です。KMS のシークレット管理機能を使用すると、以下のようなセキュリティ上の利点があります。
-
KMS は、強度の高い暗号化アルゴリズムを使用してシークレット値を暗号化して保管します。これにより、ハードコーディングによるシークレットや重要な資産の漏洩を防ぎ、データセキュリティを向上させます。
-
安全で便利なクライアントアクセスにより、アプリケーションは最小限のコード、あるいはコードなしでシークレットを動的に使用できます。
-
即時ローテーションにより、アプリケーションやサービスに影響を与えることなくシークレットを更新できます。
説明この機能は、RAM シークレット、データベースシークレット (マネージドデュアルアカウントモード)、および ECS シークレットをシークレット SDK を使用して統合した場合にのみ利用可能です。
-
完全に動的なシークレットの高頻度なローテーションをサポートし、シークレットの有効期間を短縮して、侵害されるリスクを低減します。
-
API や Resource Orchestration Service (ROS)、Terraform などの Infrastructure-as-Code (IaC) ツールを介して、一元的かつ大規模なセキュリティ管理をサポートします。
ユースケース
このセクションでは、自己管理型データベースのユーザー名とパスワードを管理する例を用いて、シークレットの保管と取得の基本的なユースケースを説明します。
ApsaraDB RDS データベースを使用する場合は、データベースシークレットの使用を推奨します。詳細については、「データベースシークレットの管理と使用」をご参照ください。

-
セキュリティ管理者が、MyApp アプリケーションがターゲットデータベースへのアクセスに必要なユーザー名とパスワードを設定します。
-
セキュリティ管理者は、KMS に「MyDbCreds」という名前の汎用シークレットを作成し、ユーザー名とパスワードを保管します。
-
MyApp がデータベースにアクセスする必要がある場合、シークレットクライアント SDK を使用して KMS に「MyDbCreds」シークレットを要求します。
-
KMS は暗号化されたシークレットを取得して復号し、プレーンテキストの値を HTTPS 経由で MyApp に返します。
-
MyApp は返されたプレーンテキストのシークレットを解析してユーザー名とパスワードを取得し、これらの認証情報を使用してデータベースにアクセスします。
MyApp アプリケーションは、KMS API を呼び出してデータベースのユーザー名とパスワードを取得することで、シークレットのハードコーディングに伴うセキュリティリスクを回避できます。以下の図は、シークレットをハードコーディングする場合と、KMS で管理されるシークレットを使用する場合の違いを示しています。

シークレットの構成要素
シークレットは、メタデータと 1 つ以上のシークレットのバージョンで構成されます。KMS コンソールにログインし、資格情報管理 ページでシークレットの詳細を表示できます。
-
メタデータ
シークレット名、Alibaba Cloud リソース名 (ARN)、作成時刻、シークレットタイプ、暗号化キー、タグなどの情報が含まれます。
重要暗号化キーはシークレット値のみを暗号化し、シークレットのメタデータは暗号化しません。キーとシークレットは同じ KMS インスタンスに属する必要があり、またキーは対称キーでなければなりません。
-
シークレットのバージョン
1 つのシークレットには複数のバージョンを含めることができます。各バージョンには、バージョン番号、ステージラベル、およびシークレット値が含まれます。
-
1 つのシークレットバージョンには複数のステージラベルを設定できますが、各ステージラベルは 1 つのバージョンにしか関連付けられません。
-
ステージラベル:シークレット内で一意のラベルです。ステージラベルには、組み込みステージラベルとカスタムステージラベルがあります。
-
組み込みステージラベル:
-
ACSCurrent:シークレットの現在のバージョンです。このラベルは常に最新のシークレット値を指します。
-
ACSPrevious:シークレットの以前のバージョンです。
-
ACSPending:シークレットのローテーション中に使用される一時的なラベルです。ローテーションが完了すると、KMS はこのラベルを削除します。
説明-
API オペレーションを呼び出してシークレット値を取得すると、KMS は ACSCurrent ステージラベルに関連付けられたシークレット値を返します。
-
組み込みステージラベルはポインターのように機能します。たとえば、最初にシークレットのバージョン (v1) を保管すると、ACSCurrent というラベルが付けられます。その後、新しいバージョン (v2) を保管すると、ACSCurrent ラベルは v2 に移動し、v1 は自動的に ACSPrevious に再ラベル付けされます。
-
-
-
カスタムステージラベル:各シークレットのバージョンに対して、複数のカスタムステージラベルを定義できます。
重要汎用シークレットのみがカスタムステージラベルをサポートします。1 つのシークレットに対するカスタムステージラベルと組み込みステージラベルの合計数は 8 を超えることはできません。
-
-
シークレット値:シークレットに保管する機密情報です。文字列またはバイナリデータです。
説明シークレットのバージョン数が上限を超えると、どのステージラベルにも関連付けられていない最も古いバージョンが自動的に削除されます。
-
シークレットのローテーション
シークレットのローテーションは、新しいバージョンを作成してシークレットを更新するプロセスであり、シークレットの有効期間を制限することでセキュリティを強化します。新しいバージョンには自動的に ACSCurrent のラベルが付けられ、アプリケーションは ACSCurrent バージョンを要求することでシークレット値を動的に取得します。
ローテーションのプロセス
ローテーション方法
-
自動ローテーション:ローテーションスケジュールを設定すると、指定した期間が終了したときに KMS が自動的にシークレットをローテーションします。RAM シークレット、データベースシークレット、ECS シークレットについては、KMS で直接自動ローテーションを設定できます。汎用シークレットの場合は、Function Compute を使用して定期的なローテーションを実装できます。
-
緊急対応として、侵害されたシークレットを即座にローテーションできます。この機能は RAM シークレット、データベースシークレット、および ECS シークレットでサポートされています。汎用シークレットを即座にローテーションするには、手動で新しいシークレット値を保管する必要があります。
サポートされるシークレットタイプ
KMS は、汎用シークレット、RAM シークレット、データベースシークレット、ECS シークレットの 4 種類のシークレットをサポートしています。次の表は、各タイプについての詳細を示しています。
-
RAM シークレット、データベースシークレット、および ECS シークレットはフルマネージドです。これらのシークレットを KMS で管理を開始した後は、すべてのローテーションを KMS 内で実行する必要があります。それぞれのソースサービスでステータスを変更したり、削除したりしないでください。これらの操作を行うと、KMS でのシークレットのローテーションプロセスが中断され、アプリケーションがシークレットを取得する際に失敗する可能性があります。
-
バージョンやステージラベルを含め、シークレットのローテーションを管理したい場合は、汎用シークレットを使用してください。
|
タイプ |
説明 |
ローテーション方法 |
関連ドキュメント |
|
汎用シークレット |
汎用シークレットは、KMS がサポートする基本的なタイプのシークレットです。アカウントパスワード、アクセスキー、OAuth キーとトークン、API キーなど、あらゆる機密データを保管するために使用できます。 |
|
|
|
RAM シークレット |
RAM シークレットは、KMS がサポートするフルマネージドタイプのシークレットです。RAM ユーザーのアクセスキーを保管するために使用できます。 |
|
|
|
データベースシークレット |
データベースシークレットは、KMS がサポートするフルマネージドタイプのシークレットです。ApsaraDB RDS インスタンスやPolarDB インスタンスなどのデータベースのアカウント認証情報を保管するために使用できます。 |
|
|
|
ECS シークレット |
ECS シークレットは、KMS がサポートするフルマネージドタイプのシークレットです。ECS インスタンスへのログインに使用されるユーザー名とパスワード、または SSH キーペアを保管するために使用できます。 |
|
課金
シークレットを使用する前に、KMS インスタンスを購入し、シークレットクォータを設定する必要があります。KMS インスタンスの料金の詳細については、「料金」をご参照ください。KMS インスタンスの購入方法については、「KMS インスタンスの購入と有効化」をご参照ください。
アクセスコントロールと監査
Resource Access Management (RAM) を使用して、シークレットへのアクセスや操作の権限をコントロールできます。権限ポリシーの設定方法の詳細については、「KMS のカスタム RAM ポリシー」をご参照ください。
ActionTrail を使用して、シークレットの作成、ローテーション、取得などの操作を記録できます。詳細については、「キーとシークレットの使用記録の照会」をご参照ください。