Hejdaの見る夢

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

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

CKAD 受験備忘録

概要

CKAD-JP を受けての備忘録です

これから試験を受ける人の助けになれば幸いです

  • 注意点 1
    • このエントリーはあくまで私自身が行った勉強方法と試験対策なので、同じことをすれば合格出来るというものではありません :(
  • 注意点 2
    • 普段から GKE を触りまくってるので、基本的な操作方法や概念をすこ〜〜〜〜しだけ取得しているという前提です

簡単な時系列

本気で試験対策をした時にやったこと

Chrome プロフィールで CKAD 専用のプロフィール作った

CKAD の試験は以下の特徴を持っています

  • Web 上で受験する際に、試験のタブ以外にもう一個タブを開いて良い
  • 試験中に公式ドキュメントを見て良い

ゆえに普段の仕事やプライベートのブックマークが入っているプロフィールではなく、試験専用のプロフィールを作成し、集中する基盤を作りました

f:id:nari_kyu:20210925175839p:plain

さらに試験中に検索しやすいようにブックマークをかなり用意しました( けど、試験中は普通に検索してました )

f:id:nari_kyu:20210925180754p:plain

CKAD-exercises をやる

CKAD Exercises

他の方の受験エントリーでもかなり取り上げられているので詳細は割愛しますが、やっていて損は無いと思います

わたしは 1 回目の受験の時に 2 周弱くらいしました

2 回目の受験の際も手を動かしてはいませんが、回答のやり方がぱっと出るくらいには反復して見てました

Killer Shell をやり込む

Killer Shell とは Kubernetes Exam 対策に特化したサービスです

CKAD 用の Killer Shell

f:id:nari_kyu:20210925183039p:plain

試験のバウチャーに含まれる Killer Shell を詰まること無く解けるようになるように毎日やりました

実際の試験よりも難しく設定してあるらしく、これをスラスラ解けるようになれば試験対策として良いだろうと考えたためです

また、1 番効果があったかと思います

参考書籍について

試験対策としては上記に挙げたとおりですが、そもそも普段の業務で GKE を使っているので、 K8s 及び GKE に関して普段から勉強と情報収集をしています

K8s の基礎を学びたい(学びなおしたい)際は以下の書籍を繰り返し見るようにしています

しくみがわかるKubernetes

Kubernetes完全ガイド 第2版

試験をいつか受けようと思っている方は、まずは上記の書籍を読むところからお勧めします :)

まとめ

試験特有の問題形式があるので試験対策は大事です。普段業務で使っているからといって慢心せず、しっかり試験対策をしましょう。

試験は試験、業務は業務(もしくは私用)です :(

次は Certified Kubernetes Administrator (CKA) をとるぞー :D