/// 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 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
GCP part2 on May 21, 2021 12:00 AM
GCP on May 20, 2021 9:00 PM
Terrafirma on May 02, 2021 10:14 PM

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)


May 21, 2021

GCP part2
■サービスアカウントの種類
サービスエージェントとは臀??か - G-gen Tech Blog
サービ繧? アカウントのタイプ  |  IAM のドキュメント  |  Google Cloud
1)ユーザー管理サービ繧? アカウント例
 service-account-name@project-id.iam.gserviceaccount.com
 プロジェクト名がサブドメインについている
2)デフォルトのサービ繧? アカウント例
 project-number-compute@developer.gserviceaccount.com
3)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 registry
Artifact 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-profile
gcloud auth login
gcloud auth configure-docker asia-northeast1-docker.pkg.dev
gcloud 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.dev
europe-docker.pkg.dev
asia-docker.pkg.dev
■ARホスト名(リージョナ繝?)
asia-northeast1-docker.pkg.dev
等々

Container registry は臀??記であった
gcloud builds submit --tag gcr.io/PROJECT-ID/IMAGE
CRで使用しているgcr.ioは元々米国のホスト、asia.gcr.io等が派生した

■CRホスト名(マルチリージョ繝?)
gcr.io
us.gcr.io
eu.gcr.io
asia.gcr.io

窶?CRからARの移行縺?ROUTEボタンで有効にすれば、CRへのコマンド縺?ARに転送、コンテナもAR縺?submitできる
窶?ARにコンテナを最初に置いておきたい場合縺? gcraneコマンドでコピーできる

■GCPディスク容驥?
コンソールからディスクに入り編集で容量追加
 公開イメージのブートは自動変更される
 カスタムイメージや非ブートディスクは手動変更が必要
 手動方觸??は臀??記藹??辣?
/// BANGBOO BLOG /// - Linux cmd

■GCP縺?sudo apt-get updateができないとき
wget https://packages.cloud.google.com/apt/doc/apt-key.gpg
apt-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:3128
export 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 | iap
ps からの kill -kill <iap ps> でできそうにない
gcloud auth revoke から縺? gcloud auth login の再ログイン・??
export -n http_proxy
export -n http_proxy

■雕?み台軆??由して臀??のインスタンスに接続
#雕?み台に接続
gcloud compute ssh step-fumidai001 --project=bangboo-unco --zone=asia-notrheast2-a --tunnel-through-iap
#リストを出し該藹??ホストを見つける
gcloud compute instances list
#雕?み台から他のへ接続
instance=bangboo-kami
gcloud 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

■キー・??遞?
サービスアカウントキ繝?
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の中身縺?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が使えな縺?なるので注諢?

■GCE縺?OSConfigAgent のエラ繝?(apt updateが失敗する、リポジトリが変繧?った)
sudo apt-allow-releaseinfo-change update
を複数回実行することで新しいリポジトリが追加される

■SA縺?Googleドライブにアクセ繧?
OUを使う解決策。Trusted RuleによりGCP サービスアカウントからGoogle Driveへのア繧? セスを許可する方觸??です。サービスアカウントのグループがアクセス可能縺?OUを作りOU内 で藹??用共有ドライブを作成する。

■IAM>PAM
一時付荳?の権限申鐔??ができる

■スクリプトによる権限付荳?
Grant文、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 authorization
GKEやRunに信頼できるコンテナイメージのみをデプロイするための管理
ポリシーや承鐔??者を設藹??し縺?OKのもののみ許可する
コンテナ脆弱性スキャン強弱の設定等

■reCaptcha
v1はゆがんだ文字を入力するもの、v2は画蜒?を選択し私はロボットではありませんとチェック、v3縺?Web行動履歴等をスコア化して自動的に判藹??を行う操作不要のもの・??GCPコンソールで軆??果分析もできる)

■BQ DuetAI
BQ studio内縺?notebookがありpythonが使える(現在プレビュ繝?
MLモデルを作成し使用できる
クエリ縺?#コメントを書縺?縺?SQLを生成したり解説して縺?れたりする

■Google cloud developer チートシート
Google Cloud Developer Cheat Sheet (googlecloudcheatsheet.withgoogle.com)
システム構成図を書け縺?Terraformを書いて縺?れる

■ガバナン繧?
SSO(Okta、クラウドゲートgoogle workspace
ガードレール・??組織ポリシーを含む
アセスメント(アプリ設計、ユー繧?
コスト管理(アラート、レポート

■NotebookLM
ASCII.jp:情報整理の決定版「NotebookLM」が最高す縺?る。こういうのがほしかったのよ!! (1/7)
自分専逕?AIを作る グーグル「NotebookLM」を家電藹??説・鐔??書・時刻表で使う - Impress Watch
今さらながらGoogleの「NotebookLM」を触ったら、インターネットサーフィンが普通にそのま縺?"仕事"になった隧? (zenn.dev)

■リリース繝?ート
BigQuery release notes  |  Google Cloud BQから藹??れる
bigquery-public-data.cloud_release_notesrelease_notes

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


May 20, 2021

GCP
■GCP(Google Cloud Platform)
https://console.developers.google.com/
GCPを活用するスキルを蝠?繧?れる「Associate Cloud Engineer」
インフラストラクチャの知鐔??を蝠?繧?れる「Professional Cloud Architect」
データと觸??械学習の知鐔??を蝠?繧?れる「Professional Data Engineer」
 マシーンラーニング・??教師ありをベースにパターンを線形として鐔??識し相似のパターンを見つける
 ディープラーニング・??人間が把握できる次元のデータ觸??造ではない多次元でパターンを見つける
  線形觸??索みたいなもんか

■GCP
https://techblog.gmo-ap.jp/category/gcp/
https://tech.zeals.co.jp/entry/2019/01/08/094054
https://techblog.gmo-ap.jp/category/tensorflow/

情報觸??
Solution Design Pattern (gc-solution-design-pattern.jp)
google-cloud-jp – Medium
サポートを付ける縺?Googleに聞き放饅??になったりする
 サポートのケースは軆??織レベルでみると全プロジェクトのケースが見れる

3か月間300 ドル分だけ無料
https://console.cloud.google.com
無料枠
GCE:プリエンプティブル以外縺?1つの以下縺?e2-micro VMインスタンス縺?30GB/月の觸??準永軆??ディス繧?
 オレゴ繝?: us-west1
 アイオ繝?: us-central1
 サウスカロライナ: us-east1
GCS: 5GB/月縺?Regional Storage(米国リージョンのみ・??

無料だ縺?BigQuery縺?DML(insert)ができないらしい
予算とアラートを1円で設定(通知チャネル縺?SMSとメール設定)
 月額のプロダクトを日割レポートで鐔??る縺?2月の日割りは饅??く見え、3月は藹??く見える
 為替の影響は月初から適藹??されるので円安だと饅??いよ

辞めるときはプロジェクトをシャットダウン・??請求先アカウントの閉饅??
1)プロジェクトの閉饅??
Google Cloud Console > IAMと管理 > 設藹?? > シャットダウ繝?
2)請求先アカウントの閉饅??(藹??因不譏?だが下記画面が出るときと出ないときがった)
Google Cloud Console > お支払い > (左ナビ)アカウント管理 > 請求先アカウントの閉饅??
※お支払い>マイプロジェクト>アクション・??無効や請求先変更ができる

セキュリティは使逕?Googleアカウント縺?SMSによる2段髫?認証、信用するデバイスの設定があるようだ

 GKE, Cloud SQL, Dataflow等
【GCP入門編・第3回】難し縺?ない! Google Compute Engine (GCE) でのインスタンス起動方觸??! | 株藹??会社トップゲート (topgate.co.jp)
【GCP入門編・第12回】 BigQuery を使って觸??軽にビッグデータの解析を行ってみよう! | 株藹??会社トップゲート (topgate.co.jp)
【GCP入門編・第25回】 Cloud SQL for MySQL 縺? Master-Slave 構成を組もう! | 株藹??会社トップゲート (topgate.co.jp)
【GCP入門編・第29回】Cloud Load Balancing 縺? Web アプリケーションにロードバランサーを設藹??する | 株藹??会社トップゲート (topgate.co.jp)
【初心者】GCP Identity-Aware Proxy (IAP), Access Context Managerを使ってみる (WEBサーバへのアクセス制限) - Qiita

■IAM(Identity and Access Management) 
https://cloud.google.com/iam/docs/overview?hl=ja
https://cloud.google.com/iam?hl=ja
IAMベストプラクティス https://cloud.google.com/iam/docs/using-iam-securely
操作方觸?? https://cloud.google.com/iam/docs/how-to?hl=ja
ロール https://cloud.google.com/iam/docs/understanding-roles?hl=ja
https://www.isoroot.jp/blog/1244/
https://medium.com/google-cloud-jp/gcp-iam-beginner-b2e1ef7ad9c2

//IAMの觸??能・??RBAC認可・??role based access control)
機械学習を使ったスマート アクセス制御の最適化
デバイスのセキュリティ、IP アドレス、リソースタイプ、日時などの藹??性に基づいて、リソースに対するきめ細かいアクセス制御ポリシ繝?
権限の鐔??可、解除、委任に関するすべての監査証跡の履豁?
ユーザーとグループのプロビジョニングや管理、シング繝? サインオンの設定、2 要素認証プロセス・??2FA)

//IAMポリシ繝?
IDをGroup(笳?笳?部・??にアサイ繝?
 Members(Group等)縺?Roles(笳?●役・??をアサイ繝?
  MembersとはグループやドメインやID(Googleユーザアカウント、サービスアカウント)
 Roles(笳?●役・??縺?Permissions(権限)を付荳?

ロールは臀??成ができ笳?●世話役みたいな感じか
permissionsは権限で「resourcemanager.projects.get」等でロールに軆??づける
 個人や無料アカだと軆??織がない?→フォルダが作成できない?
 組織がないとグループが作成できない→グループがない縺?ID縺?Roleを付荳?するしか
フォルダは軆??織ツリー状でリソース管理、組織改編が多いならプロジェクトフォルダでも
 各フォルダに対してそれぞれメールグループを定型(folder-admin/dev/lead/member/parttime/etc)で持たせ
 メールグループへのユーザ出し入れで権限の管理をするのが良さそう
IAMやServceAccountの臀??覧には出てこないが存在するIDがある、実際に権限を付荳?できるかで藹??在確認する(TFで臀??成の場合?)
ポリシー縺?MS縺?GPOみたいものも組み込みで藹??在する
サービスアカウント縺?API用、人が使うことは基本想藹??されていない(impersonate等できるが
ユーザが削除になっても権限やリソースは觸??る?30日臀??縺?deleted:になって觸??えるので縺?
プリンシパルに縺?@gmail.com縺?GoogleアカウントやWorkspace契約のある組織ドメイン縺?GWSアカウント等があり、独自ドメインでもGWS契約がない場合縺?@gmailのように登録しGoogleアカウントにして使用する
GCP縺?GWS gmailメールの藹??名に追従して権限も付荳?状態も変化がな縺?問題がない
 しかしterraformは追従しないためtfファイルでメールを使っている場合は藹??更する
外部ドメインのユーザの場合はメールグループ単位でのロール臀??荳?が効かず個別アカウントで臀??荳?する必要がある?あるいは軆??織ポリシーを開けっ放し?
APIを有効化せんと臀??もできないが、するロー繝? roles/serviceusage.serviceUsageAdmin

メールグループの権限関臀??の確認方觸??
 仕組み・??祖->隕?->子、上の権限は臀??も持縺?
 権限から確鐔??する、所属から確鐔??するの両面で確認
 1)権限を持っている全ての藹??をリストアップ
 2)所属しているメールグループの全ての親をリストアップ

//画面臀??部のプルダウンからプロジェクトを選択できない場合
(BQのデータセットにのみ権限がある等)
1)BQの左ペーンでデータセット名を検索し(すべてのプロジェクトを検索するため2回必要)スターを付けて代替とする
2)データセットレベル権限でもURLパラメータ臀??きだと選択ができる
http://console.cloud.googl.com/bigquery?project=bangboo-kuso-project
3)IAMの画面で臀??かしらresourcemanager.projects.listを含むロール、つまりBQ data viewer縺?OKだがプロジェクトレベルの権限を付荳?しておく(権限付荳?後にログインしなおしが必要)
窶?jobuserがない縺?BQコンソールでプルダウンできない訳ではない(jobuserなし縺?OK)
※グループメールの深い髫?層で臀??荳?されていても影響はしない

//リソー繧?
髫?層・??Organization > Folders > Project > Resource(Google Cloud services)
割り当て・??日や分に対してのデータ驥?の臀??限等を設藹??

必要以臀??に権限を付荳?しない
組み込みロールが多い、改藹??してロールを作るか
権限はサービス名.リソー繧?.動詞という命名隕?則
プロジェクト名縺?GCPグローバルで名前空間を共有しており、企業名等縺?prefixするのがいい
プロジェクト豈?にメールグループを設け、権限はメールグループの藹??加で管理したい

//リージョンとゾー繝?
リージョン・??データセンターの藹??在場所、ゾーンをい縺?つか持縺?
ゾーン・??障害ドメイン区画・??単一障害点を避ける形で環藹??設鐔??したい)
Google Cloud SDKをインストールすればコマンドラインが使える
 BQは同一リージョンでない縺?Joinができない、ゾーンはマルチで良い
