AIを使ってしたい100のこと

生成AIの可能性と、それを使って自分自身を表現する楽しさを伝えることを目指しています。

生成AI Copilotを活用したOpenShiftのイメージレジストリへのコンテナイメージPushに必要な最小権限のロールの調査

はじめに

最近、生成AIの活用が増えてきました。特に、OpenShiftのイメージレジストリに対しコンテナイメージをpushする際に必要となる最小権限のロールについて、生成AI Copilotで確認してみました。この記事では、その経験を共有し、生成AI Copilotがどのように役立つかを具体的に示します。

最小権限のロール

プロンプト

私は、OpenShift環境で新たなServiceアカウントを作成します。新たなServiceAccountでは、skopeo copyコマンドを使って、OpenShiftのイメージレジストリに対し、コンテナイメージをpushします。新たなServiceAccountに付与すべき、最小権限のロールを教えてください。

回答

OpenShift環境で新たなServiceアカウントを作成し、skopeo copyコマンドを使ってコンテナイメージをpushするためには、最小限の権限として以下のロールが必要です:

  1. system:image-puller:このロールは、OpenShiftのイメージレジストリからイメージをpullする権限を提供します。これはskopeo copyコマンドがソースイメージをpullするために必要です。

  2. system:image-builder:このロールは、新しいイメージをビルドし、イメージストリームにpushする権限を提供します。これはskopeo copyコマンドがターゲットイメージをpushするために必要です。

これらのロールは、新たなServiceアカウントに付与することで、必要な操作を行うための最小限の権限を提供します。ただし、これらのロールが適切に機能するためには、適切な名前空間でのロールバインディングが必要です。具体的な操作は、以下のようになります:

# ServiceAccountの作成
oc create serviceaccount my-service-account

# 必要なロールの付与
oc policy add-role-to-user system:image-puller system:serviceaccount:myproject:my-service-account
oc policy add-role-to-user system:image-builder system:serviceaccount:myproject:my-service-account

上記のコマンドでは、myprojectはあなたのプロジェクトの名前、my-service-accountは新たに作成したServiceアカウントの名前に置き換えてください。これにより、新たなServiceアカウントは、OpenShiftのイメージレジストリに対して、コンテナイメージをpullし、pushすることが可能となります。ただし、セキュリティ上の理由から、これらのロールは最小限の権限を提供するものであり、他の権限が必要な場合は、適切なロールを追加する必要があります。また、これらの操作は管理者権限を持つユーザーが行う必要があります。ご自身の環境に合わせて適切に設定してください。

registry-editorロールとの違い

プロンプト

registry-editorロールを付与する方法とは何が違いますか?

回答

registry-editorロールを付与することも、OpenShiftのイメージレジストリに対してイメージをpushするための一つの方法です¹²³⁴。このロールは、イメージの書き出しやプッシュを実行するための権限を提供します¹²³⁴。

具体的な操作は以下のようになります:

# registry-editorロールの付与
oc policy add-role-to-user registry-editor <user_name>

ただし、registry-editorロールを付与すると、そのユーザーはレジストリ全体に対してイメージをpushする権限を持つことになります¹²³⁴。これは、特定のプロジェクトだけに対するアクセス制限を設けたい場合には適していません。

一方、system:image-pullersystem:image-builderのロールを付与する方法では、特定のプロジェクト内でのみイメージをpullし、pushする権限を持つServiceアカウントを作成することができます。これにより、より細かいアクセス制御が可能となります。

したがって、どちらの方法を選択するかは、あなたのセキュリティ要件やプロジェクトの要件によります。全体のレジストリに対するアクセス権限が必要な場合はregistry-editorロールを、特定のプロジェクトに対するアクセス権限だけが必要な場合はsystem:image-pullersystem:image-builderのロールを付与する方法を選択してください。¹²³⁴。

ソース: Copilot との会話、 2024/7/1 (1) 第4章 レジストリーへのアクセス | Red Hat Product Documentation. https://docs.redhat.com/ja/documentation/openshift_container_platform/4.11/html/registry/accessing-the-registry. (2) Accessing the registry | Registry | OpenShift Container .... https://docs.openshift.com/container-platform/4.6/registry/accessing-the-registry.html. (3) 第5章 Accessing the registry OpenShift Container Platform 4. .... https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.2/html/registry/accessing-the-registry. (4) 第4章 レジストリーへのアクセス | Red Hat Product Documentation. https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.1/html/registry/accessing-the-registry. (5) 5.6. ロールのユーザーへの追加 OpenShift Container Platform 4 .... https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.4/html/authentication_and_authorization/adding-roles_using-rbac. (6) ja.wikipedia.org. https://ja.wikipedia.org/wiki/OpenShift.

まとめ

「必要となる最小権限のロール」を簡単に確認することができました。また、以下の2つのロールを付与する方法の違いが明確に分かりました。

  • registry-editorロールを付与すると、そのユーザーはレジストリ全体に対してイメージをpushする権限を持つことになります。」
  • system:image-pullersystem:image-builderのロールを付与する方法では、特定のプロジェクト内でのみイメージをpullし、pushする権限を持つServiceアカウントを作成することができます。」

これらの知識は、OpenShiftのイメージレジストリに対する操作を行う際の参考になります。生成AI Copilotの活用により、これらの情報を効率的に得ることができました。今後もさまざまなシーンで生成AIを活用していきたいと思います。