Hejdaの見る夢

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

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

八丈島でワーケーションしてきました🌴🌴

注意

ワーケーション制度は執筆当時に所属している会社のトライアル制度です。故にこの制度の詳細は一切記しません。

また、この制度に関する質問や問い合わせは御遠慮ください。

概要

勤めている会社にて ワーケーション制度 というのがトライアル実施されました。

一般的に「ワーケーション」とは「ワーク=仕事」と「バケーション=休暇」を組み合わせた造語で、観光地など自宅以外の非日常の場所でリモートワークを行いつつ、休暇を楽しむ新たなワークスタイルを意味しているらしいです。

今回使った制度も上記の認識と大きく違いは無いと思います。

早速それを使って八丈島で3日間ワーケーションをしてきたので、その時の記録を残しておきます

東京出発

東京・竹芝客船ターミナルから 22:30 発の船で移動。

出港後しばらく甲板でお酒を飲んでいましたが、風が強かったので短時間しか入れず…

東京湾内を出る頃には圏外になるので、適当にお酒を飲んで寝ました。

八丈島到着

波がかなり高かったらしく、接岸するのに時間が掛かっていました ( ※ 波が高いと接岸出来ず、他の港や島に一時避難する事もざらにあるそうです

着いた港から宿までは5分掛からない近さなので、軽く船酔いを残しつつ 9:30 から普通に仕事を開始出来ました。

f:id:nari_kyu:20211031230029j:plain

1日目

オンライン MTG と 1 人作業が半々位の日なので、MTG では八丈島で仕事してるのをネタにしつつ、いつも通りに仕事を遂行。

業後にスーパーで食料を調達しつつ、チャリで軽い島散策と島民の方に地元の飲み屋を紹介してもらうしました。

夜は宿にて同僚とお酒を飲みつつ、テックな話題で盛り上がりました。中でも、GCLB のアンドキュメントな部分をハックできた時はテンションが上がりました。

2日目

この日は構築作業やドキュメンテーションが主だったので、「Wifi とバッテリーさえあればどこででも仕事出来るんだなぁ」と改めて実感しながら、黙々と一人作業をいつも通りやってました。

夕方以降は島散策、露天風呂、飲み屋とハシゴしたらあっという間に日付が変わってましたw

3日目

この日の仕事はオンライン MTG と構築作業が半々くらいボリュームでしたが、チームで良いことがあったので、同僚と「やってて良かったねぇ」とホッコリしてました。

この日の仕事もキリの良いとこで辞めて島滞在最後の夜に繰り出したのですが、結局昨日と同じルートになりました。

ただ、現地の方から地元の隠れ観光スポットなどを教えてもらったので、来年も来島する流れになりそうです。

八丈島出発

帰る日の早朝に海を見に行ったのですが、波が高かったので早々に船で帰ることを諦め飛行場に向かいました

飛行機だと 1 時間くらいで東京に着くってのと、9 時発の飛行機に滑り込めたのでそのまま搭乗することにしました ( 船だと 9 時間くらい圏外になるので、やることないな。ってのもありました

f:id:nari_kyu:20211031231329j:plain

東京着

わずか 1 時間で東京に戻れたので、家に帰りお昼を食べてから、自転車に付着した潮を拭くなど。

それくらい帰りは短時間で、かつ日常に戻れました。

まとめ

今回の八丈島でのワーケーションを通じてかなりリフレッシュ出来ました。

八丈島はこの時期でも気候はまだ暖かく、ネットインフラもある程度は整備されているので、短期ワーケーションなら確実にリフレッシュ出来ると思います。

次に行く機会がある場合は島散策や観光をもっとしたかったので、仕事日 + 観光でもう一泊するくらいする予定で行きたいな!と思いました :D