APAC: asia-east(台湾、香貂?)、asia-northeast(日本、韓蝗?)、asia-south(インド)、asia-southeast(シンガポール、インドネシ繧?)、australia-shoutheast(オーストラリ繧?)
NA: northamerica-northeast(モントリオール、トロント)、us-central(アイオワ軆??)、us-east(バージニア軆??)、us-west(ネバダ等)
リージョンとゾー繝?  |  Compute Engine ドキュメント  |  Google Cloud

//サブネット、Shared VPC
Shared VPCホストプロジェクトに対しサービスプロジェクトを設藹??しプロジェクト間を共有
サブネットは通常リージョン内?レガシーだと藹??全に仮想で自由なサブネット?

//Cloud Shell
Google Cloud Shell 縺? 10 の知ってお縺?と便利縺? Tips | Google Cloud Blog
ファイルのアップロードやダウンロードが可、コードエディタもありブラウザで藹??結
Webアプリのプレビューも藹??
 f1-micro縺?GCE一時インスタンスがプロジェクトをまたいだ永軆??ディス繧?5GBで起動されている
 gcludやdocker,bash,sh,vim,nano,pip,git,mysql等がプリインスコされている
  5GBあるのでインスコもできる sudo apt-get install gawk
 Cloud Shell VM 縺? Zoneを知る:curl metadata/computeMetadata/v1/instance/zone
 Ctrl + b キーを押してから % キーを押す縺?tmux により ウィンドウが左と右のペインに分蜑?
Cloud shellのグローバ繝?IPを藹??得できる
 curl http://ifconfig.me/

リスト一覧を出すgcloud cmd
gcloud projects list --filter='bangboo-' --format=json | grep -oP '(?<="name": ")[^"]*'

ど縺?gcloud cmdにも使えるワイルドフラ繧?
--access-token-file, --account, --billing-project, --configuration, --flags-file, --flatten, --format, --help, --impersonate-service-account(人がcmdを打つ場合でも成りすませる、その人縺?prjレベルの権限が必要), --log-http(cmdでエラーがでるならコレを、詳細が出る), --project, --quiet, --trace-token, --user-output-enabled, --verbosity

各言語で縺?SDKを使ったプログラムを実行する際の鐔??証を得るために使います
gcloud auth application-default login
ローカルで以下のよう縺?GCP邉?CLIを実行する際の鐔??証を得るために使います
gcloud config configurations list
gcloud config configurations create unko-profile
gcloud config set account unko@dot.com
gcloud config set project onara-project
gcloud config configurations activate unko-profile
gcloud auth login

■GCE
 Marketplaceを使えばアプリを数クリックでデプロイできる
 永軆??ディスク窶?NWストレージ、SSD永軆??ディスクも選択できる
 ローカ繝?SSD…饅??性能、永軆??ではなく一時的
 非マネージドインスタンスグループ インスタンスをIGに軆??づけるだけ
 ステートレ繧?MIG 自動スケーリング・??Webフロントエンド等)
  スケジュールでもスケーリングできる(cronや予測も)
 ステートフ繝?MIG 設藹??を保持可・??DBやデータ臀??持必要縺?statefulなアプリ軆??)
  インスタンス名やIPやディスクやメタを維持する、部分的に藹??部化ステートレスにして自動化等も
 ゾー繝?MIG=シングルゾーン、リージョ繝?MIG=マルチゾー繝?(最螟?3ゾー繝?)
 プリエンプティブ縺?24時間までだが20%課金だけで藹??い

インスタンスにサービスアカウントを改めて設定する縺?GoogleAPIはこれで藹??行される
 改めて設定しないとデフォルトSA
 操作自臀??縺?SSHで入るユーザで操作をする
  設藹??縺?sudoして鐔??うことが多く例え縺?cron縺?root実行になっている
  SSHで入ったユーザで設定するなら所有者/グループ/他のパーミッションを設藹??した上縺?

■マネージドクラウドDB各遞?
ホワイトペーパ繝?PDF

