このページでは、Artifact Registry での Identity and Access Management(IAM)によるアクセス制御について説明します。
Artifact Registry のデフォルト権限により、CI/CD パイプラインの実装時の設定作業は最小限に抑えられています。Artifact Registry をサードパーティの CI/CD ツールと統合し、リポジトリへのアクセスに必要な権限と認証を構成することもできます。
始める前に
- Artifact Registry を有効にします。これには API の有効化と、Google Cloud CLI のインストールが含まれます。
- リポジトリ固有の権限を適用する場合は、パッケージ用の Artifact Registry リポジトリを作成します。
概要
IAM の権限とロールによって、Artifact Registry リポジトリ内のデータの作成、表示、編集、削除が可能かどうかが決まります。
ロールとは、一連の権限のことです。プリンシパルに直接権限を付与することはできません。代わりに、ロールを付与します。プリンシパルにロールを付与すると、そのロールに含まれるすべての権限が付与されます同じプリンシパルに複数のロールを付与できます。
Cloud de Confiance デフォルトの権限
デフォルトでは、次の権限が Artifact Registry と同じプロジェクト内の Cloud de Confiance CI / CD サービスに適用されます。
- Compute Engine とサポートされている Google Kubernetes Engine のバージョンは、Compute Engine のデフォルトのサービス アカウントを使用します。このアカウントには、ストレージに対する読み取り専用アクセス権が付与されています。
すべてのサービスが同じ Cloud de Confiance by S3NS プロジェクト内にあり、デフォルトの権限がニーズを満たしている場合は、権限を構成する必要はありません。
次の場合は、これらのサービスに対して Artifact Registry の権限を構成する必要があります。
- これらのサービスを使用して、別のプロジェクトの Artifact Registry にアクセスする必要がある。Artifact Registry を使用するプロジェクトで、Workload Identity プールまたは各サービスのサービス アカウントに、必要なロールを付与します。
- Artifact Registry からイメージを pull する組み込みのサポートがない GKE バージョンを使用している。構成手順については、GKE セクションをご覧ください。
- デフォルトのサービス アカウントにリポジトリへの読み取りと書き込みのアクセス権を付与する必要がある。詳しくは以下をご覧ください。
- デフォルトのサービス アカウントではなく、ランタイム環境にユーザー指定のサービス アカウントを使用しています。Artifact Registry を使用するプロジェクトで、必要なロールを付与します。
サードパーティとの統合
サードパーティ クライアントの場合は、権限と認証の両方を構成する必要があります。
従来、 Cloud de Confiance 外部で実行されているアプリケーションは、サービス アカウント キーを使用して Cloud de Confiance リソースにアクセスしていました。ただし、サービス アカウント キーは強力な認証情報であり、正しく管理しなければセキュリティ上のリスクとなります。
Workload Identity 連携では、Identity and Access Management(IAM)を使用して外部 ID に IAM ロールを付与して、サービス アカウントの権限を借用するといったことができます。これにより、サービス アカウント キーに関連するメンテナンスとセキュリティの負担がなくなります。
Workload Identity 連携を使用する:
- Workload Identity 連携プールを作成します。
- Workload Identity 連携プロバイダを作成します。
- 適切な Artifact Registry のロールを Workload Identity プールに付与して、リポジトリへのアクセスを許可します。詳細については、外部ワークロードが Cloud de Confiance by S3NS リソースにアクセスできるようにするをご覧ください。
- Artifact Registry に長期間アクセスする必要がある場合は、認証情報の構成で OIDC トークンの有効期限を長く設定します。
Artifact Registry で認証するようにサードパーティ クライアントを構成します。
サービス アカウントを使用する:
- アプリケーションに代わって動作するサービス アカウントを作成するか、CI/CD の自動化に使用する既存のサービス アカウントを選択します。
- 適切な Artifact Registry のロールをサービス アカウントに付与して、リポジトリへのアクセスを許可します。
Artifact Registry で認証するようにサードパーティ クライアントを構成します。
ロールと権限
Artifact Registry のすべての API メソッドでは、リクエストを行うプリンシパルにリソースを使用するために必要な権限が付与されている必要があります。権限は、リソースに対する事前定義されたロールをプリンシパルに付与するポリシーを設定することで、プリンシパルに付与されます。
Cloud de Confiance by S3NS プロジェクトまたは Artifact Registry リポジトリにロールを付与できます。
事前定義された Artifact Registry ロール
IAM には、特定の Cloud de Confiance リソースへのアクセス権を付与する事前定義ロールが用意されています。
リポジトリには、次の事前定義ロールを使用します。| 役割 | 説明 |
|---|---|
| Artifact Registry 読み取り ( roles/artifactregistry.reader) |
アーティファクトの表示と取得、リポジトリのメタデータの表示。 |
| Artifact Registry 書き込み ( roles/artifactregistry.writer) |
アーティファクトを読み書きします。 |
| Artifact Registry リポジトリ管理者 ( roles/artifactregistry.repoAdmin) |
アーティファクトの読み取り、書き込み、削除。 |
| Artifact Registry 管理者 ( roles/artifactregistry.admin) |
リポジトリとアーティファクトの作成および管理。 |
gcloud iam roles describe コマンドを使用して、各ロールの権限のリストを表示することもできます。
IAM の基本ロール
基本ロールは、IAM の導入前に存在していた高い権限を持つロールです。本番環境では基本ロールを付与すべきではありません。基本ロールは、開発環境またはテスト環境で付与してください。
可能な限り、リポジトリ アクセスに事前定義ロールを使用し、ユーザーとサービス アカウントに必要な権限のみを付与します。
基本ロールの詳細については、IAM の基本ロールと事前定義ロールのリファレンスをご覧ください。
ロールを付与しています
同じロールがプロジェクト内のすべてのリポジトリに適用される場合は、プロジェクト レベルでロールを付与します。一部のアカウントに異なるレベルのアクセス権が必要な場合は、リポジトリ レベルでロールを付与します。
gcloud コマンドを使用してロールを付与する場合は、プリンシパルに対して 1 つのロール バインディングを指定するか、リソースの許可ポリシーを取得して変更し、変更した許可ポリシーを設定することで、大規模なポリシー変更を行うことができます。詳細については、プログラムでの複数のロールの付与または取り消すをご覧ください。
プロジェクト全体のロールの付与
同じ権限がプロジェクト内のすべてのリポジトリに適用される場合は、プロジェクト レベルでロールを付与します。
ユーザーまたはサービス アカウントをプロジェクトに追加し、Artifact Registry のロールを付与するには:
コンソール
Cloud de Confiance コンソールで [IAM] ページを開きます。
[プロジェクトを選択] をクリックし、Artifact Registry が実行されているプロジェクトを選択して、[開く] をクリックします。
[追加] をクリックします。
メールアドレスを入力します。個人、サービス アカウント、Google グループをプリンシパルとして追加できます。
プリンシパルのロールを選択します。最小権限のセキュリティ原則に従って、必要な Artifact Registry リソースにアクセスするために必要な最小限の権限を付与することを検討してください。Artifact Registry の事前定義ロールと権限については、Artifact Registry の事前定義ロールをご覧ください。
[保存] をクリックします。
gcloud
-
In the Cloud de Confiance console, activate Cloud Shell.
At the bottom of the Cloud de Confiance console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
単一のプリンシパルにロールを付与するには、次のコマンドを実行します。
gcloud projects add-iam-policy-binding PROJECT \ --member=PRINCIPAL \ --role=ROLE
ここで
- PROJECT は、Artifact Registry が実行されているプロジェクトの ID です。
PRINCIPAL は、バインディングを追加するプリンシパルです。
user|group|serviceAccount:emailまたはdomain:domainの形式を使用します。例:
user:test-user@gmail.com、group:admins@example.com、serviceAccount:test123@example.domain.com、またはdomain:example.domain.com。ROLE は、付与するロールです。
詳細については、add-iam-policy-binding のドキュメントをご覧ください。
ポリシー ファイルを使用してロールを付与するには、プログラムでの複数のロールの付与または取り消しをご覧ください。
リポジトリに固有のロールの付与
ユーザーまたはサービス アカウントに、プロジェクト内のリポジトリごとに異なるレベルのアクセス権を付与する場合は、リポジトリ レベルのロールを付与します。
コンソール
特定のリポジトリへのアクセス権を付与するには:
Cloud de Confiance コンソールで [リポジトリ] ページを開きます。
適切なリポジトリを選択します。
情報パネルが表示されていない場合は、メニューバーの [情報パネルを表示] をクリックします。
[権限] タブで、[プリンシパルを追加] をクリックします。
メールアドレスを入力します。個人、サービス アカウント、Google グループをプリンシパルとして追加できます。
プリンシパルのロールを選択します。最小権限のセキュリティ原則に従って、必要な Artifact Registry リソースにアクセスするために必要な最小限の権限を付与することを検討してください。Artifact Registry の事前定義ロールと権限については、Artifact Registry の事前定義ロールをご覧ください。
[保存] をクリックします。
gcloud
-
In the Cloud de Confiance console, activate Cloud Shell.
At the bottom of the Cloud de Confiance console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
個別のポリシー バインディングの IAM セットを設定する、またはポリシー ファイルを使用することができます。
単一のプリンシパルにロールを付与するには、次のコマンドを実行します。
gcloud artifacts repositories add-iam-policy-binding REPOSITORY \ --location=LOCATION \ --member=PRINCIPAL \ --role=ROLE
ここで
- REPOSITORY はリポジトリの ID です。
PRINCIPAL は、バインディングを追加するプリンシパルです。
user|group|serviceAccount:emailまたはdomain:domainの形式を使用します。例:
user:test-user@gmail.com、group:admins@example.com、serviceAccount:test123@example.domain.com、またはdomain:example.domain.com。ROLE は、付与するロールです。
LOCATION は、リポジトリのリージョン ロケーションです。
たとえば、ユーザー
write@gmail.comのロールroles/artifactregistry.writerに、ロケーション--u-france-east1のリポジトリmy-repoを持つ IAM ポリシー バインディングを追加するには、次のコマンドを実行します。gcloud artifacts repositories add-iam-policy-binding my-repo \ --location=u-france-east1 --member=user:write@gmail.com --role=roles/artifactregistry.writer
ポリシー ファイルを使用してロールを付与するには、gcloud artifacts repositories get-iam-policy コマンドと gcloud artifacts repositories set-iam-policy コマンドを使用して、複数のロールをプログラムで付与または取り消すで説明されている手順を使用します。
Terraform
google_artifact_registry_repository_iam リソースを使用して、IAM ポリシーを構成します。次の例では、リソース名が repo-account のサービス アカウントを定義し、リソース名が my-repo のリポジトリへの読み取りアクセス権を付与します。
Cloud de Confiance by S3NSで Terraform を初めて使用する場合は、HashiCorp ウェブサイトのスタートガイド - Cloud de Confiance by S3NS ページをご覧ください。
provider "google" {
project = "PROJECT-ID"
}
resource "google_artifact_registry_repository" "my-repo" {
provider = google-beta
location = "LOCATION"
repository_id = "REPOSITORY"
description = "DESCRIPTION"
format = "FORMAT"
}
resource "google_service_account" "repo-account" {
provider = google-beta
account_id = "ACCOUNT-ID"
display_name = "Repository Service Account"
}
resource "google_artifact_registry_repository_iam_member" "repo-iam" {
provider = google-beta
location = google_artifact_registry_repository.my-repo.location
repository = google_artifact_registry_repository.my-repo.name
role = "roles/artifactregistry.reader"
member = "serviceAccount:${google_service_account.repo-account.email}"
}
ACCOUNT-ID はサービス アカウントの ID です。これは、サービス アカウントのメール フィールドの @ 記号の前の部分です。
他の例については、google_artifact_registry_repository_iam リソースのドキュメントをご覧ください。
リポジトリへの公開アクセスを構成する
認証なしでインターネット上のすべてのユーザーが利用できるようすることが必要なアーティファクトがある場合は、一般公開するリポジトリに保存します。
公開読み取り専用アクセス権用のリポジトリを構成するには、プリンシパル allUsers に Artifact Registry 読み取りロールを付与します。また、単一のユーザーがプロジェクトの全体的な割り当てを使い果たさないように、ユーザー リクエストの割り当てを上限設定することをおすすめします。
コンソール
Cloud de Confiance コンソールで [リポジトリ] ページを開きます。
適切なリポジトリを選択します。
情報パネルが表示されていない場合は、メニューバーの [情報パネルを表示] をクリックします。
[権限] タブで、[プリンシパルを追加] をクリックします。
[新しいプリンシパル] フィールドに「
allUsers」と入力します。[Artifact Registry 読み取り] ロールを選択します。
認証されていないユーザーによる不正使用を防ぐため、Artifact Registry API リクエストにユーザーごとの上限を設定します。手順については、使用量の上限を設定するをご覧ください。
gcloud
-
In the Cloud de Confiance console, activate Cloud Shell.
At the bottom of the Cloud de Confiance console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
次のコマンドを実行します。
gcloud artifacts repositories add-iam-policy-binding REPOSITORY \ --location=LOCATION --member=allUsers --role=ROLE
ここで
REPOSITORY はリポジトリの ID です。
ROLE は、付与するロールです。 + LOCATION は、リポジトリのリージョン ロケーションです。
たとえば、ロケーション
--u-france-east1のリポジトリmy-repoを一般公開として構成するには、次のコマンドを実行します。gcloud artifacts repositories add-iam-policy-binding my-repo \ --location=u-france-east1 --member=allUsers --role=roles/artifactregistry.reader
認証されていないユーザーによる不正使用を防ぐため、Artifact Registry API リクエストにユーザーごとの上限を設定します。手順については、使用量の上限を設定するをご覧ください。
ロールを取り消し中
リポジトリへのアクセス権を取り消すには、承認済みプリンシパルのリストからプリンシパルを削除します。
リポジトリから一般公開アクセス権を削除するには、allUsers プリンシパルを削除します。
コンソール
権限を取り消すには:
Cloud de Confiance コンソールで [リポジトリ] ページを開きます。
適切なリポジトリを選択します。
情報パネルが表示されていない場合は、メニューバーの [情報パネルを表示] をクリックします。
[権限] タブで、適切なプリンシパルを展開します。公開リポジトリを非公開にする場合は、
allUsersプリンシパルを展開します。[プリンシパルを削除] をクリックして、アクセス権を取り消します。
gcloud
-
In the Cloud de Confiance console, activate Cloud Shell.
At the bottom of the Cloud de Confiance console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
プロジェクト レベルでロールを取り消すには、次のコマンドを実行します。
gcloud projects remove-iam-policy-binding PROJECT \ --member=PRINCIPAL \ --role=ROLE
- PROJECT は、プロジェクト ID です。
PRINCIPAL は、バインディングを削除するプリンシパルです。
user|group|serviceAccount:emailまたはdomain:domainの形式を使用します。例:
user:test-user@gmail.com、group:admins@example.com、serviceAccount:test123@example.domain.com、またはdomain:example.domain.com。ROLE は、取り消すロールです。
リポジトリのロールを取り消すには、次のコマンドを実行します。
gcloud artifacts repositories remove-iam-policy-binding REPOSITORY --location=LOCATION \ --member=PRINCIPAL \ --role=ROLE
ここで
- REPOSITORY はリポジトリの ID です。
PRINCIPAL は、バインディングを削除するプリンシパルです。
user|group|serviceAccount:emailまたはdomain:domainの形式を使用します。例:
user:test-user@gmail.com、group:admins@example.com、serviceAccount:test123@example.domain.com、またはdomain:example.domain.com。リポジトリへの公開アクセス権を取り消すには、プリンシパル
allUsersを指定します。ROLE は、取り消すロールです。
たとえば、
--u-france-east1ロケーションのリポジトリmy-repoを持つユーザーwrite@gmail.comのロールroles/artifactregistry.writerのポリシー バインディングを削除するには、次のコマンドを実行します。gcloud artifacts repositories remove-iam-policy-binding my-repo \ --location=u-france-east1 \ --member=user:write@gmail.com \ --role=roles/artifactregistry.writer
ロケーション
--u-france-east1でmy-repoへの公開アクセス権を取り消すには、次のコマンドを実行します。gcloud artifacts repositories remove-iam-policy-binding my-repo \ --location=u-france-east1 \ --member=allUsers \ --role=roles/artifactregistry.reader
タグを使用した条件付きのアクセス権の付与
プロジェクト管理者は、 Cloud de Confianceのリソースにタグを作成し、Resource Manager で管理できます。Artifact Registry リポジトリにタグ付けすると、管理者は IAM 条件を伴うタグを使用して、リポジトリに条件付きのアクセス権を付与できます。
個々のアーティファクトにタグ付けすることはできません。
詳細については、以下のドキュメントをご覧ください。
- タグとアクセス制御を設定する管理者
- リポジトリにタグを適用するデベロッパー
Cloud de Confiance サービスとの統合
ほとんどの Cloud de Confiance サービス アカウントでは、レジストリへのアクセスを構成するには、適切な IAM ロールを付与することのみ必要です。
Cloud de Confiance by S3NS サービスのデフォルトのサービス アカウント
Google Kubernetes Engine などのCloud de Confiance サービスは、デフォルトのサービス アカウントまたはサービス エージェントを使用して、同じプロジェクト内のリソースを操作します。
次の場合は、権限をご自分で構成または変更する必要があります。
- Cloud de Confiance by S3NS サービスが Artifact Registry とは異なるプロジェクトにある。
- デフォルトの権限ではニーズが満たされない。
- デフォルトのサービス アカウントではなく、ユーザーが指定したサービス アカウントを使用して Artifact Registry を操作している。
- 組織のポリシーの構成により、デフォルトのサービス アカウントへのロールの自動付与がブロックされている。
通常、次のサービス アカウントは Artifact Registry にアクセスします。サービス アカウントのメールアドレスには、サービスが実行されているプロジェクトの Cloud de Confianceプロジェクト ID またはプロジェクト番号が含まれます。
| サービス | サービス アカウント | メールアドレス |
|---|---|---|
| Compute Engine | Compute Engine のデフォルトのサービス アカウント | PROJECT-NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com |
| GKE | Compute Engine のデフォルトのサービス アカウント ノードのデフォルトのサービス アカウント。 |
PROJECT-NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com |
組織のポリシーの構成によっては、デフォルトのサービス アカウントにプロジェクトの編集者のロールが自動的に付与される場合があります。iam.automaticIamGrantsForDefaultServiceAccounts 組織ポリシー制約を適用して、自動的なロール付与を無効にすることを強くおすすめします。2024 年 5 月 3 日以降に組織を作成した場合、この制約はデフォルトで適用されます。
自動ロール付与を無効にする場合、デフォルトのサービス アカウントに付与するロールを決定し、これらのロールを付与する必要があります。
デフォルトのサービス アカウントにすでに編集者ロールが設定されている場合は、編集者ロールを権限の低いロールに置き換えることをおすすめします。
Compute Engine インスタンスへのアクセス権の付与
リポジトリにアクセスする VM インスタンスには、Artifact Registry 権限とストレージ アクセス スコープの両方が構成されている必要があります。
サービス アカウントのアクセスレベルはサービス アカウントに付与された IAM ロールによって決定されますが、VM インスタンスのアクセス スコープによって、インスタンスの gcloud CLI とクライアント ライブラリを使用して行われるリクエストのデフォルトの OAuth スコープが決定されます。そのため、アクセス スコープでは、アプリケーションのデフォルト認証情報で認証する際に API メソッドへのアクセスをさらに制限できます。
Compute Engine では、次のデフォルトが使用されます。
- Compute Engine のデフォルトのサービス アカウントが VM インスタンスの ID となっています。サービス アカウントのメールアドレスには、@developer.s3ns-system.iam.gserviceaccount.com というサフィックスが付加されています。
- この動作を無効にしていない場合、このデフォルトのサービス アカウントには IAM の基本の編集者のロールがあります。
- デフォルトのサービス アカウントで作成したインスタンスには、Compute Engine のデフォルトのアクセス スコープ(ストレージへの読み取り専用アクセス権を含む)が設定されています。編集者ロールは通常、書き込み権限を付与するものであるのに対し、
read-onlyストレージ アクセス スコープは、インスタンスのサービス アカウントに対し、アーティファクトのダウンロードについて、同じプロジェクトのリポジトリからのみとする制限を課します。
次の場合に、サービス アカウントのアクセス範囲を構成する必要があります。
- VM サービス アカウントが、別のプロジェクト内のリポジトリにアクセスする必要がある。
- VM サービス アカウントは、リポジトリからアーティファクトを読み取る以外のアクションを実行する必要がある。これは通常、イメージを push するか Artifact Registry の
gcloudコマンドを実行する必要がある VM にサードパーティ ツールを適用することによって実現します。
権限を構成してアクセス スコープを設定するには:
VM インスタンスを含むプロジェクトで、Compute Engine のデフォルト サービス アカウントの名前を取得します。サービス アカウントのメールアドレスには、@developer.s3ns-system.iam.gserviceaccount.com というサフィックスが付加されています。
リポジトリが含まれるプロジェクトで、サービス アカウントでリポジトリにアクセスできるように権限を付与します。
-scopes オプションを使用してアクセス スコープを設定します。
VM インスタンスを停止します。インスタンスの停止をご覧ください。
次のコマンドでアクセス スコープを設定します。
gcloud compute instances set-service-account INSTANCE --scopes=SCOPESCOPE は、適切な値に置き換えます。
Docker では、次のオプションがサポートされます。
storage-ro- イメージの pull のみを許可する読み取り権限を付与します。storage-rw- イメージを push または pull するための読み取りと書き込みの権限を付与します。cloud-platform-Cloud de Confiance サービス全体でメタデータを含むデータを表示して管理します。
その他の形式の場合は、
cloud-platformスコープを使用する必要があります。
VM インスタンスを再起動します。停止されたインスタンスの起動をご覧ください。
Google Kubernetes Engine クラスタへのアクセス権の付与
GKE クラスタとノードプールは、次の要件がすべて満たされていれば、追加の構成なしでコンテナを pull できます。
- GKE が Artifact Registry と同じプロジェクトにある
- ノードはデフォルトのサービス アカウント(Compute Engine のデフォルト サービス アカウント)を使用しています。
- ノードが、ストレージへの読み取りアクセス権を使用して次のいずれかの方法で作成されている。
- Compute Engine のデフォルトのアクセス スコープを使用する。
cloud-platformアクセス スコープ、またはストレージへの読み取りアクセス権を含む別のスコープを付与する。
- サポートされているバージョンの GKE を実行している
GKE 環境がこれらの要件を満たしていない場合は、Compute Engine のデフォルト サービス アカウントを使用しているか、ユーザーから提供されたアカウントをノードの ID として使用しているかによって、アクセス権を付与する手順が異なります。
- デフォルト サービス アカウント
次の構成要件は、Compute Engine のデフォルト サービス アカウントに適用されます。
GKE が Artifact Registry とは異なるプロジェクトにある場合、必要な権限をサービス アカウントに付与します。
イメージを push するには、コンテナ以外の形式のリポジトリを操作するか、クラスタから
gcloudコマンドを実行して、クラスタまたはノードプールを作成する際にサービス アカウントのアクセス スコープを設定する必要があります。サポートされているバージョンの GKE を使用していない場合は、imagePullSecrets を構成します。
- ユーザー指定のサービス アカウント
ユーザーが指定したサービス アカウントをクラスタの ID として使用する場合は、次の操作を行う必要があります。
Artifact Registry が実行されているCloud de Confiance プロジェクトから、サービス アカウントに必要な権限を付与します。
デフォルトでは、ユーザー指定のサービス アカウントを使用してクラスタまたはノードプールを作成すると、
cloud-platformアクセス スコープが付与されます。gcloud container clusters create コマンドまたは gcloud container node-pools create コマンドで
--scopesフラグを使用する場合は、以下を含める必要があります。Artifact Registry で使用する適切なアクセス スコープ。
アクセス スコープの設定
アクセス スコープは、Compute Engine VM の認可を指定するレガシーな方法です。Artifact Registry リポジトリからイメージを pull するには、GKE ノードにストレージ読み取り専用アクセス スコープまたはストレージ読み取りアクセスを含む別のストレージ アクセス スコープが必要です。
アクセス スコープを設定できるのは、クラスタまたはノードプールを作成するときのみです。既存のノードではアクセス スコープを変更できません。
- もし Compute Engine のデフォルトのサービス アカウントを使用している場合、GKE は Compute Engine デフォルトのアクセス スコープを使用してノードを作成します。これにはストレージへの読み取り専用アクセスが含まれます。
- ユーザー指定のサービス アカウントを使用している場合、GKE は
cloud-platformスコープでノードを作成します。このスコープは、ほとんどのCloud de Confiance サービスで必要です。
クラスタの作成時にアクセス スコープを指定するには、次のコマンドを実行します。
gcloud container clusters create NAME --scopes=SCOPES
ノードプールの作成時にアクセス スコープを指定するには、次のコマンドを実行します。
gcloud container node-pools create NAME --scopes=SCOPES
次の値を置き換えます。
- NAME は、クラスタまたはノードプールの名前です。
SCOPES は、付与するアクセス スコープのカンマ区切りのリストです。
Docker リポジトリにアクセスするには、次のいずれかのスコープを使用します。
storage-ro- イメージの pull のみを許可する読み取り専用権限を付与します。storage-rw- イメージを push または pull するための読み取りと書き込みの権限を付与します。cloud-platform-Cloud de Confiance サービス全体でメタデータを含むデータを表示して管理します。他のリポジトリにアクセスするには、
cloud-platformスコープを使用する必要があります。
スコープの完全なリストについては、gcloud container clusters create または gcloud container node-pools create のドキュメントをご覧ください。
新しいクラスタの作成時に設定できるスコープの詳細については、gcloud container clusters create コマンドのドキュメントをご覧ください。
imagePullSecret の構成
imagePullSecret を構成するには:
GKE を含むプロジェクトで、Compute Engine のデフォルトのサービス アカウントを見つけます。アカウントのメールアドレスには、@developer.s3ns-system.iam.gserviceaccount.com というサフィックスが付加されています。
サービス アカウントのサービス アカウント キーをダウンロードします。
リポジトリを含むプロジェクトで、リポジトリに権限を付与済みであることを確認します。
クラスタを含むプロジェクトで、サービス アカウント キーを使用して
artifact-registryと呼ばれるimagePullSecretシークレットを作成します。kubectl create secret docker-registry artifact-registry \ --docker-server=https://LOCATION-docker.s3nsregistry.fr \ --docker-email=SERVICE-ACCOUNT-EMAIL \ --docker-username=_json_key \ --docker-password="$(cat KEY-FILE)"以下を置き換えます。
- LOCATION は、リポジトリのリージョン ロケーションです。
- SERVICE-ACCOUNT-EMAIL は、Compute Engine サービス アカウントのメールアドレスです。
- KEY-FILE は、サービス アカウント キー ファイルの名前です。たとえば、`key.json` です。
デフォルトのサービス アカウントを開きます。
kubectl edit serviceaccount default --namespace default
Kubernetes クラスタ内のすべての名前空間には、
defaultというデフォルトのサービス アカウントがあります。このデフォルト サービス アカウントは、コンテナ イメージを pull するために使用されます。新しく作成した
imagePullSecretシークレットをデフォルトのサービス アカウントに追加します。imagePullSecrets: - name: artifact-registryサービス アカウントは次のようになります。
apiVersion: v1 kind: ServiceAccount metadata: name: default namespace: default ... secrets: - name: default-token-zd84v # The secret you created: imagePullSecrets: - name: artifact-registry
これで、現在の default 名前空間に作成された新しいポッドには、imagePullSecret シークレットが定義されます。
Artifact Registry サービス アカウント
Artifact Registry サービス エージェントは、 Cloud de Confiance by S3NSサービスを操作するときに Artifact Registry の代理として動作する Google マネージド サービス アカウントです。このアカウントとその権限の詳細については、Artifact Registry サービス アカウントをご覧ください。
次のステップ
権限の設定後に、アーティファクトの操作に関する詳細を確認する。