IBM Cloud Docs
アクセス Container Registry

アクセス Container Registry

IBM Cloud® Container Registry の名前空間にアクセスして、イメージのプッシュおよびプルを実行できるようにするには、IBM Cloud® Identity and Access Management (IAM) を使用します。

すべてのアカウントにはIAMアクセスポリシーが必要です。 IAM アクセス・ポリシーをセットアップして管理するには、IAM アクセス・ポリシーの定義を参照してください。

IBM Cloud Container Registry へのアクセスは、API キーを使用することの多い自動型か bearer トークンを使用することの多い対話型のいずれかになります。

IAM アクセス・ポリシーがあるにもかかわらず、 Access denied エラーが発生する場合は、 「Access denied エラーが発生する理由 」を参照してください。

Kubernetes デプロイメントでコンテナー・イメージを使用する場合は、イメージ・プル・シークレットを使用して、デフォルト以外の Kubernetes 名前空間から他の IBM Cloud アカウントまたは外部プライベート・レジストリー内のイメージにアクセスを参照してください。

自動化による名前空間へのアクセス

サービス ID API キーを使用して、名前空間との間で行うコンテナー・イメージのプッシュとプルを自動化できます。

APIキーはAPIリクエストの認証と承認に使用される固有のコード。 このコードは、呼び出し元のアプリケーションまたはユーザーを識別し、APIの使用状況を追跡・管理するためにAPIに渡されます。アカウント内のユーザーIDまたはサービスIDにリンクされており、 IBM Cloud®。 API キーは、CLI の中で、あるいは自動化の一環として、ユーザーやサービスの ID として認証に使用できます。 ユーザー API キー は、ユーザーとそのアクセス・ポリシーに関連付けられています。 サービス ID API キー には、独自のアクセス・ポリシーがあります。 オートメーションが特定の限定された能力を付与されるように、異なるきめ細かなポリシーを持つ複数のサービスIDを持つことができる。

IBM Cloud Kubernetes Service クラスターまたは Red Hat® OpenShift® on IBM Cloud® クラスターを作成すると、クラスターとともに IBM Cloud IAM サービス ID が作成されます。このサービス ID には、IBM Cloud Container Registry に対する IAM リーダー・サービス・アクセス・ポリシーが付与されています。 サービス ID 資格情報は、クラスター内のイメージ・プル・シークレットに保管されている無期限のサービス ID API キーで認証されます。 イメージ・プル・シークレットは default Kubernetes 名前空間に追加され、この Kubernetes 名前空間の default サービス・アカウント内のシークレットのリストにも追加されます。 さらに多くのサービス ID API キーを必要とする場合や、サービス ID API キーが欠落している場合には、サービス ID API キーを手動で作成することができます。

サービス ID API キーは以下の場所で使用できます。

  • IBM Cloud Kubernetes Service クラスターまたは Red Hat OpenShift on IBM Cloud クラスター。 IBM Cloud Kubernetes Service クラスターおよび Red Hat OpenShift on IBM Cloud クラスターを作成すると、クラスターごとに 1 つのサービス ID が自動的に作成されます。 複数のサービス ID を必要とする場合には、手動で作成できます。
  • IBM Cloud 上にはない Kubernetes および Red Hat® OpenShift®クラスター。 独自のサービス ID、API キー、およびプル・シークレットを作成する必要があります。
  • Docker CLI および他のクライアント。 独自のサービス ID および API キーを作成する必要があります。

手動でサービス ID API キーを作成する

レジストリーへのログインに使用できるサービス ID API キーを作成します。

サービス ID API キーを作成するには、以下の手順を実行します。

  1. サービス ID を作成します。ibmcloud iam service-id-create を参照してください。

  2. サービス・ポリシーをサービス ID に割り当て、IBM Cloud Container Registry の認証にサービス ID が使用されるときに許可されるアクセス権限レベルを制御します。リソースへのアクセス管理を参照してください。

  3. サービス ID API キーを作成します。サービス ID API キーの管理および ibmcloud iam service-api-key-create を参照してください。

手動でユーザー API キーを作成する

レジストリーにログインするために使用できるユーザー API キーを作成します。

ユーザー API キーを作成する場合、ユーザーのアクセス・ポリシーが使用されます。

ユーザー API キーを作成するには、ユーザー API キーの管理および ibmcloud iam api-key-create を参照してください。

クライアント・ソフトウェアを使用した自動化の認証

共通クライアントを使用してレジストリーにログインするには、API キーを使用します。

クライアントには API キーとドメインが必要です。API_KEY を API キーに置き換え、REGISTRY_DOMAIN を名前空間がセットアップされているレジストリーのドメインに置き換えます。

レジストリのドメイン
リージョン 以前は REGISTRY_DOMAIN
global 適用外 icr.io
au-syd ap-south au.icr.io
br-sao 適用外 br.icr.io
ca-tor 適用外 ca.icr.io
eu-de eu-central de.icr.io
eu-es 適用外 es.icr.io
eu-gb uk-south uk.icr.io
jp-osa 適用外 jp2.icr.io
jp-tok ap-north jp.icr.io
us-south 適用外 us.icr.io

Continuous Delivery パイプラインで IBM Cloud Container Registry を使用する方法について詳しくは、プライベート・イメージ・レジストリーの使用を参照してください。