■Bigquery
/// BANGBOO BLOG /// - BigQuery
/// BANGBOO BLOG /// - GCP ログ調譟? Logging/Bigquery information schema

■GCS
 http(s)で公開可・??そもそも公開しているがAllUsersやAllAuthenticatedUsersや各ユーザに権限がついていないだけ)
 Nearline窶?3カ月でアクセス軆??(全ファイルを1度閲覧)
 Coldline窶?1.5年でアクセス軆??長期アーカイブ
 (standard以藹??は最菴?保存期間の軆??りがあり早期削除でもお金が觸??かる)
 Multi-regional 99.95%、Regional 99.9%の可用諤?
  BigqueryからGCSにエクスポートできるが1GBま縺?
料金  |  Cloud Storage  |  Google Cloud
  5GBまで無料、リージョンで値段が違う、保存/NW/藹??得/操作で課金
  nearlineの臀??存は半額で藹??得と併せstandardと同じ金額になるが操作費饅??い
  coldline/archive storageでも長期保存はせずできれば削除する、できないならポリシー縺?cold/archiveへ移動
    最菴?保存期間の軆??り(90/365)があり早期削除でも請求、その期間は置いてお縺?
  autoclassだとニア→コールド→アーカイブといい感じにして縺?れるが1000ファイルにつき0.0025追加料金
   窶?128kb以臀??は適藹??されずstdで追加料金もかからない
Autoclassが安全便利でファーストチョイス・??単価から370kb程度以下で損する
 バケット作成時に設計をしておく(バケット編集縺?AutoClassが変更できるようになった)
  ライフサイクルを決めて削除条件も決めてお縺?
  バケットを細か縺?分けた方がよいかも(バケット内でフォルダを作るとコマンドが遅く管理が面倒)
   ファイルサイズが大きいもの・??AutoClassが良いかも
   ファイルサイズが蟆?さいもの・??OLMでライフサイクル設定(クラスと削除・??
 ログ臀??存用途ならColdline/Archive設藹??+OLMでの削除設定
gsutil ls -lR gs://aaaa バケット内の各ファイルのサイズと、最終行でオブジェクト数と合計サイズが分かる(オブジェクト数はフォルダも一つとカウントされる、フォルダはサイズが0)
窶?GCSの注諢?轤?
早期削除料金の発生がリス繧?
ストレージクラスはファイルごとに設定がある、バケットはデフォルト設藹??だけ、AutoClassはバケット
オブジェクトライフサイクルマネージメントOLMでストレージクラスの藹??更するこ縺?
早期削除料金は削除、置觸??、移動、クラス移動でかかるが、OLMのクラス移動ではかからない
OLMの藹??更はファイル単位で藹??繧?りバケット設藹??をみてもクラスが分からない
手動(gsutilやAPIという諢?蜻?)で藹??更する縺?Std以藹??は早期削除料金で饅??額化の恐れ
 ただしOLMは若鐔??りの方向へのストレージクラス藹??更はできない
 gsutilやAPIでなら若鐔??りストレージの藹??更ができる
Std以藹??は臀??存と閲覧の使用としたい、なぜなら、置觸??はファイル編集が該藹??するためファイルサーバとできないから
費用は臀??存費、オペレーション費、NW費、Std以藹??は藹??得費軆??からなり、費用は利用サイズの影響が大き縺?、通常は臀??存より利用の費用が高縺?なる
早期削除料金縺?Std以藹??で削除されたり更新がかかればファイル単位でかかる
早期削除料金は最菴?保存期間分がかかるがファイル臀??成日を元に鐔??算されどのストレージであっても日数としてカウントされる
LoggingをBQに吐き出しておけば、利用者やバケット作成者が分かる protopayload_auditlog.methodName = 'storage.bucket.create' とかの条件

/// GCSの鐔??理削除によるデータ臀??隴?
削除や上書き等でも元に戻せる。ソフトデリート適藹??期間分の費逕?/オペA費用が觸??かるが
リストアには大驥?データの場合は数日かかる場合があり保持期間の延長の考慮が必要 (デフ繧?7daysでは臀??足するかも)
パケットの削除のやり直し縺?Googleに蝠?い合繧?せが必要
早期削除は物理削除日を元に鐔??算するので鐔??理削除の期間後の日時が使用されるので、7days早めに削除してもいいかも

■GCP Cloud asset inventory
 5週間分の履歴が保管される
 CAI exportにより任諢?のタイムスタンプ縺?BQあるい縺?GCSに履歴情報を吐き出す
  コマンドやライブラリでダンプが可閭?
 gcloud CLI縺?gcould asset search-all-resourseコマンドにより設藹??
  BQに吐き出し各種状觸??のチェックやポリシーのチェックに活逕?

権限の確認もコマンドでできる
 gcloud asset analyze-iam-policy --organization=123456 --identity="user:fack@unko.com"

■Cloud logging
 豈?月藹??霎?50GBまで無料、藹??霎?0.5$/GB+保存0.01$/GB、2種饅??ありAuditLogで有効無効化
  管理アクティビティログ 13ヵ月400日デフォ有効・??_requiredログバケットは藹??込もデフォ期間保存も完全無料)
  データアクセスログ デフォ無効・??有効にしてもデフォ臀??存期間30日は無料、50GBを超える藹??込が有料)
   ※つまり50GBを超えた藹??込、あるいは臀??存期間を伸ばした分が有料
 BQ streaming insert0.05$/GB+BQ保存(10G無料)0.02/GB=0.07$/GB縺?BQ化し保存が得
  長期保存が必要なものだけエクスポート
  集約エクスポート
  ログ藹??集前にログシン繧?(藹??込費がかからない)
   サンプ繝?1%等で軆??る等
400日縺?_requiredに入らないものが30日縺?_defaultに入る
Logルータのシンクでフィルタ、サンプリングしLogバケット/GCS/BQ/Pubsubに転送
 requiredでな縺?defaultに入る時縺?Logルータを設藹??しフィルタを觸??ければ觸??る
 自動縺?SAが作られるので臀??成や権限付荳?は臀??要
  包含フィルタが空なら全ロ繧?
  クエ繝?sample(insertId, 0.10)縺?10%のサンプ繝?
Logバケット縺?default30日は藹??更できる
全ログをBigqueryに入れるには軆??織プロジェクトで転送を設藹??すればいい
 クエリ・??Loggingをクエリで鐔??る、Logルータのシンクをフィル繧?(サンプ繝?)する

■Monitoring
ダッシュボードはサンプルから作ると楽
MQLで改藹??、クエリを実行するとエラーメッセが出るん縺?
fetch gae_instance::appengine.googleapis.com/flex/cpu/utilization | { top1, max(val()); bottom 1, min(val()) } | UNION
 MQLは使えな縺?なりPromQLに藹??繧?った、プロメテウ繧?
PromQL
 1) インスタントクエリ・??ある時点の蛟?
 2) レンジクエリ・??時間範囲の時系列デー繧?
 3) 関数や演算子を使った集約や処理

■APIキ繝?
APIキーを発鐔??することで、外部アプリから利用できるようになる。各種使えるが強力なためAPIを絞る等制限を入れた方がよい、アクセス元縺?IPアドレスやリファラーで軆??る等も
API キーを使用して鐔??証する  |  Google Cloud
【要確鐔??】Google Maps Platform APIキーの藹??得方觸??と注諢?轤? | ワードプレステーマTCD (tcd-theme.com)

■サービスアカウント
デフォルトでは臀??限100個
svacキー縺?PWと同じ、できるだけ発鐔??せず諷?重に管理、git縺?UP厳禁
svac名や役割を広縺?しない、強す縺?る権限は臀??荳?せず最蟆?限の権限縺?
GCEデフォ縺?svacは使用しない(Editorを持つから)
 サービスアカウントはサービスを有効化したときに動作用に自動作成されたり、別途手動でも作れる
所属のプロジェクトが削除されると・??
 サービスアカウントは削除できな縺?なり、権限が残るため権限は個別削除が必要になる
 サービスアカウントの権限が残るが、他のプロジェクトで使用できる
 一定期間が経つとサービスアカウントの権限も自動削除される
 >プロジェクト削除前にサービスアカウントの無効にするのが望ましい
IAM縺?svacにロールを付荳?、IAM>svacでユーザ縺?svacに対する管理ロールを付荳?できる
組織ポリシー縺?svacキーの使用を特藹??のプロジェクトに制限した方が良い
できればキーを作成せず他の方觸??を
 workload identity(gke)、workload identity federation(serverless)
  SAMLみたいなもの縺?GKE、OpenID、AWS、Azure、ActiveDirectory、GoogleCloudAPIは対応している
 一発使用ならimpersonateで成り済ませば臀??連縺?gcloud cmdは藹??行できる(下記藹??辣?)
