権限と役割

Cloud KMS では、リソースは階層に編成されます。この階層は、さまざまな粒度でリソースを管理してアクセス権を付与するのに役立ちます。鍵はキーリングに含まれ、キーリングはプロジェクト内に存在します。プロジェクトは、さらにフォルダまたは組織に編成できます。

このトピックでは、Cloud KMS 内のリソースの階層について詳しく説明します。一般的な Google Cloud リソースの詳細については、リソース階層をご覧ください。

リソース階層

IAM のロールの範囲は、ロールが付与されるリソース階層のレベルによって異なります。次の表は、階層のさまざまなレベルで Cloud KMS CryptoKey Encrypter ロール(roles/cloudkms.cryptoKeyEncrypter)によって付与される有効な機能を示しています。

鍵またはキーリングへのアクセスは管理できますが、個々の鍵バージョンへのアクセスは管理できません。

リソース階層 能力
組織 組織内のすべてのプロジェクトのすべての鍵を使用して暗号化する
フォルダ フォルダ内のすべてのプロジェクトのすべての鍵を使用して暗号化する
プロジェクト プロジェクト内のすべての鍵を使用して暗号化する
キーリング キーリング上のすべての鍵を使用して暗号化する
その鍵だけを使用して暗号化する

セキュリティ原則

IAM は、職務の分離と最小権限という相互に関連するセキュリティ原則を適用するのに役立ちます。

  • 職務の分離の原則を適用した場合、1 人のメンバーに、重要なビジネス機能の遂行に必要なアクセス権がすべて付与されることはありません。たとえば、銀行の窓口係が口座から資金を引き出せるのは、アカウント所有者が物理的に存在し、取引を開始している場合のみです。

  • 最小権限の原則を適用した場合、メンバーにはその特定のビジネス機能を遂行するために必要な最小限のアクセスレベルだけが与えられます。たとえば、銀行の窓口係が顧客のローンを承認できる権限は自動的に付与されません。

定義済みの役割

IAM には、Google Cloud リソースの種類ごとにアクセス権を付与する事前定義ロールが用意されています。ニーズに合う事前定義ロールがない場合は、カスタムロールを作成できます。

IAM では Cloud KMS に次の事前定義ロールを用意しています。

ロール 権限

Cloud KMS 管理者
roles/cloudkms.admin

暗号化と復号を除く、Cloud KMS リソースに対する完全アクセス権を付与します。

このロールを付与できる最下位レベルのリソース

  • 暗号鍵
  • cloudkms.cryptoKeyVersions.create
  • cloudkms.cryptoKeyVersions.destroy
  • cloudkms.cryptoKeyVersions.get
  • cloudkms.cryptoKeyVersions.list
  • cloudkms.cryptoKeyVersions.restore
  • cloudkms.cryptoKeyVersions.update
  • cloudkms.cryptoKeys.*
  • cloudkms.importJobs.*
  • cloudkms.keyRings.*
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Cloud KMS 暗号鍵の復号
roles/cloudkms.cryptoKeyDecrypter

復号の場合のみ、Cloud KMS リソースの使用を許可します。

このロールを付与できる最下位レベルのリソース

  • 暗号鍵
  • cloudkms.cryptoKeyVersions.useToDecrypt
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Cloud KMS 暗号鍵の暗号化
roles/cloudkms.cryptoKeyEncrypter

暗号化の場合にのみ、Cloud KMS リソースの使用を許可します。

このロールを付与できる最下位レベルのリソース

  • 暗号鍵
  • cloudkms.cryptoKeyVersions.useToEncrypt
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Cloud KMS 暗号鍵の暗号化 / 復号
roles/cloudkms.cryptoKeyEncrypterDecrypter

暗号化と復号の場合のみ、Cloud KMS リソースの使用を許可します。

このロールを付与できる最下位レベルのリソース

  • 暗号鍵
  • cloudkms.cryptoKeyVersions.useToDecrypt
  • cloudkms.cryptoKeyVersions.useToEncrypt
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Cloud KMS 暗号オペレータ
roles/cloudkms.cryptoOperator

すべての暗号オペレーションを有効にします。

  • cloudkms.cryptoKeyVersions.useToDecrypt
  • cloudkms.cryptoKeyVersions.useToEncrypt
  • cloudkms.cryptoKeyVersions.useToSign
  • cloudkms.cryptoKeyVersions.useToVerify
  • cloudkms.cryptoKeyVersions.viewPublicKey
  • cloudkms.locations.*
  • resourcemanager.projects.get

Cloud KMS インポータ
roles/cloudkms.importer

ImportCryptoKeyVersion、CreateImportJob、ListImportJobs、GetImportJob の各オペレーションを有効にします

  • cloudkms.importJobs.create
  • cloudkms.importJobs.get
  • cloudkms.importJobs.list
  • cloudkms.importJobs.useToImport
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Cloud KMS 暗号鍵の公開鍵閲覧者
roles/cloudkms.publicKeyViewer

GetPublicKey オペレーションを有効にします。

  • cloudkms.cryptoKeyVersions.viewPublicKey
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Cloud KMS 暗号鍵の署名者
roles/cloudkms.signer

