このページでは、リポジトリに保存されているコンテンツを、顧客管理の暗号鍵(CMEK)で暗号化する方法について説明します。
概要
デフォルトでは、 Google Cloud Google が所有し、Google が管理する 暗号鍵を使用して、保存されているデータを自動的に暗号化します。データを保護する鍵に関連する具体的なコンプライアンス要件や規制要件がある場合は、CMEK 鍵で暗号化されたリポジトリを作成できます。リポジトリに関するメタデータ(リポジトリ名など)は、Google が所有し Google が管理する 暗号鍵で暗号化されます。
CMEK を有効にすると、リポジトリ内の保存データは、Cloud Key Management Service 内で管理する鍵を使用して暗号化されます。CMEK 鍵へのアクセスは、Identity and Access Management を使用して制御できます。CMEK 鍵を一時的に無効にするか、完全に破棄すると、その鍵で暗号化されたデータにアクセスできなくなります。
CMEK を使用すると、鍵のライフサイクルと管理をより幅広く制御できますが、Cloud KMS サービスの追加費用も発生します。使用する鍵のタイプによっては、CMEK で暗号化された Artifact Registry リポジトリや他の Google Cloud リソースも Cloud KMS の割り当てを消費する可能性があります。アプリケーションとワークフローのアプリケーション レイヤ Secret 暗号化を有効にするために十分な割り当てがあることを確認してください。 詳細については、Cloud KMS の割り当てと Artifact Registry をご覧ください。
Cloud KMS は、Artifact Registry と同じ Google Cloud プロジェクトで実行することも、複数のプロジェクトで使用する鍵を一元的に管理する別のプロジェクトで実行することもできます。職掌分散をサポートし、鍵へのアクセスを詳細に制御するには、他の Google Cloud リソースを含む別のプロジェクト内で鍵を作成し、管理することをおすすめします。
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 のドキュメントをご覧ください。
次に、リポジトリを作成し、暗号化に使用する鍵を指定します。
アクセス権の削除
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 所有の鍵と Google が管理する鍵 の詳細を確認する