プライベート自動化ハブでのコンテナーの管理
プライベート自動化ハブコンテナーレジストリー (単数または複数) を設定するための管理者ワークフローおよびプロセス
概要
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。
第1章 プライベート Automation Hub コンテナーレジストリーの管理
Automation Hub コンテナーレジストリーを使用して、Ansible Automation Platform インフラストラクチャーでコンテナーイメージリポジトリーを管理します。ハブは、個々のコンテナーリポジトリーにアクセスできるユーザーや、イメージのタグの変更、アクティビティーおよびイメージ層の表示、および各コンテナーリポジトリーに関連した追加情報を提供することを行うための機能を提供します。
1.1. コンテナーレジストリー
Automation Hub コンテナーレジストリーは、コンテナーイメージの保存と管理に使用されます。コンテナーイメージをビルド、または取得した後に、そのコンテナーイメージをプライベート Automation Hub のレジストリーの部分にプッシュしてコンテナーリポジトリーを作成できます。
1.2. 次のステップ
- コンテナーイメージを Automation Hub のコンテナーレジストリーにプッシュします。
- レジストリー内のコンテナーリポジトリーにアクセスできるグループを作成します。
- 新規グループをコンテナーリポジトリーに追加します。
- コンテナーリポジトリーに README を追加して、ユーザーに情報や関連リンクを提供します。
第2章 プライベート Automation Hub でコンテナーリポジトリーのユーザーアクセスの設定
プライベート Automation Hub のコンテナーリポジトリーへのユーザーアクセスを設定し、Ansible Automation Platform でイメージにアクセスして管理できるパーミッションを提供します。
2.1. 前提条件
- グループを作成して、プライベート Automation Hub でパーミッションを割り当てることができるようになっている。
2.2. コンテナーレジストリーのグループパーミッション
ユーザーアクセスにより、ユーザーがプライベート Automation Hub で管理されているコンテナーと対話する方法を細かく制御できます。次の権限のリストを使用して、コンテナーレジストリーに対する適切な権限を持つグループを作成します。
権限名 | 説明 |
---|---|
新規コンテナーの作成 | ユーザーは新規コンテナーを作成できます。 |
コンテナーの名前空間権限の変更 | ユーザーは、コンテナーリポジトリーの権限を変更できます。 |
コンテナーの変更 | ユーザーはコンテナーの情報を変更できます。 |
イメージタグの変更 | ユーザーはイメージタグを変更できます。 |
プライベートコンテナーのプル | ユーザーはプライベートコンテナーからイメージをプルできます。 |
既存コンテナーへのプッシュ | 既存のコンテナーにイメージをプッシュすることができます。 |
プライベートコンテナーの表示 | ユーザーは、プライベートとしてマークされているコンテナーを表示できます。 |
2.3. 新規グループの作成
ユーザーがシステム内の指定された機能にアクセスできるパーミッションを作成し、Automation Hub のグループに割り当てることができます。デフォルトでは、すべてのパーミッションが割り当てられており、Automation Hub のインストール時に作成された認証情報を使用して最初のログインで使用できる admins グループが Automation Hub にあります。
前提条件
- groups パーミッションがあり、グループ設定を作成および管理し、Automation Hub でアクセスすることができる。
手順
- ローカルの Automation Hub にログインします。
- → に移動します。
- をクリックします。
- Name を指定して をクリックします。
グループの編集ページで、パーミッションを割り当てたり、ユーザーを追加したりできるようになりました。
2.4. グループへの権限の割り当て
ユーザーがシステム内の特定の機能にアクセスできるパーミッションを Automation Hub のグループに割り当てることができます。デフォルトでは、新しいグループには権限が割り当てられていません。最初のグループ作成時にパーミッションを追加するか、既存のグループを編集してパーミッションを追加または削除できます。
前提条件
- Change group パーミッションがあり、Automation Hub でグループパーミッションを編集できる。
手順
- ローカルの Automation Hub にログインします。
- → に移動します。
- をクリックします。
- 名前フィールドをクリックし、ロール名を入力します。
- 説明フィールドをクリックして説明を入力します。
- Permissions セクションを完了します。
- パーミッションタイプのフィールドをクリックし、リストに表示されるパーミッションを選択します。
- パーミッションの割り当てが完了したら、 をクリックします。
- → に移動します。
- グループ名をクリックします。
- Access タブをクリックします。
- をクリックします。
- 手順 8 で作成したロールを選択します。
- をクリックして、選択したロールを確認します。
- をクリックしてロールの追加を完了します。
このグループは、割り当てられたパーミッションに関連付けられた Automation Hub の機能にアクセスできるようになりました。
関連情報
- 特定のパーミッションについての詳細は、コンテナーレジストリーのグループパーミッション を参照してください。
2.5. グループへのユーザーの追加
グループの作成時にユーザーを追加したり、既存のグループにユーザーを手動で追加したりできます。本セクションでは、既存のグループにユーザーを追加する方法を説明します。
前提条件
- groups パーミッションがあり、グループ設定を作成および管理し、Automation Hub でアクセスすることができる。
手順
- Automation Hub にログインします。
- → に移動します。
- グループ名をクリックします。
- タブに移動し、 をクリックします。
- 一覧から追加するユーザーを選択し、 をクリックします。
選択したユーザーをグループに追加しました。これらのユーザーは、グループに割り当てられた Automation Hub を使用するためのパーミッションを持つようになりました。
第3章 プライベート Automation Hub コンテナーレジストリーへの入力
デフォルトでは、プライベート Automation Hub にはコンテナーイメージが含まれません。コンテナーレジストリーを設定するには、コンテナーイメージレジストリーにコンテナーイメージをプッシュする必要があります。本セクションの手順では、Red Hat Ecosystem Catalog (registry.redhat.io) からイメージをプルし、プルしたイメージをタグ付けして、プライベート自動化コンテナーレジストリーにプッシュする方法を説明します。
イメージマニフェストとファイルシステム Blob は、registry.redhat.io
と registry.access.redhat.com
から直接提供されます。ただし、2023 年 5 月 1 日以降、ファイルシステム Blob は代わりに quay.io
から提供されます。コンテナーイメージのプルに関する問題を回避するには、次のホスト名への送信接続を有効にする必要があります。
-
cdn.quay.io
-
cdn01.quay.io
-
cdn02.quay.io
-
cdn03.quay.io
registry.redhat.io
または registry.access.redhat.com
への送信接続を特に有効にするすべてのファイアウォール設定にこの変更を加えます。
ファイアウォールルールを設定するときは、IP アドレスの代わりにホスト名を使用します。
この変更を行った後、引き続き registry.redhat.io
および registry.access.redhat.com
からイメージをプルできます。Red Hat コンテナーイメージのプルを続行するために、quay.io
にログインする必要も、quay.io
レジストリーと直接やりとりする必要もありません。
3.1. 前提条件
- 新しいコンテナーを作成して、プライベート Automation Hub にプッシュするパーミッションがある。
3.2. Automation Hub で使用するイメージの取得
コンテナーイメージをプライベート Automation Hub にプッシュする前に、まず既存のレジストリーからプルし、使用できるようにタグを付ける必要があります。以下の例では、Red Hat Ecosystem Catalog (registry.redhat.io) からイメージをプルする方法を説明します。
前提条件
registry.redhat.io からイメージをプルする権限がある。
手順
registry.redhat.io 認証情報を使用して Podman にログインします。
$ podman login registry.redhat.io
- プロンプトにユーザー名およびパスワードを入力します。
コンテナーイメージをプルします。
$ podman pull registry.redhat.io/<container_image_name>:<tag>
検証
ローカルストレージ内のイメージをリスト表示します。
$ podman images
- 最近プルしたイメージがリストに含まれていることを確認します。
- タグが正しいことを確認します。
関連情報
- イメージの登録および取得についての詳細は、Red Hat Ecosystem Catalog Help を参照してください。
3.3. Automation Hub で使用するイメージのタグ付け
レジストリーからイメージをプルしたら、Private Automation Hub コンテナーレジストリーで使用するようにタグを付けます。
前提条件
- 外部レジストリーからコンテナーイメージをプルしている。
- Automation Hub インスタンスの FQDN または IP アドレスがある。
手順
Automation Hub コンテナーリポジトリーを使用してローカルイメージにタグを付けます。
$ podman tag registry.redhat.io/<container_image_name>:<tag> <automation_hub_URL>/<container_image_name>
検証
ローカルストレージ内のイメージをリスト表示します。
$ podman images
- Automation Hub の情報で最近タグ付けされたイメージが一覧に含まれていることを確認します。
3.4. Private Automation Hub へのコンテナーイメージのプッシュ
タグ付けされたコンテナーイメージを Private Automation Hub にプッシュして、新しいコンテナーを作成し、コンテナーレジストリーに追加できます。
前提条件
- 新規コンテナーを作成する権限がある。
- Automation Hub インスタンスの FQDN または IP アドレスがある。
手順
Automation Hub の場所および認証情報を使用して Podman にログインします。
$ podman login -u=<username> -p=<password> <automation_hub_url>
コンテナーイメージを Automation Hub のコンテナーレジストリーにプッシュします。
$ podman push <automation_hub_url>/<container_image_name>
注記registry.redhat.io からの署名付きイメージが Automation Hub コンテナーレジストリーにプッシュされる場合は、
--remove-signatures
フラグが必要です。push
操作は、アップロード中にイメージレイヤーを再圧縮します。これは、再現性が保証されておらず、クライアントの実装に依存します。これにより、イメージレイヤーダイジェストが変更され、プッシュ操作が失敗し、Error: Copying this image requires changing layer representation, which is not possible (image is signed or the destination specifies a digest)
エラーが発生します。
検証
- Automation Hub にログインします。
- に移動します。
- コンテナーリポジトリーリストでコンテナーを見つけます。
第4章 コンテナーリポジトリーの設定
コンテナーリポジトリーを設定して説明の追加、README の追加、リポジトリーにアクセスできるグループの追加、およびタグイメージの追加を行うことができます。
4.1. 前提条件
- リポジトリーを変更する権限を持つ Private Automation Hub にログインしている。
4.2. コンテナーリポジトリーへの README の追加
コンテナーリポジトリーに README を追加して、コンテナーを操作する方法をユーザーに提供します。Automation Hub コンテナーリポジトリーは、README を作成するためのマークダウンをサポートします。デフォルトでは、README は空になります。
前提条件
- コンテナーを変更する権限がある。
手順
- に移動します。
- コンテナーリポジトリーを選択します。
- Detail タブで、 をクリックします。
- Raw Markdown テキストフィールドに、Markdown で README テキストを入力します。
- 完了したら、 をクリックします。
README を追加したら、
をクリックし、ステップ 4 および 5 を繰り返すことで、いつでも編集できます。4.3. コンテナーリポジトリーへのアクセスの提供
イメージを操作する必要があるユーザーにコンテナーリポジトリーへのアクセスを提供します。グループを追加すると、グループがコンテナーリポジトリーに対して持つことができる権限を変更できます。このオプションを使用して、グループが割り当てられている内容に応じて権限を拡張または制限できます。
前提条件
- コンテナーの名前空間の権限を変更している。
手順
- に移動します。
- コンテナーリポジトリーを選択します。
- ウィンドウの右上にある をクリックします。
Groups with access で、アクセス権を付与するグループ (単数または複数) を選択します。
- (必要に応じて) グループ名でドロップダウンを使用して、特定のグループのパーミッションを追加または削除します。
- をクリックします。
4.4. コンテナーイメージのタグ付け
Automation Hub コンテナーリポジトリーに保存されているイメージにタグを付けて、名前を追加します。イメージにタグが追加されない場合、Automation Hub の名前はデフォルトで latest
に設定されます。
前提条件
- change image tags の権限がある。
手順
- に移動します。
- コンテナーリポジトリーを選択します。
- Images タブをクリックします。
-
をクリックし、 をクリックします。
テキストフィールドに新しいタグを追加し、
をクリックします。- (必要に応じて) そのイメージのいずれのタグの current tags を削除します。 をクリックして、
- をクリックします。
検証
- Activity タブをクリックし、最新の変更を確認します。
4.5. Automation Controller での認証情報の作成
以前は、レジストリーをデプロイして実行環境イメージを格納する必要がありました。Ansible Automation Platform 2.0 以降では、コンテナーレジストリーがすでに稼働していると想定されます。したがって、実行環境イメージを格納するために任意のコンテナーレジストリーの認証情報を追加するだけで済みます。
パスワードまたはトークンで保護されるレジストリーからコンテナーイメージをプルするには、Automation Controller で認証情報を作成します。
手順
- Automation Controller に移動します。
- サイドメニューバーの → をクリックします。
- をクリックして、新規の認証情報を作成します。
- 承認用の 名前、説明、および 組織 を入力します。
- 認証情報のタイプ を選択します。
- 認証用 URL を入力します。これはコンテナーレジストリーのアドレスです。
- コンテナーレジストリーへのログインに必要な ユーザー名 と パスワードまたはトークン を入力します。
- オプションで、Verify SSL を選択して、SSL の検証を有効にします。
- をクリックします。
第5章 コンテナーリポジトリーからのイメージのプル
Automation Hub コンテナーレジストリーからイメージを取得し、ローカルマシンにコピーを作成します。Automation Hub は、コンテナーリポジトリーの latest
イメージごとに、podman pull
コマンドを提供します。このコマンドを端末にコピーアンドペーストするか、podman pull
を使用してイメージタグに基づいてイメージをコピーすることができます。
5.1. 前提条件
プライベートコンテナーリポジトリーを表示およびプルする権限がある。
5.2. イメージのプル
Automation Hub コンテナーレジストリーからイメージをプルして、ローカルマシンにコピーできます。Automation Hub は、コンテナーリポジトリーの latest
イメージごとに、podman pull
コマンドを提供します。
パスワードまたはトークンで保護されたレジストリーからコンテナーイメージをプルする必要がある場合は、イメージをプルする前に Automation Controller で認証情報を作成 する必要があります。
手順
- に移動します。
- コンテナーリポジトリーを選択します。
- Pull this image エントリーで、 をクリックします。
- 端末でコマンドを貼り付けます。
検証
-
podman images
を実行して、ローカルマシンにイメージを表示します。
5.3. コンテナーリポジトリーからのイメージの同期
Automation Hub コンテナーレジストリーからイメージをプルして、イメージをローカルマシンに同期できます。
前提条件
プライベートコンテナーリポジトリーを表示およびプルする権限がある。
手順
リモートコンテナーレジストリーからイメージを同期するには、リモートレジストリーを設定する必要があります。
- → に移動します。
- https://registry.redhat.io をレジストリーに追加します。
- 認証に必要な認証情報を追加します。
コンテナーレジストリーの中には、流量制御を積極的に行っているものもあります。Advanced Options で流量制御を設定することを推奨します。
- → に移動します。
- ページヘッダーの Add execution environment をクリックします。
- プルするレジストリーを選択します。"name" フィールドには、ローカルレジストリー上に表示されるイメージの名前が表示されます。
"Upstream name" フィールドは、リモートサーバー上のイメージの名前です。たとえば、アップストリーム名が "alpine" に設定され、“name” フィールドが "local/alpine" に設定されている場合、alpine イメージがリモートからダウンロードされ、local/alpine に名前が変更されます。
追加または除外するタグのリストを設定することを推奨します。イメージに多数のタグがあると、イメージの同期に時間がかかり、大量のディスク容量が使用されます。
関連情報
- レジストリーのリストについては、Red Hat コンテナーレジストリーの認証 を参照してください。
5.4. 関連情報
- イメージをプルする際に使用するオプションは、Podman とは ドキュメントを参照してください。
第6章 署名済みコンテナーの操作
6.1. コンテナー署名用のシステムのデプロイ
Automation Hub は、実行環境コンテナーイメージのセキュリティーを強化するためにイメージ署名を実装します。
コンテナー署名の準備ができるようにシステムをデプロイするには、署名スクリプトを作成します。
インストーラーは、インストーラーが配置されているサーバーと同じサーバー上でスクリプトとキーを探します。
手順
ターミナルから署名スクリプトを作成し、スクリプトパスをインストーラーパラメーターとして渡します。
例:
#!/usr/bin/env bash # pulp_container SigningService will pass the next 4 variables to the script. MANIFEST_PATH=$1 FINGERPRINT="$PULP_SIGNING_KEY_FINGERPRINT" IMAGE_REFERENCE="$REFERENCE" SIGNATURE_PATH="$SIG_PATH" # Create container signature using skopeo skopeo standalone-sign \ $MANIFEST_PATH \ $IMAGE_REFERENCE \ $FINGERPRINT \ --output $SIGNATURE_PATH # Optionally pass the passphrase to the key if password protected. # --passphrase-file /path/to/key_password.txt # Check the exit status STATUS=$? if [ $STATUS -eq 0 ]; then echo {\"signature_path\": \"$SIGNATURE_PATH\"} else exit $STATUS fi
Ansible Automation Platform インストーラーインベントリーファイルで、
automationhub_*
で始まるコンテナー署名のオプションを確認してください。[all:vars] . . . automationhub_create_default_container_signing_service = True automationhub_container_signing_service_key = /absolute/path/to/key/to/sign automationhub_container_signing_service_script = /absolute/path/to/script/that/signs
- インストールが完了したら、Automation Hub に移動します。
- ナビゲーションパネルから、 を選択します。
- container-default または container-anyname というタイトルのキーがあることを確認します。
Container-default
サービスは、Ansible Automation Platform インストーラーによって作成されます。
6.2. Automation Hub に対するリモートでのコンテナーの追加
Automation Hub にコンテナーを追加するには、次の 2 つの方法があります。
- リモートの作成
- Execution Environment
手順
リモートレジストリーを追加するには、以下を行います。
- Automation Hub で、メインメニューペインの Execution Environments と Remote Registries の 2 つの選択肢が利用できるようになります。 をクリックします。
- をクリックします。
メインウィンドウで
をクリックします。- Name フィールドに、コンテナーが存在するレジストリーの名前を入力します。
- URL フィールドに、コンテナーが存在するレジストリーの URL を入力します。
- Username フィールドに、必要に応じてユーザー名を入力します。
- Password フィールドに、必要に応じてパスワードを入力します。
- をクリックします。
6.3. 実行環境の追加
手順
- に移動します。
- 実行環境の名前を入力します。
- オプション: アップストリーム名を入力します。
- Registry で、ドロップダウンメニューからレジストリーの名前を選択します。
- Add tags to include フィールドにタグを入力します。フィールドを空白のままにすると、すべてのタグが渡されます。そのため、リポジトリー固有のタグを渡すことが重要です。
残りのフィールドはオプションです。
- 現在含まれているタグ
- 除外するタグの追加
- 現在除外されているタグ
- 説明
- アクセス権のあるグループ
- をクリックします。
- イメージを同期します。
6.4. ローカルからコンテナーイメージをプッシュする
次の手順を使用して、ローカルシステム上のイメージに署名し、それらの署名されたイメージを Automation Hub レジストリーにプッシュします。
手順
ターミナルから、Podman または現在使用中のコンテナークライアントにログインします。
> podman pull <container-name>
イメージをプルした後、タグを追加します (例: latest、rc、beta、または 1.0、2.3 などのバージョン番号)。
> podman tag <container-name> <server-address>/<container-name>:<tag name>
変更を加えた後にイメージに署名し、Automation Hub レジストリーにプッシュし直します。
> podman push <server-address>/<container-name>:<tag name> --tls-verify=false --sign-by <reference to the gpg key on your local>
イメージが署名されていない場合は、現在の署名が埋め込まれている場合にのみプッシュできます。あるいは、次のスクリプトを使用して、署名せずにイメージをプッシュすることもできます。
> podman push <server-address>/<container-name>:<tag name> --tls-verify=false
- イメージがプッシュされたら、Automation Hub に移動します。
- Refresh アイコンをクリックして、ページを更新し、新しい実行環境を表示します。
- イメージの名前をクリックすると、プッシュされたイメージが表示されます。
詳細ページのイメージ名の下に、イメージが署名されているかどうかが表示されます。この場合は、Unsigned と表示されます。
Automation Hub の詳細ページには、イメージが署名されているかが示されます。詳細ページに、イメージが Unsigned であることが示されている場合は、次の手順を使用して Automation Hub からイメージに署名できます。
- イメージ名をクリックすると詳細ページに移動します。
詳細ページの右上隅にある 3 つのドットをクリックします。次の 3 つのオプションが利用可能です。
- コントローラーでの使用
- Delete
- 署名
- ドロップダウンメニューから署名をクリックします。
署名サービスがイメージに署名します。イメージを署名すると、ステータスが署名済みに変わります。
6.5. 署名済みイメージでのポリシーの使用
Podman またはその他のイメージクライアントがポリシーを使用して、特定のポリシーをその署名に割り当てることにより、イメージの有効性を保証できます。
6.5.1. Podman を使用して、イメージが特定の署名によって署名されていることを確認する
署名が特定の署名によって署名されていることを確認する場合、署名はローカルにある必要があります。
手順
- ナビゲーションペインで、 を選択します。
- 使用している署名の右側にある 3 つの点をクリックします。
- ドロップダウンメニューから Download key を選択します。新しいウィンドウが開きます。
- Name フィールドに、キーの名前を入力します。
- をクリックします。
6.6. 署名を検証するためのクライアントの設定
リモートレジストリーからプルしたコンテナーイメージが適切に署名されていることを確認するには、まずポリシーファイルで適切な公開キーを使用してイメージを設定する必要があります。
前提条件
- 署名を検証するには、クライアントに sudo 権限が設定されている必要があります。
手順
ターミナルを開き、次のコマンドを使用します。
> sudo <name of editor> /etc/containers/policy.json
表示されるファイルは次のようなものです。
{ "default": [{"type": "reject"}], "transports": { "docker": { "quay.io": [{"type": "insecureAcceptAnything"}], "docker.io": [{"type": "insecureAcceptAnything"}], "<server-address>": [ { "type": "signedBy", "keyType": "GPGKeys", "keyPath": "/tmp/containersig.txt" }] } } }
このファイルは、
quay.io
もdocker.io
も検証を実行しないことを示しています。タイプがinsecureAcceptAnything
であり、これによってデフォルトのタイプのreject
がオーバーライドされるためです。ただし、パラメーターのtype
が"signedBy"
に設定されているため、<server-address>
によって検証が実行されます。注記現在サポートされている唯一の
keyType
は GPG キーです。<server-address>
エントリーの下で、keyPath
<1> を変更してキーファイルの名前を含めます。{ "default": [{"type": "reject"}], "transports": { "docker": { "quay.io": [{"type": "insecureAcceptAnything"}], "docker.io": [{"type": "insecureAcceptAnything"}], "<server-address>": [{ "type": "signedBy", "keyType": "GPGKeys", "keyPath": "/tmp/<key file name>", "signedIdentity": { "type": "matchExact" } }] } } }
- ファイルを保存してから閉じます。
- Podman または任意のクライアントを使用して、ファイルをプルします。
> podman pull <server-address>/<container-name>:<tag name> --tls-verify=false
この応答は、イメージがエラーなしで署名されたことを確認します。イメージが署名されていない場合、コマンドは失敗します。
関連情報
- policy.json の詳細は、containers-policy.json のドキュメント を参照してください。
第7章 コンテナーリポジトリーの削除
ローカルの Automation Hub からコンテナーリポジトリーを削除して、ディスク容量を管理します。Container Repository リストビューで、Red Hat Ansible Automation Platform インターフェイスからリポジトリーを削除できます。
7.1. コンテナーリポジトリーの削除
前提条件
- リポジトリーを管理する権限があります。
手順
- に移動します。
-
削除するコンテナーリポジトリーで、
をクリックし、 をクリックします。
- 確認メッセージが表示されたら、チェックボックスをクリックして をクリックします。
検証
- Execution Environments リストビューに戻ります。コンテナーリポジトリーをリストから削除する必要があります。