このページでは、リポジトリに保存されているコンテンツを顧客管理の暗号鍵(CMEK)で暗号化する方法について説明します。
概要
デフォルトでは、Artifact Registry はお客様のコンテンツを保存時に暗号化します。Artifact Registry では、ユーザーが追加で操作を行わなくても暗号化が行われます。このオプションは、Google のデフォルトの暗号化と呼ばれます。
暗号鍵を管理する場合は、Cloud KMS の顧客管理の暗号鍵(CMEK)を、Artifact Registry などの CMEK 統合サービスで使用できます。Cloud KMS 鍵を使用すると、保護レベル、ロケーション、ローテーション スケジュール、使用とアクセスの権限、暗号境界を制御できます。Cloud KMS を使用すると、監査ログを表示し、鍵のライフサイクルを管理することもできます。データを保護する対称鍵暗号鍵(KEK)は Google が所有して管理するのではなく、ユーザーが Cloud KMS でこれらの鍵の制御と管理を行います。
CMEK を使用してリソースを設定した後は、Artifact Registry リソースへのアクセスは、Google のデフォルトの暗号化を使用する場合と同様です。暗号化オプションの詳細については、顧客管理の暗号鍵(CMEK)をご覧ください。
Cloud KMS Autokey による CMEK
CMEK を手動で作成して Artifact Registry リソースを保護することも、Cloud KMS Autokey を使用することもできます。Autokey を使用すると、Artifact Registry のリソース作成の一環として、キーリングと鍵がオンデマンドで生成されます。暗号化と復号のオペレーションに鍵を使用するサービス エージェントがまだ存在しない場合、そのエージェントが作成され、必要な Identity and Access Management(IAM)ロールが付与されます。詳細については、Autokey の概要をご覧ください。
CMEK を手動で設定するには、鍵の作成と権限の付与をご覧ください。
Autokey を使用して CMEK を設定するには、このページの Autokey を使用して鍵を作成するをご覧ください。
CMEK 鍵は、リポジトリを作成するときに割り当てます。既存のリポジトリの暗号化メカニズムは変更できません。CMEK で暗号化されたリポジトリがある場合、暗号化メカニズムを変更してGoogle が所有し Google が管理する 暗号鍵を使用したり、暗号化用の別の Cloud KMS 鍵を割り当てたりすることはできません。
CMEK 全般について詳しくは、CMEK の概要をご覧ください。
鍵の作成と権限の付与
次の手順では、リポジトリの鍵を作成し、その鍵を使用してリポジトリ データを暗号化および復号する権限を付与する方法について説明します。Cloud KMS で直接作成された鍵または Cloud External Key Manager で利用できる外部管理鍵を使用できます。
鍵を管理する Google Cloud プロジェクトで、次の操作を行います。
次のいずれかのオプションを使用してキーリングと鍵を作成します。
- Cloud KMS キーリングを作成してから、Cloud KMS 鍵を作成します。
- 外部鍵を作成する。
Cloud KMS 鍵のロケーションは、暗号化するリポジトリのリポジトリ ロケーションと一致している必要があります。
Artifact Registry プロジェクトにリポジトリを作成していない場合、Artifact Registry サービス アカウントは存在しません。サービス アカウントを作成するには、次のコマンドを実行します。
gcloud beta services identity create --service=artifactregistry.googleapis.com --project=PROJECT
PROJECT は、Artifact Registry が実行されているプロジェクトの ID に置き換えます。
Artifact Registry サービス アカウントに CryptoKey Encrypter/Decrypter IAM ロール(
roles/cloudkms.cryptoKeyEncrypterDecrypter
)を付与します。作成した鍵にこの権限を付与します。コンソール
[暗号鍵] ページに移動します。
作成した鍵を選択します。
Artifact Registry サービス アカウントにアクセス権を付与します。
- [情報パネルを表示] を選択します。
- [メンバーを追加] をクリックします。
- Artifact Registry サービス アカウントを追加します。サービス アカウントは service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com です。ここで、PROJECT-NUMBER は、Artifact Registry が実行されている Google Cloud プロジェクトのプロジェクト番号です。
- [ロールを選択] で、[Cloud KMS] > [Cloud KMS 暗号鍵の暗号化 / 復号] を選択します。
- [保存] をクリックします。
前の手順を繰り返して、リポジトリを作成するアカウントにアクセス権を付与します。
[鍵管理] ページに戻り、鍵をもう一度選択します。
[情報パネルを表示] を選択します。[ロール / メンバー] 列にロールが表示されます。
gcloud
次のコマンドを実行して、Artifact Registry サービス アカウントにアクセス権を付与します。
gcloud kms keys add-iam-policy-binding [--project=PROJECT] \ KEY --location LOCATION --keyring=KEYRING \ --member serviceAccount:service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
説明
- PROJECT は鍵を持つプロジェクトの ID です。
- KEY は鍵名です。
- LOCATION は、鍵のロケーションです。 鍵のロケーションは、暗号化するリポジトリのリポジトリ ロケーションと一致する必要があります。
- KEYRING は鍵リング名です。
- PROJECT-NUMBER は、Artifact Registry を実行している Google Cloud プロジェクトのプロジェクト番号です。
前の手順を繰り返して、リポジトリを作成するアカウントにアクセス権を付与します。
このコマンドの詳細については、gcloud kms keys add-iam-policy-binding のドキュメントをご覧ください。
次に、リポジトリを作成し、暗号化に使用する鍵を指定します。
Autokey を使用して鍵を作成する
Autokey は、リポジトリと同じロケーションに新しい鍵を作成します。
必要なロール
Autokey を使用して保護されたリポジトリを作成するために必要な権限を取得するには、フォルダまたはプロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
Cloud KMS Autokey ユーザー (
roles/cloudkms.autokeyUser
) -
Artifact Registry 管理者 (
roles/artifactregistry.admin
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
キーの作成
Autokey で鍵を作成する前に、Cloud KMS Autokey を有効にする必要があります。
Google Cloud コンソールで [リポジトリ] ページを開きます。
[リポジトリを作成] をクリックします。
[暗号化] セクションで、[Cloud KMS with Autokey automated management] を選択します。
[作成] をクリックします。
アクセス権の削除
CMEK で暗号化されたリポジトリへのアクセス権を削除する方法はいくつかあります。
- 次のいずれかの方法を使用して、Artifact Registry サービス アカウントから Cloud KMS CryptoKey の暗号化/復号のロールを取り消します。
- 一時的に顧客管理の暗号鍵を無効にします。
- CMEK 鍵を完全に破棄する。
鍵を無効にするか破棄する前に、Artifact Registry サービス アカウントから権限を取り消すことをおすすめします。権限の変更の整合性は数秒以内に確保されるため、鍵の無効化や破棄の影響を確認できます。
リポジトリの暗号鍵を無効化または破棄すると、アーティファクト データの表示や取得ができなくなります。リポジトリに保存されているすべてのアーティファクト データにアクセスできなくなります。これには、ビルドされたアーティファクト、任意のバイナリデータ(blob)、Docker マニフェストや npm packument ファイルなどのマニフェストが含まれます。Artifact Registry 読み取りのロール(roles/artifactregistry.reader
)または閲覧者のロール(roles/artifactregistry.viewer
)を持つユーザーは、アーティファクト名、バージョン、タグなどのアーティファクト メタデータを引き続き表示できます。
Artifact Registry 管理者ロール(roles/artifactregistry.admin
)またはオーナー ロール(roles/owner
)を持つユーザーはリポジトリを削除できます。
CMEK の組織のポリシー
Artifact Registry は、CMEK の保護を必須にできる組織のポリシーの制約をサポートしています。
ポリシーでは、CMEK 保護に使用できる Cloud KMS CryptoKey を制限できます。
Artifact Registry API が制約
constraints/gcp.restrictNonCmekServices
のサービスのDeny
ポリシーリストにある場合、Artifact Registry は CMEK で保護されていない新しいリポジトリの作成を拒否します。constraints/gcp.restrictCmekCryptoKeyProjects
が構成されると、Artifact Registry は許可されたプロジェクト、フォルダ、または組織の CryptoKey によって保護された CMEK 保護リポジトリを作成します。
Pub/Sub は前述の制約をサポートしています。 Google Cloud プロジェクトで Artifact Registry API を有効にすると、Artifact Registry は Google が所有し、Google が管理する 暗号鍵を使用して、トピック ID が gcr
である Pub/Sub トピックを自動的に作成しようとします。ただし、Pub/Sub API が制約 constraints/gcp.restrictNonCmekServices
の Deny
ポリシー リストに含まれている場合、Pub/Sub はトピックを作成しません。このシナリオでは、CMEK 暗号化を使用して gcr
トピックを作成する必要があります。詳細については、Pub/Sub のトピックを暗号化する手順をご覧ください。
組織のポリシーの構成について詳しくは、CMEK の組織のポリシーをご覧ください。
次のステップ
- CMEK で暗号化されたリポジトリを作成する
- CMEK の詳細を見る。
- Google が所有し管理する 暗号鍵の詳細を確認する