OpenID Connectとは何か?OAuthの上に載るアイデンティティ
OpenID Connect(OIDC)はOAuth 2.0の上に載る薄いアイデンティティレイヤーであり、アプリケーションがユーザーやworkloadが実際に誰であるかを検証できるようにします。
OpenID Connect、すなわちOIDCは、OAuthが残す隙間を埋めます。認証を追加するのです。OAuthがアクセスを付与するのに対し、OIDCは認証済みのサブジェクトを記述する署名付きのID tokenを発行することでアイデンティティを証明します。CI/CDでは、OIDCはキーレス認証の基盤となり、パイプラインが自身のアイデンティティをクラウドプロバイダーに証明し、保存されたシークレットなしで短命の認証情報を受け取れるようにします。
OIDCがOAuthに追加するもの
OAuthは認可のためにaccess tokenを発行します。OIDCはID tokenを追加します。これは、subやissといった、ユーザーやworkloadに関する検証済みのclaimを含む署名付きのJSON Web Token(JWT)です。relying partyは署名を検証し、そのclaimを信頼します。
ID token
- sub(subject)やiss(issuer)といったclaimを持つ署名付きのJWT。
- issuerの公開鍵に対してオフラインで検証可能。
- 時間で制限されているため、無期限にリプレイすることはできない。
キーレスなCI/CDのためのOIDC
最新のCIプラットフォームはOIDCプロバイダーとして振る舞えます。workflowは自身(リポジトリ、branch、環境)を記述するOIDCトークンを要求し、そのissuerを信頼するよう設定されたクラウドプロバイダーとそれを交換します。クラウドは短命の認証情報を返します。長命のシークレットは一切保存されません。
これがセキュリティにとって重要な理由
保存されたクラウドキーは、長命で漏洩しやすいため、侵害の主要な原因の1つです。OIDCは常設の認証情報を取り除きます。各jobは数分で失効する、新鮮で狭くスコープされたトークンを得ます。盗むべき永続的なものが何もないのです。
信頼の設定
OIDCのセキュリティは信頼ポリシーに依存します。どのissuer、リポジトリ、branchがクラウドロールを引き受けられるかをスコープします。緩いポリシー(組織内のどのリポジトリも信頼する)は露出を広げ、厳しいポリシー(1つのリポジトリ、1つのbranch、1つの環境)はアクセスを最小限に保ちます。
OIDCとrunner
OIDCトークンは、job中にrunner上で生成されます。隔離されたエフェメラルなrunner(Latchkeyのマネージドrunnerなど)では、そのトークンとそれが生み出す認証情報はjobの間だけ存在し、環境が破棄されると消えます。
重要なポイント
- OIDCはOAuth 2.0の認可の上に、検証済みのアイデンティティ(ID token)を追加します。
- キーレスなCI/CDを可能にします。パイプラインがアイデンティティを証明し、短命のクラウド認証情報を得ます。
- セキュリティは、issuer、リポジトリ、branchに対する厳密にスコープされた信頼ポリシーに依存します。