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 の事前定義ロールの一覧を表示します。ロールごとに、テーブルには、ロールのタイトル、説明、含まれている権限、ロールに付与できる最低レベルのリソースタイプが表示されます。事前定義ロールは、 Google Cloud プロジェクト レベルで付与されます。また、ほとんどの場合、リソース階層の上位にある任意のタイプにも付与されます。ログ表示アクセス者のロールをバケットのログビューに制限するには、IAM Conditions のリソース属性を使用します。

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

Role Permissions

(roles/logging.admin)

Provides all permissions necessary to use all features of Cloud Logging.

Lowest-level resources where you can grant this role:

  • Project

logging.buckets.copyLogEntries

logging.buckets.create

logging.buckets.createTagBinding

logging.buckets.delete

logging.buckets.deleteTagBinding

logging.buckets.get

logging.buckets.list

logging.buckets.listEffectiveTags

logging.buckets.listTagBindings

logging.buckets.undelete

logging.buckets.update

logging.exclusions.*

  • logging.exclusions.create
  • logging.exclusions.delete
  • logging.exclusions.get
  • logging.exclusions.list
  • logging.exclusions.update

logging.fields.access

logging.links.*

  • logging.links.create
  • logging.links.delete
  • logging.links.get
  • logging.links.list

logging.locations.*

  • logging.locations.get
  • logging.locations.list

logging.logEntries.*

  • logging.logEntries.create
  • logging.logEntries.download
  • logging.logEntries.list
  • logging.logEntries.route

logging.logMetrics.*

  • logging.logMetrics.create
  • logging.logMetrics.delete
  • logging.logMetrics.get
  • logging.logMetrics.list
  • logging.logMetrics.update

logging.logScopes.*

  • logging.logScopes.create
  • logging.logScopes.delete
  • logging.logScopes.get
  • logging.logScopes.list
  • logging.logScopes.update

logging.logServiceIndexes.list

logging.logServices.list

logging.logs.*

  • logging.logs.delete
  • logging.logs.list

logging.notificationRules.*

  • logging.notificationRules.create
  • logging.notificationRules.delete
  • logging.notificationRules.get
  • logging.notificationRules.list
  • logging.notificationRules.update

logging.operations.*

  • logging.operations.cancel
  • logging.operations.get
  • logging.operations.list

logging.privateLogEntries.list

logging.queries.*

  • logging.queries.deleteShared
  • logging.queries.getShared
  • logging.queries.listShared
  • logging.queries.share
  • logging.queries.updateShared
  • logging.queries.usePrivate

logging.settings.*

  • logging.settings.get
  • logging.settings.update

logging.sinks.*

  • logging.sinks.create
  • logging.sinks.delete
  • logging.sinks.get
  • logging.sinks.list
  • logging.sinks.update

logging.sqlAlerts.*

  • logging.sqlAlerts.create
  • logging.sqlAlerts.update

logging.usage.get

logging.views.*

  • logging.views.access
  • logging.views.create
  • logging.views.delete
  • logging.views.get
  • logging.views.getIamPolicy
  • logging.views.list
  • logging.views.listLogs
  • logging.views.listResourceKeys
  • logging.views.listResourceValues
  • logging.views.setIamPolicy
  • logging.views.update

observability.scopes.get

resourcemanager.projects.get

resourcemanager.projects.list

(roles/logging.bucketWriter)

Ability to write logs to a log bucket.

Lowest-level resources where you can grant this role:

  • Project

logging.buckets.write

(roles/logging.configWriter)

Provides permissions to read and write the configurations of logs-based metrics and sinks for exporting logs.

Lowest-level resources where you can grant this role:

  • Project

logging.buckets.create

logging.buckets.createTagBinding

logging.buckets.delete

logging.buckets.deleteTagBinding

logging.buckets.get

logging.buckets.list

logging.buckets.listEffectiveTags

logging.buckets.listTagBindings

logging.buckets.undelete

logging.buckets.update

logging.exclusions.*

  • logging.exclusions.create
  • logging.exclusions.delete
  • logging.exclusions.get
  • logging.exclusions.list
  • logging.exclusions.update

logging.links.*

  • logging.links.create
  • logging.links.delete
  • logging.links.get
  • logging.links.list

logging.locations.*

  • logging.locations.get
  • logging.locations.list

