tjinjin's blog

インフラ要素多めの個人メモ

oauth2-proxy + Cognito使ってアクセスを制限している話

About

この記事は LITALICO Engineers Advent Calendar 2021 2つ目 4日目の記事です。

株式会社LITALICOでSREグループのマネージャをしております、 tjinjinです。4回目の登場です。 今回はoauth2-proxy + Cognito使ってアクセスを制限している話を書きます。

経緯

認証機構が付いてないツール群に関して、一部の限られたユーザだけにログインさせることを目的としてBasic認証を使っている箇所がいくつかありました。

小規模なら問題はないのですが、利用者が増えてきたり他のプロジェクトへの移動があったり複数のツールでBasic認証を導入したりと管理が煩雑な状況になっていました。 ユーザ管理するところを減らしたかったのでoauth2-proxy + Cognitoに置き換えてみました。

一旦はそれで良かったのですが新たな要件が出てきたのでそちらについて書きます。

要件

元々は管理ツールは開発者のみに公開しておりましたが、業務効率化のためCSメンバーにも使ってほしいという要件が出てきました。

  • 既に使っている開発者用のUserPoolにユーザを追加する?
    • 他のツールでも同じUserPoolを使っているため、CSメンバーが管理ツール以外のものを使える状態になってしまう

いくつか方法はありそうでしたが、簡単にできそうなUserPoolを分ける方式にしました。

アーキテクチャ

f:id:cross_black777:20211203114157p:plain

流れとしてはALB -> Nginx -> oauth2-proxy -> 管理ツールのような流れになっています。 管理ツール自体はEC2で動かしているので、管理を楽にするためdocker-composeを使って構築しております。

ポイントは下記です。

  • 開発者用とCS用にドメインを分けた
  • virtual hostの設定でproxyするoauth2-proxyを分けることで違うUser Poolを参照できるようにした

まとめ

このような形にしておけば、UserPool自体の管理さえしておけば個別のツールに関してBasic認証を用意する必要がなくなりました。UserPoolの分け方や細かい挙動どうするの?っていうところはまだ改善余地がありそうです。