/// BANGBOO BLOG ///

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31


May 22, 2021 List
GCP Hands Off on May 22, 2021 12:00 AM
GCP ログ・アセット調譟? Logging/Bigquery information schema/Asset inventory on May 22, 2021 12:00 AM

May 22, 2021

GCP Hands Off
データの種類でアーキテクチャを決める?
 コンテナはオーバヘッドが少な縺?VM/GCEに觸??べ軽量高速、スケールアップ/ダウンに優れている
GCS
 IAPを使うと画蜒?アクセスにも認証が使えそう>LBのバックエンドで縺?IAPが使えない
  GCE縺?GCSマウントする縺?GCE縺?IAPとしてイケる、gcsfuse縺?OSS縺?Linux上のドライブになる
   CensOS6.8縺?gcsfuseをインストールし縺?GCSをマウント - Qiita
   GCS Fuseを使ってみる - Qiita
 リテンションで臀??護期間を設藹??したり、ライフサイクルで削除時期を設藹??したり
 世代管理ができたり

■制軆??が重要そうでまとめて鐔??載したい
 IAP縺?CDNの両立はできない
 LB縺?backend縺?gcsを設藹??したとき縺?IAPが使えない
 GKE縺?ingress縺?LBに臀??のアプリのバックエンドを同居できない(GKEが上書き自動更新するから、ドメイン別になる)
 IAP縺?GCE縺?OSログインする場合縺?API有効やIAPの設定、OSlogin系の権限が必要(Owner付荳?が楽・??
 ネットにでるのがapt updateのみでもNAT/Routerが要る

■VPCネットワー繧?
default VPCネットワークを削除・??セキュリティが緩いため)
vpcネットワーク臀??成 サブネットIPレン繧? 10.27.0.0/16-192.168.27.0/24 等縺?
 private google accessはオンでいいのか?on
 FWはひとまずなしで、だが大臀??ポート縺?22,80,443,8080?
別途firewallで臀??記を設藹??(ちなみにリクエスト側を許可すればよ縺?、レスポンス側は自動)
bangboo-fw-allow-iap-ssh IAPから縺?SSHを許藹?? 35.235.240.0/20 tcp:22
 レンジはマニュア繝? https://cloud.google.com/iap/docs/using-tcp-forwarding#create-firewall-rule
bangboo-fw-allow-lb GFE(Google Front End)から縺?HTTPを許藹?? 35.191.0.0/16,130.211.0.0/22 tcp:qll
 レンジはマニュア繝? https://cloud.google.com/load-balancing/docs/health-checks#fw-rule
Cloud NAT(Router)を設藹??
https://cloud-ace.jp/column/detail260/
https://www.topgate.co.jp/google-cloud-network-security

■繝?ンズオ繝?(GAE:php+FW+IAP)→GAEよりCloud runが良い
IAP縺?GAEが簡単そう(アクセスするの縺?Googleの鐔??証プロンプトを出す)
 自前DNS縺?TXTレコードを設藹??>確鐔??>IPが表示されAレコードやCnameも登録でき、SSL証譏?書も使えるようだ
  しかし無縺?てもgoogle觸??供のドメインが使え不要 DNS(TXTレコード)による所有権の確認 - Google Search Consoleの使い譁? (howtonote.jp)
 Winローカル縺?GCP SDKインスコし下記縺?app.yaml縺?index.phpを置い縺?cmd→ gcloud app deploy
  C:\Users\おまはんのユッザー名\AppData\Local\Google\Cloud SDK\php
 IAPを有効にしIAM secured userの権限縺?IAM縺?GAE viewer権限付荳?縺?@gmail.comユーザ軆??は鐔??れる
  外部ドメインを使うとき縺?IdentityPlatform設藹??が必要そう
止めるに縺?instanceを削除する(再度アクセス縺?instanceが自動作成される)、IngressをInternal onlyにすると臀??応止まるか、楽だ

■繝?ンズオ繝?(Marketplace: GCE+FW->Wordpress)
デフォルト:エフェメラル・??インターネット公開なし(LB/IAP/NAT/Armor付けてから公開しようか縺?)
VMインスタンス ネットワークタ繧?wordpress-1-deployment
FW:wordpress-allow-external ターゲットタ繧?wordpress-1-deployment、ソー繧?0.0.0.0/0 tcp0-65535
スナップショットのラベル縺?KVS縺? app : wordpress とか env : testとか
DBはステートフ繝?MIG-永軆??ボリュームにできる?

