2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

Ingress NGINXのメンテナンス終了に伴い、Gateway APIに乗り換えようという方も多いのではないでしょうか。移行時にとくに気になるのがセキュリティです。昨今注目されるプラットフォームエンジニアリングでは、プロダクトチームがセキュリティ設定を失念しても安全に運用できるセキュアバイデフォルトが求められます。本記事では、Kuadrantを使ってセキュアバイデフォルトなGateway API構成を簡単に紹介します。

なお、Gateway APIの概要は別記事も参照ください。

Kuadrantとは

KuadrantはGateway APIに対して認証・認可やレートリミットなどのポリシーを適用できるOSSです。DNSレコード管理や、cert-managerと連携したTLS証明書管理にも対応しています。

今回はプラットフォームエンジニアリングの観点から、AuthPolicy(認証・認可ポリシーを定義するKuadrantのリソース)の設定方法を紹介します。

AuthPolicyとは

AuthPolicyはKuadrantが提供するカスタムリソースで、認証・認可のポリシーを定義します。GatewayやHTTPRouteに対してポリシーを適用でき、プラットフォーム側の共通ガードレールと、プロダクト側の個別要件を両立できます。

AuthPolicyはGatewayとHTTPRouteそれぞれに対し、別のAuthPolicyを適用できます。これにより、プラットフォームチームがGatewayに対して共通的な認証・認可ポリシーを設定し、プロダクトチームがHTTPRouteに対して個別の認証・認可ポリシーを設定する、といった運用が可能で、プラットフォームエンジニアリングとの相性が良いです。

authpolicy.drawio.png

AuthPolicyでは以下のような認証・認可の設定が可能です。(他にもたくさんあるのですが書ききれません)

  • JWT検証
  • トークンイントロスペクション
  • OPAポリシーによる認可

セキュアバイデフォルト(ガードレール)

Gatewayに対して、デフォルトの認証・認可ポリシーを設定できるため、セキュアバイデフォルトな構成を実現できます。例えば、デフォルトで全ての通信を拒否するような設定をしたり、JWTの検証を必須にしたりすることが可能です。

以下はJWTの検証を必須にしている例です。

authpolicy-gateway.drawio.png

これにより、たとえプロダクトチームが認証・認可の設定を忘れてしまっても、安全に運用できます。

セルフサービス

プラットフォームチームがすべての細かな認証・認可ルールを管理するのは現実的ではありません。AuthPolicyはHTTPRouteにも適用できるため、プロダクトチームが自分たちのルートに対して細かな条件(例:/healthzは認証不要、/adminは管理者のみ)をセルフサービスで設定できます。プラットフォームチームは共通ガードレールを維持しつつ、プロダクト側は必要な例外や詳細を自身で管理できるため、両者の責務分担が明確になります。

authpolicy-httproute.drawio.png

まとめ

KuadrantのAuthPolicyを活用すると、Gateway APIに対してセキュアバイデフォルトな認証・認可を適用でき、プラットフォームエンジニアリングにおけるガードレールとセルフサービスを両立できます。具体的なマニフェストや設定の詳細は下記記事をご参照ください。

なお、レートリミットを定義できるRateLimitPolicyでも同様の運用パターンが可能です。認証・認可とレートリミットを合わせて検討すると、より強固なプラットフォームを設計できます。

※本記事は大西配列で書かれました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?