Hejdaの見る夢

一人前のエンジニアを目指して頑張ったこととかをつらつら書くブログ

[ 2024/02/01 から ] Google Cloud のネットワーク料金が一部修正( 値上げ )される件

概要

Google Cloud において、以下のサービスが 2024/02/01 から値上げ されるようです

  • External IPs
  • Cloud NAT
  • Network Egress
  • Cloud Interconnect Egress
  • Cloud Interconnect 100Gbps

External IPs

要約

  • 全てのリージョンにて料金が修正される
  • GCE の場合は VM instances のタイプ( Standard, Preemptible )によって、また IP アドレスのタイプ( Static and Ephemeral )によって料金が異なる( 元から違う )
    • Spot VM については記載が無いが、おそらく preemptible と同様になると思われる

Cloud NAT

要約

  • Cloud NAT ゲートウェイマッピングされた静的 IP アドレスと一時 IP アドレスが 今までは無料から $0.005/時間 になる
  • もともと、その Cloud NAT を使っている VM Instance の数で課金されていたが、追加で Cloud NAT に紐づく IP アドレスにも課金が必要になる

cloud.google.com

Network Egress

要約

cloud.google.com

cloud.google.com

Cloud Interconnect Egress

要約

  • 下り( Egress )の料金が いままでは無料だったのが課金対象になる
    • GiB 毎の課金
    • ロケーション( Asia とか Europe とかの単位 )で料金が異なる

cloud.google.com

Cloud Interconnect 100Gbps

要約

  • Dedicated Interconnect の 100-Gbps 利用時の料金が変更
    • $18.05/時間 ---> $ 23.28/時間 に変更

合わせて読んでおきたい

他のクラウドも同じく引き上げてきましたね 🤔

www.publickey1.jp

Cloud Run 上の phpMyAdmin を経由して Cloud SQL にアクセスする

概要

Cloud Run 上の phpMyAdmin を経由して Cloud SQL にアクセス環境を構築します

  • 使用する phpMyAdmin は Docker Hub の公式コンテナイメージを使用します
    • 現時点で最新の phpmyadmin:5.2.1-apache を使用します

hub.docker.com

github.com

⚠ 注意

元情報は Cloud Run 上の phpMyAdmin を経由して Cloud SQL にアクセスする環境を構築するハンズオン にあります ;)

作ってみる

0. 事前の定義

export _gc_pj_id='Your Google Cloud Project ID'

export _common='phpmyadmin'
export _zone='asia-northeast1-b'
export _region='asia-northeast1'
export _date=`date +"%Y%m%d%H%M"`
  • API の有効化をする
    • 一回やれば OK
gcloud beta services enable sqladmin.googleapis.com --project ${_gc_pj_id}

1. Cloud SQL の準備

  • Cloud SQL instance を作成する
gcloud beta sql instances create ${_common}-insrance-${_date} \
  --database-version=MYSQL_8_0 \
  --tier=db-custom-1-3840 \
  --zone=${_zone} \
  --root-password=password123 \
  --project ${_gc_pj_id} \
  --async
  • Cloud SQL database を作成する
gcloud beta sql databases create ${_common}-db \
  --instance=${_common}-insrance-${_date} \
  --project ${_gc_pj_id} \
  --async
  • Cloud SQL 用の User を作成する
gcloud sql users create ${_common} \
  --instance=${_common}-insrance-${_date} \
  --password=${_gc_pj_id} \
  --project ${_gc_pj_id} \
  --async

2. Service Account の作成

  • Cloud Run 用の Service Account を発行し、 Cloud SQL に接続できる最低限の Role を付与する
gcloud beta iam service-accounts create ${_common}-sa \
  --description="Cloud Run 用のサービスアカウント" \
  --display-name="${_common}-sa" \
  --project ${_gc_pj_id}
gcloud beta projects add-iam-policy-binding ${_gc_pj_id} \
  --member="serviceAccount:${_common}-sa@${_gc_pj_id}.iam.gserviceaccount.com" \
  --role="roles/cloudsql.client"

3. Cloud Run にデプロイをする

  • Cloud Run の Service をデプロイする
    • phpMyaAmin の最新ののコンテナイメージ phpmyadmin:5.2.1-apache を使う
    • --session-affinity : phpMyAdmin がセッションを必要とするため。
    • --service-account : Cloud Run の Service Account の指定
    • --set-env-vars : phpmyadmin:5.2.1-apache が読み込める設定を Cloud Run の環境変数として設定
    • --allow-unauthenticated : サンプルなので allUser からのアクセスを許可
gcloud beta run deploy ${_common} \
  --project ${_gc_pj_id} \
  --image phpmyadmin:5.2.1-apache \
  --region ${_region} \
  --service-account "${_common}-sa@${_gc_pj_id}.iam.gserviceaccount.com" \
  --add-cloudsql-instances ${_gc_pj_id}:${_region}:${_common}-insrance-${_date} \
  --set-env-vars DB_USERNAME=${_common} \
  --set-env-vars DB_PASSWORD=${_gc_pj_id} \
  --set-env-vars PMA_HOST=localhost \
  --set-env-vars PMA_SOCKET="/cloudsql/${_gc_pj_id}:${_region}:${_common}-insrance-${_date}" \
  --set-env-vars APACHE_PORT=8080 \
  --session-affinity \
  --allow-unauthenticated
  • Cloud Run の Service の状態を確認する