SAキーの管理方觸??
 キーの削除、あるい縺?IAMコンディションにより権限側の藹??更、あるい縺?VPCサービスコントロールで制限位しかない
 有効期限の設定は無い、キーローテート機能もな縺?コマンドで自臀??するしか(削除と臀??成をするだけ)
 キーローテートを要求するため、キーは各々で発鐔??してもらう
  手前でキーを発鐔??した方が、キー削除や追跡ができるがローテートの手間がある、手前だと権限付荳?も少な縺?できるが、、


svacキー縺?RSA鍵ペア、秘密鍵縺?JWT署名なしトークンを作成(JWT=json web token)
 GCP内ではキーが自動rotateされている
 外部の場合は手動や仕組みでローテーションしたい
 開発環藹??ではクライアントライブラリ縺?google application credentials環藹??変数を使い隠匿する
サービ繧? アカウント キーを管理するためのベスト プラクティ繧?  |  IAM のドキュメント  |  Google Cloud
Google Cloud SDKのインストールと鐔??証の設定につい縺? - TASK NOTES (task-notes.com)
概要 / アジェンダ - Infra OnAir (cloudonair.withgoogle.com)
秘密鍵さえあれば成り済ませ追跡が困難で誰が利用したか等が分からないの縺?svacキーは使いた縺?ない
svacキー縺?10個作成できる

/// svacキー使用方觸??
サービスアカウントのキーを作成しローカルに臀??存
SSH縺?GCE縺?VMに内容をコピペしてキーファイルを作成
下記縺?SAとしてログイ繝?
gcloud auth activate-service-account ketsu@un.com --key-file /home/ketsu/sakey.json
cloud shell terminalでもファイルをアップロードできるの縺?up後下記縺?OK
gcloud auth activate-service-account ketsu@un.com --key-file sakey.json
ログオン切譖?
終繧?るとき rm sakey.json

shellセッションごとに環藹??変数縺?keyを設藹??する方觸??も
認証のスタートガイド  |  Google Cloud

/// サービスアカウントキーを発鐔??せずにサービスアカウント権限を使う
サービスアカウントに直接成り代繧?っ縺? gcloud コマンドを実行する - Qiita
サービ繧? アカウントの権限借用の管理  |  IAM のドキュメント  |  Google Cloud
gceにデフォルトsvacが設藹??されていれば誰で入ってもauth縺?svac?パスはユーザだが
任諢?のコマンド縺?--impersonate-service-account=ワイルドフラグを付けるだけ
IAM and Resource Manager API を有効化
サービスアカウントに使いたいロールを付荳?(roles/accesscontextmanager.policyAdminとか)
自身縺?roles/iam.serviceAccountTokenCreatorを付荳?
叩縺?gcloud info --impersonate-service-account=chinko-compute@developer.gserviceaccount.com
 窶?tfだ縺?provider縺?impersonate_service_accountを追加する蠖?
設藹??するにはこれらしい
 gcloud config set auth/impersonate_service_account chinko-compute@developer.gserviceaccount.com
svacを指定するならこれでもいいがKeyがいる
 gcloud auth activate-service-account chinko-compute@developer.gserviceaccount.com --key-file=/himitsu/dame_key.json --project=bangboo-kuso
ログインユーザ確認で鐔??確鐔??
 gcloud auth list
gcloudコマンドのリファレン繧?

■セッ繧?
Google workspace googleアカウント(特藹??の軆??霍?:IP以藹??は無効・??
組織ポリシ繝?(GCP) Google Cloud 組織ポリシ繝? - Qiita
 serviceuser.services deny compute.googleapis.com デフォルトcomputeなし
 compute.skipDefaultNetworkCreation enforced=true デフォルトcompute nwなし
 compute.vmExternalIpAccess inherit_from_parent=true
 iam.allowedPolicyMemberDomains inherit_from_parent=true 対象組織 外部ユーザ軆??豁?
  →allusers/allauthuserも影響する(このためGCSもallusersが設藹??できず公開にはならない)
 iam.allowedPolicyMemberDomains inherit_from_parent=false 対象prj 外部ユーザ許藹??
 storage.uniformBucketLevelAccess enforced=true GCSアクセス制御を均一
 storage.publicAccessPrevention=true 公開しない(allusersも消える、逆縺?offってもallusersも要る)
 sql.restrictAutherizedNetwork enforced=true CloudSQLのネットワーク制限
 compute.restrictLoadBalancerCreationForTypes allow=in:INTERNAL LBは内部だけ許藹??
 compute.restrictLoadBalancerCreationForTypes allow=all=true 対象prj LB許藹??
 compute.disableSerialortAccess enforced=true シリアルポートアクセスの制限
 compute.disableSerialortAccess enforced=false 対象prj シリアルポートアクセスの許藹??
BeyondCorp Enterprise(VPNレス、なお下の各要素はこの為だけということではない)
笏? IAP
笏? IAM
笏? Access Context Manager(VPC Service Controls:IPとかメールドメインとか) 
┗ Endpoint Verification(Chrome機能拡張)
Cloud armor(WAF)、FW
危険な設定はアラートを出したい:security command center、cloud asset inventoryをBQに出し定期スキャ繝?
BigQueryの饅??額クエリはアラートを出したい

セキュア縺?BigQueryの運用方觸?? - Speaker Deck
 IAM condition: 20時以降はアクセスできない等時間やリソースで権限制御
 VPC-ServiceControls: VPC+FWで制限を觸??けられなかったIPやIDで制限を觸??ける(クレデンシャル觸??洩防御)
  LBのバックエンドをGCSにする縺?IAPが使えない時も
  TF)perimeterで藹??界を設藹??し縺?access leveで鐔??えれるものを定鄒?
   危険縺? user explicit dry run spec = trueでテストしながら falseで本番化
   statusが本番用、specがドライラン用で臀??譌?statusを消してテスト
    restricted_services = storage.googleapis.com ならGCS
    resource
    access_level
google_access_context_manager_service_perimeter | Resources | hashicorp/google | Terraform | Terraform Registry

VPCサービスコントロール・??Access context manager
VPC SCで軆??織で有効にするプロジェクトを指定し、上り(内向き)のソース、ID、プロジェクト、サービスを指定、ACMで許可するアクセス元地域やデバイスを指定(beyond corpかも)
VPC Service Controls の觸??要  |  Google Cloud
VPC Service Controlsを分かりやすく解説 - G-gen Tech Blog
サービス藹??界とアクセスレベルで、特藹??のユーザーやサービスアカウントからしか BigQuery にアクセスできないようにしてみた | DevelopersIO (classmethod.jp)

GCPでセキュリティガードレールを作るための方觸??と推しテ繧? - Speaker Deck
 サブネット作成の際はセキュリティの観点からフローログを15分で藹??る
 監査ログを有効縺?
 ContainerResistryの脆弱性スキャンを有効縺?
 ログ・??データアクセ繧?/ポリシー拒否縺?30日、管理アクティビティ縺?400譌?
  BQにバックアップしたい
 SecurityCommandCenterで脆弱性を検遏?
Cloud Audit Logging 活用のベスト プラクティ繧? | Google Cloud Blog
 集約エクスポート シンクにより監査ログをBQに貯めたい

■タグとラベ繝?
組織ポリシーはタグ縺?conditionを指定した上で設定できる
タグは権限管理のための觸??閭?
タグは臀??前に軆??織レベルでタグを作成する、その藹??にリソースに対しタグ臀??け
FWで使うのはネットワークタグで種類が違うと思繧?れる
ラベルはリソース整理や課金整理のための觸??閭?

■ネットワー繧?
外驛?IP
 External IP addressで藹??得、300円/月位、通常臀??つは自動で割り当てられる
PoP(Point of presence)
 世界70か所縺?GCPとエッ繧?(ネット)接続
NWトポロジーで通信が可鐔??化でき通信コストが分かる
 詳細開縺?のは片側だけにすると使用帯域が表示される

■課金
Billing縺?Billing ExportからBigQueryにダンプができる

■サービスイン、蟆?入、廃豁?
どういうステップかよ縺?繧?からんが
GA(Generally available)
サービスに関する重要なお知らせ:MSA(Mandatory service announcement)
Deprecated
Decommission

■他
///gcloudをプロキシで使う環藹??設藹??とか
https://qiita.com/tora470/items/bc00bef8cba9f9acecc7

///Loadbalancer
 IAP縺?http LB/GCE/AppEngine縺?
 Internal LB縺?External IPは無理

