IBM Cloud Docs
Container Registry リソースへのアクセス付与のチュートリアル

Container Registry リソースへのアクセス付与のチュートリアル

このチュートリアルには、IBM Cloud® Identity and Access Management (IAM) を IBM Cloud® Container Registry 用に構成して、リソースへのアクセス権限を付与する方法が示されています。

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

リソースに対するアクセス権限を IAM で管理する方法について詳しくは、リソースに対するアクセス権限の管理を参照してください。

開始前に

開始する前に、以下のタスクを完了しておく必要があります。

  • IBM Cloud Container Registry の概説の指示を完了します。
  • IBM Cloud CLI に関する container-registry CLI プラグインの最新バージョンがあることを確認します。container-registry CLI プラグインの更新を参照してください。
  • このチュートリアルで使用できる2つの IBM Cloud アカウントにアクセスできることを確認してください。1つはユーザーA用、もう1つはユーザーB用で、それぞれ固有のメールアドレスを使用する必要があります。 自分のアカウントの User A で作業し、そのアカウントを使用するように別のユーザー User B を招待します。 2 つ目の IBM Cloud アカウントを作成することを選択することも、IBM Cloud アカウントを持つ同僚と作業することもできます。
  • 名前空間イメージをレジストリーに保管するリポジトリーのコレクション。 名前空間は、複数の名前空間を含めることができる IBM Cloud アカウントに関連付けられます。を追加および削除するための適切なアクセス権限があることを確認します。 IBM Cloud Container Registry を構成するためのアクセス ロールを 参照してください。

ユーザーがレジストリーを構成するのを許可する

2 人目のユーザーをご使用のアカウントに追加し、IBM Cloud Container Registry を構成する権限を付与します。

  1. User B を User A のアカウントに追加します。

    1. 次のコマンドを実行して、User A のアカウントにログインします。

      ibmcloud login
      
    2. ユーザー A のアカウントへのアクセスにユーザー B を招待するには、以下のコマンドを実行します。ここでは、<user.b@example.com> はユーザー B の E メール・アドレスを指します。

      ibmcloud account user-invite <user.b@example.com>
      
    3. 次のコマンドを実行して、User A のアカウント ID を取得します。

      ibmcloud target
      

      Account 行の括弧 ( ) に囲まれているアカウント ID をメモします。

  2. ユーザーBはユーザーAのアカウントをターゲットにできるが、まだ IBM Cloud Container Registry。

    1. 以下のコマンドを実行して、ユーザー B としてログインし、ユーザー A のアカウントをターゲットとします。ここでは、YOUR_ACCOUNT_ID はユーザー A のアカウント ID を指します。

      ibmcloud login -c YOUR_ACCOUNT_ID
      
    2. 次のコマンドを実行し、レジストリー割り当て量が 4 GB のトラフィックになるように編集を試行します。

      ibmcloud cr quota-set --traffic=4000
      

      User B には適切なアクセス権限がないため、コマンドは失敗します。

  3. 以下のように、User B が IBM Cloud Container Registry を構成できるように、User B にマネージャーの役割を付与します。

    1. 次のコマンドを実行し、ご使用のアカウントに自分自身 (User A) として再ログインします。

      ibmcloud login
      
    2. 次のコマンドを実行して、User B にマネージャーの役割を付与するポリシーを作成します。

      ibmcloud iam user-policy-create <user.b@example.com> --service-name container-registry --roles Manager
      
  4. User B が User A のアカウントで割り当て量を変更できるようになったことを確認します。

    1. 次のコマンドを実行して、User B として User A のアカウントをターゲットにしてログインします。

      ibmcloud login -c YOUR_ACCOUNT_ID
      
    2. 次のコマンドを実行し、レジストリー割り当て量が 4 GB のトラフィックになるように編集を試行します。

      ibmcloud cr quota-set --traffic=4000
      

      User B には適切なタイプのアクセス権限があるので、正常に実行されます。

    3. この時点で次のコマンドを実行し、割り当て量を変更して元に戻します。

      ibmcloud cr quota-set --traffic=5120
      
  5. クリーンアップします。

    1. 次のコマンドを実行し、ご使用のアカウントに自分自身 (User A) として再ログインします。

      ibmcloud login
      
    2. 次のコマンドを実行して、User B のポリシーをリストし、作成したポリシーを見つけ、その ID をメモします。

      ibmcloud iam user-policies <user.b@example.com>
      
    3. 以下のコマンドを実行して、ポリシーを削除します。ここでは、POLICY_ID はポリシー ID を指します。

      ibmcloud iam user-policy-delete <user.b@example.com> POLICY_ID
      

