0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ROSA HCPで使用するOIDCプロバイダーに関する備忘録

Last updated at Posted at 2024-12-12

1. はじめに

ROSA HCPのクラスターを作成する際、CLIでOIDCプロバイダーを設定する手順があります。
OIDCプロバイダーとはどういう働きをするもので、ROSA HCPクラスター作成時にOIDCプロバイダーの設定がなぜ必要なのか、初学者である筆者は理解するのに苦労したため、備忘録もかねて当記事を執筆しました。

※この記事の内容は2024年12月現在の情報であり、下記の製品リリースに基づいています。
Red Hat OpenShift Service on AWS with Hosted Control Planes v4.14.37

2. 目次

3. ROSA HCPにOIDCプロバイダーの設定がなぜ必要なのか

3.1. 前提としてROSA HCPはSTSによる一時認証方式を使用する

  • ROSA HCPでは、AWSアカウント内のリソースを管理する権限をRed Hat SREチームや、クラスター内のコンポーネント(Operator)に付与するために、AWS STS(Security Token Service)を使用します。
  • こちらについては、わたしが書いた以下の記事も参考にしていただければと思います。
    ROSA HCPのAccountロールとOperatorロールについて
  • STSは、IAMロールの信頼ポリシーの内容を検証し、信頼ポリシーに記載されたプリンシパルからのリクエストの場合のみ、認証情報を発行します。
  • しかし、信頼ポリシーのプリンシパルとして指定できるのはIAMエンティティのみであり、クラスター内のOperatorは信頼ポリシー内で直接指定することができません。例えば「このPodだけがS3にアクセスできる」という設定は、STSだけでは実現できません。
  • そこで活躍するのが、OIDCプロバイダーです。OIDCプロバイダーを導入することで、クラスター内のOperatorがIAMロールを引き受けられるようになります。

    3.2. OIDCプロバイダーの働き

  • OIDCプロバイダーは認証にJWT(JSON Web Token)を使用します。
    • このJWTには、「誰がどのロールを引き受ける権限を持っているか」という情報が含まれています。この際の「誰が」の部分には、OperetorないしはPodも含めることができます。
  • IAMロールの信頼ポリシーに、「このOIDCプロバイダーから発行されたトークンを信頼する」という設定を含めれば、OIDCとSTSが連携してIAMエンティティ以外のコンポーネントにも一時的な認証情報を付与することができます。

4. OIDCプロバイダーとAWS STSがどのように連携して認証を行うか

  • 本項目では、OIDCプロバイダーとAWS STSが連携して、一時的なセキュリティ認証情報をROSAクラスター内のOperetarに与える際のざっくりとしたワークフローを説明します。
    ※ROSA公式ドキュメント内のROSA with HCP ワークフローに記載の内容をもとにまとめております。より正確な情報を知りたい方はこちらを参照してください。
    1. 事前準備として、認証情報を与えたいOperetorに必要な権限が定義されたIAMロールをこちらで割り当てます。
      • ROSA HCPクラスターの場合、クラスター作成時の手順としてCLIで「オペレーターロール」作成用のコマンドを実行する必要があります。コマンドを実行すると自動で8つのIAMロールが作成され、AWS管理ポリシーがアタッチされます。
      • この「オペレーターロール」こそが、Operetorに必要な権限が定義されたIAMロールです。
    2. Operatorが、クラスター内で設定されたOIDCプロバイダーに対して、JWT(JSON Web Token)を送信します。
      • OIDCプロバイダーは、このトークンが正しいものであるかを確認します。
    3. OIDCプロバイダーがIAMロールを確認します。
      • トークンに含まれる情報が、IAMロールの信頼ポリシーに記載された条件と一致するかをOIDCプロバイダーが確認します。
    4. OIDCがトークンを承認すると、STSが一時的な認証情報を払い出します。
      • OIDCプロバイダーはトークンを承認すると、その情報を元にsts:AssumeRoleWithWebIdentity APIを呼び出します。
      • AWS STSは、そのIAMロールに基づいて、一時的な認証情報(アクセスキー、シークレットキー、セッショントークン)を生成し、Operatorに返します。
    5. OperatorがAWSリソースにアクセスします。
      • Operatorは、受け取った一時的な認証情報を使用して、AWSリソースにアクセスし、必要なタスクを実行します。
      • 認証情報は有効期限(通常1時間以内)が切れると無効になります。必要になったら、再度トークンを取得します。
  • より簡単にまとめると、以下のような流れになります。
    1. Operator → OIDCプロバイダーにJWTを送信。
    2. OIDCプロバイダー → トークンを検証し、ロールの使用を承認。
    3. OIDCプロバイダー → STSにリクエストを送信(AssumeRoleWithWebIdentity)。
    4. STS → 一時的な認証情報を生成してOperatorに提供。
    5. Operator → 認証情報を使ってAWSリソースにアクセス。

5. まとめ

OIDCプロバイダーは、クラスター内のOperatorとAWS IAMロールを安全に連携させるために必要な仕組みです。STSだけではAWSのIAMエンティティ以外のコンポーネント対して権限を付与することが困難であるため、OIDCプロバイダーを使用します。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?