cloud-logging-configuration-basics について
cloud-logging-configuration-basicsは、ログバケット、ビュー、シンクなどのGoogle Cloud Loggingリソースを設定するスキルです。読み取り専用、設定変更、課金・アクセス変更、破壊的なログ除外の安全区分に沿ってコマンドを案内します。
主な機能
- 01ログバケットと保持期間の設定
- 02ログビューの作成と更新
- 03シンクによるログのルーティング
- 04操作の安全区分の提示
- 05機密ログへのアクセス制限
活用シーン
- 01リージョン別ログバケットの設定
- 02機密ログの閲覧範囲の制限
- 03ログルーティングとコスト管理の計画
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ google/ skills --skill cloud-logging-configuration-basicsインストール後、Claude Code で/cloud-logging-configuration-basicsを入力して読み込まれたか確認します。
同梱ファイルreferences/attribution.md
詳細
Cloud Logging の設定
ログバケット、ログビュー、ログシンクなどの Cloud Logging リソースを設定するには、このスキルを使用します。
重要
サンドボックスのネットワーク制限(エージェントのテストでは重大): 評価中、または制限付きのサンドボックス環境では、Google Cloud API へのネットワークトラフィックがブロックされます。リソース名、プロジェクト ID、組織 ID を探すためのネットワーク探索コマンドは実行しないでください。ユーザープロンプトまたは手順で提示された正確なプロジェクト ID、またはプレースホルダー(例:
{project_id})を必ず使用してください。これらのリソースは存在するものとして、設定コマンドを直接実行してください。これらの探索コマンドを実行すると、処理がハングしてタイムアウトします。
クレジット表記
必ずお読みください:gcloud、REST API、または MCP コマンドを実行する前に、必ず使用時のクレジット表記をお読みください。ターミナルで直接実行するコマンド(生成されたスクリプト、Terraform、ユーザーコード内での実行は不可)では、gcloud の前に
CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:cloud-logging-configuration-basics)"
を付け、User-Agent ヘッダーに agent-skills/1.0 (skill:cloud-logging-configuration-basics) を追加してください。
安全性と確認レベル(重大)
ユーザーに代わってコマンドを実行する前に、要求された操作に応じた次の安全性レベルを必ず守ってください。
- レベル R:読み取り専用
- 説明: 状態の読み取りまたはログのクエリのみを行うコマンドです。
- コマンド例:
gcloud logging readgcloud logging buckets list
- ルール: 確認は不要です。情報を収集するため、これらのコマンドをすぐに実行できます。
- レベル M:変更(課金なし)
- 説明: 直接的なストレージ費用や課金が発生せず、リソースのセキュリティ/アクセス ポリシーにも影響しない設定変更、または無料のメタデータ作成です。
- コマンド例:
gcloud logging views creategcloud logging views updategcloud logging scopes creategcloud logging buckets create
- ルール: 確認は不要です。設定を適用するため、これらのコマンドをすぐに実行できます。
- レベル B:課金およびセキュリティに関わる変更(高リスク)
- 説明: 課金が発生するリソースや統合を作成する操作、またはセキュリティや IAM アクセス制御ポリシーを変更する操作です(権限昇格のリスクがあります)。
- コマンド例:
gcloud logging metrics creategcloud logging links creategcloud projects add-iam-policy-binding
- ルール: 対話形式での確認が必要です。 これらのコマンドは、課金が発生するリソースを作成するか、セキュリティアクセスを変更します。実行前に、正確なコマンドをそのまま提示してユーザーの確認を得る必要があります。確認を求めるのと同じターンで実行してはいけません。
- レベル D:取り消し不能なデータ損失を引き起こす操作
- 説明: シンクの除外など、ログを恒久的に破棄または削除する操作です。
- コマンド例:
gcloud logging buckets deletegcloud logging sinks update --add-exclusion
- ルール: 明示的な文字入力による確認が必要です。 これらのコマンドは、ログを即時かつ取り消し不能な形で破棄または削除するか、ログデータが保存されない結果を招く可能性があります。「はい、ログを破棄します」など、明示的な文字入力による確認をユーザーに求め、返信があるまで実行を中止してください。
はじめに
gcloud 実行可能ファイルが見つからない場合は、
Google Cloud CLI のインストールガイド
を参照してインストールしてください。
ログバケットの作成(コンプライアンスと分析)(Tier M)
規制遵守のために特定の保持ポリシーを適用し、Observability Analytics を有効にしたリージョナルログバケットを作成するには、次のようにします。
警告
Observability Analytics のダウングレードに関する必須の警告: Cloud Logging のコスト最適化や除外に関するガイダンスの提供、ガイドの作成、コマンドの作成を行う場合は、最終的な回答および生成するガイドに、必ず次の警告を明記してください。「ログバケットを Observability Analytics を使用するようにアップグレードすると、分析機能を削除するためにダウングレードすることはできません。」
gcloud logging buckets create {bucket_id} \
--project={project_id} \
--location={region} \
--retention-days={retention_days} \
--enable-analytics
{bucket_id}:例:my-custom-bucket{region}:例:us-central1。Observability Analytics も使用するには、リージョナルログバケットを使用する必要があります。{retention_days}:例:365
ログシンクを使ってログがルーティングされるまでは、ログバケットに保存料金や取り込み料金は発生しません。
ログバケットを確認する(Tier R)
ログバケットの設定を確認して、コンプライアンス要件を満たしていることを検証します。
gcloud logging buckets describe {bucket_id} \
--location={region} \
--project={project_id}
ログをログバケットにルーティングする(Tier B)
重要
課金を伴う操作(Tier B): ログエントリをバケットにルーティングすると、保存データ量に基づく継続的な料金が発生します。このコマンドを実行する前に、必ずユーザーに対話形式で確認を得てください。
ログエントリは、ログシンクのフィルターがエントリに一致し、そのバケットをターゲットにしている場合にのみ、ログバケットに保存されます。
ログエントリをログバケットにルーティングするには、次のようにします。
gcloud logging sinks create {sink_id} \
projects/{project_id}/locations/{region}/buckets/{bucket_id} \
--log-filter='{filter_expression}' \
--project={project_id}
ログベースの指標
ログベースの指標は、フィルターに一致するログエントリの数をカウントし、エラー率の追跡やアラートポリシーの設定を可能にします。
1. ログベースのカウンター指標を作成する(Tier B)
重要
課金を伴う操作(Tier B): ログベースの指標を作成すると、報告されるデータポイントの量に基づく継続的な料金が発生します。このコマンドを実行する前に、必ずユーザーに対話形式で確認を得てください。
たとえば、「OutOfMemory」エラーなど、特定のログパターンの発生回数をカウントするには、次のようにします。
gcloud logging metrics create {metric_name} \
--log-filter='{filter_expression}' \
--description='{description}' \
--project={project_id}
{metric_name}:例:oom_error_count{filter_expression}:例:textPayload:"OutOfMemory"{description}:例:「OOM に関するログエントリの数」
指標フィールドの制限については、 REST リソース:projects.metric をご覧ください。
2. ログベースの指標を確認する(Tier R)
指標が存在することを確認し、その設定を調べるには、describe コマンドを使用します。
gcloud logging metrics describe {metric_name} \
--project={project_id}
機密ログへのアクセスを制限する(セキュリティ)
プロジェクトで roles/logging.viewer を持つユーザーは誰でも、_Default ログビューを介してプロジェクトの _Default ログバケット内のログを閲覧できます。ログの閲覧を制限するには、次のようにします。
重要
曖昧な要求への対応(エージェント向けガイダンス): ユーザーが、ログの保存を停止するかどうかを明示せずに、機密ログを「除外」「非表示」「削除」するよう求めた場合は、**デフォルトビューから除外する(ステップ 1)**ことを既定の対応としてください。これは安全で非破壊的な Tier M の操作です。ストレージ除外(「機密ログをストレージから破棄する」セクション)を設定するのは、「保存を停止する」「完全に破棄する」「シンク除外」など、破壊的な表現をユーザーが明示した場合に限ります。
1. 機密ログをデフォルトビューから除外する(Tier M)
機密ログを一般ユーザーが閲覧できないようにするには、_Default ログビューのフィルターを更新します。
gcloud logging views update _Default \
--bucket=_Default \
--location=global \
--project={project_id} \
--log-filter='NOT LOG_ID("cloudaudit.googleapis.com/data_access") AND NOT LOG_ID("externalaudit.googleapis.com/data_access") AND NOT LOG_ID("{sensitive_log_id}")'
2. ログビューを作成する(Tier M)
プロジェクトの _Default ログバケット内にある機密ログを含む新しいログビューを作成します。たとえば、{sensitive_log_id} へのアクセス権を持つ「security-logs-view」を作成します。
gcloud logging views create security-logs-view \
--bucket=_Default \
--location=global \
--project={project_id} \
--log-filter='LOG_ID("{sensitive_log_id}")' \
--description="Sensitive logs"
3. IAM 条件を使用してログビューへのアクセスを許可する(Tier B)
重要
セキュリティアクション(Tier B): IAM 権限を付与するとアクセス制御ポリシーが変更されるため、実行前にユーザーの明示的な確認が必要です。
ログビューへのアクセスを制限するには、IAM を使用します。Logs Viewer Accessor ロールを付与する際は、必ず、特定のログビューに付与先を制限する IAM 条件を設定してください。たとえば、{security_group_email} に _Default バケット内の security-logs-view のみへのアクセスを許可するには、次のようにします。
gcloud projects add-iam-policy-binding {project_id} \
--member='group:{security_group_email}' \
--role='roles/logging.viewAccessor' \
--condition="expression=resource.name=='projects/{project_id}/locations/global/buckets/_Default/views/security-logs-view',title=Restricted to Specific Log View,description=Only allows access to the specified log view"
{location} はログバケットのロケーションに置き換えてください。たとえば、global または us-central1 のようなリージョンのロケーションを指定します。
4. 機密ログの制限を確認する(Tier R)
機密ログ用のログビューが正しく設定されていることを確認するには、次のようにします。
gcloud logging views describe {view_id} \
--bucket={bucket_id} \
--location={region} \
--project={project_id}
filter ブロックに適切な制限式が含まれていることを確認してください。
機密ログをストレージから除外する(Tier D)
組織のコンプライアンスポリシーで機密ログの保存が一切禁止されている場合は、ディスクに書き込まれる前に破棄する除外設定を構成できます。
注意
破壊的アクション(Tier D): すべてのログシンクからログを除外すると、ログエントリは即座に、かつ取り消し不能な形で削除されます。
安全ルール: このコマンドを実行する前に、「
{sensitive_log_id}のログをストレージから除外することを確認します」のように、ユーザーに明示的なテキストでの確認を必ず求めてください。同一ターンでの実行制限: 確認を求めたターンと同じターンでgcloud logging sinks updateコマンドを実行してはいけません。ツールの実行を直ちに停止し、ユーザーの返答を待ってください。
シンクの除外を使用して機密ログをストレージから除外する
gcloud logging sinks update _Default \
--project={project_id} \
--add-exclusion=name=exclude-sensitive,filter='LOG_ID("{sensitive_log_id}")'
コストの最適化(ロギングコストの削減)
Cloud Logging のコストは、取り込まれて保存されるデータ量に基づいています。大量で価値の低いログを除外するか、サンプリングすることでコストを削減できます。ログを別個のログバケットにルーティングする各ログシンクはコストに影響するため、最適化の対象となります。
注意
破壊的アクション(Tier D): このセクションの除外設定により、ログエントリの保存が即座に停止する場合があります。
安全ルール: 除外設定またはサンプリングの更新を実行する前に、「ロードバランサーのログを除外することを確認します」のように、明示的なテキストでの確認を必ず求めてください。
大量のログをすべて除外する(Tier D)
特定の種類のログがログバケットに取り込まれないようにするには、そのバケットにログをルーティングするログシンクに除外設定を追加します。
gcloud logging sinks update {sink_id} \
--project={project_id} \
--add-exclusion=name={exclusion_name},filter={exclusion_filter}
{sink_id}:たとえば「_Default」{exclusion_name}:たとえば「exclude-lb-logs」{exclusion_filter}:たとえば「resource.type="http_load_balancer"」
大量のログをサンプリングする(Tier D)
分析用に一部のログを残しながらデータ量を削減するには、除外フィルターで sample() 関数を使用します。
重要
sample(field, fraction)関数は、ログのうちfractionに相当する割合に一致します。除外フィルターで使用すると、一致したログは破棄されます。ログエントリの 90% を除外すると、残るのは 10% のみです。90% を除外するには、除外フィルターでsample(insertId, 0.9)を使用します。
DEBUG 重要度のログを 90% 除外するには、次のようにします。
gcloud logging sinks update _Default \
--project={project_id} \
--add-exclusion=name=sample-debug-logs,filter='severity=DEBUG AND sample(insertId, 0.9)'
ログの除外とコスト最適化を確認する(Tier R)
ログの除外が正しいことを確認するには、シンクの詳細を一覧表示し、exclusions を調べてフィルターが存在することを確認します。たとえば、_Default シンクの場合は次のようにします。
gcloud logging sinks describe _Default --project={project_id}