/// BANGBOO BLOG ///
■21/5/22 12:00AM
GCP ログ・アセット調査 Logging/Bigquery information schema/Asset inventory
■Cloud Loggingで調べる
ログ エクスプローラを使用したサンプルクエリ  |  Cloud Logging  |  Google Cloud
Logging のクエリ言語  |  Google Cloud
とりあえず何かを出して、クリックして不要な要素をHideしていくといい

/// 誰が権限を変更したか
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
//// 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
■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#止める(止め方が分からん)ps からの 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

■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
■ZOZOの新米Google cloud管理者
新米Google Cloud管理者の奮闘記のその後 〜Organizationの秩序を維持する試み〜 - ZOZO TECH BLOG

■データ
次世代データ基盤:データレイクハウスを Google Cloud で実現する (zenn.dev)

■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を書いてくれる


Comment (0)

■21/5/20 9:00PM
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
無料枠Google Cloud の無料プログラム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段階認証、信用するデバイスの設定があるようだ

GCP ハンズオンセミナー Google_Cloud_GCPHandson_infra1122.pdf (cloudplatformonline.com) 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=jahttps://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=jahttps://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-project3)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 cmdgcloud projects list --filter='bangboo-' --format=json | grep -oP '(?<="name": ")[^"]*' gcloud tasks list  |  Google Cloud CLI Documentation
どの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 listgcloud config configurations create unko-profilegcloud config set account unko@dot.comgcloud config set project onara-project
gcloud config configurations activate unko-profilegcloud auth logingcloud でプロジェクトの切り替え設定 - Qiita
■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' とかの条件
■GCP Cloud asset inventory 5週間分の履歴が保管される CAI exportにより任意のタイムスタンプでBQあるいはGCSに履歴情報を吐き出す
  コマンドやライブラリでダンプが可能  gcloud asset exportコマンド、Pythonのライブラリ cloud.asset_v1でもBQにダンプできる
  Cloud Asset Inventory を使用してGoogle Cloud上のアセットを分析する - NRIネットコムBlog (nri-net.com)
  Cloud Asset Inventory クライアント ライブラリ  |  Cloud Asset Inventory のドキュメント  |  Google Cloud gcloud CLIのgcould asset search-all-resourseコマンドにより設定
  BQに吐き出し各種状況のチェックやポリシーのチェックに活用

権限の確認もコマンドでできる gcloud asset analyze-iam-policy --organization=123456 --identity="user:fack@unko.com"
■Cloud logging
Cloud Audit Logging 活用のベスト プラクティス | Google Cloud BlogStackdriver Loggingのログを失う前にエクスポートしておく方法(前編) | apps-gcp.comStackdriver Loggingのログを失う前にエクスポートしておく方法(後編) | apps-gcp.comGoogle Cloudの監査ログを理解する&長期間保存方法 - NRIネットコム Design and Tech Blog (nri-net.com)
Cloud Loggingの利用方法 | apps-gcp.com
料金  |  オペレーション スイート  |  Google Cloud 毎月取込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%等で絞る等Google Cloud のログ設定 Cloud Logging の概要と一部設定など - QiitaCloud Logging の基本的な使い方 - Qooskyクイックスタート: gcloud CLI を使用したログエントリの書き込みとクエリ  |  Cloud Logging  |  Google Cloud400日の_requiredに入らないものが30日の_defaultに入るLogルータのシンクでフィルタ、サンプリングしLogバケット/GCS/BQ/Pubsubに転送 requiredでなくdefaultに入る時にLogルータを設定しフィルタを掛ければ減る
 自動でSAが作られるので作成や権限付与は不要  包含フィルタが空なら全ログ  クエリsample(insertId, 0.10)で10%のサンプルLogバケットのdefault30日は変更できる
全ログをBigqueryに入れるには組織プロジェクトで転送を設定すればいいログ エクスプローラを使用したサンプルクエリ  |  Cloud Logging  |  Google Cloud
Logging のクエリ言語  |  Google Cloud
 /// BANGBOO BLOG /// - GCP ログ調査 Logging/Bigquery information schema クエリ:Loggingをクエリで見る、Logルータのシンクをフィルタ(サンプル)する
■Monitoring
ダッシュボードはサンプルから作ると楽
MQLで改変、クエリを実行するとエラーメッセが出るんでfetch gae_instance::appengine.googleapis.com/flex/cpu/utilization | { top1, max(val()); bottom 1, min(val()) } | UNIONGoogle Cloud metrics  |  Cloud Monitoring
■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.jsoncloud shell terminalでもファイルをアップロードできるのでup後下記でOKgcloud 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.comsvacを指定するならこれでもいいがKeyがいる gcloud auth activate-service-account chinko-compute@developer.gserviceaccount.com --key-file=/himitsu/dame_key.json --project=bangboo-kusoログインユーザ確認で要確認 gcloud auth listgcloudコマンドのリファレンス gcloud auth activate-service-account  |  Google Cloud CLI Documentation
■セック
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_levelgoogle_access_context_manager_service_perimeter | Resources | hashicorp/google | Terraform | Terraform Registry

VPCサービスコントロール+Access context managerVPC 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で使うのはネットワークタグで種類が違うと思われるラベルはリソース整理や課金整理のための機能タグとラベルの違いについて (Tags / Labels) - G-gen Tech Blog
■ネットワーク外部IP External IP addressで取得、300円/月位、通常一つは自動で割り当てられるPoP(Point of presence) 世界70か所でGCPとエッジ(ネット)接続NWトポロジーで通信が可視化でき通信コストが分かるNetwork Topology – Network Intelligence – Google Cloud Platform 詳細開くのは片側だけにすると使用帯域が表示される

■課金
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型 subscriberpublisher -> 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のプロジェクトを使う
Google Cloud Platform Projects  |  Apps Script  |  Google Developersデフォルトプロジェクトから切り替えると戻せない、利点も少しだけ(サイト参照)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編)その1 - Qiita
メールグループは任意にg workspace管理画面で削除が可能GCP上はDeleted groupとなり1か月程度で削除される(IAMの状態は見れるが使えない)
■アプリ
公開資料 - App Modernization OnAir 〜 モダンなアプリケーション開発とは 〜 (cloudonair.withgoogle.com)
cloud runの設定だけでCDCIできる(第10回

End
Comment (0)

Navi: <  3 | 4 | 5 | 6  >
-Home
-Column [126]
-Europe [9]
-Gadget [76]
-Web [123]
-Bike [4]

@/// BANGBOO BLOG ///