IAM によるアクセス制御

このドキュメントでは、Identity and Access Management(IAM)の役割と権限を使用して Logging APIログ エクスプローラGoogle Cloud CLI でログデータへのアクセスを制御する方法について説明します。

概要

IAM の権限ロールによって、Logging APIログ エクスプローラGoogle Cloud CLI内のログデータにアクセス可能であるかどうかが判断されます。

役割は権限のコレクションです。プリンシパルに直接権限を付与することはできません。代わりに、ロールを付与します。ロールをプリンシパルに付与する際には、ロールに含まれているすべての権限がプリンシパルに付与されます。同じプリンシパルに複数のロールを付与できます。

Google Cloud プロジェクト、フォルダ、バケット、組織などの Google Cloud リソース内で Logging を使用するには、プリンシパルに適切な権限を含む IAM ロールが必要です。

事前定義されたロール

IAM の事前定義ロールを使用すると、特定の Google Cloud リソースに対してきめ細やかなアクセス権を付与し、他のリソースへの望ましくないアクセスを防ぐことができます。Google Cloud はこれらのロールを作成、維持し、必要に応じて自動的に権限を更新します(Logging に新機能が追加された場合など)。

次の表は、Logging の事前定義ロールを示しています。役割ごとに、役割のタイトル、説明、含まれている権限、役割を付与できる最低レベルのリソースタイプが表示されます。事前定義ロールは、Cloud プロジェクト レベル、またはほとんどの場合に Google Cloud 階層の上位にある任意のタイプで付与できます。ログバケット書き込みまたはログ表示アクセス者のロールをバケットレベルにより厳密にスコープするには、IAM Conditions のリソース属性を使用します。

ロールに含まれる各権限のリストを取得するには、ロール メタデータの取得をご覧ください。

ロール 権限

Logging 管理者
roles/logging.admin

Cloud Logging のすべての機能を使用するのに必要なすべての権限を付与します。

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

  • プロジェクト
  • logging.buckets.copyLogEntries
  • logging.buckets.create
  • logging.buckets.delete
  • logging.buckets.get
  • logging.buckets.list
  • logging.buckets.undelete
  • logging.buckets.update
  • logging.cmekSettings.*
  • logging.exclusions.*
  • logging.fields.access
  • logging.locations.*
  • logging.logEntries.*
  • logging.logMetrics.*
  • logging.logServiceIndexes.list
  • logging.logServices.list
  • logging.logs.*
  • logging.notificationRules.*
  • logging.operations.*
  • logging.privateLogEntries.list
  • logging.queries.*
  • logging.sinks.*
  • logging.usage.get
  • logging.views.*
  • resourcemanager.projects.get
  • resourcemanager.projects.list

ログバケット書き込み
roles/logging.bucketWriter

ログバケットにログを書き込むことができます。

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

  • プロジェクト
  • logging.buckets.write

ログ構成書き込み
roles/logging.configWriter

ログをエクスポートするためのログベースの指標とシンクの構成に対する読み取りおよび書き込み権限を付与します。

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

  • プロジェクト
  • logging.buckets.create
  • logging.buckets.delete
  • logging.buckets.get
  • logging.buckets.list
  • logging.buckets.undelete
  • logging.buckets.update
  • logging.cmekSettings.*
  • logging.exclusions.*
  • logging.locations.*
  • logging.logMetrics.*
  • logging.logServiceIndexes.list
  • logging.logServices.list
  • logging.logs.list
  • logging.notificationRules.*
  • logging.operations.*
  • logging.sinks.*
  • logging.views.create
  • logging.views.delete
  • logging.views.get
  • logging.views.list
  • logging.views.update
  • resourcemanager.projects.get
  • resourcemanager.projects.list

ログ フィールド アクセサー
roles/logging.fieldAccessor

ログバケット内の制限付きフィールドを読み取ることができます。

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

  • プロジェクト
  • logging.fields.access

ログ書き込み
roles/logging.logWriter

ログエントリを書き込むための権限を付与します。

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

  • プロジェクト
  • logging.logEntries.create

プライベート ログ閲覧者
roles/logging.privateLogViewer

ログ閲覧者のロールの権限、およびプライベート ログ内のエントリに対する読み取り専用アクセス権を付与します。

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

  • プロジェクト
  • logging.buckets.get
  • logging.buckets.list
  • logging.exclusions.get
  • logging.exclusions.list
  • logging.locations.*
  • logging.logEntries.list
  • logging.logMetrics.get
  • logging.logMetrics.list
  • logging.logServiceIndexes.list
  • logging.logServices.list
  • logging.logs.list
  • logging.privateLogEntries.list
  • logging.queries.create
  • logging.queries.delete
  • logging.queries.get
  • logging.queries.list
  • logging.queries.listShared
  • logging.queries.update
  • logging.sinks.get
  • logging.sinks.list
  • logging.usage.get
  • logging.views.access
  • logging.views.get
  • logging.views.list
  • resourcemanager.projects.get

