Cloud KMS では、リソースが階層状に編成されています。この階層構造は、さまざまな粒度のリソースを管理してアクセス権を付与するのに役立ちます。鍵はキーリングに含まれ、キーリングはプロジェクト内に存在します。EKM 接続もプロジェクト内に存在します。プロジェクトはフォルダや組織にさらに編成できます。
このトピックでは、Cloud KMS 内のリソースの階層について詳しく説明します。Google Cloud リソースの詳細については、リソース階層をご覧ください。
リソース階層
IAM のロールの範囲は、ロールが付与されるリソース階層のレベルによって異なります。次の表は、階層のさまざまなレベルでの Cloud KMS CryptoKey Encryptor のロール(roles/cloudkms.cryptoKeyEncrypter
)によって付与される有効な機能を示しています。
鍵またはキーリングへのアクセスは管理できますが、個々の鍵バージョンへのアクセスは管理できません。
リソース階層 | 能力 |
---|---|
組織 | 組織内のすべてのプロジェクトのすべての鍵を使用して暗号化する |
フォルダ | フォルダ内のすべてのプロジェクトのすべての鍵を使用して暗号化する |
プロジェクト | プロジェクト内のすべての鍵を使用して暗号化する |
キーリング | キーリングのすべての鍵を使用して暗号化する |
鍵 | その鍵だけを使用して暗号化する |
セキュリティ原則
IAM は、職務の分離と最小権限という相互に関連するセキュリティ原則を適用するのに役立ちます。
職務の分離の原則を適用した場合、1 人のメンバーに、重要なビジネス機能の遂行に必要なアクセス権がすべて付与されることはありません。たとえば、銀行の窓口係が口座から資金を引き出せるのは、アカウント所有者が物理的に存在し、取引を開始している場合のみです。
最小権限の原則を適用した場合、メンバーにはその特定のビジネス機能を遂行するために必要な最小限のアクセスレベルだけが与えられます。たとえば、銀行の窓口係が顧客のローンを承認できる権限は自動的に付与されません。
事前定義ロール
IAM には、Google Cloud リソースの種類ごとにアクセス権を付与する事前定義ロールが用意されています。必要な事前定義ロールがない場合は、カスタムロールを作成できます。
IAM では Cloud KMS に次の事前定義ロールを用意しています。
Role | Permissions |
---|---|
Cloud KMS Admin( Provides access to Cloud KMS resources, except for access to restricted resource types and cryptographic operations. Lowest-level resources where you can grant this role:
|
|
Cloud KMS Autokey Admin( Enables management of AutokeyConfig. |
|
Cloud KMS Autokey User( Grants ability to use KeyHandle resources. |
|
Cloud KMS CryptoKey Decrypter( Provides ability to use Cloud KMS resources for decrypt operations only. Lowest-level resources where you can grant this role:
|
|
Cloud KMS CryptoKey Decrypter Via Delegation( Enables Decrypt operations via other Google Cloud services |
|
Cloud KMS CryptoKey Encrypter( Provides ability to use Cloud KMS resources for encrypt operations only. Lowest-level resources where you can grant this role:
|
|
Cloud KMS CryptoKey Encrypter/Decrypter( Provides ability to use Cloud KMS resources for encrypt and decrypt operations only. Lowest-level resources where you can grant this role:
|
|
Cloud KMS CryptoKey Encrypter/Decrypter Via Delegation( Enables Encrypt and Decrypt operations via other Google Cloud services |
|
Cloud KMS CryptoKey Encrypter Via Delegation( Enables Encrypt operations via other Google Cloud services |
|
Cloud KMS Crypto Operator( Enables all Crypto Operations. |
|
Cloud KMS EkmConnections Admin( Enables management of EkmConnections. |
|
Cloud KMS Expert Raw AES-CBC Key Manager( Enables raw AES-CBC keys management. |
|
Cloud KMS Expert Raw AES-CTR Key Manager( Enables raw AES-CTR keys management. |
|
Cloud KMS Expert Raw PKCS#1 Key Manager( Enables raw PKCS#1 keys management. |
|
Cloud KMS Importer( Enables ImportCryptoKeyVersion, CreateImportJob, ListImportJobs, and GetImportJob operations |
|
Cloud KMS Protected Resources Viewer( Enables viewing protected resources. |
|
Cloud KMS CryptoKey Public Key Viewer( Enables GetPublicKey operations |
|
Cloud KMS CryptoKey Signer( Enables Sign operations |
|
Cloud KMS CryptoKey Signer/Verifier( Enables Sign, Verify, and GetPublicKey operations |
|
Cloud KMS CryptoKey Verifier( Enables Verify and GetPublicKey operations |
|
Cloud KMS Viewer( Enables Get and List operations. |
|
カスタムの役割
事前定義ロールに加えて、カスタムロールを作成できます。カスタムロールを使用すると、特定のタスクを実行するために必要な最小限の権限をロールに付与することで、最小権限の原則を適用できます。
カスタムロールには、IAM リファレンスに記載されている 1 つ以上の権限が含まれています。Cloud Key Management Service API に関連する権限は、文字列 cloudkms
で始まります。詳細については、カスタムロールでの権限のサポートレベルをご覧ください。
特定の Cloud Key Management Service API メソッドを呼び出すために必要な権限の詳細については、そのメソッドの API リファレンスをご覧ください。
Cloud KMS でアクセスを管理するための一般的なガイドライン
owner
、editor
、viewer
など、プロジェクト全体の基本ロールを使用しないことをおすすめします。これらのロールは、鍵を暗号オペレーションに使用する機能から鍵の管理機能を分離するものではないため、本番環境では推奨されません。代わりに、事前定義ロールを使用するか、ビジネス要件を反映するカスタムロールを作成します。
適切なセキュリティ ガイドラインの例を以下に示します。
大規模な組織または複雑な組織の場合、次のようなアプローチが考えられます。
- すべてのプロジェクトで Cloud KMS 管理者ロール(
roles/cloudkms.admin
)を IT セキュリティ チームのメンバーに付与します。さまざまなチームメンバーが鍵のライフサイクルのさまざまな側面を処理する場合は、Cloud KMS インポータのロール(roles/cloudkms.importer
)など、よりきめ細かなロールをそれらのチームメンバーに付与できます。 - 暗号化されたデータの読み取りまたは書き込みを行うユーザーやアプリケーションに、Cloud KMS Encrypter / Decrypter のロール(
roles/cloudkms.cryptoKeyEncrypterDecrypter
)を付与します。 - 非対称暗号化に使用される鍵の公開部分を表示するユーザーまたはアプリケーションに、Cloud KMS 公開鍵閲覧者のロール(
roles/cloudkms.publicKeyViewer
)を付与します。 - ビジネス要件に合わせて事前定義ロールを作成できます。たとえば、同じユーザーがプロジェクトの割り当てをモニタリングし、ログデータを表示することが必要な場合があります。
- すべてのプロジェクトで Cloud KMS 管理者ロール(
セキュリティ要件が単純な小規模な組織の場合、組織管理者(
roles/resourcemanager.organizationAdmin
)などの広範なロールを付与することで、シンプルなアプローチを選択できます。ただし、このアプローチは継続的な要件に応じてスケーリングできない場合があります。鍵で保護されているデータとは別の Google Cloud プロジェクトで鍵をホストすることを検討してください。あるプロジェクトで基本ロールまたは高い権限を持つロール(
editor
など)を持つユーザーは、このロールを使用して別のプロジェクトの鍵への不正アクセスを行うことはできません。どのメンバーにも
owner
ロールを付与しないでください。owner
ロールがない場合、これらの各権限がメンバーに付与されていない限り、プロジェクト内のどのメンバーも、鍵を作成し、その鍵を使用してデータを復号したり署名したりすることはできません。暗号化権限または復号権限を付与することなく、幅広い管理権限を付与するには、代わりに Cloud KMS 管理者ロール(roles/cloudkms.admin
)を付与します。顧客データなどの暗号化されたデータへのアクセスを制限するには、鍵にアクセスできるユーザーと鍵を復号に使用できるユーザーを制限します。必要に応じて、ビジネス要件を満たすように詳細なカスタムロールを作成できます。
権限の確認
きめ細かい IAM 権限を設定可能な Cloud KMS オブジェクトの型ごとに、そのオブジェクトは testIamPermissions
メソッドを持ちます。testIamPermissions
メソッドは、呼び出し元がそのオブジェクトに対して付与している権限セットを返します。
- キーリングの場合は、
cloudkms.keyRings.testIamPermissions
メソッドを呼び出します。 - 鍵に対して、
cloudkms.cryptoKeys.testIamPermissions
メソッドを呼び出すことができます。 - 鍵のインポート ジョブの場合、
cloudkms.keyRings.importJobs.testIamPermissions
メソッドを呼び出します。 - EKM 接続の場合は、
cloudkms.ekmConnections.testIamPermissions
メソッドを呼び出すことができます。
鍵バージョンに IAM 権限を設定できないため、CryptoKeyVersion
オブジェクト タイプにはこのメソッドがありません。
オブジェクトの testIamPermissions
メソッドは TestIamPermissionsResponse
を返します。
testIamPermissions
メソッドを呼び出す例については、IAM ドキュメントの権限のテストに関するドキュメントをご覧ください。
次のステップ
- IAM を使用して、Google Cloud リソースの権限とアクセス スコープを一元管理する方法を確認します。
- さまざまな種類の Cloud KMS オブジェクトを理解します。