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 を構成する権限を付与します。
-
User B を User A のアカウントに追加します。
-
次のコマンドを実行して、User A のアカウントにログインします。
ibmcloud login
-
ユーザー A のアカウントへのアクセスにユーザー B を招待するには、以下のコマンドを実行します。ここでは、
<user.b@example.com>
はユーザー B の E メール・アドレスを指します。ibmcloud account user-invite <user.b@example.com>
-
次のコマンドを実行して、User A のアカウント ID を取得します。
ibmcloud target
Account 行の括弧 ( ) に囲まれているアカウント ID をメモします。
-
-
ユーザーBはユーザーAのアカウントをターゲットにできるが、まだ IBM Cloud Container Registry。
-
以下のコマンドを実行して、ユーザー B としてログインし、ユーザー A のアカウントをターゲットとします。ここでは、
YOUR_ACCOUNT_ID
はユーザー A のアカウント ID を指します。ibmcloud login -c YOUR_ACCOUNT_ID
-
次のコマンドを実行し、レジストリー割り当て量が 4 GB のトラフィックになるように編集を試行します。
ibmcloud cr quota-set --traffic=4000
User B には適切なアクセス権限がないため、コマンドは失敗します。
-
-
以下のように、User B が IBM Cloud Container Registry を構成できるように、User B にマネージャーの役割を付与します。
-
次のコマンドを実行し、ご使用のアカウントに自分自身 (User A) として再ログインします。
ibmcloud login
-
次のコマンドを実行して、User B にマネージャーの役割を付与するポリシーを作成します。
ibmcloud iam user-policy-create <user.b@example.com> --service-name container-registry --roles Manager
-
-
User B が User A のアカウントで割り当て量を変更できるようになったことを確認します。
-
次のコマンドを実行して、User B として User A のアカウントをターゲットにしてログインします。
ibmcloud login -c YOUR_ACCOUNT_ID
-
次のコマンドを実行し、レジストリー割り当て量が 4 GB のトラフィックになるように編集を試行します。
ibmcloud cr quota-set --traffic=4000
User B には適切なタイプのアクセス権限があるので、正常に実行されます。
-
この時点で次のコマンドを実行し、割り当て量を変更して元に戻します。
ibmcloud cr quota-set --traffic=5120
-
-
クリーンアップします。
-
次のコマンドを実行し、ご使用のアカウントに自分自身 (User A) として再ログインします。
ibmcloud login
-
次のコマンドを実行して、User B のポリシーをリストし、作成したポリシーを見つけ、その ID をメモします。
ibmcloud iam user-policies <user.b@example.com>
-
以下のコマンドを実行して、ポリシーを削除します。ここでは、
POLICY_ID
はポリシー ID を指します。ibmcloud iam user-policy-delete <user.b@example.com> POLICY_ID
-
ユーザーが特定の名前空間にアクセスするのを許可する
サンプルのイメージを使用して名前空間を作成し、その名前空間にアクセス権限を付与します。 各名前空間に対するさまざまな役割を付与するポリシーを作成して、その影響を示します。
-
User A のアカウント内に 3 つの名前空間を新しく作成します。 これらの名前空間はリージョン全体で固有でなければならないので、独自の名前空間の名前を選択しますが、このチュートリアルでは例として
namespace_a
、namespace_b
、namespace_c
を使用します。-
次のコマンドを実行して、User A としてログインします。
ibmcloud login
-
次のコマンドを実行して、
namespace_a
を作成します。ibmcloud cr namespace-add namespace_a
名前空間は、同じリージョン内のすべての IBM Cloud アカウントにわたって固有である必要があります。 名前空間は 4 文字から 30 文字までで、含めることができるのは、小文字、数字、ハイフン (-)、下線 (_) のみです。 名前空間は、文字または数値で開始および終了する必要があります。
名前空間を追加しようとしたときに問題が発生した場合は、 名前空間を追加できないのはなぜですか? を参照してください。
-
次のコマンドを実行して、
namespace_b
を作成します。ibmcloud cr namespace-add namespace_b
-
次のコマンドを実行して、
namespace_c
を作成します。ibmcloud cr namespace-add namespace_c
-
-
ユーザーBは何も見えないことを証明してください。
-
次のコマンドを実行して、User B として User A のアカウントをターゲットにしてログインします。
ibmcloud login -c YOUR_ACCOUNT_ID
-
次のコマンドを実行して、User B として名前空間のリストを試行します。
ibmcloud cr namespaces
User B には名前空間へのアクセス権限がないので、空のリストが戻されます。
-
-
次のコマンドを実行して、User B が名前空間と対話できるようにするポリシーを作成します。
-
次のコマンドを実行して、User A のアカウントとしてログインします。
ibmcloud login
-
次のコマンドを実行して、少なくとも 3 つの名前空間がリストされることを確認します。
ibmcloud cr namespaces
このチュートリアルで作成した 3 つの名前空間 (
namespace_a
、namespace_b
、namespace_c
) が表示されます。 これらのネームスペースが表示されない場合は、手順を繰り返して再度作成してください。 -
以下のコマンドを実行して、ユーザー 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
コマンドを実行します。 -
次のコマンドを実行して、
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 つの役割を追加します。
-
-
イメージを
namespace_a
とnamespace_b
内にプッシュします。-
次のコマンドを実行して、
hello-world
イメージをプルします。docker pull hello-world
-
以下のコマンドを実行して、イメージを
namespace_a
にタグ付けします。REGISTRY_REGION
は IBM Cloud Container Registry リージョンの名前です (例:us-south
)。docker tag hello-world REGISTRY_REGION.icr.io/namespace_a/hello-world
-
次のコマンドを実行して、イメージを
namespace_b
にタグ付けします。docker tag hello-world REGISTRY_REGION.icr.io/namespace_b/hello-world
-
ibmcloud cr login
コマンドを実行して、IBM Cloud Container Registry にログインします。ibmcloud cr login
IBM Cloud Container RegistryサポートDockerおよびその他のクライアント。 他のクライアントを使用してログインするには、対話式に名前空間にアクセスするを参照してください。
ログインに問題がある場合は、Container Registry にログインできないのはなぜですか? を参考にしてください。
-
次のコマンドを実行して、イメージを
namespace_a
にプッシュします。docker push REGISTRY_REGION.icr.io/namespace_a/hello-world
-
次のコマンドを実行して、イメージを
namespace_b
にプッシュします。docker push REGISTRY_REGION.icr.io/namespace_b/hello-world
-
-
User B が
namespace_b
やnamespace_c
と対話できるものの、namespace_a
とは対話できないことを確認します。-
次のコマンドを実行して、User B としてログインします。
ibmcloud login -c YOUR_ACCOUNT_ID
-
次のコマンドを実行して、User B には
namespace_b
へのアクセス権限がないので、User B はnamespace_c
とnamespace_a
を参照できるもののnamespace_a
を参照できないことを確認します。ibmcloud cr namespaces
-
次のコマンドを実行して、イメージをリストします。
ibmcloud cr images
User B には
namespace_b
へのアクセス権限がないので、namespace_a
内のイメージはリスト内に表示されますがnamespace_a
内のイメージは表示されません。 -
次のコマンドを実行して、IBM Cloud Container Registry にログインします。
ibmcloud cr login
IBM Cloud Container RegistryサポートDockerおよびその他のクライアント。 他のクライアントを使用してログインするには、対話式に名前空間にアクセスするを参照してください。
-
次のコマンドを実行して、イメージをプルします。
docker pull REGISTRY_REGION.icr.io/namespace_b/hello-world
-
次のコマンドを実行して、イメージを
namespace_b
にプッシュします。docker push REGISTRY_REGION.icr.io/namespace_b/hello-world
User B には
namespace_b
内でのライターの役割がないので、このコマンドは失敗します。 -
次のコマンドを実行して、イメージを
namespace_c
とタグ付けします。docker tag hello-world REGISTRY_REGION.icr.io/namespace_c/hello-world
-
次のコマンドを実行して、イメージを
namespace_c
にプッシュします。docker push REGISTRY_REGION.icr.io/namespace_c/hello-world
User B には
namespace_c
内でのライターの役割があるので、コマンドは正常に実行されます。 -
次のコマンドを実行して、
namespace_c
からプルします。docker pull REGISTRY_REGION.icr.io/namespace_c/hello-world
User B には
namespace_c
内でのリーダーの役割があるので、コマンドは正常に実行されます。
-
-
以下のようにクリーンアップします。
-
次のコマンドを実行して、User A のアカウントに再ログインします。
ibmcloud login
-
次のコマンドを実行して、User B のポリシーをリストします。
ibmcloud iam user-policies <user.b@example.com>
作成したポリシーを見つけ、ポリシー ID をメモします。
-
以下のコマンドを実行して、作成したポリシーを削除します。ここでは、
POLICY_ID
はポリシー ID を指します。ibmcloud iam user-policy-delete <user.b@example.com> POLICY_ID
-
サービス ID を作成してリソースへのアクセス権限を付与する
サービス ID を構成して、IBM Cloud Container Registry 名前空間へのアクセス権限を付与します。
-
IBM Cloud Container Registry にアクセスできるサービスIDを設定し、その APIキーをAPIリクエストの認証と承認に使用される固有のコード。 このコードは、呼び出し元のアプリケーションまたはユーザーを識別し、APIの使用状況を追跡・管理するためにAPIに渡されます。作成する。
-
次のコマンドを実行して、User A のアカウントにログインします。
ibmcloud login
-
次のコマンドを実行して、
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"
-
次のコマンドを実行して、
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
-
次のコマンドを実行して、
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
-
次のコマンドを実行して、サービス ID 用の API キーを作成します。
ibmcloud iam service-api-key-create cr-roles-tutorial-apikey cr-roles-tutorial
-
-
Docker を使用して、サービス ID の API キーでログインし (
API_KEY
は API キー)、レジストリーと対話します。-
次のコマンドを実行して、IBM Cloud Container Registry にログインします。
docker login -u iamapikey -p API_KEY REGISTRY_REGION.icr.io
IBM Cloud Container RegistryサポートDockerおよびその他のクライアント。 他のクライアントを使用してログインするには、自動化での名前空間へのアクセスを参照してください。
-
次のコマンドを実行して、ご使用のイメージをプルします。
docker pull REGISTRY_REGION.icr.io/namespace_a/hello-world
-
次のコマンドを実行して、ご使用のイメージを
namespace_a
にプッシュします。docker push REGISTRY_REGION.icr.io/namespace_a/hello-world
ユーザーには
namespace_a
内でのライターの役割がないので、このコマンドは正常に実行されません。 -
次のコマンドを実行して、ご使用のイメージを
namespace_b
にプッシュします。docker push REGISTRY_REGION.icr.io/namespace_b/hello-world
ユーザーには
namespace_b
内でのライターの役割があるので、このコマンドは正常に実行されます。
-
-
以下のようにクリーンアップします。
-
User A として IBM Cloud Container Registry に再ログインします。
ibmcloud cr login
IBM Cloud Container RegistryサポートDockerおよびその他のクライアント。 他のクライアントを使用してログインするには、対話式に名前空間にアクセスするを参照してください。
-
次のコマンドを実行して、サービス・ポリシーをリストします。
ibmcloud iam service-policies cr-roles-tutorial
ご使用のポリシー ID をメモします。
-
ポリシーごとに次のコマンドを実行して、サービス・ポリシーを削除します。
ibmcloud iam service-policy-delete cr-roles-tutorial POLICY_ID
-
次のコマンドを実行して、サービス ID を削除します。
ibmcloud iam service-id-delete cr-roles-tutorial
-
アカウントのクリーンアップ
前のセクションで作成したリソースを削除して、ご使用のアカウントをこのチュートリアルの開始時点の状態にします。
-
次のコマンドを実行して、User A のアカウントにログインします。
ibmcloud login
-
次のコマンドを実行して、
namespace_a
、namespace_b
、namespace_c
を削除します。ibmcloud cr namespace-rm namespace_a
ibmcloud cr namespace-rm namespace_b
ibmcloud cr namespace-rm namespace_c
-
次のコマンドを実行して、ご使用のアカウントから User B を削除します。
ibmcloud account user-remove <user.b@example.com>