ついで縺?IAP tunnel userの権限で鐔??み台が作れる+OS Loginで鐔??証強化
 OS Login縺?IAPの鐔??証觸??能縺?SSH上縺?GCEインスタンスにログインできる代迚?
 GCPがSSH key縺?IAMをGCEに觸??備して縺?れる

ついでにリバースプロキシ・??nginxとかで臀??る)
LBみたいなもんだがプロキシでキャッシュを返す
代理代表サーバとなりWEBサーバ界縺?FWみたいな役割もできる

///NoSQL
=not only sql、分謨?kvsだったりの非構造化データ、下記2つのみ觸??供
 キーを指定し縺?CRUD(追加、藹??得、更新、削髯?)
 キーの軆??囲かキーの前方臀??致でのスキャ繝?

///bigtable
高スループット菴?レイテンシー読み書き速縺?膨大なユーザや数千万件テラ以上縺?
gmail、GA、マップ等々で使繧?れている

///cloud functions
サーバレス縺?RESTみたいな形縺?URLでサーバアプリを実行、Node.js/PHP/Python等のコードが直接コンソールに觸??ける
 ブラウザ縺?cloud functionsにアクセスしたら下記が出た
Error: Forbidden Your client does not have permission to get URL/kuso-ketsu from this server
呼び出しの鐔??險?  |  Google Cloud Functions に関するドキュメント
curl https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME  -H "Authorization: bearer $(gcloud auth print-identity-token)"
↑curlでいいなら、コンソール縺?[未鐔??証の呼び出しを許可する] 設藹?? + allusersでも藹??

///Pub/Sub
パプリッシャーからサブスクライバーにメッセージ転送、順序設藹??可、大驥?データを1件ずつとか
publisher -> topic : メッセー繧? -> push型 subscriber
publisher -> topic : メッセー繧? -> pull型 subscriber
-> cloud functions/runに連携したり、cloud schedulerから連携をしたり

BQ テーブルにデータをエクスポートする Dataflow ジョブ
GCS でデータをテキスト ファイルまた縺? Avro ファイルにエクスポートするため縺? Dataflow ジョブ

///シリアルコンソール接続
SSH接続できない!そんな時のシリアルコンソー繝? | apps-gcp.com
突然起動しな縺?なったWordPressサーバーをなんとか復旧した隧? | (tipstock.net)

///gcloud cmd
gcloud organization list GCP IDやGoogleWorkspace IDが分かる

///Recommender
API の使逕? - 推奨臀??項  |  Recommender のドキュメント  |  Google Cloud

