Red Hat コンテナーレジストリーの認証
Table of Contents
Red Hat は、registry.access.redhat.com (認証は不要) および registry.redhat.io (認証が必要) の 2 つの場所からコンテナーレジストリーを配布しています。サードパーティーベンダーのコンテナーイメージは registry.connect.redhat.com で入手できます。ここでは、以下の方法について説明します。
- registry.access.redhat.com (認証は不要) の使用
- registry.redhat.io で認証を行う方法の確認
- 共有システムで使用するためのレジストリーサービスアカウントの作成
Red Hat のレジストリー
Red Hat では、3 つの異なるコンテナーレジストリーを通じてコンテナーイメージを配布しています。
レジストリー | コンテンツ | 認証されていないアクセスのサポート |
Red Hat ログインのサポート |
レジストリートークンのサポート |
---|---|---|---|---|
registry.access.redhat.com | Red Hat 製品 | ◯ | ❌ | ❌ |
registry.redhat.io | Red Hat 製品 | ❌ | ◯ | ◯ |
registry.connect.redhat.com | サードパーティー製品 | ❌ | ◯ | ◯ |
registry.access.redhat.com と registry.redhat.io のどちらも基本的に同じコンテナーイメージを保持しますが、サブスクリプションが必要な一部のイメージは registry.redhat.io からのみ入手できます。
Red Hat ログインの取得
registry.redhat.io レジストリーを使用するには、Red Hat ログインが必要です。Red Hat 製品に対するエンタイトルメントをお持ちのお客様は、すでにアカウントをお持ちです。これは、Red Hat カスタマーポータル (access.redhat.com) にログインしてご自分の Red Hat サブスクリプションを管理するのに使用するアカウントと同じタイプのものです。
Red Hat アカウントをお持ちでなければ、以下のどちらかにサインアップして無料の Red Hat アカウントを取得することができます。
- Red Hat Developer プログラム: 無料の開発者アカウントにサインアップすると、開発者ツールおよびプログラムにアクセスすることができます。
- 30 日間の試用版サブスクリプション: 30 日間の試用版サブスクリプションにサインアップすると、一部の Red Hat ソフトウェア製品にアクセスすることができます。
諸条件に同意して Red Hat アカウントを取得したら、そのアカウントを使用して新しい Red Hat レジストリーにログインしてイメージを取得することができます。yum を使用してイメージをビルドまたは更新する際に RPM パッケージを追加または更新するためには、引き続き Red Hat からのエンタイトルメントが必要である点に注意してください。
認証の使用
認証されたレジストリーからコンテンツを取得するには、カスタマーポータル、Red Hat Developer、またはレジストリーサービスアカウントのいずれかの認証情報を使用してレジストリーにログインする必要があります。
registry.redhat.io レジストリーにログインするには、podman login、skopeo login、および buildah login コマンドのいずれかを使用できます。 このアーティクルで例として使用した docker コマンドは、podman コマンドに置き換えることができます。OpenShift、Satellite、または他の共有環境からの場合、認証にサービスアカウントを使用する必要があります。
podman を使用して registry.redhat.io に対して認証するには、以下のコマンドを実行します。
# podman login registry.redhat.io
Username: myrhusername
Password: ***********
skopeo を使用して registry.redhat.io に対して認証するには、以下のコマンドを実行します。
# skopeo login registry.redhat.io
Username: myrhusername
Password: ***********
docker login コマンドを使用して registry.redhat.io に対して認証するには、以下のコマンドを実行します。
# docker login https://registry.redhat.io
Username: myrhusername
Password: ***********
イメージを以下のように registry.redhat.io レジストリーからプルできます。
skopeo コマンドを使用する場合:
skopeo copy docker://registry.redhat.io/rhel8/pcp containers-storage:registry.redhat.io/rhel8/pcp
podman コマンドを使用する場合:
# podman pull registry.redhat.io/rhel8/rsyslog
Username: myrhusername
Password: xxxxxxxxxxx
レジストリーにログインすると、ご自分の認証情報は ${XDG_RUNTIME_DIR}/containers/auth.json
ファイルに保管されます。次回そのレジストリーからプルする際に、それらの認証情報が自動的に使用されます。このファイルの例を以下に示します。
{
"auths": {
"https://registry.redhat.io": {
"auth": "c2xmams6c2RmbGtq"
}
}
}
別の方法でこれらの認証情報を保存するには、「docker login」ページで config.json の説明を参照してください。
OpenShift ノードの場合には、追加のステップがあります。ログインした後に、~/.docker/config.json
を /var/lib/origin/.docker/config.json
にコピーし、ノードを再起動する必要があります。
# cp ~/.docker/config.json /var/lib/origin/.docker/config.json; systemctl restart atomic-openshift-node
共有環境用のレジストリーサービスアカウント
registry.redhat.io からのコンテナーイメージを共有環境 (OpenShift など) で使用する場合には、管理者は個人のカスタマーポータルの認証情報の代わりにレジストリーサービスアカウント (認証トークンとも呼ばれる) を使用することを推奨します。
サービスアカウントはカスタマーポータルを利用する組織に提供されるメカニズムで、registry.redhat.io に対して認証し、そこからコンテンツを取得するためだけに使用されます。共有システムでカスタマーポータルの認証情報を使用しなくてもよいように、サービスアカウントを使用することが推奨されます。レジストリーサービスアカウントは、カスタマーポータルのアカウントとは対照的に、カスタマーポータルのアカウントに適用されるセキュリティー管理機能 (パスワードの強制リセットなど) に対する回復性があり、その影響を受けません。
サービスアカウントは、レジストリーアカウントの管理アプリケーションで管理できます。 作成するサービスアカウントの数やシステムでの使用方法を自由に決めることができます。ガイドラインとして、共有システム (OpenShift Container Platform クラスターなど) ごとに 1 つのサービスアカウントを使用することができます。
レジストリーサービスアカウントの管理
サービスアカウント管理のアプリケーションで、トークン管理のために認証を簡単に分割することができます。サービスアカウントを作成、変更、または削除できるかどうかは、カスタマーポータルのログインに 組織管理者 ロールが割り当てられているかどうかにより決まります。
カスタマーポータルの組織管理者は、以下の操作を行うことができます。
- 組織で作成したすべてのレジストリーサービスアカウントを表示する
- レジストリーサービスアカウントを作成する
- 任意のレジストリーサービスアカウントを変更または削除する
カスタマーポータルのユーザー (組織管理者以外) は、以下の操作を行うことができます。
- 組織のレジストリーサービスアカウントをすべて表示する
- レジストリーサービスアカウントを作成する
- 自分の作成したレジストリーサービスアカウントのみを変更または削除する
サービスアカウントは、それを作成したユーザーが誰かを問わず、同じ組織内の他のカスタマーポータルユーザーが表示することができます。サービスアカウントおよびそれに関連付けられた認証情報を、組織内の他のユーザーから秘匿する機能はありません。
レジストリーサービスアカウントの作成
レジストリーサービスアカウントの管理アプリケーションにアクセスし、必要に応じてログインします。
- 「Registry Service Accounts」ページから、New Service Account ボタンをクリックします。
- サービスアカウントの名前を入力します。変更できないランダムな文字列が先頭に追加されます。
- 説明を入力します。
- create をクリックします。
- サービスアカウントのページに戻ります。
- 作成したサービスアカウントをクリックします。
- 先頭に追加された文字列を含めたユーザー名を書き留めます (例:
XXXXXXX|username
)。これが registry.redhat.io にログインするのに使用するユーザー名です。 - パスワードを書き留めます。これが registry.redhat.io へのログインに使用するパスワードです。
- 先頭に追加された文字列を含めたユーザー名を書き留めます (例:
「Token Information」のページには複数のタブがあり、さまざまなシナリオでの認証トークンの使用方法に関するガイダンスが提供されます。たとえば、Docker Login タブでは、Docker CLI でのトークンの使用方法について説明しています。
認証トークンの変更
サービスアカウントの作成と同様に、管理アプリケーションの機能の一部として、アカウントを変更または削除することができます。「Registry Service Accounts」のページで表示される各認証トークンの右側にあるポップアップメニューを使用して、これらの機能を呼び出すことができます。それぞれの機能の説明を以下に示します。
- Regenerate Token: 認定されたユーザーは、サービスアカウントに関連付けられたパスワードをリセットすることができます。サービスアカウントのユーザー名は変更されません。
- Update Description: 認定されたユーザーは、サービスアカウントの説明を更新することができます。
- Delete Account: 認定されたユーザーは、サービスアカウントを削除することができます。
警告: サービスアカウントを再生成したり削除したりすると、registry.redhat.io への認証およびコンテンツの取得にトークンを使用しているシステムに影響を及ぼす可能性があります。
Pod による他のセキュアなレジストリーからのイメージの参照を許可する
.dockercfg
ファイル (または、より新しい Docker クライアントの場合は $HOME/.docker/config.json
) は、ご自分の情報を保管する Docker 認証情報ファイルです (以前にセキュアな/セキュアではないレジストリーにログインしている場合)。
OpenShift Container Platform の内部レジストリーからではないセキュアなコンテナーイメージをプルするには、ご自分の Docker 認証情報ファイルからプルシークレットを作成し、それをサービスアカウントに追加する必要があります。
セキュアなレジストリーの .dockercfg
がすでにある場合には、以下のコマンドを実行してそのファイルからシークレットを作成することができます。
$ oc create secret generic <pull_secret_name> \
--from-file=.dockercfg=<path/to/.dockercfg> \
--type=kubernetes.io/dockercfg
または、$HOME/.docker/config.json
ファイルがある場合には、以下のコマンドを実行します。
$ oc create secret generic <pull_secret_name> \
--from-file=.dockerconfigjson=<path/to/.docker/config.json> \
--type=kubernetes.io/dockerconfigjson
セキュアなレジストリーについての Docker 認証情報ファイルがまだない場合には、以下のコマンドを実行してシークレットを作成することができます。
$ oc create secret docker-registry <pull_secret_name> \
--docker-server=<registry_server> \
--docker-username=<user_name> \
--docker-password=<password> \
--docker-email=<email>
Pod のイメージをプルするためにシークレットを使用するには、サービスアカウントにシークレットを追加する必要があります。この例のサービスアカウントの名前は、Pod が使用するサービスアカウントの名前と一致している必要があります。default がデフォルトのサービスアカウントです。
$ oc secrets link default <pull_secret_name> --for=pull
ビルドイメージのプッシュおよびプルにシークレットを使用するには、シークレットは Pod 内でマウント可能でなければなりません。そのためには、以下のコマンドを実行します。
$ oc secrets link builder <pull_secret_name>
ビルドについては、ビルド設定内からのプルシークレットとしてシークレットを参照する必要もあります。
Red Hat レジストリーの詳細
以下は、registry.redhat.io の使用開始にあたって役立つ追加のリソースです。
- トラブルシューティング: セキュリティーが強化された環境にいる場合には、内部の設定を変更して registry.redhat.io をプロキシーのホワイトリストに登録する必要があります。「Troubleshooting Authentication Issues with registry.redhat.io」のアーティクルに記載の手順に従って、registry.redhat.io との接続性を確認することができます。
- 追加のサポート情報の取得方法: さらにサポートが必要な場合には、Red Hat カスタマーポータルでお使いの製品についてのサポートチケットを作成してください。
Comments