Sign オペレーションを有効にします

  • cloudkms.cryptoKeyVersions.useToSign
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Cloud KMS 暗号鍵の署名者 / 検証者
roles/cloudkms.signerVerifier

Sign、Verify、GetPublicKey の各オペレーションを有効にします

  • cloudkms.cryptoKeyVersions.useToSign
  • cloudkms.cryptoKeyVersions.useToVerify
  • cloudkms.cryptoKeyVersions.viewPublicKey
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Cloud KMS 暗号鍵検証者
roles/cloudkms.verifier

Verify と GetPublicKey のオペレーションを有効にします

  • cloudkms.cryptoKeyVersions.useToVerify
  • cloudkms.cryptoKeyVersions.viewPublicKey
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

カスタムの役割

事前定義ロールに加えて、カスタムロールを作成できます。カスタムロールを使用すると、特定のタスクを実行するために必要な最小限の権限をロールに付与することで、最小権限の原則を適用できます。

カスタムロールには、IAM リファレンスに記載されている 1 つ以上の権限が含まれています。Cloud Key Management Service API に関連する権限は、cloudkms という文字列で始まります。詳細については、カスタムロールでの権限のサポートレベルをご覧ください。

特定の Cloud Key Management Service API メソッドを呼び出すために必要な権限の詳細については、そのメソッドの API リファレンスをご覧ください。

Cloud KMS でアクセスを管理するための一般的なガイドライン

ownereditorviewer など、プロジェクト全体にわたる基本のロールは使用しないでください。これらのロールは、鍵を管理する機能と鍵を暗号化動作に使用する機能を区別するものではないため、本番環境では推奨されません。代わりに、事前定義ロールを使用するか、ビジネス要件を反映するカスタムロールを作成します。

次の例で、適切なセキュリティ ガイドラインをいくつか示します。

  • 大規模な組織または複雑な組織の場合、次のようなアプローチが考えられます。

    • すべてのプロジェクトで Cloud KMS 管理者のロール(roles/cloudkms.admin)を IT セキュリティ チームのメンバーに付与します。さまざまなチームメンバーが鍵のライフサイクルのさまざまな側面を処理する場合は、Cloud KMS インポータのロール(roles/cloudkms.importer)など、よりきめ細かなロールをそれらのチームメンバーに付与できます。
    • 暗号化されたデータの読み取りまたは書き込みを行うユーザーやアプリケーションに、Cloud KMS Encrypter / Decrypter のロール(roles/cloudkms.cryptoKeyEncrypterDecrypter)を付与します。
    • 非対称暗号化に使用される鍵の公開部分を表示する必要があるユーザーまたはアプリケーションに、Cloud KMS 公開鍵閲覧者のロール(roles/cloudkms.publicKeyViewer)を付与します。
    • ビジネス要件に合わせて事前定義ロールを作成できます。たとえば、同じユーザーがプロジェクトの割り当てをモニタリングし、ログデータを表示することが必要な場合があります。
  • セキュリティ要件が単純な小規模な組織の場合、組織管理者roles/resourcemanager.organizationAdmin)などの広範なロールを付与することで、シンプルなアプローチを選択できます。ただし、このアプローチは継続的な要件に応じてスケーリングできない場合があります。

  • 鍵で保護されているデータとは別の Google Cloud プロジェクトで鍵をホストすることを検討してください。あるプロジェクトで基本ロールまたは高い権限があるロールを持つユーザー(editor など)は、このロールを使用して別のプロジェクトの鍵に対する不正アクセスを行うことはできません。

  • どのメンバーにも owner ロールを付与しないでください。owner ロールがなければ、これらの各権限がメンバーに付与されていない限り、プロジェクト内のどのメンバーも、鍵を作成し、それを使用してデータを復号または署名することはできません。暗号化や復号は許可せずに幅広い管理アクセス権を付与するには、代わりに Cloud KMS 管理者ロール(roles/cloudkms.admin)を付与します。

  • 顧客データなどの暗号化されたデータへのアクセスを制限するには、鍵にアクセスできるユーザーと、鍵を復号に使用できるユーザーを制限します。必要に応じて、ビジネス要件を満たすように詳細なカスタムロールを作成できます。

権限の確認

IAM 権限を詳細に設定できる Cloud KMS オブジェクト タイプごとに、そのオブジェクトに testIamPermissions メソッドがあります。testIamPermissions メソッドでは、そのオブジェクトに対して呼び出し元に付与されている権限セットが返されます。

鍵バージョンに IAM 権限を設定できないため、CryptoKeyVersion オブジェクト タイプにはこのメソッドがありません。

オブジェクトの testIamPermissions メソッドは TestIamPermissionsResponse を返します。

testIamPermissions メソッドを呼び出す例については、IAM ドキュメントの権限のテストに関するドキュメントをご覧ください。

次のステップ

  • IAM を使用して、Google Cloud リソースの権限とアクセス スコープを一元管理する方法を確認します。
  • さまざまな種類の Cloud KMS オブジェクトを理解します。