エンタープライズ環境では、異なるアカウントで暗号化キーを個別に管理すると、コストが増加し、セキュリティポリシーの適用が複雑になります。Key Management Service (KMS) のアカウント間共有機能を使用すると、組織内の複数のメンバーアカウントと単一の KMS インスタンスを安全に共有できます。これにより、キー管理が合理化され、セキュリティコントロールが一元化され、コストが最適化されます。
仕組み
KMS インスタンスの共有は、Alibaba Cloud の リソースディレクトリ および リソース共有 サービスに基づいて構築されています。ワークフローは次のとおりです。
組織の設定: Resource Directory を使用して、関連するすべての Alibaba Cloud アカウントを単一の組織にまとめて一元管理します。
リソースの共有: リソース所有者は、リソース共有サービスを使用して共有ユニットを作成し、KMS インスタンスを共有リソースとして追加し、リソースディレクトリ内の他のメンバーをプリンシパルとして指定します。
権限の付与:
権限ポリシー: 共有を作成する際、リソース所有者は事前定義された権限ポリシー (
AliyunRSDefaultPermissionKMSInstance) をアタッチします。その後、リソース共有サービスがこのポリシーを指定されたプリンシパルに適用します。共有モデル: 独立した所有権 と 共同所有権 の 2 つのモードがあり、KMS インスタンス内のリソース (キーとシークレット) を使用するための権限を定義します。
RAM ユーザー:
kms:Encryptやkms:Decryptなどの特定の操作に対する権限を付与するには、プリンシパルがその RAM ID (RAM ユーザーまたはロール) に対してリソースアクセス管理 (RAM) ポリシーを設定する必要があります。
ユースケースの例: ある企業の部門 A が KMS インスタンスを購入したとします。部門 B も KMS インスタンスを使用する必要がある場合、企業は Resource Directory を使用して Alibaba Cloud アカウントを一元化し、リソース共有サービスを使用して部門 A の KMS インスタンスを共有できます。アーキテクチャは以下のとおりです。
注意事項
インスタンスの要件:
有効化されたソフトウェアキー管理インスタンスとハードウェアキー管理インスタンスのみを共有できます。
アカウントと組織の要件:
インスタンス所有者とプリンシパルは、同じ認証済みエンタープライズに属している必要があります。
インスタンス所有者とプリンシパルは、同じ リソースディレクトリ に属している必要があります。
共有モードの選択
機能 | 独立所有権 | 共同所有権 |
ユースケース | 同じ名前のアカウント間シークレットがある場合や、権限を隔離する必要がある場合に必要です。 | IT やセキュリティなどの中央チームがすべてのキーとシークレットを管理および監査する必要がある内部コラボレーションに最適です。 |
主な特徴 | 独立したデータ所有権: リソース所有者は、プリンシパルが作成したキーとシークレットを管理または使用できません。 | 共有データ所有権: リソース所有者は、プリンシパルが作成したキーとシークレットを管理および使用できます。 |
同じ名前のアカウント間リソース | 許可。プリンシパルとリソース所有者は、インスタンス内に同じ名前のシークレットを作成できます。 | 許可されません。インスタンス内のすべてのキーとシークレットの名前は一意である必要があります。 |
モードの変更 | 共同所有権に変更することはできません。 | 独立所有権に変更できます。 |
2 つのモード間の権限の違いに関する詳細については、「付録: 異なる共有モードでの機能権限」をご参照ください。
手順
共有の設定 (インスタンス所有者)
ステップ 1: リソースディレクトリを準備し、組織内共有を有効にする
Resource Directory の有効化:
コンソールへのログイン
管理アカウントを使用して Resource Management コンソール にログインします。
Resource Directory の有効化
左側のナビゲーションウィンドウで、 を選択します。 [リソースディレクトリを有効にする] をクリックします。 詳細な手順については、「リソースディレクトリを有効にする」をご参照ください。
フォルダの作成
左側のナビゲーションウィンドウで、 を選択します。表示されたページの右上隅にある [リソース組織図] をクリックします。左側のリソースディレクトリツリーで、ターゲットフォルダをクリックします。[メンバー] タブで、[フォルダの作成] をクリックします。[フォルダ名] を入力し、[OK] をクリックします。 詳細な手順については、「フォルダを作成する」をご参照ください。
メンバーの設定
[メンバー] タブで、[メンバーの作成] または [メンバーの招待] をクリックし、「メンバーを作成する」、「Alibaba Cloud アカウントをリソースディレクトリに招待する」、および「メンバーを移動する」の指示に従って、アカウント名、アカウント ID、請求先アカウントなどの情報を設定します。
メンバーの招待
パラメーター
説明
アカウント ID またはログインメールアドレス
アカウント ID: ID を取得するには、「Alibaba Cloud アカウントの ID を表示する方法」をご参照ください。
ログインメール: アカウントの登録に使用したメールアドレス。アカウントにログインメールが関連付けられていない場合は、代わりにアカウント ID を入力します。
複数のアカウント ID をカンマ (,) で区切って入力し、一括で招待できます。
備考
招待者が招待の信頼性を確認し、承認を迅速に行えるように、招待の備考を入力します。
タグ
タグベースの管理を容易にするために、メンバーにタグをバインドします。
親フォルダ
アカウントが属するフォルダ。デフォルトでは、招待されたアカウントはルートフォルダに配置されます。必要に応じて、[変更] をクリックしてメンバーを別のフォルダに移動します。これは招待が承諾された後でも変更できます。
メンバーの作成
パラメーター
説明
Alibaba Cloud アカウント名
Alibaba Cloud アカウント名はメンバーの一意の識別子であり、リソースディレクトリ内で一意である必要があります。
名前は 2~50 文字の長さで、文字、数字、および特殊文字
_.-を含めることができます。文字または数字で始まり、終わり、連続する特殊文字_.-を含めることはできません。
表示名
表示名は 2~50 文字の長さで、漢字、文字、数字、および特殊文字
_.-を含めることができます。請求先アカウント
新しいメンバーの料金を支払う責任があるアカウントを設定します。
[新しいメンバーの決済に管理アカウントを使用]: Resource Directory の管理アカウントを請求先アカウントとして指定します。
[新しいメンバーの決済に既存のメンバーを使用]: Resource Directory の既存のメンバーを請求先アカウントとして指定します。[既存のメンバーを選択] パネルで、ディレクトリツリーからメンバーを選択します。
説明支払いができないメンバーは選択できません。詳細については、「概要」をご参照ください。
[新しいメンバー自身を決済に使用]: 現在のメンバーを自身の請求先アカウントとして指定します。
タグ
タグベースの管理を容易にするために、メンバーにタグをバインドします。
親フォルダ
デフォルトでは、作成されたメンバーはルートフォルダに配置されます。必要に応じて、[変更] をクリックしてメンバーを別のフォルダに移動します。これはメンバーが作成された後でも変更できます。
リソース共有の有効化
リソース共有を有効にすると、管理アカウントまたはメンバーであるリソース所有者が、リソースディレクトリ全体、そのフォルダ、または特定のメンバーとリソースを共有できます。詳細については、「リソースディレクトリでリソース共有を有効にする」をご参照ください。
Resource Directory の管理アカウントを使用して リソース共有コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。
[有効化] をクリックし、[リソース共有のサービスリンクロール] ダイアログボックスで [OK] をクリックします。
説明システムは、Resource Directory から組織情報を取得するために、
AliyunServiceRoleForResourceSharingという名前のサービスリンクロールを自動的に作成します。詳細については、「リソース共有のサービスリンクロール」をご参照ください。
ステップ 2: 共有 KMS インスタンスを設定する
このセクションでは、リソース所有者が 1 つ以上のプリンシパルと KMS インスタンスを共有する方法について説明します。
コンソールへのログイン
インスタンス所有者として Key Management Service コンソール にログインします。上部のメニューバーでリージョンを選択し、左側のナビゲーションウィンドウで インスタンス管理 をクリックします。
共有モードの選択
インスタンス管理 ページで、ターゲットの KMS インスタンスを見つけ、操作 列の Share Resources をクリックします。RDマルチアカウント共有设定 パネルで、共有モードを選択します。
共有ユニットの設定
[共有ユニットに追加] パネルで、既存の共有ユニットを選択するか、新しい共有ユニットを作成します。
比較
作成 (推奨)
既存の共有ユニットを選択
ユースケース
初めて共有する場合や、権限を隔離する必要がある場合に使用します。
現在のインスタンスを既存の共有ユニットに追加し、そのプリンシパルと権限を再利用する場合に使用します。
機能
権限の隔離: 独立した権限を持つ現在の KMS インスタンスのみを含みます。
コントロールの範囲: 新しく追加されたアカウントのみが共有インスタンスを使用できます。
権限の共有:
共有ユニットのすべての既存のプリンシパルは、新しいインスタンスへのアクセスを自動的に取得し、インスタンスのアクセス管理クォータを消費します。
この共有ユニットへの権限の変更は、その中のすべてのリソースに影響します。
コントロールの範囲: 元のプリンシパルと新しく追加されたアカウントの両方が共有インスタンスを使用できます。
警告これにより、意図しない権限昇格やクォータの消費につながる可能性があります。注意して進めてください。
共有パラメーターの設定
選択したメソッドに対して以下の設定を指定し、OK をクリックします。
作成 (推奨)
共有ユニット名
名前は最大 50 文字で、漢字、文字、数字、および次の特殊文字を含めることができます: ., _, -。
プリンシパル
この KMS インスタンスを使用できるアカウントを指定します。
重要詳細なコントロールのため、フォルダまたは Alibaba Cloud アカウントで追加することをお勧めします。追加するたびに、インスタンスの アクセス管理クォータ が消費されます。
既存の共有ユニットからプリンシパルを追加または削除すると、その変更はその共有ユニット内の すべてのリソース に影響します。
次の 3 種類のプリンシパルを追加します:
[Alibaba Cloud アカウント]: 指定された Alibaba Cloud アカウント (ID) とのみリソースを共有します。
[リソースディレクトリ組織]: 後で追加されるメンバーを含む、リソースディレクトリ全体のすべてのメンバーアカウントとリソースを共有します。
[フォルダ (組織単位)]: フォルダ ID を入力して、後で追加されるメンバーを含む、フォルダ内のすべてのメンバーとリソースを共有します。フォルダ ID のフォーマットは
fd-xxxxxxxxです。フォルダ情報を表示するには、「フォルダの基本情報を表示する」をご参照ください。
権限の追加
プリンシパルの権限を設定します。詳細については、リソース共有コンソールの「権限ライブラリ」をご参照ください。
[AliyunRSDefaultPermissionKMSInstance] (推奨): v1 と v2 の 2 つのバージョンが利用可能です。新しい共有はデフォルトでバージョン v2 を使用します。バージョンを確認するには、「権限の詳細を表示する」をご参照ください。
[AliyunRSPermissionKMSInstanceReadWrite] (非推奨): この権限は既存の共有ユニットではまだ機能しますが、新しい共有ユニットには推奨されません。
既存の共有ユニットを選択
共有ユニットの選択
システムは現在のアカウントのすべての共有ユニットを同期します。詳細については、「共有ユニットを作成する」をご参照ください。
共有リソース
このリストには、選択した共有ユニット内の既存のリソースが自動的に表示されます (読み取り専用)。この操作の後、現在の KMS インスタンスがこの共有に追加されます。
プリンシパル
この KMS インスタンスを使用できるアカウントを指定します。
重要詳細なコントロールのため、フォルダまたは Alibaba Cloud アカウントで追加することをお勧めします。追加するたびに、インスタンスの アクセス管理クォータ が消費されます。
既存の共有ユニットからプリンシパルを追加または削除すると、その変更はその共有ユニット内の すべてのリソース に影響します。
次の 3 種類のプリンシパルを追加します:
[Alibaba Cloud アカウント]: 指定された Alibaba Cloud アカウント (ID) とのみリソースを共有します。
[リソースディレクトリ組織]: 後で追加されるメンバーを含む、リソースディレクトリ全体のすべてのメンバーアカウントとリソースを共有します。
[フォルダ (組織単位)]: フォルダ ID を入力して、後で追加されるメンバーを含む、フォルダ内のすべてのメンバーとリソースを共有します。フォルダ ID のフォーマットは
fd-xxxxxxxxです。フォルダ情報を表示するには、「フォルダの基本情報を表示する」をご参照ください。
権限の追加
プリンシパルの権限を設定します。詳細については、リソース共有コンソールの「権限ライブラリ」をご参照ください。
[AliyunRSDefaultPermissionKMSInstance] (推奨): v1 と v2 の 2 つのバージョンが利用可能です。新しい共有はデフォルトでバージョン v2 を使用します。バージョンを確認するには、「権限の詳細を表示する」をご参照ください。
[AliyunRSPermissionKMSInstanceReadWrite] (非推奨): 以前にこの権限を使用した場合は、引き続き使用してください。
共有インスタンスの使用 (プリンシパル)
プリンシパルとして、まずインスタンスが正常に共有されたことを確認する必要があります。その後、共有インスタンス内でキーまたはシークレットを作成して使用できます。
コンソールへのログイン
プリンシパルは Key Management Service コンソール にログインします。インスタンス管理 ページで、Being Shared タグが付いた KMS インスタンスを見つけます。
キーとシークレットの作成
キー管理 または 資格情報管理 タブで、キーの作成 または Create Secret をクリックします。KMS Instance に共有インスタンスを選択します。その他の設定については、「キーを作成する」および「シークレットを作成する」をご参照ください。
RAM ユーザーへの権限付与:
RAM ユーザーまたはロールに対して RAM ポリシーを設定し、
kms:Encryptやkms:Decryptなどの特定の KMS API 呼び出しに対する権限を付与します。手順については、「RAM を使用したアクセスの制御」をご参照ください。キーとシークレットの使用
キーとシークレットを正常に作成した後、他の Alibaba Cloud サービスや自己管理アプリケーションで使用できます。詳細については、以下のドキュメントをご参照ください。
クラウドプロダクトのサーバーサイド暗号化: 「クラウドプロダクトの KMS 統合の概要」および「KMS 統合をサポートするクラウドプロダクト」。
シークレットとクラウドサービスの統合: 「クラウドプロダクトと KMS シークレットの統合」。
KMS と自己管理アプリケーションの統合 (キーとシークレット用): 「自己構築アプリケーションと KMS の統合」。
共有の管理とメンテナンス
共有ユニットのプリンシパルの変更
KMS コンソールから
インスタンス所有者として、Key Management Service コンソールにログインします。上部のメニューバーでリージョンを選択します。左側のナビゲーションウィンドウで、インスタンス管理 をクリックします。
インスタンス管理 ページで、KMS インスタンスのタイプに基づいて ソフトウェアキー管理 タブまたは ハードウェアキー管理 タブをクリックします。
管理したい KMS インスタンスを見つけ、操作 列の Share Resources をクリックします。
[RD マルチアカウント共有設定] パネルで、[共有ユニット] を選択します。[プリンシパル] セクションで、[編集] をクリックしてプリンシパルを追加または削除し、[OK] をクリックします。
リソース共有コンソールから
詳細な手順については、「共有ユニットを変更する」をご参照ください。
KMS インスタンスの共有の取り消し
共有の取り消しは、共有ユニットを削除することによって実行されます。共有ユニットが削除されると、共有ユニット内のすべてのプリンシパルは、共有ユニット内のリソースにアクセスできなくなります。
共有を取り消す前に、プリンシパルは作成したすべてのキーとシークレットを削除する必要があります。そうしないと、取り消しは失敗します。ビジネスの中断を避けるために、関連リソースがまだ使用されていないことを確認してください。
この操作はリソース共有コンソールでのみ実行してください。
管理アカウントを使用して リソース共有コンソール にログインします。
左側のナビゲーションウィンドウで、 を選択します。 開いたページで、ターゲットの共有ユニットを見つけてその ID をクリックします。
表示されたページの右上隅で、[共有ユニットの削除] をクリックします。 [共有ユニットの削除] ダイアログボックスで、[OK] をクリックします。
本番環境での適用
本番環境で共有インスタンスをデプロイして使用する際は、システムの安定性、セキュリティ、およびコンプライアンスを確保するために、以下のガイドラインに従ってください。
ネットワーク接続性
プリンシパルの自己管理アプリケーションが VPC にデプロイされており、プライベートゲートウェイを介して KMS にアクセスする必要がある場合、インスタンス所有者はプリンシパルの VPC を共有 KMS インスタンスにアタッチして、内部向けアクセスを有効にする必要があります。手順については、「同一リージョン内の複数の VPC から KMS インスタンスにアクセスする」をご参照ください。
監査とコンプライアンス
リソース所有者: 共有インスタンスに対するすべての管理操作と、プリンシパル によって実行されるキー操作を記録するために、アカウントで ActionTrail を有効にする必要があります。
プリンシパル: アカウント内のすべての API 呼び出しを記録するために、ActionTrail を有効にすることをお勧めします。
変更管理:
共有の取り消し: 共有を取り消すか、共有ユニットを削除する前に、プリンシパルは共有インスタンスで作成したすべてのキーとシークレットを削除する必要があります。リソースが残っている場合、取り消しは失敗します。ビジネスの中断を避けるために、関連リソースがまだ使用されていないことを確認してください。共有を取り消す方法については、「KMS インスタンス共有を取り消す」をご参照ください。
プリンシパルの変更: 共有ユニットからプリンシパルを追加または削除すると、その共有ユニット内のすべてのリソースに影響します。権限の競合を避けるために、異なるビジネスシナリオやチームごとに個別の共有ユニットを作成することをお勧めします。変更方法については、「共有ユニットのプリンシパルを変更する」をご参照ください。
制限とクォータ
機能制限
alias/acs/ossなどのデフォルトキーは共有できません。プリンシパルは、リージョンをまたいで共有 KMS インスタンスを使用することはできません。
共同所有権 モードでは、インスタンス内のすべてのキーとシークレットの名前はグローバルに一意である必要があります。
アクセス管理クォータ
KMS インスタンスを共有すると、リソース所有者の [アクセス管理クォータ] が消費されます。クォータが不足している場合は、速やかに KMS インスタンスをスペックアップ してください。
クォータの計算:
使用済みクォータ = 共有アカウント数 + アタッチされた VPC 数。たとえば、インスタンスを 3 つのアカウントと共有し、2 つの VPC にアタッチすると、5 のクォータが消費されます。
クォータ変更の有効性: クォータ不足によりプリンシパルの追加に失敗した場合、インスタンスのクォータを増やした後、システムは失敗した操作を自動的にリトライしません。共有ユニットからプリンシパル (アカウントまたはフォルダ) を手動で削除し、再度追加してください。
よくある質問
設定後、プリンシパルが API を呼び出すと「AccessDenied」または「Forbidden」エラーが発生するのはなぜですか?
以下の 4 つの権限設定を順番に確認してください:
リソース共有権限: リソース共有 コンソールで、プリンシパルのアカウントが共有ユニットに追加され、共有ステータスがアクティブであることを確認します。
KMS インスタンス権限: 共有ユニットに関連付けられている権限が
AliyunRSDefaultPermissionKMSInstanceであることを確認します。RAM 呼び出し権限: API 呼び出しを行う RAM ユーザーまたは RAM ロールに、
kms:Encryptやkms:Decryptなどの KMS にアクセスするための権限を持つ RAM ポリシーが付与されていることを確認します。リソース所有権: 独立所有権 モードでは、操作しているキーまたはシークレットを現在のプリンシパルが作成したことを確認します。
共同所有権モードでシークレットを作成する際に名前の競合エラーが発生するのはなぜですか?
共同所有権モードでは、KMS インスタンス内のすべてのキーとシークレットの名前は一意である必要があります。リソース所有者とプリンシパルは、同じ名前のリソースを作成することはできません。
解決策 1: シークレットに別の名前を選択します。
解決策 2: ビジネスシナリオで同じ名前のアカウント間キーまたはシークレットをサポートする必要がある場合は、共有モードを 独立所有権 に切り替えます。
警告共同所有権から独立所有権へのこの変更は元に戻せません。進める前に影響を慎重に評価してください。
付録: 異なる共有モードでの機能権限
以下の表は、2 つの共有モードにおける各機能のリソース所有者とプリンシパルの操作権限の詳細を示しています。
共同所有権
機能 | サブ機能 | インスタンス所有者 | プリンシパル |
インスタンス管理 | KMS インスタンスの詳細を表示 | ||
KMS インスタンスへのマルチ VPC アクセスを設定 | |||
インスタンスのスペックアップ | |||
インスタンスの更新 | |||
共有の取り消し | |||
キー管理 | キーの作成 | ||
キーのメタデータを表示 | 説明 プリンシパルによって作成されたものを含む、すべてのキーに適用されます。 | 説明 プリンシパルによって作成されたキーにのみ適用されます。 | |
キーローテーションの設定 | |||
キー削除のスケジュール | |||
削除保護の有効化 | |||
キーエイリアスの作成と管理 | |||
キータグの追加と管理 | |||
暗号化操作 | 該当なし | ||
シークレット管理 | シークレットの作成 | ||
シークレットのメタデータを表示 | 説明 プリンシパルによって作成されたものを含む、すべてのシークレットに適用されます。 | 説明 プリンシパルによって作成されたシークレットにのみ適用されます。 | |
シークレットの削除 | |||
シークレットローテーションの設定 | |||
シークレットタグの追加と管理 | |||
シークレット値の取得 | 該当なし | ||
バックアップ管理 | 該当なし | 説明 プリンシパルによって作成されたものを含む、すべてのキーとシークレットをバックアップできます。 | |
アプリケーションアクセス | アプリケーションアクセスポイントの作成 |
独立所有権
機能 | サブ機能 | インスタンス所有者 | プリンシパル |
インスタンス管理 | KMS インスタンスの詳細を表示 | ||
KMS インスタンスへのマルチ VPC アクセスの設定 | |||
インスタンスのスペックアップ | |||
インスタンスの更新 | |||
共有の取り消し | |||
キー管理 | キーの作成 | ||
キーのメタデータを表示 | 説明 インスタンス所有者によって作成されたキーのみがサポートされます。 | 説明 プリンシパルによって作成されたキーのみがサポートされます。 | |
キーローテーションの設定 | |||
キー削除のスケジュール | |||
削除保護の有効化 | |||
キーエイリアスの作成と管理 | |||
キータグの追加と管理 | |||
暗号化操作 | 該当なし | ||
シークレット管理 | シークレットの作成 | ||
シークレットのメタデータを表示 | 説明 インスタンス所有者によって作成されたキーのみがサポートされます。 | 説明 プリンシパルによって作成されたシークレットのみがサポートされます。 | |
シークレットの削除 | |||
シークレットローテーションの設定 | |||
シークレットタグの追加と管理 | |||
シークレット値の取得 | 該当なし | ||
バックアップ管理 | 該当なし | 説明 インスタンス所有者によって作成されたキーのみをバックアップできます。 | |
アプリケーションアクセス | アプリケーションアクセスポイントの作成 |