gcloud asset analyze-iam-policy --organization=123456 --identity="user:fack@unko.com"
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に変わった
■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 CloudGoogle 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/// サービスアカウントキーを発行せずにサービスアカウント権限を使う
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
GCPでセキュリティガードレールを作るための方法と推しテク - Speaker Deck サブネット作成の際はセキュリティの観点からフローログを15分で取る
監査ログを有効に
ContainerResistryの脆弱性スキャンを有効に
ログ:データアクセス/ポリシー拒否は30日、管理アクティビティは400日
BQにバックアップしたい
SecurityCommandCenterで脆弱性を検知
■タグとラベル
組織ポリシーはタグで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
///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等のコードが直接コンソールに掛ける
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 管理者 ヘルプ↓
■アプリ
公開資料 - App Modernization OnAir 〜 モダンなアプリケーション開発とは 〜 (cloudonair.withgoogle.com)cloud runの設定だけでCDCIできる(第10回
End