ユーザーが特定の名前空間にアクセスするのを許可する

サンプルのイメージを使用して名前空間を作成し、その名前空間にアクセス権限を付与します。 各名前空間に対するさまざまな役割を付与するポリシーを作成して、その影響を示します。

  1. User A のアカウント内に 3 つの名前空間を新しく作成します。 これらの名前空間はリージョン全体で固有でなければならないので、独自の名前空間の名前を選択しますが、このチュートリアルでは例として namespace_anamespace_bnamespace_c を使用します。

    1. 次のコマンドを実行して、User A としてログインします。

      ibmcloud login
      
    2. 次のコマンドを実行して、namespace_a を作成します。

      ibmcloud cr namespace-add namespace_a
      

      名前空間は、同じリージョン内のすべての IBM Cloud アカウントにわたって固有である必要があります。 名前空間は 4 文字から 30 文字までで、含めることができるのは、小文字、数字、ハイフン (-)、下線 (_) のみです。 名前空間は、文字または数値で開始および終了する必要があります。

      名前空間を追加しようとしたときに問題が発生した場合は、 名前空間を追加できないのはなぜですか? を参照してください。

    3. 次のコマンドを実行して、namespace_b を作成します。

      ibmcloud cr namespace-add namespace_b
      
    4. 次のコマンドを実行して、namespace_c を作成します。

      ibmcloud cr namespace-add namespace_c
      
  2. ユーザーBは何も見えないことを証明してください。

    1. 次のコマンドを実行して、User B として User A のアカウントをターゲットにしてログインします。

      ibmcloud login -c YOUR_ACCOUNT_ID
      
    2. 次のコマンドを実行して、User B として名前空間のリストを試行します。

      ibmcloud cr namespaces
      

      User B には名前空間へのアクセス権限がないので、空のリストが戻されます。

  3. 次のコマンドを実行して、User B が名前空間と対話できるようにするポリシーを作成します。

    1. 次のコマンドを実行して、User A のアカウントとしてログインします。

      ibmcloud login
      
    2. 次のコマンドを実行して、少なくとも 3 つの名前空間がリストされることを確認します。

      ibmcloud cr namespaces
      

      このチュートリアルで作成した 3 つの名前空間 (namespace_anamespace_bnamespace_c) が表示されます。 これらのネームスペースが表示されない場合は、手順を繰り返して再度作成してください。

    3. 以下のコマンドを実行して、ユーザー B に namespace_b のリーダー・ロールを付与するポリシーを作成します。ここでは、CLOUD_REGION は IBM Cloud リージョンの名前 (us-south など) です。

      ibmcloud iam user-policy-create <user.b@example.com> --service-name container-registry --region CLOUD_REGION --resource-type namespace --resource namespace_b --roles Reader
      

      IBM Cloud リージョンの名前を表示するには、ibmcloud regions コマンドを実行します。

    4. 次のコマンドを実行して、namespace_c に関するリーダーとライターの役割を User B に付与する 2 つ目のポリシーを作成します。

      ibmcloud iam user-policy-create <user.b@example.com> --service-name container-registry --region CLOUD_REGION --resource-type namespace --resource namespace_c --roles Reader,Writer
      

      このコマンドは、同一のポリシー内で同じリソースに対する 2 つの役割を追加します。

  4. イメージを namespace_anamespace_b 内にプッシュします。

    1. 次のコマンドを実行して、hello-world イメージをプルします。

      docker pull hello-world
      
    2. 以下のコマンドを実行して、イメージを namespace_a にタグ付けします。REGISTRY_REGIONIBM Cloud Container Registry リージョンの名前です (例: us-south)。

      docker tag hello-world REGISTRY_REGION.icr.io/namespace_a/hello-world
      
    3. 次のコマンドを実行して、イメージを namespace_b にタグ付けします。

      docker tag hello-world REGISTRY_REGION.icr.io/namespace_b/hello-world
      
    4. ibmcloud cr login コマンドを実行して、IBM Cloud Container Registry にログインします。

      ibmcloud cr login
      

      IBM Cloud Container RegistryサポートDockerおよびその他のクライアント。 他のクライアントを使用してログインするには、対話式に名前空間にアクセスするを参照してください。

      ログインに問題がある場合は、Container Registry にログインできないのはなぜですか? を参考にしてください。

    5. 次のコマンドを実行して、イメージを namespace_a にプッシュします。

      docker push REGISTRY_REGION.icr.io/namespace_a/hello-world
      
    6. 次のコマンドを実行して、イメージを namespace_b にプッシュします。

      docker push REGISTRY_REGION.icr.io/namespace_b/hello-world
      
  5. User B が namespace_bnamespace_c と対話できるものの、namespace_a とは対話できないことを確認します。

    1. 次のコマンドを実行して、User B としてログインします。

      ibmcloud login -c YOUR_ACCOUNT_ID
      
    2. 次のコマンドを実行して、User B には namespace_b へのアクセス権限がないので、User B は namespace_cnamespace_a を参照できるものの namespace_a を参照できないことを確認します。

      ibmcloud cr namespaces
      
    3. 次のコマンドを実行して、イメージをリストします。

      ibmcloud cr images
      

      User B には namespace_b へのアクセス権限がないので、namespace_a 内のイメージはリスト内に表示されますが namespace_a 内のイメージは表示されません。

    4. 次のコマンドを実行して、IBM Cloud Container Registry にログインします。

      ibmcloud cr login
      

      IBM Cloud Container RegistryサポートDockerおよびその他のクライアント。 他のクライアントを使用してログインするには、対話式に名前空間にアクセスするを参照してください。

    5. 次のコマンドを実行して、イメージをプルします。

      docker pull REGISTRY_REGION.icr.io/namespace_b/hello-world
      
    6. 次のコマンドを実行して、イメージを namespace_b にプッシュします。

      docker push REGISTRY_REGION.icr.io/namespace_b/hello-world
      

      User B には namespace_b 内でのライターの役割がないので、このコマンドは失敗します。

    7. 次のコマンドを実行して、イメージを namespace_c とタグ付けします。

      docker tag hello-world REGISTRY_REGION.icr.io/namespace_c/hello-world
      
    8. 次のコマンドを実行して、イメージを namespace_c にプッシュします。

      docker push REGISTRY_REGION.icr.io/namespace_c/hello-world
      

      User B には namespace_c 内でのライターの役割があるので、コマンドは正常に実行されます。

    9. 次のコマンドを実行して、namespace_c からプルします。

      docker pull REGISTRY_REGION.icr.io/namespace_c/hello-world
      

      User B には namespace_c 内でのリーダーの役割があるので、コマンドは正常に実行されます。

  6. 以下のようにクリーンアップします。

    1. 次のコマンドを実行して、User A のアカウントに再ログインします。

      ibmcloud login
      
    2. 次のコマンドを実行して、User B のポリシーをリストします。

      ibmcloud iam user-policies <user.b@example.com>
      

      作成したポリシーを見つけ、ポリシー ID をメモします。

    3. 以下のコマンドを実行して、作成したポリシーを削除します。ここでは、POLICY_ID はポリシー ID を指します。

      ibmcloud iam user-policy-delete <user.b@example.com> POLICY_ID
      