gcloud beta run services describe phpadmin \
  --region ${_region} \
  --project ${_gc_pj_id}

4. Web ブラウザから確認する

---> Cloud Run 上の phpMyAdmin 経由して Cloud SQL にアクセスすることが出来ました :)

5. セキュリティを強化する

今のままだと誰からもアクセス出来てしまうので非常にリスクの高いままです

Cloud Run の前に Cloud Load Balancing を設置し Cloud IAP にて Cloud IAM による認証をするか、 ID トークンを使って Cloud Run にて Cloud IAM による認証をしましょう

iganari.hatenablog.com

クリーンアップ

  • Cloud Run の Service を削除する
gcloud beta run services delete ${_common} \
  --region ${_region} \
  --project ${_gc_pj_id}
  • Cloud SQL のリソースを削除する
gcloud sql users delete ${_common} \
  --instance=${_common}-insrance-${_date} \
  --project ${_gc_pj_id} \
  --async

gcloud beta sql databases delete ${_common}-db \
  --instance=${_common}-insrance-${_date} \
  --project ${_gc_pj_id}

gcloud beta sql instances delete ${_common}-insrance-${_date} \
  --project ${_gc_pj_id}

追記

元情報のリンクを修正しました (2023/11/30)

Windows on GCE で文字コードを UTF-8 にする

事象

Windows on GCE から Cloud SQL for PostgreSQL に接続する際に文字コードの差異による Warning が出ます

これはコマンドプロンプト文字コードのみを UTF-8 にしても同様に出ます

コマンドプロンプト文字コードUTF-8 の確認

chcp 65001

Cloud SQL for PostgreSQL のデータベースの文字コードはデフォルトで UTF-8 の確認

問題点と解決方法

Warning が出る理由は Windows の自体のシステムの文字コードUTF-8 ではないためであり、コマンドプロンプト文字コードを変更してもシステムの文字コードを変更しない限りは Warning は消えません

故に、Windows のシステム全体の文字コードUTF-8 に変更する手順をまとめました ;)

修正手順

1. 左下にある Windows のロゴ をクリック

2. 歯車のロゴ をクリック

3. Time & Language をクリック

4. Region をクリック

6. Region 配下の Change date, time, or number formats をクリック

7. タブの Administrative をクリック

8. Language for non-Unicode programs の Change system locale をクリック

9. Bata: Use Unicode UTF-8 for worldwide language support にチェックをいれて、 OK をクリック

10. システムの再起動を促されるので Restart now をクリック

※ クリックしても何も起きないので次項に進む

11. GCE Instance を再起動 ( stop -> start ) する

確認

コマンドプロンプトにて同じ操作を行った際に同じエラーが出ていないのが確認出来れば OK です

システム全体の文字コードUTF-8 に統一されたので、 文字コードの差異の Warning は出なくなりました :D

まとめ

Windows on GCE で文字コードの Warning が出る際は、この記事の手順でシステム全体の文字コードUTF-8 に変更してみてください :)

Cloud Armor にて ASN ( AS 番号 ) でアクセス拒否設定をしてみた

概要

Cloud Armor は様々なアクセス制御をすることが出来ます

ASN ( AS 番号 ) でもアクセス制御をすることが出来るので、今回はそれを試してみたいと思います :D

cloud.google.com

Cloud Armor とは

Google Cloud ( GCP ) が提供している WAF ( Web Application Firewall ) です

Google 規模の DDos 攻撃対策がデフォルトで備わっており、GCLB と組み合わせることで非常に強力なサービス保護を簡単に設定することが出来ます

cloud.google.com

ASN とは

Autonomous System Number (ASN) であり、 AS 番号や自律システム番号などと呼ばれます

インターネットは 特定の運用ポリシーを持ったネットワークのかたまり 同士の接続により成り立っていて、ASN はその かたまり に付与されている番号です

詳しくは JPNIC のページを参照して下さい

www.nic.ad.jp

実際にやってみる

自分の IP アドレスを確認する

外部サイトで確認できます

www.cman.jp

私の自宅で確認してみたスクショ

自分の IP アドレスから ASN を確認する

https://bgpview.io/

で調べることが出来ます

上記からサーチするか、URL の PATH で入れると結果が帰ってきます

例: https://bgpview.io/ip/8.8.8.8

bgpview.io

私の自宅で確認したスクショ

---> ASN の列に表示されている文字列をメモっておきます

Cloud Armor に ASN を登録する

先程メモしておいた ASN を Cloud Armor の Advanced mode のルールとして追加します

詳細な記法は公式ドキュメントを参照して下さい

cloud.google.com

私の自宅が所属しているネットワークの ASN を拒否し、502 のステータス返すように設定したスクショ

Web ブラウザで確認する

Cloud Armor の設定が済んだら Cloud Armor を適用しているアプリケーションを Web ブラウザで確認してみましょう

---> 設定通りアクセスを拒否し、 502 のステータスを返していることを確認出来ました ;)

まとめ

今回は Cloud Armor にて ASN でアクセス拒否の設定を試してみました

ASN の他にも 国コードHTTP リクエストヘッダーHTTP リクエストメソッド 等でもアクセス制御が出来るので、そのうち試してみたいと思います

Have fan !! :)