Carpe Diem

備忘録

OPAでREST APIのAuthorizationを行う

概要

REST APIのAuthorizationをOPAに任せ、ミドルウェアなどで統一した処理にすることで認可処理の運用や柔軟性を向上させることができます。

今回はその実装方法を紹介します。

環境

  • opa v0.32.0
  • go v1.17

アーキテクチャ

アーキテクチャのイメージとしては以下です。
アクセスしたクライアントがその権限を持っているかOPAでチェックし、権限を持っていればアプリケーションサーバ側の処理④を実行します。

f:id:quoll00:20210913065102p:plain

続きを読む

OPA (Open Policy Agent) を使ってみる

背景

Policy as a Code(ポリシーをコードベースで管理する)の汎用的なエンジンとしてOPA - Open Policy Agentオーパ)があります。

用途としては

  • APIの権限管理(Authorization)を汎用化&共通化したい
  • ネットワークの疎通に関するホワイトリストブラックリスト)を汎用化したい
  • Terraformやらk8sのコードに独自のLinterを用意したい
    • TerraformでAWSのtagつけを必須にしたい、等

といった際に利用できます。

またエコシステムも充実しており、すでに多数のツールと組み合わせることが可能です。

f:id:quoll00:20210910071747p:plain

ref: Open Policy Agent | Ecosystem

今回はそのOPAの基本的な使い方を説明します。

続きを読む

bugsnagのWeb UIでスタックトレースを表示する方法

背景

サーバサイドでエラー検知・トラッキングSaaSを利用する場合、bugsnagが候補に挙がると思います。

ただそのままerrorをNotify()してみてもスタックトレースがきちんと表示されない問題にぶつかります。

今回はGoでbugsnagを利用する場合に、bugsnagのWeb UIでスタックトレースを表示する方法を紹介します。

環境

  • Go 1.17
  • bugsnag-go v2.1.2
続きを読む

fmt.Errorfとxerrors.Errorfと独自エラーと

背景

エラーハンドリングでは

  • エラーが発生した箇所を追うことができる
  • エラーの原因によって処理を分岐することができる

といったことが重要です。

Go 1.13から入ったラップする仕組みにより、エラーメッセージにアノテートしていくことができエラーの発生箇所を追いやすくなりました。
またerrors.Isによりエラー原因による条件分岐もしやすくなりました。

今回はそれらと独自エラーの扱いについて説明します。

環境

  • Go 1.16.7
続きを読む

VPC ネットワークピアリングで内部IPで疎通する

概要

前回はCloud VPNによる内部IPでの疎通方法を紹介しました。

christina04.hatenablog.com

今回はVPCピアリングを用いた疎通方法を紹介します。

VPCピアリングを用いて内部IPによる接続を行うと以下のメリットがあります。

  • レイテンシ
    • 外部IPアドレスを使用する接続よりもレイテンシが低い
  • セキュリティ
    • インターネットに公開することがないのでそのリスクを考慮しなくて良い
  • コスト
    • 内部通信扱いされるので、本来外部IPアドレスを使った下り(外向き)で発生するはずのコストが発生しない
続きを読む

Cloud VPN (Classic VPN) を使ってみる

概要

GCPVPCは物理ネットワークを仮想化したネットワークであり、異なるVPC同士は直接疎通することはできません。
通常であればExternal IP経由もしくはLBなどを用いてアクセスしますが、内部IPで疎通したい場合はVPNを構築する必要があります。

検証

事前準備

VPCの用意

VPC リージョン Subnet
vpn-network-1 us-central1 10.5.4.0/24
vpn-network-2 europe-west1 10.1.3.0/24

f:id:quoll00:20210725110253p:plain

続きを読む

gRPCのkeepaliveで気をつけること その2

背景

以前gRPCのkeepaliveについて説明しました。

christina04.hatenablog.com

keepaliveの目的は

  1. idleコネクションを維持するため
  2. 死んだコネクション(TCPハーフオープン)があったら切断し、再接続するため

と書きましたが、どちらの検証もアクティブなRPCがなくなってからのkeepaliveの例であり、リクエストが続く中での挙動は検証できてなかったので今回はそれを行います。

環境

  • grpc-go v1.38.1
  • Ubuntu 18.04 (Linux Kernel 4.15.0-147-generic)
続きを読む