Hejdaの見る夢

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

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 !! :)

Cloud Run を ID トークンによる簡易認証で見てみる ( Authorization: Bearer )

概要

Cloud Run のサービスに認証機構をつけたい場合は Identity-Aware Proxy ( IAP ) が推奨されます

cloud.google.com

しかし、 Cloud Load Balancing を設置したり Oauth 画面を設置したりしなくては行けず、すこし面倒です…

今回は Cloud Run の Permission だけで、 Web アプリを見れるやり方を試したいと思います

cloud.google.com

※ 今回は デプロイするアカウントと Cloud Run 上のアプリを見るアカウントは別の場合を想定しています

  • Developer の A
    • Cloud Run を使用している GCP Project 内で IAM などを変更出来る強い権限を持っている
  • Viewer の X ( = viewer-xxx@gmail.com )
    • Cloud Run 上にデプロイされた特定のサービスだけを閲覧のみ出来るユーザ
    • Cloud Run のページすら見れない

準備

A が Cloud Run に適当なサービスを 未公開 でデプロイします

今回は pkg-gcp-run-basic というサービスがデプロイされています

A による IAM での作業

※ 今回は デプロイするアカウントと Cloud Run 上のアプリを見るアカウントは別の場合を想定しています

A が Cloud Run が動いている GCP Project の IAM にて、 X の Google アカウントに Cloud Run Invoker(roles/run.invoker) を付与します

export _gcp_pj_id='Cloud Run を使用している GCP Project ID'
export _run_service='pkg-gcp-run-basic'
export _region='asia-northeast1'
export _web_viewer_account='viewer-xxx@gmail.com' 
gcloud beta run services add-iam-policy-binding ${_run_service} \
  --region=${_region} \
  --member="user:${_web_viewer_account}" \
  --role='roles/run.invoker' \
  --project ${_gcp_pj_id}

X の確認方法

X は自分の Google アカウントの ID トークンを利用することで Cloud Run のサービスを見ることが出来ます

gcloud beta auth print-identity-token ${_web_viewer_account}

上記で出力されたトークンをメモします

X がコマンドラインで確認

Cloud Run にデプロイしたサービスの URL が必要になります

export _run_service_url='Cloud Run にデプロイしたサービスの URL'
  • cURL コマンドにて、ヘッダに Authorization: Bearer で ID トークンを入れます
curl -H "Authorization: Bearer $(gcloud beta auth print-identity-token ${_web_viewer_account} )"  ${_run_service_url}
### Sample

# curl -H "Authorization: Bearer $(gcloud beta auth print-identity-token ${_web_viewer_account} )" ${_run_service_url}
Hello World!! :D

---> 見ることが出来ました :D

X が Web ブラウザで確認

Web ブラウザにてヘッダを修正する必要があります

今回は ModHeader を利用します

chrome.google.com

Request header に Authorization を入れ、ValueBearer [自分の ID トークン] を入れましょう

---> Web ブラウザでも無事に表示できました :D

まとめ

Cloud Run の Permission だけの時のアクセス方法を試しました

簡易的な確認であればこの認証方法でも問題無さそうですね!

もちろん、本格的な運用を考える時は IAP を使うことを推奨します ;)

Have fan !! :)

Cloud Armor でお手軽に reCAPTCHA を実装してみる

概要

Google Cloud で reCAPTCHA Enterprise を気軽に実装出来る記事を読んだので試してみました ( 2022/1 時点では pre-GA ( Preview ) の機能です )

  • 元記事 ( 日本語翻訳 Ver )

cloud.google.com

  • 実際にやってみた Gif

https://raw.githubusercontent.com/iganari/zatsu/main/reCAPTCHA-Enterprise-on-Cloud-armor/movie/main.gif

注意点

この記事の内容は 2022/1 時点での情報になります ( 読んでいる時点では最新の情報では無い可能性があり、記事の内容と実際の仕様が変更している可能性があります )

また Cloud Armor を使った実装なので、 PATH 単位で reCAPTCHA をつけることになります ( よくある 特定の場所をクリックしたら reCAPTCHA が起動する では無いです )

この reCAPTCHA Enterprise は Google Cloud 以外にデプロイしているアプリケーションでも使用出来るようです

詳細: reCAPTCHA Enterprise のセットアップ方法の選択

https://cloud.google.com/recaptcha-enterprise/images/flowchart.png

準備

GCLB を使った Web アプリを用意しておきます

以下のハンズオンを利用して以下のような Web アプリを事前に用意しておきました

Hands On Serverless Network Endpoint Group

https://raw.githubusercontent.com/iganari/handson-serverless-neg/main/multi-serverless-application/_img/neg-serverless-00.png

公式ドキュメント

この記事の操作などは以下の公式ドキュメントを参考にして実行しています

cloud.google.com

環境変数を用意しておく

export _gcp_pj_id='Your GCP Project ID'
export _common='check-serverless-neg'
export _region='asia-northeast1'

API の有効化

  • 自分の GCP Project 内で reCAPTCHA Enterprise の API の有効化します
gcloud beta services enable recaptchaenterprise.googleapis.com --project ${_gcp_pj_id}
  • 有効化出来ているかの確認します
gcloud services list --enabled --project ${_gcp_pj_id} | grep recaptchaenterprise

Cloud Armor とそのルールを作成

  • Cloud Armor を作成します
gcloud beta compute security-policies create ${_common} --project ${_gcp_pj_id}
  • Cloud Armor 内のルールを作成します
gcloud beta compute security-policies rules create 1000 \
  --security-policy ${_common} \
  --expression "request.path.matches('/app')" \
  --action redirect \
  --redirect-type google-recaptcha \
  --project ${_gcp_pj_id}
  • ルールの確認します
    • ローカルに吐き出します
gcloud beta compute security-policies export ${_common} --file-name=${_common}.json --file-format=json --project ${_gcp_pj_id}
cat ${_common}.json

Cloud Armror をアタッチ

  • App Engine 用の Backend Service check-serverless-neg-backend-service-app に Cloud Armor を設定します
gcloud compute backend-services update check-serverless-neg-backend-service-app \
  --security-policy ${_common} \
  --global \
  --project ${_gcp_pj_id}

---> 設定はこれで完了です :)

Web ブラウザで確認する

ブラウザにて

  1. TOP ページ ( / ) を確認
  2. Functions の URL ( /func ) を確認
  3. Cloud Run の URL ( /run ) を確認
  4. App Engine の URL ( /app ) を確認 ---> reCAPTCHA Enterprise にリダイレクトしてリクエストを評価する
  5. Cloud Run の URL ( /run ) を確認
  6. App Engine の URL ( /app ) を確認 ---> 先程 reCAPTCHA でリクエストを評価しているので次は直ぐに表示される

https://raw.githubusercontent.com/iganari/zatsu/main/reCAPTCHA-Enterprise-on-Cloud-armor/movie/main.gif

https://raw.githubusercontent.com/iganari/zatsu/main/reCAPTCHA-Enterprise-on-Cloud-armor/photo/main.png

---> 意図した通りに実装することが出来ました :)

まとめ

Cloud Armor のルール 1つ追加するだけで、自分のサイトに reCAPTCHA を実装することが出来ました :)

他にも reCAPTCHA Enterprise を実装する方法があるので、自分のサイトに reCAPTCHA を設定したいと考えた場合は是非検討してみてください ;)

cloud.google.com

Have fan !! :)