アクセス制御の構成

このページでは、Container Registry で使用可能なアクセス制御オプションと、Container Registry で暗号鍵を使用する方法について説明します。

Container Registry は、コンテナ イメージを提供するためのバックエンドとして Cloud Storage バケットを使用します。Container Registry イメージにアクセスできるユーザーを制御するには、Cloud Storage バケットに対する権限を調整します。

Cloud Storage のアクセス制御は、GCP Console または gsutil コマンドライン ツールを使用して管理します。詳細については、gsutil iam のドキュメントをご覧ください。

権限と役割

次の表に、Container Registry の操作に必要な権限と役割を示します。

GCP プロジェクト全体ではなく、個々のストレージ バケットに役割を付与する場合は、目的のホストの場所にある Container Registry にイメージを push して、基になるストレージ バケットが存在していることを確認する必要があります。

操作 権限 役割 役割のタイトル
push(読み書き)

storage.buckets.create

storage.buckets.delete

storage.buckets.get

storage.buckets.list

storage.buckets.update

storage.objects.create

storage.objects.delete

storage.objects.get

storage.objects.list

storage.objects.update

roles/storage.admin ストレージ管理者
pull(読み取り専用)

storage.objects.get

storage.objects.list

roles/storage.objectViewer ストレージ オブジェクト閲覧者

ストレージ バケットでバケット ポリシーのみを有効にする場合は、すべての Container Registry ユーザーとサービス アカウントに上記の役割を明示的に設定する必要があります。この場合、所有者と編集者の役割だけでは、必要な権限が付与されないことがあります。

ユーザーと他のプロジェクトにレジストリへのアクセスを許可する

他のプロジェクトの特定のユーザー、または他のプロジェクトで実行されているコンテナ クラスタに、レジストリからのイメージの pull を許可するには、基になる Cloud Storage バケットに対する読み取り権限を付与する必要があります。

イメージをホストするバケットの [BUCKET_NAME] の形式は次のいずれかになります。

  • artifacts.[PROJECT-ID].appspot.com。ホスト gcr.io 内のレジストリに push されたイメージの場合。
  • [REGION].artifacts.[PROJECT-ID].appspot.com。ここで、

    • [PROJECT-ID] は、Google Cloud Platform Console プロジェクト ID です。
    • [REGION] は次のいずれかです。
      • ホスト us.gcr.io のレジストリの場合は us
      • ホスト eu.gcr.io のレジストリの場合は eu
      • ホスト asia.gcr.io のレジストリの場合は asia

基になる Cloud Storage バケットに読み取り権限を付与するには、Google Cloud Platform Console またはコマンドラインを使用します。

