アクセスと権限の管理
はじめに リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay は包括的な権限モデルを提供しており、管理者はリポジトリーにアクセス、管理、変更できるユーザーを詳細なレベルで制御できます。次のセクションでは、ユーザーアクセスの管理、チームロールの定義、ユーザーとロボットアカウントの権限の設定、リポジトリーの可視性の定義の方法を説明します。これらのガイドには、Red Hat Quay UI と API の両方を使用する手順が含まれています。
以下のトピックを説明します。
- ロールベースのアクセス制御
- リポジトリーの可視性の調整
- ロボットアカウントの作成と管理
- Clair 脆弱性レポート
第1章 Red Hat Quay 権限モデル リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay の権限モデルは、リポジトリーとそのリポジトリーのコンテンツに対するアクセス制御を詳細に指定でき、安全なコラボレーションと自動化を実現します。Red Hat Quay 管理者は、ユーザーとロボットアカウントに次のいずれかのアクセスレベルを付与できます。
- Read: ユーザー、ロボット、チームがイメージをプルできるようにします。
- Write: ユーザー、ロボット、チームがイメージをプッシュできるようにします。
- Admin: ユーザー、ロボット、チームに管理者権限を提供します。
管理ユーザーは、既存のユーザーやチームに新しい権限を委譲したり、既存の権限を変更したり、必要に応じて権限を取り消したりすることができます。
これらのアクセスレベルをまとめると、ユーザーまたはロボットアカウントは、イメージのプル、イメージの新しいバージョンのレジストリーへのプッシュ、リポジトリーの設定の管理など、特定のタスクを実行できるようになります。これらの権限は、組織全体および特定のリポジトリーに委譲できます。たとえば、Read 権限は組織内の特定のチームに設定できますが、Admin 権限は組織内のすべてのリポジトリーのすべてのユーザーに付与できます。
1.1. Red Hat Quay のチームの概要 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay の チーム は、権限を共有するユーザーのグループであり、プロジェクトの効率的な管理とコラボレーションを可能にするものです。チームは、組織およびリポジトリー内のアクセス制御とプロジェクト管理を効率化するのに役立ちます。指定の権限をチームに割り当てることで、メンバーの役割と責任に基づいて、リポジトリーへの適切なレベルのアクセス権を付与できます。
1.1.1. UI を使用したチームのロールの設定 リンクのコピーリンクがクリップボードにコピーされました!
チームを作成したら、そのチームの組織内でのロールを設定できます。
前提条件
- チームを作成している。
手順
- Red Hat Quay のランディングページで、組織の名前をクリックします。
- ナビゲーションウィンドウで、Teams and Membership をクリックします。
次の図に示すように、TEAM ROLE ドロップダウンメニューを選択します。
選択したチームに、以下のロールのいずれかを選択します。
- Admin。チームの作成、メンバーの追加、権限の設定など、組織への完全な管理アクセス権を付与します。
- Member。チームに設定されているすべての権限を継承します。
- Creator。メンバーのすべての権限に加えて、新しいリポジトリーを作成する権限を付与します。
1.1.1.1. チームメンバーとリポジトリー権限の管理 リンクのコピーリンクがクリップボードにコピーされました!
チームメンバーを管理し、リポジトリー権限を設定するには、次の手順に従います。
組織の Teams and membership ページでは、チームメンバーを管理したり、リポジトリー権限を設定したりすることもできます。
- 縦の省略記号メニューをクリックし、次のいずれかのオプションを選択します。
- Manage Team Members。このページでは、すべてのメンバー、チームメンバー、ロボットアカウント、または招待したユーザーを表示できます。Add new member をクリックして、新しいチームメンバーを追加することもできます。
Set repository permissions。このページでは、リポジトリー権限を次のいずれかに設定できます。
- None。チームメンバーにリポジトリーに対する権限は付与されません。
- Read。チームメンバーがリポジトリーの表示とリポジトリーからのプルを行えるようになります。
- Write。チームメンバーがリポジトリーの読み取り (プル) とリポジトリーへの書き込み (プッシュ) を行えるようになります。
- Admin。プルおよびプッシュを行うためのリポジトリーへのフルアクセスに加えて、リポジトリーに関連する管理作業を行う権限を付与します。
- Delete。このポップアップウィンドウでは、Delete をクリックしてチームを削除できます。
1.1.2. API を使用して組織内のチームのロールを設定する リンクのコピーリンクがクリップボードにコピーされました!
API を使用して組織内のチームのロールを表示および設定するには、次の手順に従います。
前提条件
- OAuth アクセストークンを作成 している。
手順
組織のチームのリポジトリー権限のリストを返すには、次の
GET/api/v1/organization/{orgname}/team/{teamname}/permissionsコマンドを入力します。このコマンドで情報を取得するには、チームがリポジトリーに追加されている必要があることに注意してください。curl -X GET \ -H "Authorization: Bearer <your_access_token>" \ "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/permissions"
$ curl -X GET \ -H "Authorization: Bearer <your_access_token>" \ "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/permissions"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{"permissions": [{"repository": {"name": "api-repo", "is_public": true}, "role": "admin"}]}{"permissions": [{"repository": {"name": "api-repo", "is_public": true}, "role": "admin"}]}Copy to Clipboard Copied! Toggle word wrap Toggle overflow PUT/api/v1/organization/{orgname}/team/{teamname}コマンドを使用して、組織内のチームを作成または更新し、指定されたロールを admin、member、または creator にすることができます。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{"name": "testteam", "description": "", "can_view": true, "role": "creator", "avatar": {"name": "testteam", "hash": "827f8c5762148d7e85402495b126e0a18b9b168170416ed04b49aae551099dc8", "color": "#ff7f0e", "kind": "team"}, "new_team": false}{"name": "testteam", "description": "", "can_view": true, "role": "creator", "avatar": {"name": "testteam", "hash": "827f8c5762148d7e85402495b126e0a18b9b168170416ed04b49aae551099dc8", "color": "#ff7f0e", "kind": "team"}, "new_team": false}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.2. UI を使用したデフォルトの権限の作成および管理 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトの権限は、リポジトリーの作成者のデフォルトに加えて、リポジトリーの作成時にリポジトリーに自動的に付与される権限を定義します。権限は、リポジトリーを作成したユーザーに基づいて割り当てられます。
Red Hat Quay v2 UI を使用してデフォルトの権限を作成するには、次の手順を実行します。
手順
- 組織名をクリックします。
- Default permissions をクリックします。
- Create default permissions をクリックします。切り替え式のドロワーが表示されます。
リポジトリーの作成時にデフォルトの権限を作成するには、Anyone または Specific user を選択します。
Anyone を選択する場合は、次の情報を入力する必要があります。
- Applied to。ユーザー/ロボット/チームを検索、招待、または追加します。
- Permission。権限を Read、Write、または Admin のいずれかに設定します。
Specific user を選択する場合は、次の情報を指定する必要があります。
- Repository creator。ユーザーまたはロボットアカウントを指定します。
- Applied to。ユーザー名、ロボットアカウント、またはチーム名を入力します。
- Permission。権限を Read、Write、または Admin のいずれかに設定します。
- Create default permission をクリックします。確認ボックスが表示され、Successfully created default permission for creator というアラートが返されます。
1.3. API を使用したデフォルトの権限の作成および管理 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay API を使用してデフォルトの権限を管理するには、次の手順に従います。
前提条件
- OAuth アクセストークンを作成 している。
手順
次のコマンドを入力し、
POST /api/v1/organization/{orgname}/prototypesエンドポイントでデフォルトの権限を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{"activating_user": {"name": "test-org+test", "is_robot": true, "kind": "user", "is_org_member": true, "avatar": {"name": "test-org+test", "hash": "aa85264436fe9839e7160bf349100a9b71403a5e9ec684d5b5e9571f6c821370", "color": "#8c564b", "kind": "robot"}}, "delegate": {"name": "testuser", "is_robot": false, "kind": "user", "is_org_member": false, "avatar": {"name": "testuser", "hash": "f660ab912ec121d1b1e928a0bb4bc61b15f5ad44d5efdc4e1c92a25e99b8e44a", "color": "#6b6ecf", "kind": "user"}}, "role": "admin", "id": "977dc2bc-bc75-411d-82b3-604e5b79a493"}{"activating_user": {"name": "test-org+test", "is_robot": true, "kind": "user", "is_org_member": true, "avatar": {"name": "test-org+test", "hash": "aa85264436fe9839e7160bf349100a9b71403a5e9ec684d5b5e9571f6c821370", "color": "#8c564b", "kind": "robot"}}, "delegate": {"name": "testuser", "is_robot": false, "kind": "user", "is_org_member": false, "avatar": {"name": "testuser", "hash": "f660ab912ec121d1b1e928a0bb4bc61b15f5ad44d5efdc4e1c92a25e99b8e44a", "color": "#6b6ecf", "kind": "user"}}, "role": "admin", "id": "977dc2bc-bc75-411d-82b3-604e5b79a493"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力し、
PUT /api/v1/organization/{orgname}/prototypes/{prototypeid}エンドポイントを使用してデフォルトの権限を更新します。これは権限タイプを変更する場合の例です。ポリシーを作成したときに返された ID を含める必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{"activating_user": {"name": "test-org+test", "is_robot": true, "kind": "user", "is_org_member": true, "avatar": {"name": "test-org+test", "hash": "aa85264436fe9839e7160bf349100a9b71403a5e9ec684d5b5e9571f6c821370", "color": "#8c564b", "kind": "robot"}}, "delegate": {"name": "testuser", "is_robot": false, "kind": "user", "is_org_member": false, "avatar": {"name": "testuser", "hash": "f660ab912ec121d1b1e928a0bb4bc61b15f5ad44d5efdc4e1c92a25e99b8e44a", "color": "#6b6ecf", "kind": "user"}}, "role": "write", "id": "977dc2bc-bc75-411d-82b3-604e5b79a493"}{"activating_user": {"name": "test-org+test", "is_robot": true, "kind": "user", "is_org_member": true, "avatar": {"name": "test-org+test", "hash": "aa85264436fe9839e7160bf349100a9b71403a5e9ec684d5b5e9571f6c821370", "color": "#8c564b", "kind": "robot"}}, "delegate": {"name": "testuser", "is_robot": false, "kind": "user", "is_org_member": false, "avatar": {"name": "testuser", "hash": "f660ab912ec121d1b1e928a0bb4bc61b15f5ad44d5efdc4e1c92a25e99b8e44a", "color": "#6b6ecf", "kind": "user"}}, "role": "write", "id": "977dc2bc-bc75-411d-82b3-604e5b79a493"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow DELETE /api/v1/organization/{orgname}/prototypes/{prototypeid}コマンドを入力すると、権限を削除できます。curl -X DELETE \ -H "Authorization: Bearer <bearer_token>" \ -H "Accept: application/json" \ https://<quay-server.example.com>/api/v1/organization/<organization_name>/prototypes/<prototype_id>
curl -X DELETE \ -H "Authorization: Bearer <bearer_token>" \ -H "Accept: application/json" \ https://<quay-server.example.com>/api/v1/organization/<organization_name>/prototypes/<prototype_id>Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは出力を返しません。
GET /api/v1/organization/{orgname}/prototypesコマンドを入力すると、すべての権限のリストを取得できます。curl -X GET \ -H "Authorization: Bearer <bearer_token>" \ -H "Accept: application/json" \ https://<quay-server.example.com>/api/v1/organization/<organization_name>/prototypes
$ curl -X GET \ -H "Authorization: Bearer <bearer_token>" \ -H "Accept: application/json" \ https://<quay-server.example.com>/api/v1/organization/<organization_name>/prototypesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{"prototypes": []}{"prototypes": []}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4. UI を使用したリポジトリーのアクセス設定の調整 リンクのコピーリンクがクリップボードにコピーされました!
v2 UI を使用してリポジトリーのユーザーまたはロボットアカウントのアクセス設定を調整するには、次の手順に従います。
前提条件
- ユーザーアカウントまたはロボットアカウントを作成した。
手順
- Red Hat Quay にログインします。
- v2 UI で、Repositories をクリックします。
-
リポジトリーの名前をクリックします (例:
quayadmin/busybox)。 - Settings タブをクリックします。
オプション: User and robot permissions をクリックします。Permissions のドロップダウンメニューオプションをクリックすると、ユーザーまたはロボットアカウントの設定を調整できます。設定を Read、Write、または Admin に変更できます。
- Read。ユーザーまたはロボットアカウントが、リポジトリーを表示し、リポジトリーからプルできます。
- Write。ユーザーまたはロボットアカウントが、リポジトリーからの読み取り (プル) とリポジトリーへの書き込み (プッシュ) を実行できます。
- Admin。ユーザーアカウントまたはロボットアカウントに、リポジトリーからのプルとリポジトリーへのプッシュのアクセス権に加え、リポジトリーに関連する管理タスクを実行する権限を付与します。
1.5. API を使用したリポジトリーのアクセス設定の調整 リンクのコピーリンクがクリップボードにコピーされました!
API を使用してリポジトリーのユーザーアカウントまたはロボットアカウントのアクセス設定を調整するには、次の手順に従います。
前提条件
- ユーザーアカウントまたはロボットアカウントを作成した。
- OAuth アクセストークンを作成 している。
手順
ユーザーの権限を変更するには、次の
PUT /api/v1/repository/{repository}/permissions/user/{username}コマンドを入力します。curl -X PUT \ -H "Authorization: Bearer <bearer_token>" \ -H "Content-Type: application/json" \ -d '{"role": "admin"}' \ https://<quay-server.example.com>/api/v1/repository/<namespace>/<repository>/permissions/user/<username>$ curl -X PUT \ -H "Authorization: Bearer <bearer_token>" \ -H "Content-Type: application/json" \ -d '{"role": "admin"}' \ https://<quay-server.example.com>/api/v1/repository/<namespace>/<repository>/permissions/user/<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{"role": "admin", "name": "quayadmin+test", "is_robot": true, "avatar": {"name": "quayadmin+test", "hash": "ca9afae0a9d3ca322fc8a7a866e8476dd6c98de543decd186ae090e420a88feb", "color": "#8c564b", "kind": "robot"}}{"role": "admin", "name": "quayadmin+test", "is_robot": true, "avatar": {"name": "quayadmin+test", "hash": "ca9afae0a9d3ca322fc8a7a866e8476dd6c98de543decd186ae090e420a88feb", "color": "#8c564b", "kind": "robot"}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 現在の権限を削除するには、
DELETE /api/v1/repository/{repository}/permissions/user/{username}コマンドを入力します。curl -X DELETE \ -H "Authorization: Bearer <bearer_token>" \ -H "Accept: application/json" \ https://<quay-server.example.com>/api/v1/repository/<namespace>/<repository>/permissions/user/<username>
$ curl -X DELETE \ -H "Authorization: Bearer <bearer_token>" \ -H "Accept: application/json" \ https://<quay-server.example.com>/api/v1/repository/<namespace>/<repository>/permissions/user/<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは CLI に出力を返しません。
GET /api/v1/repository/{repository}/permissions/user/コマンドを入力すると、権限が削除されたことを確認できます。curl -X GET \ -H "Authorization: Bearer <bearer_token>" \ -H "Accept: application/json" \ https://<quay-server.example.com>/api/v1/repository/<namespace>/<repository>/permissions/user/<username>/
$ curl -X GET \ -H "Authorization: Bearer <bearer_token>" \ -H "Accept: application/json" \ https://<quay-server.example.com>/api/v1/repository/<namespace>/<repository>/permissions/user/<username>/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{"message":"User does not have permission for repo."}{"message":"User does not have permission for repo."}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第2章 レジストリー全体のアクセス管理 リンクのコピーリンクがクリップボードにコピーされました!
次のセクションでは、ユーザーとスーパーユーザーの両方のレジストリー全体の権限を調整する方法を説明します。
2.1. 制限ユーザーの管理 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、レジストリーに属するすべての Red Hat Quay メンバーはリポジトリーを作成し、自分のユーザーアカウントにコンテンツをアップロードできます。たとえば、user1 が /<user1>/<image>:<tag> などのアーティファクトタグをプッシュすると、名前が user1/image のリポジトリーが作成されます。そのリポジトリー内には、アーティファクトタグに関する情報が含まれています。
FEATURE_RESTRICTED_USERS 設定フィールドを使用すると、Red Hat Quay 管理者は、レジストリーに登録されている全ユーザーに対して、レジストリーへのイメージまたはアーティファクトのプッシュを制限できます。この設定フィールドにより、すでにその組織に所属しており、その組織のチームメンバーとして定義されていない限り、どのユーザーも新しい組織を作成したり、コンテンツをプッシュしたりできなくなります。つまり、制限ユーザーであっても、所属しているチームに基づいて、組織内で通常の権限を引き続き割り当てられます。
たとえば、Red Hat Quay 管理者は、config.yaml ファイルで FEATURE_RESTRICTED_USERS 設定フィールドを次のように設定します。
FEATURE_RESTRICTED_USERS: true
FEATURE_RESTRICTED_USERS: true
上記のように設定すると、user1 は Red Hat Quay UI を使用して新しい組織を作成できなくなります。試行すると、Unauthorized のエラーメッセージが返されます。さらに、user1 が CLI を使用してイメージを自分の namespace にプッシュしようとすると (つまり、/<user1>/<image>:<tag>)、Error: writing Blob: initiating layer upload to/v2/user1/<image>/blobs/uploads/in <quay-server.example.com>: authorized: access to the request resource is not authorized のエラーメッセージが返されます。ただし、管理者によって定義された組織のチームに user1 が所属している場合は、そのチームが持つ権限が維持されます。たとえば、user1 が組織のチームに追加され、Admin ロールが付与されている場合、その組織に対する管理者権限を持ちます。
ただし、FEATURE_RESTRICTED_USERS を RESTRICTED_USERS_WHITELIST 設定フィールドと共に活用すると、Red Hat Quay 管理者は指定されたメンバーに引き続きレジストリーへのプッシュや組織の作成を行う権限を付与できます。一般的に、FEATURE_RESTRICTED_USERS が設定されている場合、Red Hat Quay 管理者は RESTRICTED_USERS_WHITELIST も設定する場合があります。そうしないと、レジストリーのすべてのメンバー (チームによって定義されたメンバーを除く) が基本的なタスクを実行できなくなります。
たとえば、Red Hat Quay 管理者は、config.yaml ファイルで FEATURE_RESTRICTED_USERS および RESTRICTED_USERS_WHITELIST 設定フィールドを次のように設定します。
# ...
FEATURE_RESTRICTED_USERS: true
RESTRICTED_USERS_WHITELIST:
- user2
# ...
# ...
FEATURE_RESTRICTED_USERS: true
RESTRICTED_USERS_WHITELIST:
- user2
# ...
この設定では、user2 を 除く すべてのユーザーはイメージのプッシュや組織の作成が制限されます。チームに所属する他のユーザーにもこれらの権限が与えられます。レジストリーに登録されているユーザーのうち、RESTRICTED_USERS_WHITELIST フィールドで定義されていない、または、いずれの組織のチームにも属していないユーザーには、そのレジストリー内の権限がありません。そのため、基本的な操作を行うことができません。
この機能は、LDAP デプロイメントタイプによって動作が異なります。詳細は、Red Hat Quay の LDAP 認証の設定 を参照してください。
2.2. 組織へのスーパーユーザーアクセスの管理 リンクのコピーリンクがクリップボードにコピーされました!
たとえば、user1 がレジストリー内に組織を作成すると、そのユーザーはその組織へのアクセス権と権限を所有します。そのため、リポジトリーの作成、チームとメンバーシップの定義、ロボットアカウントの作成、デフォルトの権限の設定、ログの表示、必要に応じてその他の設定を調整できます。実質的には、それはユーザーの組織であると言えます。
デフォルトでは、スーパーユーザーにはユーザーの組織へのアクセス権がありません。ただし、Red Hat Quay 管理者は、FEATURE_SUPERUSERS_FULL_ACCESS 設定フィールドを使用して、スーパーユーザーに対し、所有していないか、明示的な権限を持っていない namespace または組織内の他のリポジトリーからのコンテンツの読み取り、書き込み、および削除の権限を付与できます。
- この機能は、新しい UI のベータ版でのみ利用できます。有効にすると、スーパーユーザーがアクセスできるすべての組織が表示されます。
- このフィールドを有効にすると、スーパーユーザーはすべての組織のイメージリポジトリーを一度に表示できなくなります。これは既知の制限であり、Red Hat Quay の今後のバージョンで修正される予定です。一時的な回避策として、スーパーユーザーは Organizations ページからイメージリポジトリーに移動して、イメージリポジトリーを表示できます。
スーパーユーザーにレジストリー内のすべての組織へのフルアクセス権を付与するには、次の YAML 設定を使用できます。
# ... FEATURE_SUPERUSERS_FULL_ACCESS: true # ...
# ...
FEATURE_SUPERUSERS_FULL_ACCESS: true
# ...
FEATURE_SUPERUSERS_FULL_ACCESS: true を設定すると、すべての組織がスーパーユーザーの Organization ページに表示されます。
第3章 Red Hat Quay リポジトリーの概要 リンクのコピーリンクがクリップボードにコピーされました!
リポジトリーは、関連するコンテナーイメージのセットを一元的に保存するための場所を提供します。これらのイメージを使用して、アプリケーションとその依存関係を標準化された形式で構築できます。
リポジトリーは namespace を使用して整理します。namespace には、それぞれ複数のリポジトリーを含めることができます。たとえば、個人プロジェクト用の namespace、会社用の namespace、または組織内の特定のチーム用の namespace を設定できます。
プライベートリポジトリーでは、リポジトリーにプッシュしたり、リポジトリーからプルしたりできるユーザーまたはチームを定義できるため、イメージにアクセスできるユーザーを制御でき、レジストリーのセキュリティーが強化されます。
3.1. UI を使用してリポジトリーの可視性を調整する リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay UI を使用して、リポジトリーの可視性を調整し、パブリックまたはプライベートにすることができます。
手順
- Red Hat Quay UI で、ナビゲーションペインの Repositories をクリックします。
- リポジトリーの名前をクリックします。
- ナビゲーションペインで Settings をクリックします。
- Repository visibility をクリックします。
- Make private をクリックします。リポジトリーは非公開に設定され、権限リストに載っているユーザーのみがリポジトリーを表示して操作できるようになります。
3.2. API を使用してリポジトリーの可視性を調整する リンクのコピーリンクがクリップボードにコピーされました!
リポジトリーの可視性は POST/api/v1/repository/{repository}/changevisibility コマンドを使用して、private または public に設定できます。
前提条件
- OAuth アクセストークンを作成 している。
- リポジトリーが作成済みである。
手順
visibilityスキーマで必要なオプションを指定することにより、リポジトリーの可視性をパブリックまたはプライベートに変更できます。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{"success": true}{"success": true}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第4章 Red Hat Quay のロボットアカウントの概要 リンクのコピーリンクがクリップボードにコピーされました!
ロボットアカウントは、Red Hat Quay レジストリー内のリポジトリーへの自動アクセスを設定するのに使用します。ロボットアカウントは OpenShift Container Platform のサービスアカウントに似ています。
ロボットアカウントを設定すると、以下が実行されます。
- ロボットアカウントに関連付けられた認証情報が生成されます。
- ロボットアカウントがイメージをプッシュおよびプルできるリポジトリーとイメージが特定されます。
- 生成された認証情報をコピー/ペーストして、Docker、Podman、Kubernetes、Mesos などのさまざまなコンテナークライアントで使用し、定義された各リポジトリーにアクセスできます。
ロボットアカウントは、次のようなさまざまなセキュリティー上の利点を提供することで、Red Hat Quay レジストリーのセキュリティー保護に役立ちます。
- リポジトリーアクセスの指定。
-
Read(プル) またはWrite(プッシュ) アクセスなどの詳細な権限。必要に応じてAdmin権限を付与することもできます。 - CI/CD パイプライン、システム統合、その他の自動化タスク向けの設計。スクリプト、パイプライン、その他の環境変数での認証情報の公開を回避します。
- パスワードの代わりにトークンを使用するロボットアカウント。トークンが侵害された場合に管理者がトークンを取り消すことができます。
各ロボットアカウントは、1 つのユーザー namespace または組織に制限されます。たとえば、ロボットアカウントは、ユーザー quayadmin にすべてのリポジトリーへのアクセスを提供できます。しかし、ユーザーのリポジトリーリストにないリポジトリーへのアクセスは提供できません。
ロボットアカウントは、Red Hat Quay UI を使用して作成することも、Red Hat Quay API を使用して CLI 経由で作成することもできます。作成後、Red Hat Quay 管理者は、キーレス認証などの Robot Accounts のより高度な機能を活用できます。
4.1. UI を使用したロボットアカウントの作成 リンクのコピーリンクがクリップボードにコピーされました!
v2 UI を使用してロボットアカウントを作成するには、次の手順を実行します。
手順
- v2 UI で、Organizations をクリックします。
-
ロボットアカウントを作成する組織の名前をクリックします (例:
test-org)。 - Robot accounts タブ → Create robot account をクリックします。
-
Provide a name for your robot account ボックスに、
robot1などの名前を入力します。ロボットアカウントの名前は、ユーザー名とロボットの名前を組み合わせたものになります (例:quayadmin+robot1)。 オプション: 必要に応じて、以下のオプションを使用できます。
- ロボットアカウントをチームに追加します。
- ロボットアカウントをリポジトリーに追加します。
- ロボットアカウントの権限を調整します。
Review and finish ページで、入力した情報を確認してから、Review and finish をクリックします。Successfully created robot account with robot name: <organization_name> + <robot_name> というアラートが表示されます。
また、別のロボットアカウントと同じ名前でロボットアカウントを作成しようとすると、Error creating robot account というエラーメッセージが表示される場合があります。
- オプション: Expand または Collapse をクリックすると、ロボットアカウントの説明情報を表示できます。
- オプション: 縦の省略記号メニュー → Set repository permissions をクリックして、ロボットアカウントのパーミッションを変更できます。Successfully updated repository permission というメッセージが表示されます。
オプション: ロボットアカウントの名前をクリックすると、次の情報を取得できます。
- Robot Account: ロボットアカウントのトークンを取得するには、これを選択します。Regenerate token now をクリックすると、トークンを再生成できます。
- Kubernetes Secret: Kubernetes プルシークレット YAML ファイルの形式で認証情報をダウンロードするには、これを選択します。
-
Podman: 認証情報を含む完全な
podman loginコマンドラインをコピーするには、これを選択します。 -
Docker Configuration: 認証情報を含む完全な
docker loginコマンドラインをコピーするには、これを選択します。
4.2. Red Hat Quay API を使用したロボットアカウントの作成 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay API を使用してロボットアカウントを作成するには、次の手順に従います。
前提条件
- OAuth アクセストークンを作成 している。
手順
次のコマンドを入力し、
PUT /api/v1/organization/{orgname}/robots/{robot_shortname}エンドポイントを使用して組織の新しいロボットアカウントを作成します。curl -X PUT -H "Authorization: Bearer <bearer_token>" "https://<quay-server.example.com>/api/v1/organization/<organization_name>/robots/<robot_name>"
$ curl -X PUT -H "Authorization: Bearer <bearer_token>" "https://<quay-server.example.com>/api/v1/organization/<organization_name>/robots/<robot_name>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{"name": "orgname+robot-name", "created": "Fri, 10 May 2024 15:11:00 -0000", "last_accessed": null, "description": "", "token": "<example_secret>", "unstructured_metadata": null}{"name": "orgname+robot-name", "created": "Fri, 10 May 2024 15:11:00 -0000", "last_accessed": null, "description": "", "token": "<example_secret>", "unstructured_metadata": null}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力し、
PUT /api/v1/user/robots/{robot_shortname}エンドポイントを使用して現在のユーザーの新しいロボットアカウントを作成します。curl -X PUT -H "Authorization: Bearer <bearer_token>" "https://<quay-server.example.com>/api/v1/user/robots/<robot_name>"
$ curl -X PUT -H "Authorization: Bearer <bearer_token>" "https://<quay-server.example.com>/api/v1/user/robots/<robot_name>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{"name": "quayadmin+robot-name", "created": "Fri, 10 May 2024 15:24:57 -0000", "last_accessed": null, "description": "", "token": "<example_secret>", "unstructured_metadata": null}{"name": "quayadmin+robot-name", "created": "Fri, 10 May 2024 15:24:57 -0000", "last_accessed": null, "description": "", "token": "<example_secret>", "unstructured_metadata": null}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3. ロボットアカウントのリポジトリーアクセスの一括管理 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay v2 UI を使用してロボットアカウントのリポジトリーアクセスを一括管理するには、次の手順を実行します。
前提条件
- ロボットアカウントを作成している。
- 1 つの組織に複数のリポジトリーを作成している。
手順
- Red Hat Quay v2 UI ランディングページで、ナビゲーションペインの Organizations をクリックします。
- Organizations ページで、複数のリポジトリーを持つ組織の名前を選択します。単一組織内のリポジトリーの数は、Repo Count 列で確認できます。
- 組織のページで、Robot accounts をクリックします。
- 複数のリポジトリーにロボットアカウントを追加する場合は、縦の省略記号アイコン → Set repository permissions をクリックします。
Set repository permissions ページで、ロボットアカウントを追加するリポジトリーのチェックボックスをオンにします。以下に例を示します。
- ロボットアカウントの権限を設定します (例: None、Read、Write、Admin)。
- save をクリックします。Success alert: Successfully updated repository permission というアラートが Set repository permissions ページに表示され、変更が確認されます。
- Organizations → Robot accounts ページに戻ります。これで、ロボットアカウントの Repositories 列に、ロボットアカウントが追加されたリポジトリーの数が表示されます。
4.4. ロボットアカウントの無効化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay 管理者は、ユーザーに新しいロボットアカウントの作成を禁止することでロボットアカウントを管理できます。
リポジトリーのミラーリングにはロボットアカウントが必要です。ROBOTS_DISALLOW 設定フィールドを True に設定すると、ミラーリング設定が破棄されます。リポジトリーをミラーリングするユーザーは、config.yaml ファイルで ROBOTS_DISALLOW を True に設定しないでください。これは既知の問題であり、Red Hat Quay の今後のリリースで修正される予定です。
ロボットアカウントの作成を無効にするには、次の手順を実行します。
前提条件
- 複数のロボットアカウントを作成している。
手順
config.yamlフィールドを更新してROBOTS_DISALLOW変数を追加します。次に例を示します。ROBOTS_DISALLOW: true
ROBOTS_DISALLOW: trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Red Hat Quay デプロイメントを再起動します。
検証: 新しいロボットアカウントの作成
- Red Hat Quay リポジトリーに移動します。
- リポジトリーの名前をクリックします。
- ナビゲーションウィンドウで、Robot Accounts をクリックします。
- Create Robot Account をクリックします。
-
ロボットアカウントの名前を入力します (例:
<organization-name/username>+<robot-name>)。 -
Create robot account をクリックして作成を確定します。次のメッセージが表示されます。
Cannot create robot account.Robot accounts have been disabled.Please contact your administrator.
検証: ロボットアカウントへのログイン
コマンドラインインターフェイス (CLI) で、次のコマンドを入力してロボットアカウントの 1 つとしてログインを試みます。
podman login -u="<organization-name/username>+<robot-name>" -p="KETJ6VN0WT8YLLNXUJJ4454ZI6TZJ98NV41OE02PC2IQXVXRFQ1EJ36V12345678" <quay-server.example.com>
$ podman login -u="<organization-name/username>+<robot-name>" -p="KETJ6VN0WT8YLLNXUJJ4454ZI6TZJ98NV41OE02PC2IQXVXRFQ1EJ36V12345678" <quay-server.example.com>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のエラーメッセージが返されます。
Error: logging into "<quay-server.example.com>": invalid username/password
Error: logging into "<quay-server.example.com>": invalid username/passwordCopy to Clipboard Copied! Toggle word wrap Toggle overflow log-level=debugフラグを渡すと、ロボットアカウントが無効化されたことを確認できます。podman login -u="<organization-name/username>+<robot-name>" -p="KETJ6VN0WT8YLLNXUJJ4454ZI6TZJ98NV41OE02PC2IQXVXRFQ1EJ36V12345678" --log-level=debug <quay-server.example.com>
$ podman login -u="<organization-name/username>+<robot-name>" -p="KETJ6VN0WT8YLLNXUJJ4454ZI6TZJ98NV41OE02PC2IQXVXRFQ1EJ36V12345678" --log-level=debug <quay-server.example.com>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ... DEBU[0000] error logging into "quay-server.example.com": unable to retrieve auth token: invalid username/password: unauthorized: Robot accounts have been disabled. Please contact your administrator.
... DEBU[0000] error logging into "quay-server.example.com": unable to retrieve auth token: invalid username/password: unauthorized: Robot accounts have been disabled. Please contact your administrator.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5. Red Hat Quay API を使用したロボットアカウントトークンの再生成 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay API を使用してロボットアカウントトークンを再生成するには、次の手順に従います。
前提条件
- OAuth アクセストークンを作成 している。
手順
次のコマンドを入力し、
POST /api/v1/organization/{orgname}/robots/{robot_shortname}/regenerateエンドポイントを使用して組織のロボットアカウントトークンを再生成します。curl -X POST \ -H "Authorization: Bearer <bearer_token>" \ "<quay-server.example.com>/api/v1/organization/<orgname>/robots/<robot_shortname>/regenerate"
$ curl -X POST \ -H "Authorization: Bearer <bearer_token>" \ "<quay-server.example.com>/api/v1/organization/<orgname>/robots/<robot_shortname>/regenerate"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{"name": "test-org+test", "created": "Fri, 10 May 2024 17:46:02 -0000", "last_accessed": null, "description": "", "token": "<example_secret>"}{"name": "test-org+test", "created": "Fri, 10 May 2024 17:46:02 -0000", "last_accessed": null, "description": "", "token": "<example_secret>"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力し、
POST /api/v1/user/robots/{robot_shortname}/regenerateエンドポイントを使用して現在のユーザーのロボットアカウントトークンを再生成します。curl -X POST \ -H "Authorization: Bearer <bearer_token>" \ "<quay-server.example.com>/api/v1/user/robots/<robot_shortname>/regenerate"
$ curl -X POST \ -H "Authorization: Bearer <bearer_token>" \ "<quay-server.example.com>/api/v1/user/robots/<robot_shortname>/regenerate"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{"name": "quayadmin+test", "created": "Fri, 10 May 2024 14:12:11 -0000", "last_accessed": null, "description": "", "token": "<example_secret>"}{"name": "quayadmin+test", "created": "Fri, 10 May 2024 14:12:11 -0000", "last_accessed": null, "description": "", "token": "<example_secret>"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6. UI を使用したロボットアカウントの削除 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay UI を使用してロボットアカウントを削除するには、次の手順に従います。
手順
- Red Hat Quay レジストリーにログインします。
- ロボットアカウントがある組織の名前をクリックします。
- Robot accounts をクリックします。
- 削除するロボットアカウントのボックスをチェックします。
- 縦の省略記号メニューをクリックします。
- Delete をクリックします。
-
テキストボックスに
confirmと入力し、Delete をクリックします。
4.7. Red Hat Quay API を使用したロボットアカウントの削除 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay API を使用してロボットアカウントを削除するには、次の手順に従います。
前提条件
- OAuth アクセストークンを作成 している。
手順
次のコマンドを入力し、
DELETE /api/v1/organization/{orgname}/robots/{robot_shortname}エンドポイントを使用して組織のロボットアカウントを削除します。curl -X DELETE \ -H "Authorization: Bearer <bearer_token>" \ "<quay-server.example.com>/api/v1/organization/<organization_name>/robots/<robot_shortname>"
curl -X DELETE \ -H "Authorization: Bearer <bearer_token>" \ "<quay-server.example.com>/api/v1/organization/<organization_name>/robots/<robot_shortname>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow API を使用してロボットアカウントを削除する場合、CLI は情報を返しません。削除を確認するには、Red Hat Quay UI を確認するか、次の
GET /api/v1/organization/{orgname}/robotsコマンドを入力して、ロボットアカウントの詳細が返されるかどうかを確認します。curl -X GET -H "Authorization: Bearer <bearer_token>" "https://<quay-server.example.com>/api/v1/organization/<organization_name>/robots"
$ curl -X GET -H "Authorization: Bearer <bearer_token>" "https://<quay-server.example.com>/api/v1/organization/<organization_name>/robots"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{"robots": []}{"robots": []}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力し、
DELETE /api/v1/user/robots/{robot_shortname}エンドポイントを使用して現在のユーザーのロボットアカウントを削除します。curl -X DELETE \ -H "Authorization: Bearer <bearer_token>" \ "<quay-server.example.com>/api/v1/user/robots/<robot_shortname>"
$ curl -X DELETE \ -H "Authorization: Bearer <bearer_token>" \ "<quay-server.example.com>/api/v1/user/robots/<robot_shortname>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow API を使用して現在のユーザーのロボットアカウントを削除する場合、CLI は情報を返しません。削除を確認するには、Red Hat Quay UI を確認するか、次の
GET /api/v1/user/robots/{robot_shortname}コマンドを入力して、ロボットアカウントの詳細が返されるかどうかを確認します。curl -X GET \ -H "Authorization: Bearer <bearer_token>" \ "<quay-server.example.com>/api/v1/user/robots/<robot_shortname>"
$ curl -X GET \ -H "Authorization: Bearer <bearer_token>" \ "<quay-server.example.com>/api/v1/user/robots/<robot_shortname>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{"message":"Could not find robot with specified username"}{"message":"Could not find robot with specified username"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第5章 Clair セキュリティースキャナー リンクのコピーリンクがクリップボードにコピーされました!
Clair v4 (Clair) は、静的コード分析を活用してイメージコンテンツを解析し、コンテンツに影響を与える脆弱性を報告するオープンソースアプリケーションです。Clair は Red Hat Quay にパッケージ化されており、スタンドアロンと Operator デプロイメントの両方で使用できます。エンタープライズ環境に合わせてコンポーネントを個別にスケーリングできる、非常にスケーラブルな設定で実行できます。
Clair セキュリティースキャナーの詳細は、Red Hat Quay での Clair による脆弱性レポート を参照してください。