logging.logMetrics.*

  • logging.logMetrics.create
  • logging.logMetrics.delete
  • logging.logMetrics.get
  • logging.logMetrics.list
  • logging.logMetrics.update

logging.logScopes.*

  • logging.logScopes.create
  • logging.logScopes.delete
  • logging.logScopes.get
  • logging.logScopes.list
  • logging.logScopes.update

logging.logServiceIndexes.list

logging.logServices.list

logging.logs.list

logging.notificationRules.*

  • logging.notificationRules.create
  • logging.notificationRules.delete
  • logging.notificationRules.get
  • logging.notificationRules.list
  • logging.notificationRules.update

logging.operations.*

  • logging.operations.cancel
  • logging.operations.get
  • logging.operations.list

logging.settings.*

  • logging.settings.get
  • logging.settings.update

logging.sinks.*

  • logging.sinks.create
  • logging.sinks.delete
  • logging.sinks.get
  • logging.sinks.list
  • logging.sinks.update

logging.sqlAlerts.*

  • logging.sqlAlerts.create
  • logging.sqlAlerts.update

logging.views.create

logging.views.delete

logging.views.get

logging.views.getIamPolicy

logging.views.list

logging.views.update

observability.scopes.get

resourcemanager.projects.get

resourcemanager.projects.list

(roles/logging.fieldAccessor)

Ability to read restricted fields in a log bucket.

Lowest-level resources where you can grant this role:

  • Project

logging.fields.access

(roles/logging.linkViewer)

Ability to see links for a bucket.

logging.links.get

logging.links.list

(roles/logging.logWriter)

Provides the permissions to write log entries.

Lowest-level resources where you can grant this role:

  • Project

logging.logEntries.create

logging.logEntries.route

(roles/logging.privateLogViewer)

Provides permissions of the Logs Viewer role and in addition, provides read-only access to log entries in private logs.

Lowest-level resources where you can grant this role:

  • Project

logging.buckets.get

logging.buckets.list

logging.exclusions.get

logging.exclusions.list

logging.links.get

logging.links.list

logging.locations.*

  • logging.locations.get
  • logging.locations.list

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.privateLogEntries.list

logging.queries.getShared

logging.queries.listShared

logging.queries.usePrivate

logging.sinks.get

logging.sinks.list

logging.usage.get

logging.views.access

logging.views.get

logging.views.list

observability.scopes.get

resourcemanager.projects.get

(roles/logging.serviceAgent)

Grants a Cloud Logging Service Account the ability to create and link datasets.

bigquery.datasets.create

bigquery.datasets.get

bigquery.datasets.link

(roles/logging.sqlAlertWriter)

Ability to write SQL Alerts.

logging.sqlAlerts.*

  • logging.sqlAlerts.create
  • logging.sqlAlerts.update

(roles/logging.viewAccessor)

Ability to read logs in a view.

Lowest-level resources where you can grant this role:

  • Project

logging.logEntries.download

logging.views.access

logging.views.listLogs

logging.views.listResourceKeys

logging.views.listResourceValues

(roles/logging.viewer)

Provides access to view logs.

Lowest-level resources where you can grant this role:

  • Project

logging.buckets.get

logging.buckets.list

logging.exclusions.get

logging.exclusions.list

logging.links.get

logging.links.list

logging.locations.*

  • logging.locations.get
  • logging.locations.list

logging.logEntries.list

logging.logMetrics.get

logging.logMetrics.list

logging.logScopes.get

logging.logScopes.list

logging.logServiceIndexes.list

logging.logServices.list

logging.logs.list

logging.operations.get

logging.operations.list

logging.queries.getShared

logging.queries.listShared

logging.queries.usePrivate

logging.sinks.get

logging.sinks.list

logging.usage.get

logging.views.get

logging.views.list

observability.scopes.get

resourcemanager.projects.get

以降のセクションでは、プリンシパルのユースケースに適用されるロールの決定に役立つ追加情報を提供します。