Console

  1. イメージを Container Registry に push し、基になるストレージ バケットが存在していることを確認します。
  2. GCP Console で Cloud Storage ページにアクセスします
  3. artifacts.[PROJECT-ID].appspot.com または [REGION].artifacts.[PROJECT-ID].appspot.com バケットのリンクをクリックします。[PROJECT-ID] は、Container Registry をホストしているプロジェクトの GCP プロジェクト ID です。[REGION] は、イメージをホストしている [REGION].gcr.io レジストリに対応します。

  4. [権限] タブを選択します。

  5. [メンバーを追加] をクリックします。

  6. 表示されるメニューで、[メンバー] フィールドに、読み取り権限が必要なユーザーのメールアドレスをカンマで区切って入力します。このメールアドレスは、次のいずれかになります。

    • Google アカウント(例: someone@example.com
    • Cloud IAM サービス アカウント
    • 別のプロジェクトの Compute Engine デフォルト サービス アカウント。このアカウントは、Google Kubernetes Engine がコンテナ イメージ クラスタを pull する場合に使用するデフォルトのアカウントです。形式は [PROJECT_NUMBER]-compute@developer.gserviceaccount.com です。[PROJECT-NUMBER] は、Google Kubernetes Engine クラスタを実行しているプロジェクトの GCP プロジェクト番号です。
  7. [役割を選択] プルダウン メニューの [ストレージ] カテゴリから [ストレージ オブジェクト閲覧者] を選択します。

  8. [追加] をクリックします。

この手順を行うと、ユーザーにバケット全体の読み取り権限が付与されます。

gsutil

  1. イメージを Container Registry に push し、基になるストレージ バケットが存在していることを確認します。
  2. shell またはターミナル ウィンドウで次のコマンドを実行します。

    gsutil iam ch [TYPE]:[EMAIL-ADDRESS]:objectViewer gs://[BUCKET_NAME]
    

    ここで

    • [TYPE] は、以下のいずれかになります。
      • serviceAccount[EMAIL-ADDRESS] がサービス アカウントの場合)
      • user[EMAIL-ADDRESS] が Google アカウントの場合)
    • [EMAIL-ADDRESS] は、以下のいずれかになります。
      • Google アカウント(例: someone@example.com
      • Cloud IAM サービス アカウント
      • 別のプロジェクトの Compute Engine デフォルト サービス アカウント。このアカウントは、Google Kubernetes Engine がコンテナ イメージ クラスタを pull する場合に使用するデフォルトのアカウントです。形式は [PROJECT_NUMBER]-compute@developer.gserviceaccount.com です。[PROJECT-NUMBER] は、Google Kubernetes Engine クラスタを実行しているプロジェクトの GCP プロジェクト番号です。
    • [BUCKET_NAME] は、前述のとおり、イメージをホストする Cloud Storage バケットの名前です。

gsutil iam ch コマンドを使用すると、レジストリがホストされているストレージ バケットの IAM 権限を変更できます。アカウントに objectViewer 権限を付与すると、レジストリからイメージを pull できるようになります。

サービス アカウントには、ストレージ アクセス スコープも構成する必要があります。

  • 読み取り専用権限を設定するには、次のコマンドを実行します。

    gcloud compute instances set-service-account INSTANCE --scopes=storage-ro
    
  • 読み取り / 書き込み権限を設定するには、次のコマンドを実行します。

    gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
    

詳細については、Google Cloud Platform での Container Registry の使用をご覧ください。

イメージの一般公開

Container Registry は、ホストの場所の基になるストレージ バケットが公開アクセス可能であれば、公開アクセス可能です。プロジェクト内では、各ホストの場所のイメージがすべて公開されるか、すべて公開されないかのいずれかになります。 プロジェクトのホスト内で、特定のイメージのみを公開することはできません。公開したい特定のイメージがある場合は、次のいずれかの手段をとります。

  • 公開用の別のホストの場所に保管する
  • 公開アクセス可能なイメージを保存するための新しいプロジェクトを作成する

コンテナ イメージを一般公開するには、次の手順でリポジトリの対応するストレージ バケットを一般公開します。

Console

  1. イメージを Container Registry に push し、基になるストレージ バケットが存在していることを確認します。

  2. GCP Console で [Container Registry] ページを開きます。

    [Container Registry] ページを開く

  3. 左パネルの [設定] をクリックします。

  4. [設定] ページの [公開アクセス] で、公開設定を [一般公開] または [非公開] に切り替えます。この設定は、基になるストレージ バケットへのアクセスを制御します。

    ホストの公開設定が [一般公開] になっている場合、そのホストの場所にある Google Cloud Platform プロジェクト内のすべてのイメージが一般公開されます。

gsutil

  1. イメージを Container Registry に push し、基になるストレージ バケットが存在していることを確認します。

  2. そのレジストリの Cloud Storage バケットの名前を確認します。これを行うには、バケットを一覧表示します。

    gsutil ls
    

    Container Registry のバケット URL として、gs://artifacts.[PROJECT-ID].appspot.com または gs://[REGION].artifacts.[PROJECT-ID].appspot.com が表示されます。ここで

    • [PROJECT-ID] は Google Cloud Platform Console プロジェクト ID です。ドメインをスコープとするプロジェクトの場合、プロジェクト ID にドメイン名が含まれます。
    • [REGION] は次のいずれかです。
      • ホスト us.gcr.io のレジストリの場合は us
      • ホスト eu.gcr.io のレジストリの場合は eu
      • ホスト asia.gcr.io のレジストリの場合は asia
  3. 次のコマンドを実行して、Container Registry のストレージ バケットを一般公開します。このコマンドは、バケット内のすべてのイメージを一般公開します。

    gsutil iam ch allUsers:objectViewer gs://[BUCKET_NAME]
    

    ここで

    • gs://[BUCKET_NAME] は、Container Registry のバケット URL です。

一般公開されたイメージの pull

Container Registry が一般公開されている場合、誰でもそのイメージを pull できます。手順については、レジストリからイメージを pull するをご覧ください。

権限の取り消し

Console

  1. GCP Console で Cloud Storage ページにアクセスします
  2. artifacts.[PROJECT-ID].appspot.com または [REGION].artifacts.[PROJECT-ID].appspot.com バケットのリンクをクリックします。[PROJECT-ID] は、Container Registry をホストしているプロジェクトの GCP プロジェクト ID です。[REGION] は、イメージをホストしている [REGION].gcr.io レジストリに対応します。

  3. [権限] タブを選択します。

  4. 削除するメンバーの横にあるごみ箱アイコンをクリックします。

gsutil

シェルまたはターミナル ウィンドウで次のコマンドを実行します。

gsutil iam ch -d [MEMBER] gs://[BUCKET_NAME]

ここで

  • [MEMBER] は、以下のいずれかになります。
    • Google アカウントの user:[EMAIL_ADDRESS]
    • Cloud IAM サービス アカウントの serviceAccount:[EMAIL_ADDRESS]
    • 公開アクセスが取り消される allUsers
  • [BUCKET_NAME] は目的のバケットの名前です。
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...