サービス ID を作成してリソースへのアクセス権限を付与する

サービス ID を構成して、IBM Cloud Container Registry 名前空間へのアクセス権限を付与します。

  1. IBM Cloud Container Registry にアクセスできるサービスIDを設定し、その APIキーをAPIリクエストの認証と承認に使用される固有のコード。 このコードは、呼び出し元のアプリケーションまたはユーザーを識別し、APIの使用状況を追跡・管理するためにAPIに渡されます。作成する。

    1. 次のコマンドを実行して、User A のアカウントにログインします。

      ibmcloud login
      
    2. 次のコマンドを実行して、cr-roles-tutorial という名前のサービス ID と、説明 "Created during the access control tutorial for Container Registry" を作成します。

      ibmcloud iam service-id-create cr-roles-tutorial --description "Created during the access control tutorial for Container Registry"
      
    3. 次のコマンドを実行して、namespace_a でのリーダーの役割を付与する、サービス ID のサービス・ポリシーを作成します。

      ibmcloud iam service-policy-create cr-roles-tutorial --service-name container-registry --region CLOUD_REGION --resource-type namespace --resource namespace_a --roles Reader
      
    4. 次のコマンドを実行して、namespace_b に関するライターの役割を付与する 2 つ目のサービス・ポリシーを作成します。

      ibmcloud iam service-policy-create cr-roles-tutorial --service-name container-registry --region CLOUD_REGION --resource-type namespace --resource namespace_b --roles Writer
      
    5. 次のコマンドを実行して、サービス ID 用の API キーを作成します。

      ibmcloud iam service-api-key-create cr-roles-tutorial-apikey cr-roles-tutorial
      
  2. Docker を使用して、サービス ID の API キーでログインし (API_KEY は API キー)、レジストリーと対話します。

    1. 次のコマンドを実行して、IBM Cloud Container Registry にログインします。

      docker login -u iamapikey -p API_KEY REGISTRY_REGION.icr.io
      

      IBM Cloud Container RegistryサポートDockerおよびその他のクライアント。 他のクライアントを使用してログインするには、自動化での名前空間へのアクセスを参照してください。

    2. 次のコマンドを実行して、ご使用のイメージをプルします。

      docker pull REGISTRY_REGION.icr.io/namespace_a/hello-world
      
    3. 次のコマンドを実行して、ご使用のイメージを namespace_a にプッシュします。

      docker push REGISTRY_REGION.icr.io/namespace_a/hello-world
      

      ユーザーには namespace_a 内でのライターの役割がないので、このコマンドは正常に実行されません。

    4. 次のコマンドを実行して、ご使用のイメージを namespace_b にプッシュします。

      docker push REGISTRY_REGION.icr.io/namespace_b/hello-world
      

      ユーザーには namespace_b 内でのライターの役割があるので、このコマンドは正常に実行されます。

  3. 以下のようにクリーンアップします。

    1. User A として IBM Cloud Container Registry に再ログインします。

      ibmcloud cr login
      

      IBM Cloud Container RegistryサポートDockerおよびその他のクライアント。 他のクライアントを使用してログインするには、対話式に名前空間にアクセスするを参照してください。

    2. 次のコマンドを実行して、サービス・ポリシーをリストします。

      ibmcloud iam service-policies cr-roles-tutorial
      

      ご使用のポリシー ID をメモします。

    3. ポリシーごとに次のコマンドを実行して、サービス・ポリシーを削除します。

      ibmcloud iam service-policy-delete cr-roles-tutorial POLICY_ID
      
    4. 次のコマンドを実行して、サービス ID を削除します。

      ibmcloud iam service-id-delete cr-roles-tutorial
      

アカウントのクリーンアップ

前のセクションで作成したリソースを削除して、ご使用のアカウントをこのチュートリアルの開始時点の状態にします。

  1. 次のコマンドを実行して、User A のアカウントにログインします。

    ibmcloud login
    
  2. 次のコマンドを実行して、namespace_anamespace_bnamespace_c を削除します。

    ibmcloud cr namespace-rm namespace_a
    
    ibmcloud cr namespace-rm namespace_b
    
    ibmcloud cr namespace-rm namespace_c
    
  3. 次のコマンドを実行して、ご使用のアカウントから User B を削除します。

    ibmcloud account user-remove <user.b@example.com>