Logging のロール

  • ユーザーが Logging のすべての操作を行えるようにするには、Logging 管理者(roles/logging.admin)のロールを付与します。

  • ユーザーがロギング構成を作成、変更できるようにするには、ログ構成書き込み(roles/logging.configWriter)のロールを付与します。このロールにより、次のいずれかの作成または変更が可能になります。

    このロールでは、ログベースの指標ログベースのアラート ポリシーを作成できません。これらのタスクに必要なロールについては、ログベースの指標の権限ログベースのアラート ポリシーの権限をご覧ください。

  • ログ エクスプローラと [ログ分析] ページを使用して、ユーザーが _Required バケットと _Default バケットのログを読み取るには、次のいずれかのロールを付与します。

    • _Required バケットのすべてのログと _Default バケットの _Default ビューにアクセスするには、ログ閲覧者(roles/logging.viewer)のロールを付与します。
    • データアクセス ログを含む、_Required バケットと _Default バケットのすべてのログにアクセスするには、プライベート ログ閲覧者(roles/logging.privateLogViewer)のロールを付与します。
  • ユーザーにプロジェクト内のすべてのログビューのログの読み取りを許可するには、プロジェクトに対する IAM ロール roles/logging.viewAccessor を付与します。

  • ユーザーが特定のログビューのログのみを読み取れるようにするには、次の 2 つの方法があります。

    • ログビューの IAM ポリシーを作成し、そのポリシーに IAM バインディングを追加して、プリンシパルにログビューへのアクセス権を付与します。

    • ログビューを含むプロジェクトに対する roles/logging.viewAccessor の IAM ロールをプリンシパルに付与します。ただし、IAM 条件を関連付けて、対象を特定ログビューに制限します。

    ログビューの作成とアクセス権の付与の詳細については、ログバケットのログビューを構成するをご覧ください。

  • 特定のバケット内の制限付き LogEntry フィールド(ある場合)へのアクセス権をユーザーに付与するには、ログフィールド アクセサー(roles/logging.fieldAccessor)ロールを付与します。詳細については、フィールド レベルのアクセスを構成するをご覧ください。
  • ユーザーが Logging API を使用してログを書き込めるようにするには、ログ書き込み(roles/logging.logWriter)のロールを付与します。このロールでは、閲覧権限は付与されません。

  • シンクのサービス アカウントが別の Google Cloud プロジェクトのバケットにログを転送できるようにするには、サービス アカウントにログバケット書き込み(roles/logging.bucketWriter)のロールを付与します。サービス アカウントに権限を付与する手順については、宛先の権限を設定するをご覧ください。

プロジェクト レベルのロール

  • ほとんどの Google Cloud サービスへの閲覧権限を付与するには、閲覧者(roles/viewer)のロールを付与します。

    このロールには、ログ閲覧者(roles/logging.viewer)ロールによって付与されたすべての権限が含まれています。

  • ほとんどの Google Cloud サービスへの編集者アクセス権を付与するには、編集者(roles/editor)のロールを付与します。

    このロールには、ログ閲覧者(roles/logging.viewer)のロールによって付与されたすべての権限と、ログエントリの書き込み、ログの削除、ログベース指標の作成を行う権限が含まれています。ただし、このロールを使用して、ユーザーがシンクの作成、_Default バケット内のデータアクセス監査ログの読み取り、ユーザー定義ログバケット内のログの読み取りを行うことはできません。

  • ほとんどの Google Cloud サービスに対する完全アクセス権を付与するには、オーナー(roles/owner)のロールを付与します。

ロールの付与

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

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

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

カスタムロール

Logging の権限を含むカスタムロールを作成するには、次の操作を行います。

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

Cloud Logging の権限

次の表に、Cloud Logging の特定の機能に必要な権限の一部を示します。この表は、ログ エクスプローラなどのページを使用する際に必要な権限の特定に役立ちます。

表の 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.logEntries.{list, download}

ログをダウンロードするには、これらの権限のいずれか一つが必要です。ログをダウンロードする権限を含むロールは、プロジェクト レベルで付与する必要があります。これらの権限を含むロールがログビューの IAM ポリシー ファイルで付与されている場合、ログをダウンロードすることはできません。

ログスコープの一覧を取得する logging.logScopes.{get, list}
デフォルトのログスコープを表示する observability.scopes.get
ログを除外する logging.exclusions.{list, create, get, update, delete}

除外フィルタを管理する権限を含むカスタムロールを作成する場合、logging.exclusions.* 権限を付与する代わりに、logging.sinks.* 権限をロールに追加します。

シンクを作成して使用する logging.sinks.{list, create, get, update, delete}

