■21/5/22 12:00AM
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-rulebangboo-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-ruleCloud 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 terminalgcloud 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 startps プロセス見る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 DaemonAfter = network.target [Service]ExecStart = /usr/local/bin/cloud_sql_proxy -dir=/cloudsqlproxy -instances=bangboo-sql:asia-northeast1:mysql-01ExecStop = /bin/kill ${MAINPID}ExecReload = /bin/kill -HUP ${MAINPID}Restart = alwaysType = simpleLimitNOFILE=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 service サービス名 stop
IAMでDB認証するにはフラグ cloudsqql_iam_authentication 面倒なだけか?
Cloud SQL IAM データベース認証 | Cloud SQL for PostgreSQL | Google Cloud
IAM データベース認証用に新規または既存のインスタンスを構成する | Cloud SQL for MySQL | Google Cloud
IAM データベース認証を使用してログインする | Cloud SQL for MySQL | Google CloudFW/ArmorでIngress全止め or VMインスタンス停止、LB停止
■GCE MIGローリング更新GCP のローリング更新が恐ろしく便利で簡単でおしっこ漏らしそう - 強まっていこう (hateblo.jp)
MIG 内の VM に新しい構成を適用する | Compute Engine ドキュメント | Google CloudMIG で VM 構成の更新を自動的に適用する | Compute Engine ドキュメント | Google Clouddev-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分遅れる場合がある。起動時間もその上加算する必要があるかも
■MonitoringVMにOpsエージェント入れるOps エージェントの概要 | Cloud Logging | Google Cloudエージェント ポリシーの管理 | オペレーション スイート | Google CloudOps エージェントの構成 | Cloud Logging | Google CloudGCPのVMインスタンスにOps Agent入れてログモニタリング - Qiita
個々の VM に Ops エージェントをインストールする | オペレーション スイート | Google Cloud
→VMを起動していたらコンソールで実施可能(CloudShellに誘導される)なのでコレでいい
Loggingエージェントを捨ててOpsエージェントに乗り換える
他の方法の例:
@terminalで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_agentNumpyが要る場合は下記でインスコ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設定を新規で作ればオーバーライドされるOps エージェントの構成 | Cloud Logging | Google Cloudsudo 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 でインスコ<?phprequire '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 でインスコ<?phprequire __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
Comment (0)
■21/5/22 12:00AM
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_sheetsbigquery.Jobs.createbigquery.googleapis.comdocId--データセット名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を使う
//// DOL:SELECT * FROM prj.ds.INFORMATION SCHEMA.TABLES
/// 組織のジョブ: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_tableWHERE--データコネクタからジョブ実行だと sheets_dataconnector が Prefixjob_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 tableWHERE 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 labelWHERE 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 labelWHERE 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
Comment (0)
■21/5/21 12:00AM
GCP part2
■サービスアカウントの種類
サービスエージェントとは何か - G-gen Tech Blog
サービス アカウントのタイプ | IAM のドキュメント | Google Cloud
1)ユーザー管理サービス アカウント例 service-account-name@project-id.iam.gserviceaccount.com プロジェクト名がサブドメインについている2)デフォルトのサービス アカウント例 project-number-compute@developer.gserviceaccount.com3)Google マネージド サービス アカウント 3-1)サービス固有のサービス エージェント例 service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com 3-2)Google API サービス エージェント例 project-number@cloudservices.gserviceaccount.com 3-3)Google 管理のサービス アカウントのロール マネージャー例 service-agent-manager@system.gserviceaccount.com
1は所有プロジェクト名で判断できる、それ以外はdeveloperやgcp-やcloudservicesやsystem
3-1、3-2はSAだがサービスエージェントとも言われるService agents | IAM Documentation | Google Cloud
■Artifact registryArtifact registryt APIの有効化kusoリポジトリ作成 format=docker, mode=standard, region=asia-northeast1
権限を設定(詳しくはマニュアル要確認)
標準リポジトリへの移行 | Artifact Registry のドキュメント | Google Cloud
artifact registry admin
storage.admin
ROUTEボタンのリダイレクトなら付与Cloud buildのサービスアカウントに付与(cloud build > setting)
操作をしようとするとエラーがでるなら下記のように付与
gcloud projects add-iam-policy-binding prj-xxx -member='serviceAccount:service-123456@gcp-sa-artifactregistry.iam.gservice.com' --role='roles/storage.objectViewer'
※事前にgcloud auth loginが必要gcloud config configurations activate gcp-profilegcloud auth logingcloud auth configure-docker asia-northeast1-docker.pkg.devgcloud builds submit --tag asia-northeast1-docker.pkg.dev/chimpo-prj/kuso/image001
gcloud builds submit --tag LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGEリポジトリ単位で権限管理ができる、リージョン選択できレイテンシー有利、CRコストはGCS計上だがAR計上で分かりやすい、新機能はARに実装されるリポジトリ名はハイフンOKだがアンスコNG、CRはイメージ名にアプリ名称を付ける感じであったがARはリポジトリ名にアプリ名称/イメージ名に版名を付ける感じに付与名が増えた
■ARホスト名(マルチリージョン)us-docker.pkg.deveurope-docker.pkg.devasia-docker.pkg.dev■ARホスト名(リージョナル)asia-northeast1-docker.pkg.dev
等々
Container registry は下記であったgcloud builds submit --tag gcr.io/PROJECT-ID/IMAGECRで使用しているgcr.ioは元々米国のホスト、asia.gcr.io等が派生した
■CRホスト名(マルチリージョン)gcr.ious.gcr.ioeu.gcr.ioasia.gcr.io
※CRからARの移行でROUTEボタンで有効にすれば、CRへのコマンドはARに転送、コンテナもARにsubmitできる※ARにコンテナを最初に置いておきたい場合は gcraneコマンドでコピーできる
■GCPディスク容量
コンソールからディスクに入り編集で容量追加永続ディスクのサイズを増やす | Compute Engine ドキュメント | Google Cloud 公開イメージのブートは自動変更される カスタムイメージや非ブートディスクは手動変更が必要 手動方法は下記参照/// BANGBOO BLOG /// - Linux cmd
■GCPでsudo apt-get updateができないときGoogle Cloud PackagesのGPGでエラー。2018/04/02 #googlecloud - Qiitawget https://packages.cloud.google.com/apt/doc/apt-key.gpgapt-key add apt-key.gpg
■GCEでの通信(GCEのサービスアカウントとホスト上のOSLoginユーザの違い)
Google APIはSAで行く(SAに各権限を付けておく)ただgcloud compute start-iap-tunel はSAで行くが サービスアカウントユーザロールで実行者とSAを紐づけて行く?
(サービスアカウントに操作するユーザのserviceAccountUserの権限が必要)その他のhttpsアクセスやls等コマンドはホスト上の実行者で行く
■IAPトンネルで内部IPでも外部に出る設定
#権限
ユーザ利用のGCEのSAのIAPトンネル権限を踏み台IAPにつける
SAに利用ユーザに対するserviceAccountUserの権限を付ける#GCEインスタンスにSSHをし下記を実行#自分に通信するプロキシexport http_proxy=http://localhost:3128export https_proxy=http://localhost:3128#それを転送するgcloud compute start-iap-tunnel --zone asia-northeast1-a gce-host-proxy001 3128 --local-host-port=localhost:3128 --project=bangboo-kuso-proxy &#外部通信git clone xxx#止める(止めないと同じホストに繋ぎに行く)
lsof -i 3128
ps ax | grep 3128
ps ax | iapps からの kill -kill <iap ps> でできそうにないgcloud auth revoke からの gcloud auth login の再ログイン?export -n http_proxyexport -n http_proxy
■踏み台経由して他のインスタンスに接続#踏み台に接続gcloud compute ssh step-fumidai001 --project=bangboo-unco --zone=asia-notrheast2-a --tunnel-through-iap#リストを出し該当ホストを見つけるgcloud compute instances list#踏み台から他のへ接続instance=bangboo-kamigcloud compute ssh $instance --internal-ip --zone=asia-northeast2-a
#もしGKEなら接続前にstep-fumidai001でクレデンシャルが必要だったり、、、gcloud container clusters get-credentials main -zone asia-northeast2-a --project bangboo-k8s
■curlで認証を受けながらのURLアクセス●gcloud auth loginしていると、、curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" https://宛先
●SAキーをアップロードなら、、export GOOGLE_APPLICATION_CREDENTIALS="/home/aho/sa-key.json" この環境変数はgcloudライブラリ/SDK等が認証情報として参照するようになっているaccess_token=$(gcloud auth application-default print-access-token)curl -H "Authorization: Bearer $access_token" https://kuso.com/api/endpoint
■キー3種サービスアカウントキー
APIキー
credentials(Oauth clientIDを作成しキー生成)
■Workload identity federation使うサービスがIdPを持ってWIF対応していればSAキー無く使用できる(GCPのSAは要る)●GCP<-AWS,Github,EKS等OpenID connect/SAML2.0事前設定)GCP SAを作成し権限付与 GCPにWIプールを作成 GCP WIプールで該当IdPを認証、外部アカウントを紐づける1)UserがIdPにリクエスト2)IdPがUserを割り当てたIDトークン(JWT)発行3)IdPがIDトークンをGCPに検証 組織を限定するGCP設定 リポジトリを限定するGCP設定4)GCPがWIF一時トークンを発行しUserがGCPリソースを使用Workload Identity Federationを図で理解する - Carpe Diem (hatenablog.com)
●GCP<-GKEクラスタは他の方法もある
●●GKEのSA設定(WIF以外)1)ノードに紐付いたサービスアカウントを使用する
GKEクラスタ作成時にIAM SAを指定かGCEデフォSAが設定されるのでこれでGCP使用 GKEノードのワークロード全てで同一のSAが使用されPod毎に権限を分けられない GKE のワークロードから GCP サービスへ 安全 にアクセスする 〜 Workload Identity 入門 〜 (zenn.dev) GKEの中身はGCEなのでGCEインスタンスのSAを見る?GCEが無いかも GKEがAutopilotならWIFが有効でノードSAがGoogleAPI用には使えない?2)SAのキーを Kubernetes SecretリソースとしてGKEクラスタに登録
IAM SA キーの有効期限が長く、手動でログローテーションが必要な点が懸念 エクスポートした IAM SA の流出リスクがある GCP SAとキーを作成しキーをマニフェストに設定
●●GKEのためのWIF利用(推奨)GKE node SA @project.iam.serviceaccount.com を pool name - namespace の WIプールでGOP SA の pool-namespace@project.iam.serviceaccount.contに紐づける
コマンドやマニフェストで詳しくはLink先で
ブールを有効化するとノードSAが使えなくなるので注意GKE クラスタ内のワークロードから Google Cloud APIs にアクセスする(Workload Identity) - G-gen Tech Blog
■GCEでOSConfigAgent のエラー(apt updateが失敗する、リポジトリが変わった)sudo apt-allow-releaseinfo-change updateを複数回実行することで新しいリポジトリが追加される
■SAでGoogleドライブにアクセスOUを使う解決策。Trusted RuleによりGCP サービスアカウントからGoogle Driveへのアク セスを許可する方法です。サービスアカウントのグループがアクセス可能なOUを作りOU内 で専用共有ドライブを作成する。
■IAM>PAM
一時付与の権限申請ができる
■スクリプトによる権限付与IAM を使用してリソースへのアクセスを制御する | BigQuery | Google CloudGrant文、BQ、Python 等の方法がある
■ZOZOの新米Google cloud管理者
新米Google Cloud管理者の奮闘記のその後 〜Organizationの秩序を維持する試み〜 - ZOZO TECH BLOG
■データ
次世代データ基盤:データレイクハウスを Google Cloud で実現する (zenn.dev)
- BigQuery Data Transfer Service:
Cloud Storage や Amazon S3、Azure Blob Storage など格納されているデータを BigQuery に転送するマネージド サービスです。主に構造化データや半構造化データをバッチ処理にて BigQuery へ直接転送したい場合に使用します。 - Storage Transfer Service:
Cloud Storage、Amazon S3、Azure Storage、オンプレミス データなどに格納されているオブジェクトやファイルを Cloud Storage へ転送するマネージド サービスです。主にオブジェクトやファイルをバッチ処理にて Cloud Storage へ直接転送したい場合に使用します。 - Datastream:
Oracle、MySQL、PostgreSQL といったデータベースのから BigQuery に対してシームレスにデータを複製できるサーバーレスな変更データ キャプチャ(CDC)サービスです。データベースの内容をリアルタイムに BigQuery へ反映したい場合に使用します。 - Cloud Data Fusion:
フルマネージドのデータ パイプライン構築サービスであり、ノーコード・ローコードで ETL を実装できます。データ転送のみの用途でも使用可能であり、特に プラグイン を使用することで、多種多様なデータソースに対応することが可能です。また、Datastream と同様に Oracle、MySQL、PostgreSQL から BigQuery への CDC 機能も提供されています。 - Dataflow:
Apache Beam のプログラミングモデルを使用して、大規模なデータを処理できるフルマネージドでサーバーレスなデータ処理サービスです。データ転送のみの用途でも使用可能であり、Google 提供テンプレート を使用することで、簡単にデータ転送の仕組みを構築することができます。 - Pub/Sub:
フルマネージドなメッセージキューイングサービスです。Cloud Storage サブスクリプション を使用すると、Pub/Sub メッセージを Cloud Storage に対して書き込むことが可能です。また BigQuery サブスクリプション を使用すると、Pub/Sub メッセージを BigQuery テーブルに直接書き込むことができ、 さらに BigQuery CDC を使用するとテーブルの行単位で UPSERT(UPDATE, INSERT)、DELETE が可能です。 - Database Migration Service:
MySQL や PostgreSQL から Cloud SQL や AlloyDB に対して、マネージド サービスへのリフト アンド シフト移行やマルチクラウドの継続的レプリケーションを行います。オンプレミスや他クラウドからのデータベース移行が必要な場合に使用します。
↓
- BigQuery:
SQL によってデータ変換を行います。ルーティンとして、ストアド プロシージャ や ユーザー定義関数、テーブル関数 、Apache Spark 用ストアド プロシージャ が使用できます。また、リモート関数 を使用すると、Cloud Functions と Cloud Run にデプロイされた関数をクエリから呼び出すことができます。 - Dataflow:
前述の通り、フルマネージドでサーバーレスなデータ処理サービスです。同一コードでバッチとストリーミングの両方に対応できるという特徴があります。また、通常の Dataflow だと水平方向のみの自動スケーリングとなりますが、Dataflow Prime を使用することで、垂直方向へも自動スケーリングが可能です。 - Dataproc:
Hadoop と Spark などのデータ処理ワークロードを実行するためのマネージド サービスです。既存の Hadoop / Spark を移行する場合やプリエンプティブル VM または Spot VM によってコストを抑えたい場合に適しています。 - Dataprep:
分析、レポートなどに使用するデータを視覚的に探索、データクレンジングできるデータサービスです。特にUI操作でデータ探索やデータクレンジングが可能なことが特徴です。 - Cloud Data Fusion:
前述の通り、ノーコード・ローコードで ETL を実装できるフルマネージドのデータ パイプライン構築サービスです。データのコネクションだけでなく、ETL に関する様々な プラグイン が用意されていることが特徴です。
■BigQuery CDC(Change data capture)upsert/delをBQ storage write APIを利用してリアルタイム反映ができるすでにDatastream for BQの裏で利用されており、PostgreSQL/MySQL/Oracle等データ同期可変更データ キャプチャを使用してテーブル更新をストリーミングする | BigQuery | Google Cloud
Pub/Sub の BigQuery Change Data Capture 機能について (zenn.dev)
■Binary authorizationGKEやRunに信頼できるコンテナイメージのみをデプロイするための管理ポリシーや承認者を設定してOKのもののみ許可するコンテナ脆弱性スキャン強弱の設定等
■reCaptchav1はゆがんだ文字を入力するもの、v2は画像を選択し私はロボットではありませんとチェック、v3はWeb行動履歴等をスコア化して自動的に判定を行う操作不要のもの(GCPコンソールで結果分析もできる)
■BQ DuetAIBQ studio内にnotebookがありpythonが使える(現在プレビューMLモデルを作成し使用できるクエリで#コメントを書くとSQLを生成したり解説してくれたりする
■Google cloud developer チートシート
Google Cloud Developer Cheat Sheet (googlecloudcheatsheet.withgoogle.com)
システム構成図を書けばTerraformを書いてくれる
■NotebookLM
ASCII.jp:情報整理の決定版「NotebookLM」が最高すぎる。こういうのがほしかったのよ!! (1/7)
自分専用AIを作る グーグル「NotebookLM」を家電取説・辞書・時刻表で使う - Impress Watch
今さらながらGoogleの「NotebookLM」を触ったら、インターネットサーフィンが普通にそのまま"仕事"になった話 (zenn.dev)
Comment (0)
Navi: < 13 | 14 | 15 | 16 >
-Home
-Column [133]
-Europe [9]
-Gadget [77]
-Web [137]
-Bike [4]
@/// BANGBOO BLOG ///

