原文リンク(2023-05-23)
Auth0は、きめ細かいアクセス制御のユースケースに対応したオープンソースの認可サーバー、OpenFGAのバージョン1.0をリリースした。このリリースは、OpenFGAのAPIの安定性と、実運用に向けた準備の完了を示すものだ。
Open Fine Grained Authorization(OpenFGA)は、Auth0が提供するAuthorization-as-a-ServiceであるAuth0 FGAの中核となるエンジンだ。2021年12月にDeveloper Community PreviewとしてリリースされたAuth0 FGAは、開発者がきめ細かいアクセス制御をスケールアップして提供できるように設計されている。
Auth0 FGAは、世界中のすべてのGoogle製品のアクセス制御を支え、Google Cloud IAMの基礎となるGoogleのZanzibar認可サービスをベースにしている。2019年に発表された論文で、GoogleはZanzibarのコアデータモデルとアーキテクチャを共有し、その後、Keto , SpiceDB, Carta, Auth0 FGAなど、いくつかの実装が続いた。
Auth0 FGAの発売から数ヶ月後、そのコアエンジンとSDKはOpenFGAプロジェクトとして公開された。
認可モデル言語と関係タプルは、 Zanzibar の設計、つまり OpenFGA の設計の中核である。認可モデル言語は、ドメイン内のエンティティ、権限を適用できるオブジェクト、およびそれらの間の可能な関係を柔軟に定義できる。文書共有のユースケースでの例を以下に示す。
model
schema 1.1
type document
relations
define viewer: [domain#member,user]
define commenter: [domain#member,user]
define editor: [domain#member,user]
define owner: [domain#member,user]
type domain
relations
define member: [user]
type user
認可モデルが定義されると、エンティティやオブジェクト間の具体的な関係を表す関係タプルを指定できる。以下は、先の文書共有のユースケースに基づく関係タプルである。
[
{
"user": "user:anne",
"relation": "editor",
"object": "document:new-roadmap",
},
]
認可モデルと関係タプルは、APIまたは言語固有のSDKを介してOpenFGAサーバーに追加できる。これらが配置されると、アプリケーションはCheck APIを使用して関係を評価できる。Go SDKを使用した例を以下に示す。
body := fgaSdk.CheckRequest{
AuthorizationModelId: fgaSdk.PtrString("1uHxCSuTP0VKPYSnkq1pbb1jeZw"),
TupleKey: fgaSdk.TupleKey{
User: "user:anne",
Relation: "editor",
Object: "document:new-roadmap",
},
}
data, response, err := fgaClient.OpenFgaApi.Check(context.Background()).Body(body).Execute()
// data = { allowed: true }
OpenFGAサーバーは、認証モデルとリレーションシップのタプルをメモリに保存できるが、実運用では永続的なストレージが必要であり、MySQLまたはPostgreSQLデータベースへのアダプタを介して提供する。
OpenFGAはAuth0製品の中核をなすものであるため、オープンソース化された理由やプロジェクトとしての寿命についてよく質問される。これに対して、Auth0のプロダクトマネージャーであるAndrés Aguiar氏は、次のように書いている。"我々は、きめ細かい認可システムを中心とした大規模なエコシステムを構築する機会があると考えている。" "Auth0/Oktaは、IDアクセス管理分野のリーダーであり、何千もの顧客から信頼を得ており、クラウドに依存することなく、製品に長期的に投資できる資金力を有している。"
OpenFGAは、コミュニティでの採用をさらに加速させるため、Cloud Native Computing Foundation(CNCF)のSandboxプロジェクトに立候補し、2022年9月に承認された。
OpenFGAは、APIで照会可能な認可モデルの開発を可能にすることに重点を置いているため、しばしばOpen Policy Agent(OPA)と比較される。両製品ともアクセス制御モデルのための柔軟な宣言型言語を提供するが、主な違いはモデリングパラダイムにある。OpenFGAはリレーションシップ ベースのアクセス制御(ReBAC)モデルを中心に、OPAは属性ベースのアクセス制御 Role-based Access(ABAC)とRole-based Access ロールベースアクセス制御(RBAC)モデルを定義が可能だ。
OpenFGAサーバーとそのSDKはGitHubで管理され、Apache 2.0オープンソースライセンスで公開されている。