シンクを作成するときに、宛先にログエントリを書き込むことができる IAM ロールもサービス アカウントに付与する必要があります。詳細については、宛先の権限を設定するをご覧ください。

ログエントリがサポートされている宛先に転送された後、ログエントリへのアクセスは、宛先の IAM 権限とロールによって全面的に制御されます。

ログベースのアラートを作成する ログベースのアラート ポリシーの作成と使用に必要なロールをご覧ください。
ログベースの指標を作成する logging.logMetrics.{list, create, get, update, delete}

ログベースの指標の作成と使用に必要な他の IAM ロールについては、ログベースの指標の作成と使用に必要なロールをご覧ください。

非公開クエリを保存して使用する logging.queries.usePrivate
logging.queries.{listShared,getShared}
共有クエリを保存して使用する logging.queries.{share, getShared, updateShared, deleteShared, listShared}
最近のクエリを使用する logging.queries.{create, list}
ログスコープを作成して管理する logging.logScopes.{create, delete, get, list, update}
デフォルトのログスコープを設定して管理する observability.scopes.{get, update}
分析ビューを作成して管理する observability.analyticsViews.{create, delete, get, list, update}

コマンドラインに対する権限

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

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

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

ログベースの指標の作成と使用に必要なロール

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

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

  • ログビューアroles/logging.viewer)ロールには、既存の指標を表示する権限が含まれています。特にプリンシパルには、既存の指標を表示するために、logging.logMetrics.get 権限と logging.logMetrics.list 権限が必要です。

  • モニタリング閲覧者roles/monitoring.viewer)ロールには、時系列データを読み取る権限が含まれています。特にプリンシパルには、時系列データを読み取るために、monitoring.timeSeries.list 権限が必要です。

  • ロギング管理者roles/logging.admin)、プロジェクト編集者roles/editor)、プロジェクト オーナーroles/owner)のロールには、ログベースの指標を作成する権限が含まれています。特にプリンシパルには、ログベースの指標を作成するために、logging.logMetrics.create 権限が必要です。

ログベースのアラート ポリシーの作成と使用に必要なロール

ログベースのアラート ポリシーを作成して管理するには、プリンシパルに次の Logging と Monitoring のロールと権限が必要です。

  • Monitoring でログベースのアラート ポリシーを作成し、関連する Logging の通知ルールを作成するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

    ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

    これらの事前定義ロールには、Monitoring でログベースのアラート ポリシーを作成し、関連する Logging の通知ルールを作成するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

    必要な権限

    Monitoring でログベースのアラート ポリシーを作成し、関連する Logging の通知ルールを作成するには、次の権限が必要です。

    • monitoring.alertPolicies.create
    • logging.notificationRules.create

    カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

Google Cloud CLI でアラート ポリシーを作成する場合は、次のロールまたは権限も必要です。

  • Google Cloud CLI でアラート ポリシーを作成するために必要な権限を取得するには、プロジェクトに対する Service Usage ユーザーroles/serviceusage.serviceUsageConsumer)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

    この事前定義ロールには、Google Cloud CLI を使用してアラート ポリシーを作成するために必要な serviceusage.services.use 権限が含まれています。

    カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。

Google Cloud プロジェクトにすでに通知チャンネルがある場合は、追加のロールや権限なしで既存のチャンネルを使用するようにアラート ポリシーを構成できます。ただし、ログベースのアラート ポリシーの通知チャンネルを作成する必要がある場合は、次のロールまたは権限が必要です。

  • ログベースのアラート ポリシーの通知チャンネルを作成するために必要な権限を取得するには、プロジェクトに対する Monitoring NotificationChannel 編集者roles/monitoring.notificationChannelEditor)IAM ロールを付与するよう管理者に依頼してください。

    この事前定義ロールには、ログベースのアラート ポリシーの通知チャンネルを作成するために必要な monitoring.notificationChannels.create 権限が含まれています。

SQL ベースのアラート ポリシーに対する権限

SQL ベースのアラート ポリシーは、ログエントリのグループのデータに対して実行された SQL クエリの結果を評価します。SQL ベースのアラート ポリシーの作成と管理に必要なロールについては、アラート ポリシーを使用して SQL クエリの結果をモニタリングする始める前にをご覧ください。

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 への完全アクセス権。

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