3.12. 自動化のための Red Hat Quay の事前設定
Red Hat Quay は、自動化を可能にするいくつかの設定オプションをサポートします。ユーザーはデプロイメント前にこれらのオプションを設定して、ユーザーインターフェイスとの対話の必要性を減らすことができます。
3.12.1. API による最初のユーザー作成の許可
最初のユーザーを作成するには、ユーザーは FEATURE_USER_INITIALIZE パラメーターを true に設定し、/api/v1/user/initialize API を呼び出す必要があります。既存の組織の OAuth アプリケーションによって生成された OAuth トークンを必要とする他のすべてのレジストリー API 呼び出しとは異なり、API エンドポイントは認証を必要としません。
他のユーザーが作成されていない場合、ユーザーは Red Hat Quay のデプロイ後に API を使用して quayadmin
などのユーザーを作成できます。詳細は、API を使用して最初のユーザーを作成する を参照してください。
3.12.2. API 一般アクセスの有効化
Red Hat Quay レジストリー API への一般的なアクセスを許可するには、ユーザーは BROWSER_API_CALLS_XHR_ONLY 設定オプションを false に設定する必要があります。
3.12.3. スーパーユーザーの追加
Red Hat Quay をデプロイした後、ユーザーはユーザーを作成し、最初のユーザーに完全な権限を持つ管理者権限を与えることができます。ユーザーは、SUPER_USER 設定オブジェクトを使用して、事前に完全な権限を設定できます。以下に例を示します。
... SERVER_HOSTNAME: quay-server.example.com SETUP_COMPLETE: true SUPER_USERS: - quayadmin ...
3.12.4. ユーザー作成の制限
スーパーユーザーを設定した後、FEATURE_USER_CREATION
を false
に設定することで、新しいユーザーを作成できる権限をスーパーユーザーグループに制限できます。以下に例を示します。
... FEATURE_USER_INITIALIZE: true BROWSER_API_CALLS_XHR_ONLY: false SUPER_USERS: - quayadmin FEATURE_USER_CREATION: false ...
3.12.5. Red Hat Quay 3.8 での新機能の有効化
新しい Red Hat Quay 3.8 の機能を使用するには、次の機能の一部またはすべてを有効にします。
... FEATURE_UI_V2: true FEATURE_LISTEN_IP_VERSION: FEATURE_SUPERUSERS_FULL_ACCESS: true GLOBAL_READONLY_SUPER_USERS: - FEATURE_RESTRICTED_USERS: true RESTRICTED_USERS_WHITELIST: - ...
3.12.6. Red Hat Quay 3.7 での新機能の有効化
新しい Red Hat Quay 3.7 の機能を使用するには、次の機能の一部またはすべてを有効にします。
... FEATURE_QUOTA_MANAGEMENT: true FEATURE_BUILD_SUPPORT: true FEATURE_PROXY_CACHE: true FEATURE_STORAGE_REPLICATION: true DEFAULT_SYSTEM_REJECT_QUOTA_BYTES: 102400000 ...
3.12.7. 自動化の推奨設定
自動化には、以下の config.yaml
パラメーターが推奨されます。
... FEATURE_USER_INITIALIZE: true BROWSER_API_CALLS_XHR_ONLY: false SUPER_USERS: - quayadmin FEATURE_USER_CREATION: false ...
3.12.8. 初期設定を使用した Red Hat Quay Operator のデプロイ
以下の手順に従って、初期設定を使用して OpenShift Container Platform に Red Hat Quay をデプロイします。
前提条件
-
oc
CLI がインストールされている。
手順
設定ファイルを使用してシークレットを作成します。
$ oc create secret generic -n quay-enterprise --from-file config.yaml=./config.yaml init-config-bundle-secret
quayregistry.yaml
ファイルを作成します。以下のように、管理対象外のコンポーネントを特定し、作成されたシークレットを参照します。apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: configBundleSecret: init-config-bundle-secret
Red Hat Quay レジストリーをデプロイします。
$ oc create -n quay-enterprise -f quayregistry.yaml
次のステップ
3.12.8.1. API を使用した最初のユーザーの作成
以下の手順に従って、Red Hat Quay 組織で最初のユーザーを作成します。
前提条件
-
設定オプション
FEATURE_USER_INITIALIZE
はtrue
に設定する。 - データベースにユーザーが存在していない。
この手順では、"access_token": true
を指定して OAuth トークンを要求します。
root ユーザーとして、次のコマンドを入力して
python39
をインストールします。$ sudo yum install python39
Python 3.9 の
pip
パッケージマネージャーをアップグレードします。$ python3.9 -m pip install --upgrade pip
pip
パッケージマネージャーを使用してbcrypt
パッケージをインストールします。$ pip install bcrypt
次のコマンドを入力して、Python 3.9 の
bcrypt
パッケージを使用して、安全なハッシュ化されたパスワードを生成します。$ python3.9 -c 'import bcrypt; print(bcrypt.hashpw(b"subquay12345", bcrypt.gensalt(12)).decode("utf-8"))'
Red Hat Quay 設定ファイルを開き、以下の設定フィールドを更新します。
FEATURE_USER_INITIALIZE: true SUPER_USERS: - quayadmin
次のコマンドを入力して、Red Hat Quay サービスを停止します。
$ sudo podman stop quay
次のコマンドを入力して、Red Hat Quay サービスを開始します。
$ sudo podman run -d -p 80:8080 -p 443:8443 --name=quay -v $QUAY/config:/conf/stack:Z -v $QUAY/storage:/datastorage:Z {productrepo}/{quayimage}:{productminv}
次の
CURL
コマンドを実行して、ユーザー名、パスワード、電子メール、およびアクセストークンを使用して新しいユーザーを生成します。$ curl -X POST -k http://quay-server.example.com/api/v1/user/initialize --header 'Content-Type: application/json' --data '{ "username": "quayadmin", "password":"quaypass12345", "email": "quayadmin@example.com", "access_token": true}'
成功すると、このコマンドはユーザー名、メール、および暗号化されたパスワードが含まれるオブジェクトを返します。以下に例を示します。
{"access_token":"6B4QTRSTSD1HMIG915VPX7BMEZBVB9GPNY2FC2ED", "email":"quayadmin@example.com","encrypted_password":"1nZMLH57RIE5UGdL/yYpDOHLqiNCgimb6W9kfF8MjZ1xrfDpRyRs9NUnUuNuAitW","username":"quayadmin"} # gitleaks:allow
データベースにユーザーが存在している場合は、エラーが返されます。
{"message":"Cannot initialize user in a non-empty database"}
パスワードが 8 文字以上でない場合や、空白が含まれている場合には、エラーが返されます。
{"message":"Failed to initialize user: Invalid password, password must be at least 8 characters and contain no whitespace."}
以下のコマンドを入力して、Red Hat Quay デプロイメントにログインします。
$ sudo podman login -u quayadmin -p quaypass12345 http://quay-server.example.com --tls-verify=false
出力例
Login Succeeded!
3.12.8.2. OAuth トークンの使用
API の呼び出し後に、返される OAuth コードを指定して残りの Red Hat Quay API を呼び出すことができます。
前提条件
-
/api/v1/user/initialize
API を呼び出し、ユーザー名、パスワード、およびメールアドレスに渡している。
手順
以下のコマンドを入力して、現在のユーザーの一覧を取得します。
$ curl -X GET -k -H "Authorization: Bearer 6B4QTRSTSD1HMIG915VPX7BMEZBVB9GPNY2FC2ED" https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org/api/v1/superuser/users/
出力例:
{ "users": [ { "kind": "user", "name": "quayadmin", "username": "quayadmin", "email": "quayadmin@example.com", "verified": true, "avatar": { "name": "quayadmin", "hash": "3e82e9cbf62d25dec0ed1b4c66ca7c5d47ab9f1f271958298dea856fb26adc4c", "color": "#e7ba52", "kind": "user" }, "super_user": true, "enabled": true } ] }
このインスタンスでは、これまで作成した唯一のユーザーであるため、
quayadmin
ユーザーの詳細が返されます。
3.12.8.3. API を使用した組織の作成
以下の手順では、API を使用して Red Hat Quay 組織を作成する方法を説明します。
前提条件
-
/api/v1/user/initialize
API を呼び出し、ユーザー名、パスワード、およびメールアドレスに渡している。 - 返された OAuth コードを指定して、残りの Red Hat Quay API を呼び出している。
手順
組織を作成するには、
api/v1/organization/
エンドポイントへの POST 呼び出しを使用します。$ curl -X POST -k --header 'Content-Type: application/json' -H "Authorization: Bearer 6B4QTRSTSD1HMIG915VPX7BMEZBVB9GPNY2FC2ED" https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org/api/v1/organization/ --data '{"name": "testorg", "email": "testorg@example.com"}'
出力例:
"Created"
以下のコマンドを入力して、作成した組織の詳細を取得できます。
$ curl -X GET -k --header 'Content-Type: application/json' -H "Authorization: Bearer 6B4QTRSTSD1HMIG915VPX7BMEZBVB9GPNY2FC2ED" https://min-registry-quay-quay-enterprise.apps.docs.quayteam.org/api/v1/organization/testorg
出力例:
{ "name": "testorg", "email": "testorg@example.com", "avatar": { "name": "testorg", "hash": "5f113632ad532fc78215c9258a4fb60606d1fa386c91b141116a1317bf9c53c8", "color": "#a55194", "kind": "user" }, "is_admin": true, "is_member": true, "teams": { "owners": { "name": "owners", "description": "", "role": "admin", "avatar": { "name": "owners", "hash": "6f0e3a8c0eb46e8834b43b03374ece43a030621d92a7437beb48f871e90f8d90", "color": "#c7c7c7", "kind": "team" }, "can_view": true, "repo_count": 0, "member_count": 1, "is_synced": false } }, "ordered_teams": [ "owners" ], "invoice_email": false, "invoice_email_address": null, "tag_expiration_s": 1209600, "is_free_account": true }