Key Management Service (KMS) を使用すると、組織内の複数のメンバーアカウントに対して単一の KMS インスタンスを共有できます。各チームや部門が個別に KMS インスタンスをプロビジョニングする代わりに、中央アカウントが 1 つのインスタンスを所有し、他のアカウントにアクセス権限を付与することで、コスト削減とセキュリティポリシーの一元管理を実現します。
仕組み
クロスアカウント共有は、2 つの Alibaba Cloud サービスに依存します:リソースディレクトリ(組織管理用)およびリソース共有(アクセス委任用)です。
ワークフローには以下の 3 つのフェーズがあります:
組織のセットアップ。 リソースディレクトリを使用して、関連するすべての Alibaba Cloud アカウントを単一の組織にグループ化します。
KMS インスタンスの共有。 リソース所有者がリソース共有を作成し、KMS インスタンスを追加し、どのメンバーアカウント(プリンシパル)がそのインスタンスにアクセスできるかを指定します。
権限の付与。 権限には以下の 2 つのレイヤーがあります:
リソース共有レイヤー: リソース所有者は、リソース共有に
AliyunRSDefaultPermissionKMSInstanceをアタッチします。これにより、プリンシパルは KMS インスタンスへの接続が可能になります。RAM レイヤー: 各プリンシパルは、自社の RAM ユーザーまたはロールに対して、
kms:Encryptやkms:Decryptなどの特定の KMS API 呼び出しを許可する RAM ポリシーを設定する必要があります。
例: 部門 A が KMS インスタンスを所有しています。部門 B はキー管理機能を必要としています。別途インスタンスを購入する代わりに、企業はリソースディレクトリを使用して両方のアカウントを単一の組織に統合し、リソース共有を通じて部門 A の KMS インスタンスを部門 B と共有します。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
有効化されたソフトウェアキー管理インスタンスまたはハードウェアキー管理インスタンス(無効化されたインスタンスは共有できません)
リソースディレクトリの管理アカウント
インスタンス所有者およびすべてのプリンシパルが、同一の検証済み企業および同一のリソースディレクトリに所属していること
共有モードの選択
KMS インスタンスの共有には、データ所有権の取り扱い方法が異なる 2 つのモードがサポートされています。
| 独立所有 | 共同所有 | |
|---|---|---|
| 適用範囲 | 同一の名前を持つクロスアカウントシークレット、またはアカウント間での厳格な権限隔離が必要な場合 | IT やセキュリティなどの中核チームが、すべてのアカウントにわたるキーおよびシークレットを一元的に管理・監査する場合 |
| データ所有権 | リソース所有者は、プリンシパルが作成したキーおよびシークレットを管理・アクセスできません | リソース所有者は、プリンシパルが作成したキーおよびシークレットを管理・アクセスできます |
| 同一名称のリソース | 許可 — プリンシパルおよびリソース所有者が同一名称のシークレットを作成できます | 不許可 — インスタンス内のすべてのキーおよびシークレット名はグローバルに一意である必要があります |
| モード変更 | 共同所有へ変更できません | 独立所有へ変更できます(不可逆) |
役割ごとの詳細な権限構成については、「付録:異なる共有モードにおける機能権限」をご参照ください。
共有の設定(インスタンス所有者向け)
ステップ 1:リソースディレクトリのセットアップとリソース共有の有効化
リソースディレクトリのセットアップ:
管理アカウントでResource Management コンソールにログインします。
左側ナビゲーションウィンドウで、リソースディレクトリ > リソースディレクトリの有効化 を選択し、リソースディレクトリの有効化 をクリックします。詳細については、「リソースディレクトリの有効化」をご参照ください。
メンバーアカウントをグループ化するフォルダを作成します:左側ナビゲーションウィンドウで リソースディレクトリ > 管理 を選択し、右上隅の リソース組織ビュー をクリックします。ディレクトリツリーから対象のフォルダを選択し、メンバー タブで フォルダの作成 をクリックします。フォルダ名 を入力し、OK をクリックします。詳細については、「フォルダの作成」をご参照ください。
フォルダにメンバーアカウントを追加します:メンバー タブで、メンバーの作成 または メンバーの招待 をクリックします。以下のパラメーターを設定します:
メンバーの招待
パラメーター 説明 アカウント ID またはログインメールアドレス アカウント登録時に使用したアカウント ID またはログインメールアドレスを入力します。複数のアカウント ID をカンマで区切ることで、一括招待が可能です。アカウント ID の確認方法については、「Alibaba Cloud アカウントの ID を確認する方法 備考 招待を受け取るユーザーが招待の正当性を確認できるよう、任意の備考を記述します。 タグ メンバーアカウントの管理を容易にするために、メンバーアカウントにバインドするタグを指定します。 親フォルダ 招待されたアカウントを配置するフォルダです。デフォルトではルートフォルダが選択されます。変更 をクリックして変更できます。 メンバーの作成
パラメーター 説明 Alibaba Cloud アカウント名 リソースディレクトリ内におけるメンバーアカウントの固有識別子です。2~50 文字で、英字、数字、および _.-を使用できます。先頭および末尾は英字または数字で始まり・終わり、連続する特殊文字を含めることはできません。表示名 2~50 文字で、漢字、英字、数字、および _.-を使用できます。課金アカウント 新規メンバーアカウントの料金支払い責任者を選択します。管理アカウント、既存のメンバーアカウント、または新規メンバーアカウント自身のいずれかから選択できます。 タグ メンバーアカウントの管理を容易にするために、メンバーアカウントにバインドするタグを指定します。 親フォルダ デフォルトではルートフォルダが選択されます。変更 をクリックして変更できます。
リソース共有の有効化:
管理アカウントでリソース共有コンソールにログインします。左側ナビゲーションウィンドウで、リソース共有 > 設定項目 を選択します。
有効化 をクリックし、リソース共有サービスリンクロール ダイアログボックスで OK をクリックします。
システムは、リソースディレクトリから組織情報を取得するために、
AliyunServiceRoleForResourceSharingという名前のサービスリンクロールを自動的に作成します。詳細については、「リソース共有のサービスリンクロール」をご参照ください。
ステップ 2:KMS インスタンスの共有
インスタンス所有者としてKey Management Service コンソールにログインします。上部のメニューバーからリージョンを選択し、左側ナビゲーションウィンドウで インスタンス をクリックします。
対象の KMS インスタンスを見つけ、リソースの共有 を 操作 列からクリックします。RD 複数アカウント共有設定 パネルで、共有モードを選択します。
リソース共有への追加 パネルで、リソース共有の構成方法を選択します:
警告KMS インスタンスを既存のリソース共有に追加すると、その共有に現在参加しているすべてのプリンシパルが、新しいインスタンスに自動的にアクセスできるようになります。この操作は、インスタンスのアクセス管理クォータを消費し、意図しない権限の昇格を引き起こす可能性があります。慎重に進めてください。
作成(推奨) 既存のリソース共有を選択 使用タイミング 初めて共有する場合、またはインスタンスごとに権限隔離が必要な場合 既存の共有に現在のインスタンスを追加して、そのプリンシパルおよび権限を再利用する場合 権限範囲 現在の KMS インスタンスのみ;新しく追加されたアカウントのみがアクセス可能 既存のすべてのプリンシパルが新しいインスタンスに自動的にアクセス可能;権限の変更は共有内のすべてのリソースに影響 リソース共有のパラメーターを構成し、OK をクリックします:
新しいリソース共有を作成する場合:
リソース共有名 — 最大 50 文字。漢字、英字、数字、および
._-を使用できます。プリンシパル — この KMS インスタンスを使用できるアカウントを指定します。追加される各プリンシパルは、インスタンスの アクセス管理クォータ を消費します。既存のリソース共有からプリンシパルを追加または削除すると、その共有内の すべてのリソース に影響します。以下の 3 種類のプリンシパルがサポートされています:
プリンシパルタイプ 範囲 Alibaba Cloud アカウント 指定されたアカウント ID のみとリソースを共有 リソースディレクトリ組織 リソースディレクトリ内のすべてのメンバーアカウント(今後追加されるメンバーアカウントを含む)とリソースを共有 フォルダ(組織単位) 指定されたフォルダ(形式: fd-xxxxxxxx)内のすべてのメンバーアカウント(今後追加されるメンバーアカウントを含む)とリソースを共有。フォルダ ID の確認方法については、「フォルダの基本情報を表示」をご参照ください。細かい制御を行うには、フォルダまたは Alibaba Cloud アカウント単位でプリンシパルを追加します。
権限 —
AliyunRSDefaultPermissionKMSInstanceを選択することを推奨します(2 つのバージョン v1 および v2 が利用可能で、新規共有では v2 がデフォルトです)。使用中のバージョンを確認するには、「権限の詳細を表示」をご参照ください。AliyunRSPermissionKMSInstanceReadWriteは非推奨であり、新規共有には使用しないでください。
既存のリソース共有を選択する場合:
リソース共有の選択 — コンソールには、アカウント内のすべてのリソース共有が一覧表示されます。「リソース共有の作成」を参考にしてください。
共有リソース — 読み取り専用です。選択した共有に既に存在するリソースを表示します。この操作完了後、現在の KMS インスタンスが追加されます。
プリンシパル および 権限 — 新規共有作成時と同じオプションです。ただし、
AliyunRSPermissionKMSInstanceReadWriteは非推奨です。以前に使用していた場合は、その共有に限り継続して使用できます。
共有インスタンスの利用(プリンシパル向け)
Key Management Service コンソールにログインします。インスタンス ページで、共有中 タグが付いた KMS インスタンスを確認し、共有が有効であることを確認します。
キー または シークレット タブでキーおよびシークレットを作成します。KMS インスタンス として共有インスタンスを選択します。構成の詳細については、「キーの作成」および「シークレットの作成」をご参照ください。
RAM ユーザーまたはロールに必要な権限を付与します。関連する KMS 操作(例:
kms:Encryptやkms:Decrypt)を含む RAM ポリシーを構成します。手順については、「RAM を使用したアクセス制御」をご参照ください。他の Alibaba Cloud サービスまたは自社アプリケーションでキーおよびシークレットを利用します:
クラウド製品のサーバー側暗号化:クラウド製品における KMS 統合の概要 および KMS 統合をサポートするクラウド製品
クラウドサービスとのシークレット統合:クラウド製品と KMS シークレットの統合
自社管理アプリケーション:自社構築アプリケーションと KMS の統合
共有の管理と保守
リソース共有のプリンシパルの変更
KMS コンソールから:
インスタンス所有者としてKey Management Service コンソールにログインします。リージョンを選択し、左側ナビゲーションウィンドウで インスタンス をクリックします。
インスタンス ページで、インスタンスタイプに応じて ソフトウェアキー管理 タブまたは ハードウェアキー管理 タブを開きます。
対象のインスタンスを見つけ、リソースの共有 を 操作 列からクリックします。
RD 複数アカウント共有設定 パネルで、リソース共有 を選択します。プリンシパル セクションで 編集 をクリックしてプリンシパルを追加または削除し、OK をクリックします。
リソース共有コンソールから:
詳細な手順については、「リソース共有の変更」をご参照ください。
KMS インスタンスの共有の停止
共有の停止とは、リソース共有を削除することを意味します。削除後、すべてのプリンシパルはその共有内のリソースへのアクセスを失います。
共有を停止する前に、各プリンシパルは共有インスタンス内で作成したすべてのキーおよびシークレットを削除する必要があります。リソースが残っている場合、共有の停止は失敗します。ビジネスへの影響を回避するため、関連するリソースがまだ使用されていないことを確認してください。
この操作は、リソース共有コンソールからのみ実行できます:
管理アカウントでリソース共有コンソールにログインします。
左側ナビゲーションウィンドウで、リソース共有 > 私が共有するリソース を選択します。対象のリソース共有を見つけ、その ID をクリックします。
右上隅の リソース共有の削除 をクリックします。確認ダイアログボックスで OK をクリックします。
本番環境に適用
ネットワーク接続性
プリンシパルのアプリケーションが VPC 内で実行され、プライベートゲートウェイ経由で KMS にアクセスする必要がある場合、インスタンス所有者は、プリンシパルの VPC を共有 KMS インスタンスにアタッチする必要があります。手順については、「同一リージョン内の複数の VPC からの KMS インスタンスへのアクセス」をご参照ください。
監査およびコンプライアンス
リソース所有者: ActionTrail を有効化して、共有インスタンスに対するすべての管理操作およびプリンシパルによるすべてのキー操作を記録します。
プリンシパル: ActionTrail を有効化して、自社アカウント内のすべての API 呼び出しを記録します。
変更管理
共有の停止: 共有を停止する前に、プリンシパルは共有インスタンス内で作成したすべてのキーおよびシークレットを削除する必要があります。リソースが残っている場合、共有の停止は失敗します。手順については、「KMS インスタンスの共有の停止」をご参照ください。
プリンシパルの変更: リソース共有からプリンシパルを追加または削除すると、その共有内のすべてのリソースに影響します。権限の競合を回避するため、異なるビジネスシナリオまたはチームごとに個別のリソース共有を作成してください。手順については、「リソース共有のプリンシパルの変更」をご参照ください。
制限事項
デフォルトキー(例:
alias/acs/oss)は共有できません。プリンシパルは、リージョンをまたいで共有 KMS インスタンスにアクセスできません。
共同所有 モードでは、インスタンス内のすべてのキーおよびシークレット名はグローバルに一意である必要があります。
アクセス管理クォータ: KMS インスタンスの共有は、リソース所有者のアクセス管理クォータを消費します。使用されるクォータは、共有されたアカウント数とアタッチされた VPC 数の合計に等しくなります。たとえば、3 つのアカウントと 2 つの VPC を共有すると、クォータは 5 となります。クォータを増やす必要がある場合は、「KMS インスタンスのスペックアップ」をご参照ください。
重要クォータ不足によりプリンシパルの追加に失敗した場合、クォータを増加させてもシステムは自動的に再試行しません。手動でリソース共有からプリンシパルを削除し、再度追加してください。
よくある質問
KMS API を呼び出した際に、プリンシパルが「AccessDenied」または「Forbidden」エラーを受信するのはなぜですか?
以下の 4 つの条件を順に確認してください:
リソース共有のステータス: リソース共有コンソールで、プリンシパルのアカウントがリソース共有に追加されており、共有ステータスがアクティブであることを確認します。
KMS インスタンスの権限: リソース共有にアタッチされている権限が
AliyunRSDefaultPermissionKMSInstanceであることを確認します。RAM 呼び出し権限: 呼び出しを行っている RAM ユーザーまたはロールが、
kms:Encryptやkms:Decryptなどの必要な KMS 操作を許可する RAM ポリシーを持っていることを確認します。リソース所有権: 独立所有 モードでは、現在のプリンシパルがアクセスしようとしているキーまたはシークレットを実際に作成したことを確認します。
共同所有モードでシークレットを作成する際に、名前競合エラーが発生するのはなぜですか?
共同所有モードでは、KMS インスタンス内のすべてのキーおよびシークレット名は、すべてのアカウントにわたって一意である必要があります。リソース所有者およびどのプリンシパルも、すでに使用中の名前でリソースを作成することはできません。
この問題を解決するには、別の名前を選択するか、同一名称のリソースを複数のアカウントで使用する必要がある場合は、共有モードを 独立所有 に切り替えます。
共同所有から独立所有への切り替えは不可逆です。実行前に影響を十分に評価してください。
付録:異なる共有モードにおける機能権限
共同所有
| 機能 | サブ機能 | インスタンス所有者 | プリンシパル |
|---|---|---|---|
| インスタンス管理 | KMS インスタンスの詳細の表示 | 対応 | 非対応 |
| KMS インスタンスへのマルチ VPC アクセスの構成 | 対応 | 非対応 | |
| インスタンスのスペックアップ | 対応 | 非対応 | |
| インスタンスの更新 | 対応 | 非対応 | |
| 共有の停止 | 対応 | 非対応 | |
| キー管理 | キーの作成 | 対応 | 対応 |
| キーのメタデータの表示 | 対応 — プリンシパルが作成したキーを含むすべてのキーに適用 | 対応 — プリンシパルが作成したキーにのみ適用 | |
| キーのローテーションの設定 | 対応 | 対応 | |
| キーの削除予約 | 対応 | 対応 | |
| 削除保護の有効化 | 対応 | 対応 | |
| キーのエイリアスの作成および管理 | 対応 | 対応 | |
| キーのタグの追加および管理 | 対応 | 対応 | |
| 暗号化操作 | — | 対応 | 該当なし |
| シークレット管理 | シークレットの作成 | 対応 | 対応 |
| シークレットのメタデータの表示 | 対応 — プリンシパルが作成したシークレットを含むすべてのシークレットに適用 | 対応 — プリンシパルが作成したシークレットにのみ適用 | |
| シークレットの削除 | 対応 | 対応 | |
| シークレットのローテーションの設定 | 対応 | 対応 | |
| シークレットのタグの追加および管理 | 対応 | 対応 | |
| シークレット値の取得 | 該当なし | 対応 | |
| バックアップ管理 | — | 対応 — プリンシパルが作成したキーおよびシークレットを含むすべてのキーおよびシークレットをバックアップ可能 | 非対応 |
| アプリケーションアクセス | アプリケーションアクセスポイントの作成 | 対応 | 対応 |
独立所有
| 機能 | サブ機能 | インスタンス所有者 | プリンシパル |
|---|---|---|---|
| インスタンス管理 | KMS インスタンスの詳細の表示 | 対応 | 非対応 |
| KMS インスタンスのマルチ VPC アクセスの構成 | 対応 | 非対応 | |
| インスタンスのスペックアップ | 対応 | 非対応 | |
| インスタンスの更新 | 対応 | 非対応 | |
| 共有の取り消し | 対応 | 非対応 | |
| キー管理 | キーの作成 | 対応 | 対応 |
| キーのメタデータの表示 | 対応 — インスタンス所有者が作成したキーにのみ適用 | 対応 — プリンシパルが作成したキーにのみ適用 | |
| キーのローテーションの設定 | 対応 | 対応 | |
| キーの削除予約 | 対応 | 対応 | |
| 削除保護の有効化 | 対応 | 対応 | |
| キーのエイリアスの作成および管理 | 対応 | 対応 | |
| キーのタグの追加および管理 | 対応 | 対応 | |
| 暗号化操作 | — | 対応 | 該当なし |
| シークレット管理 | シークレットの作成 | 対応 | 対応 |
| シークレットのメタデータの表示 | 対応 — インスタンス所有者が作成したシークレットにのみ適用 | 対応 — プリンシパルが作成したシークレットにのみ適用 | |
| シークレットの削除 | 対応 | 対応 | |
| シークレットのローテーションの設定 | 対応 | 対応 | |
| シークレットのタグの追加および管理 | 対応 | 対応 | |
| シークレット値の取得 | 該当なし | 対応 | |
| バックアップ管理 | — | 対応 — インスタンス所有者が作成したキーにのみ適用 | 非対応 |
| アプリケーションアクセス | アプリケーションアクセスポイントの作成 | 対応 | 対応 |