May 22, 2021 [ Web ]
■Cloud Loggingで調べる
ロ繧? エクスプローラを使用したサンプルクエ繝? | Cloud Logging | Google CloudLogging のクエリ鐔??語 | Google Cloudとりあえず何かを出して、クリックして臀??要な鐔??素をHideしてい縺?といい
窶?GCPロギングは最螟?10分遅延縺?SLA、logs_based_metrics_error_count にログがでるらしい
/// 誰が権限を変更したか
protoPayload.request.policy.bindings.role="organizations/123456/roles/unco"
protoPayload.methodName : "Setlam"
--操作者
--protoPayload.authenticationInfo.principalEmail="kuso@dayo.com"
変更の詳細は臀??記当たりに出る(デルタは藹??驥?の諢?味と思繧?れる)
protoPayload.metadata.datasetChange.bidingDeltas
protoPayload.serviceData.policybindingDeltas
/// BQテーブル、ビュー臀??成
protoPayload.methodName="google.cloud.bigquery.v2.TableServiceInsertTable"
/// GCE縺?Pyhon等のロギングを見る
resource.labels.instance_id="12234567898"
severity=WARNING
/// IAPのアクセスロ繧?
監査ログからidentity-で探しログを有効化する(似たような名前があるので注意)
下記縺?Log exploreで觸??索するが、大臀??のアクセス時刻からリソースを類推して右クリックで軆??る
logName="project/prjxxxxxx/logs/cloudaudit.googleapis.com%2Fdata_access"
resource.type="gce_backend_service"
/// BQの利用先
protoPayload.resourceName="projects/prjxxxxxxxx/datasets/dsxxxxxxxxx/tables/tblxxxxx
/// Scheduled queryの利用状觸??
resource.type="bigquery_dts_config"
/// コネクティッドシート縺?BQアクセスするスプシを調べるLoggingのクエ繝?
connected_sheets
bigquery.Jobs.create
bigquery.googleapis.com
docId
--データセット名
dataset ni_access_sarerudayo
--除藹??するにはマイナスを頭に臀??ける
-protoPayload.authenticationInfo.principal Email="washi@jyaroga.com"
■組織のログを一つのプロジェクトにまとめてお縺?
組織縺?Log routerで蜈?Syncを設藹??してお縺?、BQに吐き出す
select * from prj-log.org_audit_log.activity
where protopayload_auditlog.methodName='google.iam.admin.v1.SetIAMPolicy' or protopayload_auditlog.methodName='google.iam.IAMPolicy.SetIAMPolicy'
# Log exploreと藹??し違う
■BQインフォメーションスキーマ information schemaで調べる
データセットレベ繝?
SELECT * FROM test_dataset.INFORMATION_SCHEMA.TABLES
SELECT * FROM test_dataset.INFORMATION_SCHEMA.COLUMNS
SELECT * FROM test_dataset.INFORMATION_SCHEMA.TABLE_CONSTRAINTS
SELECT * FROM test_dataset.INFORMATION_SCHEMA.PARTITIONS
プロジェクトレベ繝?
SELECT * FROM INFORMATION_SCHEMA.SCHEMATA
SELECT * FROM INFORMATION_SCHEMA.SCHEMATA_OPTIONS
リージョンレベ繝? region-us, region-eu, region-asia-northeasti等
SELECT * FROM region-us.INFORMATION_SCHEMA.JOBS_BY_PROJECT
SELECT * FROM region-us.INFORMATION_SCHEMA.JOBS_BY_USER
SELECT * FROM region-us.INFORMATION_SCHEMA.TABLE_STORAGE
SELECT * FROM region-us.INFORMATION_SCHEMA.TABLE_STORAGE_TIMELINE
組織レベ繝?
SELECT * FROM region-us.INFORMATION_SCHEMA.JOBS_BY_ORGANIZATION
SELECT * FROM region-us.INFORMATION_SCHEMA.TABLE_STORAGE_BY_ORGANIZATION
SELECT * FROM region-us.INFORMATION_SCHEMATABLE STORAGE_USAGE_TIMELINE_BY_ORGANIZATION
違うリージョンも対藹??させたいが、違うリージョン縺?UNIONができない Python等で個別藹??行し一時テーブル軆??で軆??合する必要がある、下記不藹??
with u as(
SELECT * FROM monotaro-credit-data.region-asia-northeast1.INFORMATION_SCHEMA.SCHEMATA_OPTIONS
UNION ALL
SELECT * FROM monotaro-credit-data.region-asia-northeast1.INFORMATION_SCHEMA.SCHEMATA_OPTIONS
)
SELECT * FROM u WHERE option_name = 'storage_billing_model'
/// 組織のジョブ:
SELECT DISTINCT
creation_time,
information_schema.project_id,
user_email,
job_id,
cache_hit,
FROM
`region-us`.INFORMATION SCHEMA.JOBS BY ORGANIZATION AS Information schema,
UNNEST (referenced_tables) AS referenced_table
WHERE
--データコネクタからジョブ実行だ縺? sheets_dataconnector が Prefix
job_id like "%sheets_%"
--藹??照先+
AND referenced table.project_id = "pri_xxx"
AND referenced table.dataset_Id = "ds_xxx"
AND referenced table.table_id LIKE "tbl_xxx%"
AND DATE (creation_time) BETWEEN "2022-06-01" AND "2023-01-30"
AND error_result IS NULL
/// プロジェクトのジョブ:
SELECT * FROM `pri_xxx.region-us.INFORMATION SCHEMA.JOBS`
,UNNEST (referenced_tables) AS referenced table
WHERE creation_time BETWEEN TIMESTAMP_SUB (CURRENT_TIMESTAMP(). INTERVAL 1 DAY)
AND referenced_table.dataset_id = 'ds_xxx'
--データコネクタからジョブを実行している場合 prefix縺?sheets_dataconnector、他に縺?scheduled_query等
AND job_id like "%sheets_%"
/// ラベ繝?:
SELECT * FROM pri xxx.region-us. INFORMATION SCHEMA.JOBS
,UNNEST (referenced_tables) AS referenced_table
,UNNEST (labels) AS label
WHERE creation_time BETWEEN TIMESTAMP_SUB (CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP()
AND referenced_table.dataset_id = 'ds xxx
--データコネクタからジョブを実行している場合 labels connected_sheetsが含まれる
AND label.value = 'connected_sheets'
/// ジョブBYユー繧?
SELECT * FROM `pri_xxx-region-us.INFORMATION SCHEMA.JOBS_BY_USER`
,UNNEST (referenced_tables) AS referenced_table
,UNNEST (labels) AS label
WHERE creation_time BETWEEN TIMESTAMP_SUB (CURRENT_TIMESTAMP(). INTERVAL 1 DAY) AND CURRENT_TIMESTAMP()
AND referenced_table.dataset_id = 'ds_xxx'
AND label.value = 'connected_sheets'
■Asset inventoryでアセット情報を調べる
コンソールでもGUI縺?Asset inventoryが見れるがコマンドでも情報藹??得できる
gcloud asset | Google Cloud CLI Documentationリソースの觸??索のサンプ繝? | Cloud Asset Inventory のドキュメント | Google Cloudサポートされているアセットタイプ | Cloud Asset Inventory のドキュメント | Google Cloud例え縺?GKE使用しているアセット情報・??GKE cluster)
gcloud asset search-all-resources \
--scope=organizations/組織の数藹??ID \
--asset-types=container.googleapis.com/Cluster
■監査ログのメソッド種饅??
笞?SetIAMPolicy (これはプロジェクトレベル縺?IAM設藹??が含まれ重要、GAS逕?Project用軆??も含まれていて基本となる)
笞?google.iam.admin.v1.SetIAMPolicy (リソースレベル縺?IAM設藹??、BQデータセットやテーブルやPubsubトピックやサブスク軆??が対象)
笞?google.iam.v1.IAMPolicy.Setlam Policy (これはリソースに対するSAの権限調整ではな縺?、SAに対する処理縺?impersonate系軆??縺?SetIamが含まれる)
例え縺?BQの觸??知だとプロジェクトレベ繝?IAM (SetIAMPolicy:各種権限付荳?) とリソースレベル縺? IAM (google.iam.admin.v1.SetIAMPolicy: BQdataset/tablet pubsub Topic/Subsc等への権限付荳?が含まれる)が必須となる
/// メソッドからの調査方觸??
目ぼしいメソッドでしばりログをBQ抽蜃?
ローカル縺?JSONをDL、開いてクリップボードにコピ繝?
スプシにコピペ、条件付き書藹??縺?nullや先頭鐔??に色をつけて目觸??する
/// Set Iam系のメソッド(監査ログによる検知で縺?Set iamが誰がどこに鐔??ったか見ればいいのでは・??
メソッドの種類縺?1000以臀??あるが、SetIam系は臀??記縺?20辺りから
SetIAMPolicy, google.iam.admin.v1.SetIAMPolicy,
google.iam.v1.IAMPolicy.SetIamPolicy, beta.compute.instances.setIamPolicy beta.compute.subnetworks.setIamPolicy, google.cloud.functions.v1.CloudFunctionsService.SetIamPolicy, google.cloud.iap.v1.IdentityAwareProxyAdminService.SetIamPolicy, google.cloud.orgpolicy.v2.OrgPolicy.CreatePolicy, google.cloud.orgpolicy.v2.OrgPolicy.DeletePolicy, google.cloud.run.v1.Services.SetIamPolicy, google.cloud.run.v2.Services.SetIamPolicy, google.cloud.secretmanager.v1.SecretManagerService.SetIamPolicy, google.iam.admin.v1.CreateServiceAccountKey, google.iam.v1.WorkloadIdentityPools.CreateWorkloadIdentityPool, google.iam.v1.WorkloadIdentityPools.CreateWorkloadIdentity PoolProvider, google.iam.v1.WorkloadIdentityPools. UpdateWorkloadIdentityPoolProvider, storage.setIamPermissions
■BQ権限付荳?の履豁?
/// Logging縺?SetIamPolicysかbigqueryあたり
WITH source AS(
SELECT
*
FROM prj-logging.prj_organization_audit_log_v2.cloudaudit_googleapis_com_activity_
WHERE _TABLE_SUFFIX BETWEEN "20250805" AND 20250818"
)
SELECT
ROW NUMBER() OVER (ORDER BY timestamp) as id,
*
FROM source
WHERE
(protopayload_auditlog.methodName LIKE 'SetIamPolicys
OR protopayload_auditlog.methodName LIKE 'bigquery%')
AND protopayload_auditlog.methodName NOT LIKE '%google.cloud.bigquery.v2.TableService.PatchTablet%'
AND protopayload_auditlog.methodName NOT LIKE '%google.cloud.bigquery.v2.JobService.InsertJobs%'
AND protopayload_auditlog.methodName NOT LIKE '%google.cloud.bigquery.v2.TableService.InsertTables%'
AND protopayload_auditlog.methodName NOT LIKE '%google.cloud.bigquery.v2.TableService.DeleteTable%'
AND resource.labels.project_id LIKE '%target_project%'
AND resource.labels.dataset id LIKE '%target_dataset%'
///Grant文での臀??荳?履歴縺?INFORMATION SCHEMAでしか出ない、しかも各プロジェクト単位
SELECT
*
FROM `region-US`.INFORMATION_SCHEMA.JOBS
WHERE query LIKE '%GRANT%'
AND query LIKE '%target _dataset_etc%'
AND EXTRACT(DAY FROM creation_time) = 19
AND EXTRACT(MONTH FROM creation time) = 7
AND EXTRACT (YEAR FROM creation_time) = 2021
Posted by funa : 12:00 AM