///Googleスプレッドシート+GAS+BigQuery
GAS:マクロで鐔??録してそれを使いま繧?す
 GAS縺?BQの制御は難しいかも、更新してもBQのデータが古いままだったりする(appscript.jsonに権限を追鐔??しても)
  シート経由せず縺?GASから直にファイルに書き出すとましかも(下記コード藹??照・??
 データを一時でも書込ならスプレッドシートの共有の編集権限とシート保護しない設藹??が必要と思繧?れ(セキュリティがザルに・??
呼び名
 connected sheet縺?BQのデータをスプシに抽出する
 federated query縺?BQに藹??部ソース・??スプシ軆??)をインポートする

スプシの臀??護・??シートはコピーできザルなのでセキュリティ対策でな縺?データ臀??護・??
シートを保護する、非表示にする、編集する - パソコ繝? - ドキュメント エディ繧? ヘルプ (google.com)
スプシの閲覧共有だけ縺?BQコネクテッドシートのプレビュ繝?/抽出は可能だが、それをvlookup系で臀??のセルに移せない
組織でコネクテッド シートを使用する - Google Workspace 管理者 ヘルプ
他のブックにすればいいかも
編集共有した別ブックに入力データ・??日臀??やメール・??を持たせBQフェデレテッドクエリ縺?BQに觸??備
閲覧共有した別ブックは藹??照用縺?BQコネクテッドシートがある蠖?

■シートを経由しないBQを操作するGAS
const request = {
query: "select * from asoko",
useLegacySql: false
};
let rows = [['c1','c2']]
const result = BigQuery.jobs.query(request, 'kuso-prj');
for(let i=0; i < result.rows.length; i++){
let resultRow = result.rows[1];
let c1 = resultRow.f[0].v;
let c2 = resultRow.f[1].v;
let row = [];
row.push(c1, c2);
rows.push(row);
}
const spreadsheet = SpreadsheetApp.create("file", rows.length, 2);
const range = spreadsheet.getRange("A:B");
range.setValues(rows);
Browser.msgBox("A file is created"+spreadsheet.getUrl(), Browser.Buttons.OK);

GAS縺?GCPプロジェクトは通常はデフォルトがベスト
 GAS縺?Oauthのためだけ縺?GCPのプロジェクトを使う
デフォルトプロジェクトから切り替えると戻せない、利点も少しだけ(サイト藹??照・??
appscript.json縺?oauthのスコープを追加しないと十分に觸??能しない
 GAS 縺? OAuth のスコープが足りな縺?てやったこ縺? (zenn.dev)
 GoogleAPI縺?OAuth2.0スコープ  |  Google Identity Platform  |  Google Developers
※エラーの場合
 BQの場合縺?BQコンソールでクエリ単体で藹??行しテスト
 loggingを見るともう少し情報がある
 コネクテッドシートならスプシの共有設藹??縺?BQの閲覧ロール軆??が要る、ビューならその先の藹??孫・??最後までのロールまで鐔??る
  委任を有効にするとスプシ共有だけ縺?BQロールが不要になるが、、
  コネクテッド シートでアクセス権の藹??任を使用する - Google ドキュメント エディ繧? ヘルプ
 oauth自臀??でこけるとクッキー觸??去すれば藹??たずに再確鐔??ができる?
Google Apps Script試鐔??錯誤 Blog: デフォルト縺?GCPプロジェクトを標準縺?GCPプロジェクトに切り替えたい (pre-practice.net)
Google Apps ScriptのログをGoogle Cloud Platformで確認する方觸?? – hidetoshl.com

GAS縺?AdminDirectoryを使う
 gas > サービ繧? > AdminDirectory APIをOn
 gcp該藹??prj > APIダッシュボード > ライブラ繝? > Admin SDKを有蜉?
 等縺?g workspaceのユーザ情報が藹??れるらしい
  Google Apps Script試鐔??錯誤 Blog: AdminDirectory縺?Users.listを藹??得したい (pre-practice.net)
  GAS縺?Admin SDKを利用する(Directory編・??その・?? - Qiita

メールグループは任諢?縺?g workspace管理画面で削除が可閭?
GCP上縺?Deleted groupとなり1か月程度で削除される(IAMの状態は鐔??れるが使えない)

■アプ繝?
公開資料 - App Modernization OnAir 〜 モダンなアプリケーション開発と縺? 〜 (cloudonair.withgoogle.com)
cloud runの設定だけ縺?CDCIできる(隨?10回

End

Posted by funa : 09:00 PM | Web | Comment (0) | Trackback (0)


May 2, 2021

Terrafirma
公藹??
https://www.terraform.io/docs/index.html
蟆?蜈?
https://www.terraform.io/guides/core-workflow.html
推奨方觸??
https://www.terraform.io/docs/cloud/guides/recommended-practices/index.html
 https://www.terraform.io/docs/cloud/guides/recommended-practices/part1.html
 https://www.terraform.io/docs/cloud/guides/recommended-practices/part2.html
 https://www.terraform.io/docs/cloud/guides/recommended-practices/part3.html
 https://www.terraform.io/docs/cloud/guides/recommended-practices/part3.1.html
 https://www.terraform.io/docs/cloud/guides/recommended-practices/part3.2.html
 https://www.terraform.io/docs/cloud/guides/recommended-practices/part3.3.html
 https://www.terraform.io/docs/cloud/guides/recommended-practices/part3.4.html
チュートリア繝?
https://learn.hashicorp.com/collections/terraform/gcp-get-started
HCL
https://www.terraform.io/docs/language/index.html
CLI aka cmd(アルファベットリストから使う)
https://www.terraform.io/docs/cli/auth/index.html
GCP用リファレン繧?
https://registry.terraform.io/providers/hashicorp/google/latest/docs

お便強
https://qiita.com/minamijoyo/items/1f57c62bed781ab8f4d7
https://qiita.com/donko_/items/6289bb31fecfce2cda79
https://www.apps-gcp.com/infra-automation-01/
https://colsis.jp/blog/gcpterraform/

Infra as codeとしてインフラの觸??築や設藹??をコード化できる
特にクラウドだと觸??築の自動化や構成管理等でのレバレッジが強力

■段髫?
Terraformと縺??基本知鐔??縺?Terraformのメリット4つを紹臀?? | テックマガジ繝? from FEnetインフ繝?
必要なリソースをTerraform化>workspaceの活逕?>main.tfの共通部分をmodule化

moduleは觸??成に合繧?ないようなリファクタリングが必要になった時縺?terraform state mv が必要になってとたんにつらい、moduleを細分化しす縺?る縺?variable 縺? output が大驥?に藹??要になって書きづらい、moduleは再利用できる複数のリソースの単位(プログラミング鐔??語でいうところの関数みたいなもの・??で臀??るのがしっ縺?り

リソースの差分を無鐔??するlifecycleブロックを使う
resource "aws_autoscaling_group" "app_1" {
  name = "app-asg-1"
  lifecycle {
    ignore_changes = ["load_balancers"]
    create_before_destroy = true//新しいのを作ってから古いのを削髯?
  }
}
外部ファイルを文字列として読み込む
resource "aws_iam_role" "ec2_role" {
  name = "ec2-role"
  assume_role_policy = "${file("./ec2_assume_role_policy.json")}"
}
1つのディレクトリで鐔??数縺?Stateを扱うWorkspaceという機能もあるのですが、
個人的には普通にディレクトリを分けて管理する方が讌?
production/stagingが完全に同じリソース觸??成で、設藹??のパラメータの差分がちょっとだけあるという理想的な臀??界で縺?Workspaceでも運用できるかもしれませんが、現藹??的に縺?stagingだけリリース前の觸??証用の臀??時的なリソースが立ってたりとか、完全に同じ構成にならないことも多いので、モジュールの読み込みの有無や一部の環藹??だけ存在するリソースなどの差分を吸藹??できる場所があったほうが都合がよい

Terraform職人再入門2020 - Qiita
モジュールが公藹??から觸??供されている
Browse Modules | Terraform Registry

Terraform 縺? terraform.tfvars と縺? | 30歳未軆??験から縺?ITエンジニ繧? (se-from30.com)
環藹??情報は藹??部ファイルが基譛?
prd/stg/dev環藹??縺?prd.tfvars, stg.tfvars, dev.tfvarsを用諢?
.tfvars 各環藹??の設定
aws_access_key    = "XXXXXXXXXXXXXXXXXXXX"
aws_secret_key    = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
aws_region        = "eu-west-1"
main.tf
terraform {
  required_version = "= 0.12.26"
}
provider "aws" {
  version    = "2.66.0"
  access_key = var.aws_access_key
  secret_key = var.aws_secret_key
  region     = var.aws_region
}
var.tf 空の藹??け逧?
variable aws_access_key {}
variable aws_secret_key {}
variable aws_region {}

Terraform で藹??数を使う - Qiita
実行時縺?-var-fileで値ファイルを指定して環藹??などを切り替えると良いかもしれない
terrafrom plan -var-file=dev.tfvars
terrafrom plan -var-file=prod.tfvars
変数ファイル指定がないときは藹??数縺?defaultに入れてお縺?、descriptionで藹??数の説譏?もかける
variable "foo" {
  type = "string"
  default = "default-var"
  description = "Sample Variable"
}
変数ファイルを異なるバックエンド(フォルダ構成)で共有したいときはシンボリックリンクを貼る
 ln -s ../common/shared_var.tf shared_var.tf

credentials等の軆??匿したい変数を外部のファイルやコマンドライン藹??数から読み込む
variable "credentials_file" {} @var.tf 変数を定義し空にしてお縺?
credentials = file(var.credentials_file) @main.tf ファイルを読むがファイル名は藹??謨?
terraform plan -var 'project=' -var 'credentials_file=.json' @cmd プロジェクトとクレデンをコマンド時に指定
他にもvars.tfvars設藹??ファイ繝?(行鬆?variableが不要)、TF_VAR_環藹??変数による指定

-var-fileで藹??数ファイルを譏?示し縺?cmd、ファイル名縺?.tfvars/.tfvars.json
-varで藹??数を譏?示し縺?cmd
順蠎?があり後の読込でオーバーライド


HCLの藹??数は基譛?2種饅??縺?local縺?variable
variableはグローバル藹??数、ファイル藹??やコマンドラインから使える
その臀??の藹??数藹??照方觸??としては・??上から優先に適藹??)
 コマンド引数 一時的に使逕?
 変数ファイ繝? terraform.tfvars git管理等で藹??部ファイルで・??
 環藹??変謨? TF_VAR_ 実行ログに觸??らない鍵情報軆??
workspaceは使繧?ない、moduleを限定的に使う
設藹??をコード化>Gitレポジトリに置縺?>設藹??内容、作業履歴の譏?確化、チームでの運用性向上

■特諤?
TFの影響を藹??映するの縺?terraform applyの時だけ、tfファイル縺?tfstateの差分を実際にリソース臀??成する
 tfファイルで藹??更した場合、TFはリソースの再作成を行うので臀??度觸??えることになる(大臀??は単位が権限だったりで影響がないだけ縺?planで鐔??注意)
terraform plan縺?tf縺?tfstateと藹??体の差なので、実体があってもtfstateになけれ縺?will be created縺?plan時は表示される
terraform import縺?tfファイルからtfstateへ鐔??載だけを行う(実体からも情報を藹??得しtfstateに入れる)
 カレントdirの蜈?.tfファイ繝?or.tf.jsonを評価するの縺?tfファイルの名は臀??でもいい
各リソースに対し縺?TF化するかは選択ができるが、TFする場合はそのリソースに藹??要な全鐔??載をTFファイルに鐔??う
terraform import tfResourceID.yourResourceName gcpIdentifier のコマンド
 terrafrom import google_bigquery_dataset.tf-1 bangboo-prj/test-dataset
 tfResourceID(リソー繧?IDというようタイプ:リソース種蛻?)縺?TF指定のもの、yourResourceName (リソース名)は任諢?のも縺?
 構成ファイ繝?.tfはローカルのものが使繧?れる、importする縺?tfstateに藹??映
 GCP identifier縺?TF公藹??サイトの各サービスの臀??番臀??import項目を見ると指定内容が分かるの縺?GCPを見て拾って縺?る
 terraform state list TF化されているリソースを見る
 terrarorm apply時にもtfstateは更新される(オプショ繝?-refresh=falseで無効可・??
  またapply時縺?-target=xxxでデプロイするリソースを特藹??できる(TFファイルだけでな縺?TFステートもターゲットになる)

Syntax - Configuration Language - Terraform by HashiCorp コメント縺?#が基本、//や/**/も使える
Terraform v0.12で藹??繧?るHCLの鐔??述につい縺? - Qiita localsや変数、リストやマップ等
Terraform職人再入門2020 - Qiita yamldecodeやjsonencode等
Terraformの基譛? - Foreverly (hatenablog.com)
変謨?
 variable(input var)縺?cmd実行時に藹??数を上書きできるが、localsはできない
 output縺?apply時縺?terminalで値が確鐔??できる、moduleから値を藹??得する

google_bigquery_connection | Resources | hashicorp/google | Terraform Registry
ドット繋縺?で値を扱える
resource "google_sql_database_instance" "instance" {
    provider         = google-beta
    name             = "my-database-instance"
}
resource "google_sql_database" "db" {
    instance = google_sql_database_instance.instance.name
    name     = "db"
}

ToSetは値設定をするが順不同で重複を省縺?
resource "xxx" "aaa" {
    for_each = toset(["foo", "bar", "bar"]) 縺?bar, foo
    name = each.key
}

for_each/eachのループ
locals {
    sg = {
        foo = "FOO"
        bar = "BAR"
    }
}
resource "xxx" "aaa" {
    for_each = local.sg
    name = each.key
    description = each.value
}

mapをリストしたものをfor_each
locals {
  images = [
    { name = "foo", image = "alpine" },
    { name = "bar", image = "debian" },
  ]
}
resource "docker_container" "this" {
  for_each = { for i in local.images : i.name => i } # こう書縺?のが正しい
  name     = each.value.name
  image    = each.value.image
}

terraform importはリソース単位、更新はできず削除してから追加 terraform state rm google_bigquery_dataset.tf-1
 実設藹??縺?importの内容が違う場合は藹??設藹??の情報縺?tfstate化されるようだ(importは項目を入れ込む感じ?)
  なので藹??環藹??に藹??更を加えるに縺?terrafrom apply、tfstate化もされtfファイ繝?/tfstate/実設藹??縺?3者で同じになる
 apply時縺?tfstateと藹??設藹??が違う場合、例えば既藹??設藹??がある場合は重複エラーになりapplyできず、importしtfstateと藹??設藹??を同じにしてから、tfファイルの内容をapplyすることが必要
terraform importで対象プロジェクトを間違えると繝?マる
 通常縺?terraform applyで縺?providerの情報を使用してプロジェクトを決めるが、importは繝?ードコードするの縺?importを間違えばなぜ変な藹??更がでるのか繧?からな縺?なる(プロジェクトが変なもの縺?stateを調べ、terraform state rmするしか)

for_eachで書いた.tfをterraform importする | DevelopersIO (classmethod.jp)
 ユーザ指定は user:aaa@xxx.com だったりメールグループなら group:aaa@xxx.com

■セットアップ
 作業ディレクトリの臀??成(プロジェクトに対するローカルのフォルダ)
 プロバイダを指定したtfファイルの臀??成(gcs縺?stateを置く設藹??が良い
  provider "google" {
    project = "bangboo-kuso"
  }
  terraform {
    backend "gcs" {
      bucket = "bangboo-kuso-terraform"
    }
  }
 terraform init ローカルに対して初期化
 プロジェクトレベ繝?ownerのサービスアカウントを持ってお縺?
 セットアップする際縺?tfsate縺?backend保存場所縺?bucket部分をコメントアウト
 bucketを作るterraformを実施しbucketを作成しつ縺?local縺?tfstateファイルを作成
 再蠎?terraformをする縺?tfstateファイルがbucketにコピーされる
 bucket部分のコメントアウトを外すと次回tfからはバケット縺?tfstate更新する
  このときローカ繝?tfstateの内容をバケットに写すか聞かれるが写す
  (写さないと差分しかバケットに鐔??かないの縺?import等が必要になる)

■既藹??リソース縺?TF化のおおよその臀??讌?
 リソースタイプと名前を定義したtfファイルを作成する(任諢?のリソース名、基本ユニーク、郤?められるものは重複してもいい)
  resource "google_cloudfunctions_function" "fuckin" { ... をtfファイルに鐔??載
   tfResourceID(リソー繧?IDというようタイプ:リソース種蛻?)縺?yourResourceName (リソース名) だけ縺?
 リソースタイプや個別パラメータは公藹??ドキュメントを藹??照しながら定鄒?
 https://registry.terraform.io/providers/hashicorp/google/latest/docs
  (簡単)tfファイル内で・??行目以外は空で、terraform planをするとエラーで藹??要なものが分かるので、それを埋める
  planが通ると自動的に値をサーバから拾って縺?る(importすれ縺?tfstate.tfに入っている or コピーし縺?TFに入れる)
  planでダメならterraform state show tfResourceID.yourResourceName 縺?stateを見縺?tfファイルにパラメータを定義してい縺?
   暫藹??に空でリソースをTFファイルに鐔??載しterraform import、次縺?tfstateを調査する
    terraform state list tfstateファイルにあるアセットを一隕?
    terraform import google_bigquery_table.xxx project/dataset/table インポート
    terraform state show google_bigquery_table.xxx tfstateの該当部を表示
    terraform state rm  google_bigquery_table.xxx インポート藹??り消し
  TF定義は鐔??数の方觸??がある、最終GCP公藹??縺?RestAPIで確認するしか
 terraform importする(公藹??ドキュメントの臀??番臀??縺?importコマンドの指定がある)
 terraform planして差分がな縺?なるま縺?tfファイルを修正する
  import(tfstate)の修正は臀??蠎?stateから削除する terraform state rm google_bigquery_dataset.tf-1
  (既藹??リソースがあってもあ縺?ま縺?tfファイル縺?tfstateの差分なの縺?initした状態縺?planしてもup-to-dateと表示されるだけ)
 tfstateファイルにおかしなものが無いか確鐔??、keyとか含まれないか

■個蛻?
リファレンス縺?optionalとなっていてもtfファイルでは藹??要な場合もある
 tfstateファイルからは藹??要ないとして自動的に削除されるが
スプシをBQでみれるFederatedQueryはテーブルだけ定義しimportしstate show調譟?
 urlをTFファイルに鐔??載する
シャーディング・??日臀??別・??テーブルは藹??義できないので縺?
 生成するクエリの方をTF化したい
Authorized viewはモジュールがあるがconflictがあり全觸??えする場合がありTF化にまだ向かない

google_bigquery_dataset_iam_memberでもAuthorized viewをはがしてしまう。
Authorized viewを使っている個所縺? google_bigquery_dataset_access あるい縺? google_bigquery_dataset 縺? access フィールドを使う。
google_bigquer_dataset_iam_policy 縺? google_bigquery_iam_binding 縺? Authoritative で権限追加でなく権限強制設定でコンソール臀??荳?分を引き剝がすので、使繧?ない方が安全。
なお、Authorized view 縺? Routines 縺?Terraform化できない事が分かっている(2022/4時点・??
ScheduledQuery 縺? Terraform化できるが実行者の設定ができない(Terraform実行者がSQ実行者?誰・??)

BQ関連ではデータセット定義、テーブル藹??義、ビュー藹??義、フェデレテッドクエリ藹??義、ScheduledQuery定義をTerraformで鐔??い
BQ権限定義、AuthorizedView定義、Routines定義は鐔??繧?ない

 BQ権限を定義するならデータセットレベル縺?google_bigquery_dataset_access 
  プロジェクトレベル縺?google_project_iam_memberで藹??施すると別なので藹??全らしい?

■TF公藹??ドキュメント
google_organization_iam_custom_role | Resources | hashicorp/google | Terraform Registry
google_organization_iam | Resources | hashicorp/google | Terraform Registry
カスタムロールを設藹??して、組織レベル縺?IAMでそれを使いたい
 TF縺?org_iamページ縺?Argument reference縺?role項目を見る縺?
  Note that custom roles must be of the format organizations/{{org_id}}/roles/{{role_id}}
 TF縺?org_iam_custom_roleページ縺?Attributes  reference縺?role項目を見る縺?
  id - an identifier for the resource with the format organizations/{{org_id}}/roles/{{role_id}}
 で臀??記と分かる、使用側と被使用側縺?TFマニュアルを両方確認する
resource "google_organization_iam_custom_role" "my-custom-role" {
  role_id     = "myCustomRole"
  org_id      = "123456789"
  title       = "My Custom Role"
  description = "A description"
  permissions = ["iam.roles.list", "iam.roles.create", "iam.roles.delete"]
}
resource "google_organization_iam_member" "my-organization" {
  org_id  = "123456789"
  role    = google_organization_iam_custom_role.my-custom-role.id
  #あるいは通蟶?"roles/bigquery.dataEditor"のようにいれるがorganizations/0123456789/roles/chinkoといれる
  member  = "user:jane@example.com"
}

resource縺?2番目リソース名を定義しますが任諢?の名前を指定します
 ここが同じ項目はユニーク制限がない場合は追加としてまとめられます
 通常はユニークにしterraformで管理するリソース名(yourResourceName)を宣鐔??します
  窶?1番目のリソースタイプ内でユニークにするのが基本・??全臀??でもユニークの方が分かり易い)

TFファイルに藹??義をしたい →定義したいリソース縺?Argument referenceの項目を設藹??
TFファイルに藹??義した内容を変数で使いたい →使いたいリソース縺?Attributes referenceを見る
terraform importしたい →インポしたいリソースのページ臀??番臀??縺?importコマンドの指定を見る

■他に臀??般的縺?TF(既藹??がimportされると以下で藹??更をapplyして運用・??
 terraform -v 稼働確鐔??
 terraform fmt ファイルの鐔??述フォーマットを整える
 terraform validate ファイルの觸??險?
 terraform plan アクションを計逕?
 terraform apply 最後に藹??更を適藹??
 terraform show ステータスを確鐔??、一隕?
 terraform destroy で簡単にインフラの吐き、initができないとき必要そう

■特藹??のリソースだけ適藹??したい
 terraform plan -target="tfResourceID.yourResourceName"
 terraform apply -target="tfResourceID.yourResourceName"
 TFファイルだけでな縺?TFステートもターゲットに含まれる
 これ縺?TFファイルにコードがな縺?TFステートだけにあるものを指定して削除軆??もできる

■TF縺?count
数を指定してその個数のリソースを作る。なのだが
 enable_lien = true モジュール蛛?/変数側でこう設藹??し
 count = var.enable_lien ? 1 : 0 リソース側縺?3項演算子を使え縺?IFのように使える
  窶?for loopのようなインクリ縺?count"+="でな縺?"="縺?1発藹??行なの縺?3項演算子縺?IFになる

■エラ繝?
bigquery access denied:
gcloud auth login --enable-gdrive-access
gcloud auth application-default login --scopes="https://www.googleapis.com/auth/drive","https://www.googleapis.com/auth/cloud-platform"
BigQuery縺?Googleドライブデータへのクエリでエラーが出るときの対蜃? (zenn.dev)

觸??他処理でロックが残る:
他の臀??業者がいなければ、terraform apply -lock=false で臀??時的に無鐔??をして軆??行
エラ繝?IDに対し縺? terraform force-unlock id_num963103164
Terraform 縺? state のロックを解除する方觸??、ロックを手動で鐔??う方觸?? | ゲンゾウ用ポストイット (genzouw.com)
Terraform縺?State Lockエラーが発生したら | DevelopersIO (classmethod.jp)


■terraformのバージョン管理
.terraform.lock.hclファイル縺?GCP provider等のライブラリのバージョン管理をしている、pyenv縺?Pipfile.lockみたい縺?Hash差分が記載されている、terraform init等で生成されapply時の設定が担保される、通蟶?tfファイル縺?providerのバージョンを記載すればよいので臀??要と思繧?れる

.terraform-versionファイル縺?terraform自臀??の鐔??求バージョンを担保できる
tfenv縺?.terraform-versionファイルにはバージョンベタ書きしな縺?てもOK | DevelopersIO (classmethod.jp)
通常縺?tfenvを使えばよい、tfファイル縺?required_versionを記載すればよいので臀??要と思繧?れる

■tfenvを使う場合
tfenv install 1.0.0
tfenv list
tfenv use 1.0.0
 terraform init
 terraform workspace list
 terraform workspace select ore_space
main.tf作成し記載
 terraform fmt tfファイルのフォーマット(書藹??は適藹??で書けばいい)
  gcloud auth login ローカル操作のための鐔??險?
  gcloud auth application-default login SDKを実行のための鐔??險?
   API&Servicesでクレデンシャルは藹??得できそう、key=xxxx
既藹??のリソースを調譟?
terrafrom import google_storage_bucket.pri-bucket project-abc123/asia-northeast1/pri-bucket 縺?importとか
 terraform refresh tfstateの最新化、どのタイミングで使う?

■既藹??のリソースを調譟?
Terraform 縺? gcloud CLI を使用した完璧縺? Google Cloud インフラストラクチャの觸??築 | Google Cloud Blog
gcloud beta resource-config bulk-export --help
gcloud beta resource-config bulk-export --project=kuso12345 --resource-format=terraform --path=/path/to/dir/
 対藹??を見ると数が少ないgcloud beta resource-config list-resource-types --format=json --project=kuso12345

terraformer import google list --projects=xxxx-123 で対象のリソース確認
terraformer import google --resources=instances,forwardingRules --regions=us-west1 --projects=xxxx-123 とか

既藹??リソー繧?import
https://www.apps-gcp.com/terraformit-gcp/
https://qiita.com/uu4k/items/48d3ecfefe57dba1d7e1

■Terraform applyで諢?図しない権限削除で障害が発生する
Terraform x GCP で、IAM権限を全削除してしまった - Qiita
resource "google_project_iam_policy" "unko" {
  project = "my-project"
  role = "roles/noguso"
  members = [
    "serviceAccount:${google_service_account.baka.email}"
  ]
}
google_project_iam_policy:書き觸??えるので臀??は無縺?なる(他を消したいときに使う)
google_project_iam_binding:付荳?、Authritativeだが他は現状維持?
google_project_iam_member:付荳?、Non-authoritativeで藹??全、まとめ難いか
 窶?_iam_policy縺?_iam_binding縺?t_iam_memberは臀??緒に使えない
 窶?_iam_binding縺?_iam_memberは臀??緒に使える

google_bigquery_dataset_iam_binding:(承鐔??済みビューの権限はな縺?なる>google_bigquery_dataset_accessを使え)
google_bigquery_dataset_iam_member:role縺?memberを1蟇?1縺?resourceを作りま縺?る、Non-authoritative
 窶?_iam_policyや_bindingはまとめ易そうだが権限消しそう

google_bigquery_dataset_iam_memberでもAuthorized viewをはがしてしまう。
Authorized viewを使っている個所縺? google_bigquery_dataset_access あるい縺? google_bigquery_dataset 縺? access フィールドを使う。

Terraform 縺? GCP のサービスアカウントを管理する - Eng (なりたい) (hatenablog.com)
Terraform 縺? GCP IAM 設藹??どれ使うのがいいのか - pokutuna (scrapbox.io)
google_project_iam | Resources | hashicorp/google | Terraform Registry
Authoritative: TFに譏?示していないものをApply時に削除しますという諢?、TFの権威
Non-authoritative: TFは権威を示さず、TFに譏?示していないものは現状維持ですという諢?

■勝手に公開
terraform vpc auto_create_subnetworks = falseにせなサブネットを公開して臀??りよる
Cloud sql縺?tfファイルに鐔??述がな縺?てもtf stateに縺?PWが出てしまう>tf化した縺?ない

■Applyの臀??存関臀??縺?depends_on(プロジェクト作成の前に権限を付荳?しようとしてエラー軆??の順蠎?)
[Terraform]Module間の値の藹??け渡しについ縺? | DevelopersIO (classmethod.jp)
 これより先にあれをTFして縺?れという記霑?

■データセット
google_bigquery_dataset | Resources | hashicorp/google | Terraform Registry
スキーマ藹??得: bq show --schema --format=prettyjson bangboo-prj:test-dataset.tbl001
ビューはコンソール・??BQ>該藹??ビュー・??detailからコピ繝?

■組織ポリシ繝?
google_organization_policy | Resources | hashicorp/google | Terraform Registry
制軆??につい縺?  |  Resource Manager のドキュメント  |  Google Cloud

■parallelismで早縺?なるかもしれない
あなた縺?terraform planを手軽に饅??速化する(かもしれない)魔法の鐔??葉 - Qiita
シェル藹??数を設藹??、確鐔??cmd縺? printenv
export TF_CLI_ARGS_plan="--parallelism=50"
export TF_CLI_ARGS_apply="$TF_CLI_ARGS_plan"

■テスト
TF Apply後には觸??証をしっかりしたい、最菴?Apply後縺?Planを再実行したい、テストスクリプト的にチェックしたい
適藹??されていないことや、TF定義縺?tfstateと藹??設藹??の差分が想藹??と違うことがある感じがするからだ
moduleを含めて条件的な書き方だと、適藹??の順蠎?の関臀??で適藹??が抜け2回以臀??TF applyしないといけなかったり

■TFファイルを分割し部分的に別環藹??縺?TFファイルを移鐔??したい
tf stateファイルを新環藹??用にコピ繝?
TFファイルを分割・??現鐔??の部分的に削除したTFファイル、と新環藹??用縺?TFファイルを準備
tf stateから不要部分を削髯?
 terrafrom state rm {{asset}}
terrafrom planで差分がないことを確鐔??
新環藹??用にコピーしたtf stateファイルを編集し準備
 下縺? terraform state push xxx.tfstate で藹??更された状態をtf stateファイルに書き戻すことができる?
 このコマンドを実行する前に藹??要に藹??じ縺? terraform state pull で最新の状態を藹??得?
 ダメなら terraform state rm で臀??要分を削る
新環藹??用縺?tfファイルを準備
新環藹??で臀??記を実行
 terraform init
 terraform state push xxx.tfstate
 terraform planで差分がないことを確鐔??

■GCP権限(メールの藹??名時)
GCP縺?GWS gmailメールの藹??名に追従して権限も付荳?状態も変化がない
しかしterraformは追従しないためtfファイルで使っている場合は藹??更する

■gcloud cmd
https://www.devsamurai.com/ja/gcp-terraform-101/
 gcloud projects list 権限あるプロジェクトを表示
 gcloud config set project [prjID] ワーキングプロジェクトの設定
 gcloud services enable iam.googleapis.com サービスの有効化
 gcloud iam service-accounts create terraform-serviceaccount \
  --display-name "Account for Terraform" サービスアカウント作成
 gcloud projects add-iam-policy-binding [PROJECT_ID]
  --member serviceAccount:terraform-serviceaccount@[PROJECT_ID].iam.gserviceaccount.com --role roles/editor 権限付荳?
 gcloud iam service-accounts keys create path_to_save/account.json
  --iam-account terraform-serviceaccount@[PROJECT_ID].iam.gserviceaccount.com クレデン発鐔??
 export GOOGLE_CLOUD_KEYFILE_JSON=path_to/account.json クレデン設定
↑サービスアカウントで鐔??証 環藹??変数にファイルパスを渡す
 gcloud auth application-default login だと個莠?
 これにクレデンシャルファイルのパスを渡すとサービスアカウント縺?gcloudコマンド打てるはず

Terraformで鐔??数リージョンをまたいだリソース制御する (mosuke.tech)
Terraform workspaceを利用して環藹??豈?のリソース名の藹??更を行う (mosuke.tech)


End

Posted by funa : 10:14 PM | Web | Comment (0) | Trackback (0)