ログ表示アクセサー
roles/logging.viewAccessor

ビュー内のログを読み取ることができます。

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

  • プロジェクト
  • logging.logEntries.download
  • logging.views.access
  • logging.views.listLogs
  • logging.views.listResourceKeys
  • logging.views.listResourceValues

ログビューア
roles/logging.viewer

ログの閲覧権限を付与します。

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

  • プロジェクト
  • logging.buckets.get
  • logging.buckets.list
  • logging.exclusions.get
  • logging.exclusions.list
  • logging.locations.*
  • logging.logEntries.list
  • logging.logMetrics.get
  • logging.logMetrics.list
  • logging.logServiceIndexes.list
  • logging.logServices.list
  • logging.logs.list
  • logging.operations.get
  • logging.operations.list
  • logging.queries.create
  • logging.queries.delete
  • logging.queries.get
  • logging.queries.list
  • logging.queries.listShared
  • logging.queries.update
  • logging.sinks.get
  • logging.sinks.list
  • logging.usage.get
  • logging.views.get
  • logging.views.list
  • resourcemanager.projects.get

考慮事項

プリンシパルのユースケースに適用する権限とロールを決定する際は、次の点を考慮してください。

  • roles/logging.admin(Logging 管理者)は、Logging に関連するすべての権限を付与します。

  • roles/logging.viewer(ログビューア)は、プリンシパルに Logging のほとんどの機能に対する読み取り専用権限を付与します。

    ログ閲覧者の役割は、_Required バケットの _AllLogs ログビュー_Default バケットの _Default ログビューの両方に対するプリンシパルへのアクセスを許可します。

    ログ閲覧者のロールでは、プリンシパルが _Default バケットにあるデータアクセス監査ログを読み取ることはできません。このデータアクセス監査ログを読み取るには、プリンシパルに適切なログビューに対するプライベート ログ閲覧者のロール(roles/logging.privateLogViewer)が必要です。

    ログ閲覧者のロールでは、プリンシパルがユーザー定義バケットに保存されているログを読み取ることはできません。ユーザー定義バケットでログを読み取るには、プリンシパルに適切なログビューに対するログ表示アクセス者のロール(roles/logging.viewAccessor)が必要です。

  • roles/logging.privateLogViewer(プライベート ログ閲覧者)には、roles/logging.viewer に含まれるすべての権限に加えて、_Default バケット内のデータアクセス監査ログの読み取り権限があります。

    プライベート ログ閲覧者のロールでは、データアクセス監査ログがユーザー定義バケットに保存されている場合、プリンシパルがそれを読み取ることができません。ユーザー定義バケットでこれらのログを読み取るには、プリンシパルに適切なログビューに対するログ表示アクセス者のロール(roles/logging.viewAccessor)が必要です。

  • roles/logging.viewAccessor(ログ表示アクセス者)は、ログビューを使用してログ、リソースキー、値の読み取りとログのダウンロードを許可します。このロールを特定のバケット内のビューに制限するには、IAM 条件を使用します。例については、バケットからのログの読み取りをご覧ください。

  • roles/logging.fieldAccessor(ログフィールド アクセス者)は、特定のバケット内に制限付きの LogEntry フィールドが存在する場合は、プリンシパルにアクセス権を付与します。詳細については、フィールド レベルのアクセス制御をご覧ください。

  • roles/logging.logWriter(ログ書き込み)は、Logging API にログを書き込むために必要な最小限の権限をプリンシパルに付与します。このロールでは、閲覧権限は付与されません。

  • roles/logging.bucketWriter(ログバケット書き込み)は、シンクのサービス アカウントに、特定のバケットにログをルーティングするために必要な最小限の権限を付与します。シンクのサービス アカウントに権限を付与する手順については、エクスポート先の権限を設定するをご覧ください。

  • roles/logging.configWriter(ログ構成書き込み)は、シンク、バケット、ビュー、ログベースの指標、除外などのロギング構成を作成または変更する権限を付与します。これらのアクションにログ エクスプローラを使用するには、roles/logging.viewer を追加します。

  • roles/viewer(プロジェクト閲覧者)は roles/logging.viewer と同じです。このロールは、プリンシパルに、_Default バケット内のデータアクセス監査ログの表示を除き、すべての Logging 機能に対する読み取り専用権限を付与します。

  • roles/editor(プロジェクト編集者)には、roles/logging.viewer の権限、ログエントリの書き込み権限、ログの削除権限、ログベースの指標の作成権限が含まれます。このロールでは、プリンシパルが _Default バケット内のシンクの作成や、データアクセス監査ログの読み取りを行うことはできません。

  • roles/owner(プロジェクト オーナー)によって、プリンシパルに、データアクセス監査ログの読み取りを含む Logging への完全アクセス権が付与されます。