■繝?ンズオ繝?(GCE+nginx+FW+LB+IAP+Cloud NAT+Cloud armor)
笳?cloud shell terminal
gcloud compute instances list インスタンス臀??隕?
笳?コンソー繝?
デフォルトVPC NWを削髯? > VPC NW作成 > サブネットIPレン繧? 10.27.0.0/16-192.168.27.0/24等縺?
GCE VMを作成(Instance scheduleで起動-停止時間が入れられる、テンプレやグループに使えない?)
 インスタンスを作って設定しスナップショットからOSイメージを作り驥?産すればいいが
  instance template作成し縺?instance group作成してもいい。IGが中々できないならIGを開きエラーメッセージを見るこ縺?
 OS縺?ubuntu、API access scopeに縺?"Allow full access to all Cloud APis"縺?
  外部からアクセスさせずLB経由だけにしたい→外驛?IPがephemeralで止められない→作成時縺?network>external ipをnoneで臀??成すること→
  外へでれな縺?なるの縺?gcloudコマンドが通らない→CloudNAT(Router)も設藹??
 インスタンステンプレートのメタデー繧?
  起動スクリプトをファイル化できる
   キ繝?startup-script or shutdown-script、値にパ繧?
   キ繝?startup-script-url or shutdown-script-url、値縺?GCS縺?URL
  OSLoginをIAPにし縺?VM上の独閾?ID管理PW管理不要縺?
   便利觸??能「OS Login」を使っ縺?IAMでインスタンスへ縺?SSH接続制限をする | apps-gcp.com
   キ繝?enable-oslogin、値縺?TRUE、IAMで権限(compute OSLogin/IAP tunnel/gce系・??、IAP API有蜉?
    権限もIAMで管理されるの縺?LINUX上縺?755等も不要なようだ(computeinstanceAdmin.v1を付けとく)
  MIG縺?LBと同じヘルスチェックを使うことは非推螂?
   LBはより短い菴?い閾値にせよ
SSHの項目からview gcloud commandで好き縺?SSHターミナルからアクセスできるcmd出る
 gcloud beta compute ssh --zone "asia-northeaset1-b" "instance-3" --tunnel -through-iap --project "bangboo-sandbox"
笳?SSHターミナ繝?
gcloud init インス繧?
sudo apt-get install nginx Webサーバインスコ、ブラウザで内驛?IPでアクセスしたかったが不可だった
sudo service nginx stop 止める、動かすの縺? sudo service nginx start
ps プロセス鐔??る
curl http://10.117.0.19 nginxが動いているか確鐔??
cat /var/log/nginx/access.log ログ確認
笳?nginx
/etc/nginxにあるconf系が設藹??ファイ繝?
sites-enabled/default だけがあり cat default しdocument root縺?/var/www/htmlと判譏?
 ここへ移動 cd /var/www/html
sudo cp index.nginx-debian.html index.html コピ繝?
sudo nano index.html で編集
設藹??変更藹??縺? sudo service nginx restart
笳?コンソー繝?
GCEスナップショット作成→OSイメージ臀??成→テンプレ臀??成→Healthcheck作成→MIG設藹??
 OSイメージはオンプレから作ったものとかHashi corp縺?Packerで臀??るとかも
FW作成
 gceに藹??驛?IPがあればアクセス試す
 fw-bangboo-http-ingress-allow ingress - "all instances" - 0.0.0.0/0 デフォルトで許可・??ingressが必要
  https縺?IPではダメ、ドメイ繝?/証譏?書が要るか知らんがhttpでは藹??驛?IPあればアクセスできる
   GCP縺?IPを自前縺?DNS縺?Aレコードに設定しとけば、、
   ウェブとメールを別々のサーバで運営したい?・・・それ、ゾーン設定で出来ます! | さ縺?らのナレッ繧? (sakura.ad.jp)
   ドメイン所有縺?DNS縺?TXTレコード設藹??ができるようだが、、、
   ウェブマスタ繝? セントラ繝? (google.com)
  使うときfw-bangboo-all-ingress-allow ingress - "all instances" - 192.168.1.255/32 に設定?
 外驛?IP(普通LBとなるか)への制御縺?Cloud armorの縺?deny allowし縺?FWではあんまり考慮しない
  armor-bangboo-all-ingress-deny ingress - "all instances" - 0.0.0.0/0 で設定完了まで止めと縺?
LB作成
 VMインスタンスグループ(子インスタンス・??作成(上で臀??ってなければ・??
  インスタンステンプレート作成
 LBヘルスチェッ繧?(閾蛟?)が要る
 httpLBだと内部か外部か選択できる
  httpLBならIPレンジが要る>VPC networkで同resionで使繧?れていないものを設藹??
  例10.55.20.0/22なら10.55.23.255まで使繧?れているの縺?10.55.25から使うとか
  NW計算 ネットワーク鐔??算ツール繝?CIDR計算ツー繝? | Softel labs
   VPCのサブネット設藹??は拡大できるが縮藹??ができない→蟆?さめにしておきたいが、k8s縺?IP沢山使うので大きめ
   プライベートサービスコネクト(VPC間を繋ぐ)を使うと逍?結合でつなげられるが
 backend縺?httpで、healthcheck縺?tcp80縺?proxy無し
IAP作成
 外驛? HTTPS ロードバランサの設定  |  Identity-Aware Proxy  |  Google Cloud
 IAP(https)を見る縺?FWで開けて縺?れの指定がある
  fw-bangboo-lb-gce-allow Source IP range:072.72.1.19/22, 69.11.8.0/16 tcp:80
 IAPを見る縺?LBを設藹??する縺?FW縺?LBに対するものだけになるので臀??要との指示がある
  fw-bangboo-http-ingress-allow 0.0.0.0/0(削除・??
  下記はインスタンス臀??成時の許可設定分で臀??要
   default-allow-internal 69.11.0.0/9(削除・?? default-allow-http 0.0.0.0/0(削除・??
   これも不要?default-allow-http 0.0.0.0/0 tcp:443(削除・??default-allow-icmp 0.0.0.0/0(削除・??
   default-allow-rdp 0.0.0.0/0 tcp:3389(削除・??default-allow-ssh 0.0.0.0/0 tcp:22(削除・??
 IAP(ssh/tcp)を見る縺?FWで開けて縺?れの指定があるが開ける縺?httpsに穴ができると出るし止め
  fw-bangboo-lb-iap-tcp-allow  Source IP range:072.72.2.0/20 tcp:all(sshターミナルを使う時だけFW開ける、通蟶?priority9000)
 IAPをONだけでは饅??目で、FWで調整し縺?GCEに直接アクセスじゃな縺?LBでやっ縺?IAPが動縺?みたい
  IAPの設定縺?http://IPでアクセスする縺?https://に転送されたのだが(IAPがない場合は臀??記設藹??をするようだ)
  HTTP(S) 負荷分散用縺? HTTP から HTTPS へのリダイレクトの設定  |  Google Cloud
事前縺?gce.bangoo.com -> 117.072.19.255 (LB縺?IP縺?ephemeralをstaticに藹??譖?)を自前縺?DNSに設定
 (DNS縺?TTLを前日縺?3600から300に藹??更しておいたり、DNS藹??映期間があったり)
 LBのフロントエンドでマネージド証譏?書を設藹??(ssl-policyを緩めで設定したが必要?)
  オレオレ証譏?書は・??
 LBフロントエンド縺?httpsでもバックエンド縺?http縺?
 IAP-secured web app userロールを@gmail.comユーザに臀??荳?
 IAP縺?CDNの両立はできない
 LB縺?backend縺?gcsを設藹??したとき縺?IAPが使えない→ネット公開にし縺?VPN SCで制御?(元々ネットに面しているが権限がないだけ)、GCE縺?GCSをマウント?
FW調謨?
 0.0.0.0/0 all deny priority2000>LB関騾? tcp80 allow 1000/IAP関騾? tcp allow 1000>(使用拠点のソー繧?IP allow 500)
  使用拠点縺?IP縺?LBを使うならArmorで設定すれ縺?FWへの設定不要
 GCEの藹??驛?IPを止める:インスタンステンプレート作成時に藹??驛?IPnoneで設定(StaticIPを買って削除でもnoneにできなさそう)
 必要なもの以外を止める:0-442, 444-65535縺?443のみ許可は饅??目か?
 Connectivity testでテストがIPアドレス軆??でできる(設藹??変更から実際の藹??映に時間が觸??かるものがあるような觸??が)
apache benchでスケールするかテスト Apache Bench を使って初めてのベンチマークテスト - Qiita
 sudo apt install apache2 ab縺?apachに含まれるのでどれか縺?VMにインス繧?
 ab -n 1000 -c 100 https://gcp.bangboo.com/ でインスタンスが増えることが確鐔??できる
Cloud armor設藹??
 DDoS等を防ぐの縺?Onでいいのでは、adaptive protectionで優先度臀??いdeny設藹??
 外驛?IP縺?deny allowはこれでやる(web app firewallなので縺?)、log4J対軆??等もここで弾縺?
  一時止めるとき縺?0.0.0.0/0 bad gateway等分かり易いエラーで止めるのが良いかも
 IAPが前、Cloud armorが後ろ、そし縺?LBとか
Access context manager設藹??(+VPC service control)
 Organizationの設定が必要(≒Cloud identityでドメイン藹??要?)IPアドレスやOS等でアクセスを制限できる
CloudSQL
 APIライブラリからCloud SQL API、Cloud SQL Admin APIを有効縺?
 平文通信→暗号化CloudSQL proxyバイナリをVMインスコ、ディレクトリ切る
  proxyとアプリ設定を合繧?せる、proxyサービス起動
 SQL用縺?svac作成 lemp-gce-sql-01@
  ログインユーザをこ縺?svac縺?owner設藹??
  ロール臀??荳? Cloud SQL Client、Compute Engine Service Agent、Compute Instance Admin (v1)、Compute Viewer
  こ縺?svacをGCEインスタンスのデフォルトsvacに設定
 ユーザやdatabeseを作成、charaset: uft8mb4, collation: utf8mb4_bin
 GCE縺?SQL proxyの設定(SSH開く)
  gcloud auth list ログインユーザがsvacか確鐔??
  mkdir $HOME/download
  cd $HOME/download
  wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64
  sudo mv cloud_sql_proxy.linux.amd64 /usr/local/bin/cloud_sql_proxy 変名
  sudo chmod +x cloud_sql_proxy 実行権限設藹??
  sudo mkdir /cloudsqlproxy ソケットになるディレクトリ臀??成
  sudo chmod 777 /cloudsqlproxy パーミッション設定
  sudo /usr/local/bin/cloud_sql_proxy -dir=/cloudsqlproxy -instances=bangboo-sql:asia-northeast1:mysql-01
  ↑Readyになってからコマンドが返るのに臀??分か觸??かる
  もう一縺?SSHを開縺?と臀??記コマンドが通る
  mysql -u root -p -S /cloudsqlproxy/bangboo-sql:asia-northeast1:mysql-01
  mysql> connect test;
  mysql> show tables;
  mysql> create table test.test (id int, name varchar(10));
  mysql> insert into test (id, name) values (1, 'baka');
  mysql> select * from test;
 SQL proxyサービス化 Cloud SQL Proxy (TCP Socket)を systemd で起動させる - Qiita
  sudo vi /etc/systemd/system/cloud_sql_proxy.service
===== 
[Unit]
Description = Cloud SQL Proxy Daemon
After = network.target
 
[Service]
ExecStart = /usr/local/bin/cloud_sql_proxy -dir=/cloudsqlproxy -instances=bangboo-sql:asia-northeast1:mysql-01
ExecStop = /bin/kill ${MAINPID}
ExecReload = /bin/kill -HUP ${MAINPID}
Restart = always
Type = simple
LimitNOFILE=65536
 
[Install]
WantedBy = multi-user.target
=====
  sudo systemctl start cloud_sql_proxy 起動だが自動設藹??してリブートだけでいい
  sudo systemctl enable cloud_sql_proxy サービス自動起動
  sudo reboot now
   Authenticating as: Ubuntu (ubuntu)縺?PWを求められる場合
    sudo su - 縺?rootに切り替えてからcmd sudo su とかしてる人はだいたいおっさん (zenn.dev)
  systemctl list-units --type=service サービスの臀??覧確認
  systemctl list-units --all --type=service 全サービスの臀??覧確認
  service サービス名 status
  service サービス名 start
FW/Armor縺?Ingress全止め or VMインスタンス停止、LB停豁?

■GCE MIGローリング更譁?
dev-stg環藹??縺?instance templateを作っ縺?prodでテンプレ置き置き觸??える感じ?
  シング繝?VM縺?stg > OSイメー繧? > テンプレ化 > prod逕?MIGローリングアップデート設藹??
 MIGは藹??々に更新をいい塩觸??で鐔??う必要があるためローリング更新する
 ロールバックはテンプレートを元に戻す設藹??をする、コミットは新しいテンプレートを設藹??するだけ
 カナリア縺?2nd テンプレート追加項目でターゲットサイズ縺?3台とか10%とか設藹??するだけ
ローリング更新・??Update VMS)
 インスタンスグループを開い縺?Update VMSに進む
 a)Proactiveは最大サー繧?(一時追加のインスタンス謨?)、とオフライン臀??限を指定
 b)日和見Opportunisticはオートスケールの藹??減時に新インスタンステンプレートに切替る(どうでもいいパッチ等)
 サージ・??追加台数、オフライン・??停止台数、
 オフライン台数を大き縺?すると臀??気に藹??映できる
 それに合繧?せて鐔??積もりサージを大き縺?する(料金は觸??かる)
  最大サージを 1、オフライン臀??限を 1 とすると、新しい VM が 1 ずつ発起動して、古い VM が 1 台ずつ落とされて鐔??きます。
  最大サージを 3、オフライン臀??限を 2とすると、新しい VM が 3 発起動して、古い VM が 2 台落とされ、1台落とされる。
インスタンスの再起動/置觸??(Restart/Replace VMS)
 インスタンスグループを開い縺?Restart/Replace VMSに進むとローリングでインスタンスの再起動と置觸??ができる
 a)再起動:オフライン臀??限のみを指定し縺? VM のテンプレートを切り替え
 b)置觸??:最大サージを指定することができるようになるだけ

■インスタンススケジュー繝?
元来のサービスアカウント縺?compute.instanceAdmin.v1が必要(コンソールでの設定時にエラーが出るので藹??考にして権限付荳?)
VMは臀??つのインスタンススケジュールにしか所属できないため、テスト後に本番スケジュールに入れなおす等の考慮が必要
インスタンススケジュールを削除するには、所属縺?VMを外す必要がある
最螟?15分遅れる場合がある。起動時間もその臀??加算する必要があるかも

■Monitoring
VM縺?Opsエージェント入れる
gcloud components update これ時間觸??かるし不要で縺?
https://cloud.google.com/stackdriver/docs/set-permissions.sh?hl=ja をダウンロード
terminalにアップロードし実行 bash set-permissions.sh --project=bangboo-ome
インスタン繧? ラベルで設定する GCEにラベ繝?env=test,app=omeを設藹??
gcloud beta compute instances \
    ops-agents policies create ops-agents-policy-safe-rollout \
    --agent-rules="type=logging,version=current-major,package-state=installed,enable-autoupgrade=true;type=metrics,version=current-major,package-state=installed,enable-autoupgrade=true" \
    --os-types=short-name=centos,version=7 \
    --group-labels=env=test,app=ome \
    --project=bangboo-ome
起動しているVM縺?OS Config エージェントがインストールされているかを確鐔??
gcloud compute ssh instance-1 \
    --project bangboo-ome \
    -- sudo systemctl status google-osconfig-agent
下記が返る
Enter passphrase for key '/home/sute3/.ssh/google_compute_engine': 
 google-osconfig-agent.service - Google OSConfig Agent
   Loaded: loaded (/lib/systemd/system/google-osconfig-agent.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2022-04-11 18:34:26 UTC; 8min ago
 Main PID: 1279 (google_osconfig)
    Tasks: 11 (limit: 1116)
   CGroup: /system.slice/google-osconfig-agent.service
           └─1279 /usr/bin/google_osconfig_agent
Numpyが要る場合は臀??記でインス繧?
sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose
ダッシュボード作成
アラート作成
複数縺? Cloud プロジェクトの指標を表示する  |  Cloud Monitoring  |  Google Cloud
 エージェントのログのモニタリング縺?NW構成に関繧?らず集約できる(GCP環藹??に置かれておりGCP設藹??のみ縺?OKだから)
Yaml設藹??を新鐔??で臀??ればオーバーライドされる
sudo vim /etc/google-cloud-ops-agent/config.yaml
------------------
logging:
  receivers:
    laravel_log:
      type: files
      include_paths:
        - /var/www/html/laravel/storage/logs/*.log

  service:
    pipelines:
      custom_pipeline:
        receivers: [laravel_log]
-----------------
# 藹??映
sudo service google-cloud-ops-agent restart


sute16 asia-northeast1-b 2021/7/24(91日縺?33000yen-10/20位ま縺?)
sute3 asia-northeast1-b 2022/2/20(91日縺?34500yen-5/20位ま縺?)
Instance groupはどう止める?>LB削除・??LBのバックエンド削除・??Instance group削髯?
 LB縺?instance groupがいる、IAP縺?GCEの場合縺?LB縺?SSL証譏?書鐔??る(ドメインもGlobalIPも要る)
  DNS縺?Aレコードを登録しLB設藹??すれば証譏?書入る
   豈?回検証軆??了時につぶして、立てるのが面倒そうだな→FW縺?deny allしと縺?
 【初心者】GCP Identity-Aware Proxy (IAP), Access Context Managerを使ってみる (WEBサーバへのアクセス制限) - Qiita
 Oauth同諢?画面のサポートメールはログインしているユーザのものか、そいつがオーナになっているGoogle workspaceのメールグループを設藹??することができる(gcpのロールとし縺?wnerかoauthconfig.editorも要る)

nginx+PHP appサーバ+BigQuery+BigTable+CloudSQL(MySQL)+GCS+α?
 [PHP]BigQueryのデータを藹??得する | yyuuiikk blog
$ composer require google/cloud でインス繧?
<?php
require 'vendor/autoload.php';
use Google\Cloud\BigQuery\BigQueryClient;
$keyfile = './credential.json'; //svac縺?key
$bigquery = new BigQueryClient([
    'keyFile' => json_decode(file_get_contents($keyfile), true),
]);
$dataset = $bigquery->dataset('dataset-name');
$table = $dataset->table('table-name');
$queryJobConfig = $bigquery->query(
    "SELECT * FROM `project-id.data-set-name.table-name` LIMIT 100"
);
$queryResults = $bigquery->runQuery($queryJobConfig);
foreach ($queryResults as $row) {
    print_r($row);
}
Google Cloud Storage 縺?PHPを使ってファイルをアップロードする | カバの樹 (kabanoki.net)
$composer require google/cloud-storage でインス繧?
<?php
require __DIR__ . '/vendor/autoload.php';
use Google\Cloud\Storage\StorageClient;
$projectId = 'bangboo-prj';
$auth_key = './iam/credential.json';
$bucket_name = 'gcs-bangboo';
$path = 'img.png';
$storage = new StorageClient([
   'projectId' => $projectId,
   'keyFile' => json_decode(file_get_contents($auth_key, TRUE), true)
]);
$bucket = $storage->bucket($bucket_name);
$options = [
   'name' => $path
];
$object = $bucket->upload(
   fopen("{$path}", 'r'),
   $options
);
<img src="https://storage.googleapis.com/gcs-bangboo/img.png">
SSLに対応したNGINXリバースプロキシを構築する手順 - Qiita
 nginxは静的コンテンツを高速に配信するように設計されている。 また、 リバースプロキ繧? の觸??能を持つため、背後縺?Webアプリケーションサーバを配置して動的なコンテンツを配信したり、ソフトウェ繧? ロードバランサやHTTPキャッシュとしても使うこともできる。
GCPにセキュアな鐔??み台サーバーを作成する. GCP縺?Identity-Aware窶? | by Taiga Murakami | google-cloud-jp | Medium
 Googleにバックドアを開けてしまっては危険、、、ということはない


End

Posted by funa : 12:00 AM | Web | Comment (0) | Trackback (0)


May 22, 2021

GCP ログ・アセット調譟? Logging/Bigquery information schema/Asset inventory
■Cloud Loggingで調べる
ロ繧? エクスプローラを使用したサンプルクエ繝?  |  Cloud Logging  |  Google Cloud
Logging のクエリ鐔??語  |  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で調べる
BigQuery INFORMATION_SCHEMA の觸??要  |  Google Cloud
BigQuery 縺? INFORMATION_SCHEMA からどんな情報が藹??得できるのか、全て縺? VIEW を確鐔??してみた | DevelopersIO (classmethod.jp)
組織レベルでとれるものは藹??ない、基本プロジェクトレベル、動的縺?SQLを生成して藹??行するに縺?Execute immediateを使う

データセットレベ繝?
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 | Web | Comment (0) | Trackback (0)