レジストリーを使用して自動的に認証する方法が、以下のクライアントを例として示されています。

Buildah を使用したレジストリーでの認証

Buildah を使用してレジストリーを認証すると、レジストリーと相互にイメージをプッシュおよびプルできます。

以下の Buildah コマンドを実行し、API キーとドメインを使用してレジストリーにログインします。API_KEY を API キーに、REGISTRY_DOMAIN をドメインに置き換えます。

buildah login -u iamapikey -p API_KEY REGISTRY_DOMAIN

Docker を使用したレジストリーでの認証

Docker を使用してレジストリーでの認証を行い、レジストリーとの間でイメージをプッシュおよびプルできるようにします。

以下の Docker コマンドを実行し、API キーとドメインを使用してレジストリーにログインします。API_KEY を API キーに、REGISTRY_DOMAIN をドメインに置き換えます。

docker login -u iamapikey -p API_KEY REGISTRY_DOMAIN

Podman を使用したレジストリーでの認証

Podman を使用してレジストリーを認証すると、レジストリーと相互にイメージをプッシュおよびプルできます。

以下の Podman コマンドを実行し、API キーとドメインを使用してレジストリーにログインします。API_KEY を API キーに、REGISTRY_DOMAIN をドメインに置き換えます。

podman login -u iamapikey -p API_KEY REGISTRY_DOMAIN

Skopeo を使用したレジストリーでの認証

Skopeo を使用してレジストリーを認証すると、レジストリーと相互にイメージをプッシュおよびプルできます。

例えば、以下の Skopeo コマンドを使用して、Docker Hub からイメージをプルし、そのイメージを名前空間にプッシュできます。 REGISTRY_DOMAIN をご使用のドメインの名前に、NAMESPACE を名前空間に、API_KEY を API キーにそれぞれ置き換えます。

skopeo --insecure-policy --override-os linux copy docker://busybox:latest docker://REGISTRY_DOMAIN/NAMESPACE/busybox:latest --dest-creds iamapikey:API_KEY

対話式に名前空間にアクセスする

bearer トークンおよびリフレッシュ・トークンを使用すると、名前空間と相互にイメージを対話式でプッシュおよびプルできます。

名前空間に対話式でアクセスする方法が、以下のクライアントを例として示されています。

Buildah を使用した名前空間へのアクセス

Buildah CLI を使用して、レジストリーにログインします。

Builddah CLI を使用すると、ベアラー・トークンを使用してレジストリーにログインできます。REGISTRY_DOMAINドメインに置き換えます。

ibmcloud iam oauth-tokens | sed -ne '/IAM token/s/.* //p' | buildah login -u iambearer --password-stdin REGISTRY_DOMAIN

Docker を使用した名前空間へのアクセス

Docker CLI を使用して、レジストリーにログインします。

Docker CLI を使用すると、IBM Cloud CLIのリフレッシュ・トークンでレジストリーにログインできます。

ibmcloud cr login --client docker

Docker CLI を使用すると、bearer トークンでレジストリーにログインできます。

  1. ibmcloud iam oauth-tokens を使用してベアラー・トークンを生成します。

  2. docker login コマンドを使用してレジストリーにログインします。 BEARER_TOKEN をベアラー・トークンに、REGISTRY_DOMAINドメインに置き換えます。

    docker login -u iambearer --password BEARER_TOKEN REGISTRY_DOMAIN
    

Podman を使用した名前空間へのアクセス

レジストリにログインし、CLIを使ってイメージを取り出します。 IMAGE_NAME はイメージの名前です。

ibmcloud cr login --client podman
podman pull IMAGE_NAME

Skopeo を使用した名前空間へのアクセス

Skopeo CLIを使用して、レジストリーにログインします。

Skopeo CLI を使用すると、ベアラー・トークンを使用してレジストリーにログインできます。REGISTRY_DOMAINドメインに置き換えます。

ibmcloud iam oauth-tokens | sed -ne '/IAM token/s/.* //p' | skopeo login -u iambearer --password-stdin REGISTRY_DOMAIN

名前空間にプログラムでアクセス

独自のコードを使用して、IBM Cloud Container Registry の名前空間にアクセスします。

ほとんどのユーザーは ibmcloud cr login コマンドを使用して docker login を単純化できますが、自動化を実装している場合や別のクライアントを使用している場合は、手動で認証することを推奨します。 ユーザー名とパスワードを提示する必要があります。 IBM Cloud Container Registry では、ユーザー名はパスワードに表示されるシークレットのタイプを示します。

次のユーザー名が有効です。

  • iambearer: パスワードには IAM アクセス・トークンが含まれています。 このタイプの認証は、存続時間は短いですが、あらゆるタイプの IAM ID から利用できます。 例えば、ibmcloud iam oauth-tokens から利用できます。
  • iamrefresh パスワードには、IAM アクセス・トークンを生成するためにレジストリーによって内部的に使用される IAM リフレッシュ・トークンが含まれています。 このタイプの認証は、存続時間が長く、 ibmcloud cr login コマンドで使用されます。
  • iamapikey パスワードは、IAM アクセス・トークンを生成するためにレジストリーによって内部的に使用される IAM API キーです。 このタイプの認証は、自動化に推奨されるタイプです。 ユーザー API キーまたはサービス ID API キーを使用できます。 詳細については、自動化による名前空間へのアクセスを参照してください。