ロールを付与しています

プリンシパルにロールを付与する方法については、アクセス権の付与、変更、取り消しをご覧ください。

1 人のユーザーに複数のロールを付与できます。ロールに含まれる権限のリストを取得するには、ロール メタデータの取得をご覧ください。

Google Cloud リソースにアクセスしようとしたときに必要な権限が不足している場合は、リソースのオーナーとして登録されているプリンシパルにお問い合わせください。

カスタムロール

Logging の権限を含むカスタムの役割を作成するには、次の手順に従います。

カスタム役割の詳細については、IAM のカスタムの役割についてをご覧ください。

API 権限

Logging API メソッドでは、特定の IAM の権限が必要になります。次の表に、API メソッドで必要な権限を示します。

Google Cloud 組織、請求先アカウント、フォルダに保存されているログが必要な場合、これらのリソースには logssinks のための独自のメソッドがあることにご注意ください。表は、すべてのメソッドを繰り返すのではなく、projects のメソッドのみを個別に示しています。

ロギングのメソッド 必要な権限 リソースの種類
billingAccounts.logs.* logging.logs.*projects.logs.* を参照) 請求先アカウント
billingAccounts.sinks.* logging.sinks.*projects.sinks.* を参照) 請求先アカウント
billingAccounts.locations.buckets.* logging.buckets.*projects.locations.buckets.* を参照) 請求先アカウント
entries.list logging.logEntries.list または
logging.privateLogEntries.list
プロジェクト、組織、
フォルダ、請求先アカウント
entries.tail logging.logEntries.list または
logging.privateLogEntries.list
プロジェクト、組織、
フォルダ、請求先アカウント
entries.write logging.logEntries.create プロジェクト、組織、
フォルダ、請求先アカウント
folders.logs.* logging.logs.*projects.logs.* を参照) フォルダ
folders.sinks.* logging.sinks.*projects.sinks.* を参照) フォルダ
folders.locations.buckets.* logging.buckets.*projects.locations.buckets.* を参照) フォルダ
monitoredResourceDescriptors.list (なし) (なし)
organizations.logs.* logging.logs.*projects.logs.* を参照) 組織
organizations.sinks.* logging.sinks.*projects.sinks.* を参照) 組織
organizations.locations.buckets.* logging.buckets.*projects.locations.buckets.* を参照) 組織
projects.exclusions.create logging.exclusions.create プロジェクト
projects.exclusions.delete logging.exclusions.delete プロジェクト
projects.exclusions.get logging.exclusions.get プロジェクト
projects.exclusions.list logging.exclusions.list プロジェクト
projects.exclusions.patch logging.exclusions.update プロジェクト
projects.logs.list logging.logs.list プロジェクト
projects.logs.delete logging.logs.delete プロジェクト
projects.sinks.list logging.sinks.list プロジェクト
projects.sinks.get logging.sinks.get プロジェクト
projects.sinks.create logging.sinks.create プロジェクト
projects.sinks.update logging.sinks.update プロジェクト
projects.sinks.delete logging.sinks.delete プロジェクト
projects.locations.buckets.list logging.buckets.list プロジェクト
projects.locations.buckets.get logging.buckets.get プロジェクト
projects.locations.buckets.patch logging.buckets.update プロジェクト
projects.locations.buckets.create logging.buckets.create プロジェクト
projects.locations.buckets.delete logging.buckets.delete プロジェクト
projects.locations.buckets.undelete logging.buckets.undelete プロジェクト
projects.metrics.list logging.logMetrics.list プロジェクト
projects.metrics.get logging.logMetrics.get プロジェクト
projects.metrics.create logging.logMetrics.create プロジェクト
projects.metrics.update logging.logMetrics.update プロジェクト
projects.metrics.delete logging.logMetrics.delete プロジェクト

コンソール権限

次の表に、ログ エクスプローラの使用に必要な権限を示します。

表の a.b.{x,y}a.b.xa.b.y を意味します。

