こんにちは。ヤフーでAthenzを活用した社内アクセス制御基盤システムの開発・運用を担当している矢野です。
ヤフーでは、オープンソースであるAthenzに対してさまざまな活動を行っており、現在は、CNCF TOCによって定義されたCloud Nativeな技術がまとめられている CNCF(Cloud Native Computing Foundation) Landscape において、Sandbox Projectとして登録されるに至っています。
本記事では、Athenzがオープンソースとして公開され、CNCF Sandbox Projectとなるまでの、道のりについてご紹介します。
ヤフーにおけるアクセス制御
ヤフーでは、OpenStackやKubernetesを活用したプライベートクラウド環境や、オンプレミス環境を含めたハイブリッドクラウドを運用しています。
これらの環境におけるそれぞれのアプリケーション間において、適切にアクセス制御を行う事が企業として重要になっています。ヤフーでは、社内システム間のアクセス制御となる仕組みとして、オープンソースのCNCF Sandbox Projectである、Athenzを活用しています。
Athenzとは
Athenz(アセンズ)は、Role Based Access Control(ロールを利用したアクセス制御)を利用して、サービス間の認証・認可を行うシステムです旧Yahoo! Inc. が設計・開発し、オープンソースとして公開されています。ヤフーは 旧Yahoo! Inc. と協業の上、社内での活用だけでなく、オープンソースへの貢献も行っています。
ヤフーではオンプレミス環境からプライベートクラウド環境やパブリッククラウド環境を併用したハイブリッド環境への移行が進んでおり、それに伴い、IPアドレスを共有するマルチテナント環境のアプリケーションを区別する手段がセキュリティ上の課題となりました。
Athenzではオンプレミス環境、クラウド環境を問わず、アプリケーション同士のアクセスを制御する事ができます。
Athenzの特長
Athenzについてはじめて知る方もいらっしゃるかと思いますので、特長について軽くご紹介します。Athenzには、次のような特長があります。
IPアドレスに依存せずにアクセス制御ができる
IaaSなどの環境では、アプリケーションごとに異なるホストを使用しているため、アクセス元IPアドレスによってアクセス制御が行えました。コンテナ仮想化環境においては、同一ホスト上に複数のアプリケーションをデプロイする事があります。同一ホスト上では、別のアプリケーションが同一のアクセス元IPとなる可能性があり、IPアドレスによるアクセス制御では正しくアクセス制御を行えません。Athenzはアクセス元IPアドレスに依存せず、公開鍵認証によるアクセス制御の仕組みを提供します。
スケールアウト可能なアクセス制御を提供できる
IPアドレスによってアクセス制御を行う場合、スケールアウトに合わせて許可するIPアドレスの追加・変更が必要でした。これでは、即座にスケールアウトできません。Athenzはアクセス元IPアドレスに依存しない仕組みのため、任意の円滑なスケールアウトを可能にします。
基盤環境に依存しないアクセス制御情報を統合管理できる
多くのプログラミング言語やフレームワークでは、実装とアプリケーション間のアクセス制御を同時に検討・実装する必要がありました。これでは、アクセス制御に関連する情報が分散し、一元管理できません。また、クラウドなどの基盤環境ごとにアクセス制御方法が違うことにより、クライアントがそれぞれ独自のアクセス制御方法を理解した上で、サーバーのアクセス制御方法に合わせて実装する必要がありました。Athenzではアクセス制御情報を一元管理し、かつアクセス制御方法を統一して提供する事で、基盤環境に依存しないアクセス制御を提供します。
アクセス制御情報を設定後、リアルタイムで配信できる
Athenzでは、アクセス制御設定情報はアプリケーション実装に影響を与えず、アプリケーション実装から完全に分離されており、さらにアクセス制御設定情報をリアルタイムに配信する独立した仕組みを提供しています。そのため、Athenzに登録するアクセス制御情報を設定・更新すると、アプリケーション実装に変更を加える事なく、リアルタイムで配信が行われ、アクセス制御情報を最新化できます。
オープンソース化のための改修
Athenzは、はじめからオープンソースとして公開されていた製品ではなく、旧Yahoo! Inc.が社内向けに開発した製品でした。それをオープンソースとして公開するにあたり、ヤフーでも品質の向上や、公開までの期間短縮のため、オンサイト・オフサイトでの協業を行いました。
オープンソースとして公開する事の合意から始まり、企業間で協業体制や分業の調整を行い、 2016/12/31にオープンソースとして公開されました。
しかし、公開までの道のりも決してスムーズではなく、さまざまな課題に直面しました。
品質の向上や、公開までの期間短縮を目的としたものの、Athenzについてヤフーには旧Yahoo! Inc.程の知見がなく、他の組織が開発した設計・実装を調査した上で改善のための提案や実装を行う事は容易ではありませんでした。各メンバーでAthenzや周辺技術への知識を吸収する事が急務となった事はもちろんですが、Yahoo! Inc.と臨機応変に情報共有や質問をし合える体制が必要となったため、オンサイトでの協業担当者を派遣し、ヤフーと旧Yahoo! Inc.の両者における日時定例などを通して、状況を常に共有し合う体制を築きました。
また、ヤフー側は大半のメンバーがオフサイトでの協業体制となっていたため、JST標準時間帯とPST/PDT標準時間帯における時差もあり、質問から回答を得る際など、コミュニケーションに時間を要する場面もみられました。例えば、JST標準時間帯では15:00が、PST標準時間帯では前日の22:00であったりと、最悪の場合、チャットやメールなどでは会話の往復に1日を要してしまう場合がありました。こういった課題に対して、会社間で分業可能な単位を事前に取り決めておいたり、ヤフー側のオンサイトメンバーができる限り質問を集約するなどして、コミュニケーションが進捗のボトルネックとならないよう工夫しながら取り組みました。
カンファレンスでの活動
Athenzオープンソースの知名度向上、コミュニティー交流の活性化、ヤフーでの取り組みの紹介を目的として、複数のカンファレンス活動を行いました。
Open Source Summit Japan
Open Source Summit Japan 2018では、クラウド環境におけるアクセス制御を実現するAthenzをご紹介しました。
- Open Source Summit Japan 2018
KubeCon
KubeCon 2018 NAでは、Athenzで管理・配布されたアクセス制御ポリシーによって、別のオープンソースであるIstioによるアクセス制御を行う事例をご紹介しました。
KubeConはカンファレンスの中でも特に注目が集まるイベントであるため、ヤフーだけでなく旧Yahoo! Inc.にも協力いただき、両社におけるレビューや推敲を行った上で発表しました。
- KubeCon 2018 NA
また、複数回にわたるKubeConにて、ヤフーの企業ブース運営を行い、Athenzオープンソースや、ヤフーでの取り組みの活動紹介や、コミュニティー利用者との意見交換を行ってきました。
SPIFFE Meetup Tokyo
SPIFFE Meetup Tokyo #1では、AthenzにおけるSPIFFE標準との互換性のご紹介や、SPIFFEの実装であるSpireとの互換性についてご紹介しました。SPIFFE Meetup Tokyo #3では、OpenStack Instance環境向けにX.509証明書の自動配布を行う方法としてSpireとの連携をご紹介しました。
AthenzとSpireは、どちらもX.509証明書を各アプリケーションに配布する機能を持ち、それぞれのX.509証明書がSPIFFEという仕様に準拠しているため、互換性があります。互換性を活かしつつ、Service MeshやZero Trust Networkといった世界観を実現する事ができます。
- SPIFFE Meetup Tokyo #1
- SPIFFE Meetup Tokyo #3
OSCon
OSCON 2018では、ヤフーの企業ブース運営を行い、Athenzオープンソースや、ヤフーでの取り組みの活動紹介や、コミュニティー利用者との意見交換を行ってきました。
Kubernetes Meetup Tokyo
Kubernetes Meetup Tokyo #14では、Athenzを用いたKubernetes Webhook Authorizationを実現する、Garmというサブコンポーネントをご紹介しました。
- Kubernetes Meetup Tokyo #14
オープンソース拡張機能の開発
複数言語対応(Node.js)
Athenzは主に Java および Go 言語で実装されています。Athenzをオープンソースとして公開するにあたり、より多くの言語に親和性を持たせるため、ヤフーにてNode.jsのライブラリを実装しました。
Dockerization
ヤフーでは、Athenzオープンソースをより広く認知・活用してもらえるよう、コンテナベースの仮想化環境での動作を前提とすべく、Docker環境へのサポートに取り組んでいます。はじめに、Athenzの実装がDcokerコンテナとして提供できるよう、各コンポーネントのDockerコンテナ実装を公開しています。
- Athenz on Docker
Kubernetes向け実装
昨今の仮想化環境技術において、Kubernetesのエコシステムとコミュニティーは中心的な存在となっています。ヤフーでは、AthenzとKubernetesエコシステムとの親和性を高めるため、各種コンポーネントの開発、オープンソース公開を行っています。各種分散システムデザインパターンにおけるサイドカーパターンを用いてクレデンシャル取得を行うAthenz Client Sidecarや、リバースプロキシとしてアクセス制御を行うAuthorization Proxyを開発、公開しました。さらに、Kubernetes環境での動作サポートや、KubernetesのAuthorization Webhookを用いた拡張機能であるGarmを開発、公開しました。また、AthenzをKubernetes上で動作させるためのHelm chartsの開発も行っています。
- サイドカーパターンを用いてクレデンシャル取得を行うAthenz Client Sidecar
- リバースプロキシとしてアクセス制御を行うAuthorization Proxy
- Authorization Webhookを用いた拡張機能であるGarm
- Deploy Athenz servers using Helm
CNCF Landscapeへの参加
ヤフーではオープンソースコミュニティーとしてのさまざまな活動を行ってきました。そして、さらなる認知度を向上や、コミュニティー活性化を目的として、 Yahoo! Inc. (当時Verizon Media社) により 2021/01/12 にTOC Voteに提出され、 2021/01/26 に CNCF Sandbox Project 登録 となりました。
- Add Athenz
- CNCF ToC Projects Table
- CNCF Landscape - Athenz
おわりに
本記事では、Athenzがオープンソース化され、CNCF Sandbox Projectとして登録されるまでの道のりと、ヤフーでの取り組みについてご紹介しました。
本記事では各取り組みの詳細な内容は説明できておりませんが、関心を持っていただけた方は、ぜひ各リンク先の資料、動画、ソースコードなどをご確認いただければと思います。
また、今後のヤフーにおけるAthenzオープンソース活動については、Yahoo!デベロッパーネットワークでもご紹介していきますので、ぜひこちらもご覧ください。
(この記事に関連する採用情報「セキュリティ・プラットフォームエンジニア」もぜひご覧ください)
こちらの記事のご感想を聞かせください。
- 学びがある
- わかりやすい
- 新しい視点
ご感想ありがとうございました