第12章 ロボットアカウントによるキーレス認証
Red Hat Quay の以前のバージョンでは、ロボットアカウントトークンは、削除または再生成されない限り、トークンの有効期間中有効でした。有効期限のないトークンは、長期的なパスワードの保存や、削除、再生成、新規認証トークンを管理を望まないユーザーにとって、セキュリティー上の問題を引き起こす可能性があります。
Red Hat Quay 3.13 では、Red Hat Quay 管理者は、Red Hat Single Sign-On (Keycloak プロジェクトに基づく) または Microsoft Entra ID を使用して、外部 OIDC トークンを有効期限が短いまたは 一時的 なロボットアカウントトークンと交換できるようになります。これにより、ロボットアカウントは 1 時間有効のトークンを活用できるようになります。このようなトークンは定期的に更新され、個々のトランザクションの認証に使用できます。
この機能により、トークンを 1 時間後に削除することで、ロボットトークンの漏洩の可能性を軽減し、Red Hat Quay レジストリーのセキュリティーが大幅に向上します。
ロボットアカウントを使用したキーレス認証の設定には、ロボットフェデレーションの設定、OIDC プロバイダーからの OAuth2 トークンの生成、および OAuth2 トークンとロボットアカウントアクセストークンの交換を必要とする複数の手順があります。
12.1. Red Hat Sign Sign-On による OAuth2 トークンの生成
次の手順では、Red Hat Single Sign-On を使用して OAuth2 トークンを生成する方法を示します。OIDC プロバイダーに応じて、これらの手順は異なります。
手順
Red Hat Single Sign-On UI の場合は、以下を行います。
- Clients をクリックし、ユーザーの認証を要求できるアプリケーションまたはサービスの名前をクリックします。
クライアントの Settings ページで、次のオプションが設定または有効化されていることを確認します。
- クライアント ID
- 有効なリダイレクト URI
- クライアント認証
- 認可
- Standard flow
Direct access grants
注記設定はセットアップによって異なる場合があります。
- Credentials ページで、今後使用する時のために クライアントシークレット を保存します。
-
Users ページで、Add user をクリックし、ユーザー名 (例:
service-account-quaydev
) を入力します。次に、Create をクリックします。 - Users ページで、ユーザーの名前 (例: service-account-quaydev) をクリックします。
-
Credentials タブ
Set password をクリックし、ユーザーのパスワードを入力します。必要に応じて、Temporary オプションを選択して、このパスワードを一時的なものにすることができます。 Realm settings タブ
OpenID Endpoint Configuration をクリックします。 /protocol/openid-connect/token
エンドポイントを保存します。以下に例を示します。http://localhost:8080/realms/master/protocol/openid-connect/token
Web ブラウザーで、次の URL に移動します。
http://<keycloak_url>/realms/<realm_name>/protocol/openid-connect/auth?response_type=code&client_id=<client_id>
- プロンプトが表示されたら、service-account-quaydev ユーザーと設定した一時パスワードを使用してログインします。必要な情報を入力し、必要に応じて永続的なパスワードを設定してログインを完了します。
クライアントに提供された URI アドレスにリダイレクトされます。以下に例を示します。
https://localhost:3000/cb?session_state=5c9bce22-6b85-4654-b716-e9bbb3e755bc&iss=http%3A%2F%2Flocalhost%3A8080%2Frealms%2Fmaster&code=ea5b76eb-47a5-4e5d-8f71-0892178250db.5c9bce22-6b85-4654-b716-e9bbb3e755bc.cdffafbc-20fb-42b9-b254-866017057f43
アドレスに記載されている
code
をメモしてください。以下に例を示します。code=ea5b76eb-47a5-4e5d-8f71-0892178250db.5c9bce22-6b85-4654-b716-e9bbb3e755bc.cdffafbc-20fb-42b9-b254-866017057f43
注記これは 1 回のみ使用できる一時コードです。必要に応じて、ページを更新するか、URL に再度アクセスして別のコードを取得できます。
ターミナルで、次の
curl -X POST
コマンドを使用して一時的な OAuth2 アクセストークンを生成します。$ curl -X POST "http://localhost:8080/realms/master/protocol/openid-connect/token" 1 -H "Content-Type: application/x-www-form-urlencoded" \ -d "client_id=quaydev" 2 -d "client_secret=g8gPsBLxVrLo2PjmZkYBdKvcB9C7fmBz" 3 -d "grant_type=authorization_code" -d "code=ea5b76eb-47a5-4e5d-8f71-0892178250db.5c9bce22-6b85-4654-b716-e9bbb3e755bc.cdffafbc-20fb-42b9-b254-866017057f43" 4
出力例
{"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJTVmExVHZ6eDd2cHVmc1dkZmc1SHdua1ZDcVlOM01DN1N5T016R0QwVGhVIn0...", "expires_in":60,"refresh_expires_in":1800,"refresh_token":"eyJhbGciOiJIUzUxMiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJiNTBlZTVkMS05OTc1LTQwMzUtYjNkNy1lMWQ5ZTJmMjg0MTEifQ.oBDx6B3pUkXQO8m-M3hYE7v-w25ak6y70CQd5J8f5EuldhvTwpWrC1K7yOglvs09dQxtq8ont12rKIoCIi4WXw","token_type":"Bearer","not-before-policy":0,"session_state":"5c9bce22-6b85-4654-b716-e9bbb3e755bc","scope":"profile email"}
-
前の手順の
access_token
を保存します。これは次の手順で Red Hat Quay ロボットアカウントトークンと交換されます。