コンソール アクティビティ 必要な権限
最小限の読み取り専用アクセス logging.logEntries.list
logging.logs.list
logging.logServiceIndexes.list
logging.logServices.list
resourcemanager.projects.get
データアクセス監査ログを表示できるようにする logging.privateLogEntries.list を追加
ログベースの指標を表示できるようにする logging.logMetrics.{list, get} を追加します
シンクを表示できるようにする logging.sinks.{list, get} を追加します
ログ使用量を表示できるようにする logging.usage.get を追加します
ログを除外できるようにする logging.exclusions.{list, create, get, update, delete} を追加します
シンクを使用できるようにする logging.sinks.{list, create, get, update, delete} を追加します
ログベースの指標を作成できるようにする logging.logMetrics.{list, create, get, update, delete} を追加します
クエリを保存する機能を追加する logging.queries.{list, create, get, update, delete} を追加します
クエリを共有する機能を追加する logging.queries.share を追加
最近のクエリを使用できる機能を追加する logging.queries.{create, list} を追加します

コマンドライン権限

gcloud logging コマンドは、IAM 権限によって制御されます。

gcloud logging コマンドのいずれかを使用するには、プリンシパルに serviceusage.services.use 権限が必要です。

プリンシパルには、ログのリソースとユースケースに対応する IAM のロールも必要です。詳細については、コマンドライン インターフェースの権限をご覧ください。

ログ ルーティングの権限

シンクを作成して管理し、ログをルーティングする際のアクセス制御の設定方法については、シンクの構成: エクスポート先の権限を設定するをご覧ください。

除外フィルタの管理は、シンクの構成と統合されています。除外フィルタの設定など、シンクの管理に関連するすべての権限は、logging.sinks.* 権限に含まれます。除外フィルタを管理する権限を含むカスタム役割を作成する場合、logging.exclusions.* 権限を付与する代わりに、logging.sinks.* 権限をロールに追加します。

ログエントリがサポートされている宛先にルーティングされた後、ログエントリ宛先の Cloud Storage、BigQuery、Pub/Sub に対する IAM 権限とロールによって、ログのコピーへのアクセスは全面的に制御されます。

ログベースの指標の権限

プリンシパルがログベースの指標にアクセスするために必要な一般的なロールと権限の概要は次のとおりです。

  • ロギング / ログ構成書き込みroles/logging.configWriter)は、プリンシパルがログベースの指標をリスト表示、作成、取得、更新、削除できるようにします。

  • ロギング / ログのビューアroles/logging.viewer)は、プリンシパルが既存の指標を表示できるようにします。また、カスタム役割への logging.logMetrics.getlogging.logMetrics.list 権限を付与できます。

  • モニタリング ビューアroles/monitoring.viewer)は、プリンシパルが TimeSeries データを読み取ることができるようにします。また、カスタム役割への monitoring.timeSeries.list 権限を付与できます。

  • Logging 管理者roles/logging.admin)、プロジェクト編集者roles/editor)、プロジェクト オーナーroles/owner)を使用して、プリンシパルがログベースの指標(logging.logMetrics.create)を作成できます。

ログベースのアラートの権限

プリンシパルがログベースのアラートを作成および管理を行うために必要な、一般的なロールと権限の概要を次に示します。

  • Logging 管理者roles/logging.admin)。特にプリンシパルには、ログの読み取りと Logging 通知ルールの管理を行うために、次の権限が必要です。

    • logging.logs.list
    • logging.logEntries.list
    • logging.notificationRules.create
    • logging.notificationRules.update

    これらの権限は、Logging 管理者のロールに含まれます。この役割を付与しない場合は、次の手順に従います。

  • Monitoring AlertPolicy 編集者roles/monitoring.alertPolicyEditor)と Monitoring NotificationChannel 編集者roles/monitoring.notificationChannelEditor)には、アラートの管理に必要な権限が含まれています。ログベースのアラートで使用されるポリシーと通知チャネルは次のとおりです。

    • monitoring.alertPolicies.{create, delete, get, list, update}
    • monitoring.notificationChannelDescriptors.{get, list}
    • monitoring.notificationChannels.{create, delete, get, list, sendVerificationCode, update, verify}

    必要な権限は、モニタリング編集者roles/monitoring.editor)のロールとモニタリング管理者roles/monitoring.admin)のロールにも含まれています。

    これらのロールを付与しない場合、カスタムロールを作成し、Monitoring AlertPolicy 編集者と Monitoring NotificationChannel 編集者のロールに権限を含めます。

Logging のアクセス スコープ

アクセス スコープは、Compute Engine VM インスタンスに対するサービス アカウントの権限を指定する従来からの方法です。

Logging API には次のアクセス スコープが適用されます。

アクセス スコープ 付与される権限
https://www.googleapis.com/auth/logging.read roles/logging.viewer
https://www.googleapis.com/auth/logging.write roles/logging.logWriter
https://www.googleapis.com/auth/logging.admin Logging API への完全アクセス権。
https://www.googleapis.com/auth/cloud-platform Logging API と他の有効なすべての Google Cloud API への完全アクセス権。

この従来の方法を使用してサービス アカウントのアクセス レベルを設定する方法については、サービス アカウントの権限をご覧ください。