CMEK でデータを保護する
このページでは、gcloud functions
コマンドまたは Cloud Functions v2 API を使用して作成された関数で、顧客管理の暗号鍵(CMEK)を使用してデータを保護する場合の補足情報を提供します。
CMEK の詳細(手動設定、Autokey の使用、CMEK 保護のテストなど)については、Cloud Run のドキュメントをご覧ください。
CMEK を使用する場合、次の種類の Cloud Run functions データが暗号化されます。
- デプロイ用にアップロードされた関数のソースコード。Google により Cloud Storage に保存され、ビルドプロセスで使用されます。
- 次のような関数のビルドプロセスの結果。
- 関数のソースコードからビルドされたコンテナ イメージ。
- デプロイされている関数の各インスタンス。
関数のビルドプロセス自体は、ビルドごとに一意に生成されるエフェメラル キーで保護されます。詳細については、Cloud Build での CMEK コンプライアンスをご覧ください。また、次の点に注意してください。
ファイル システムのパスや変更のタイムスタンプなどのファイル メタデータは暗号化されません。
鍵が無効になっている場合は、コンテナ イメージをデプロイできず、新しいインスタンスを起動できません。
Cloud Run functions の CMEK 保護は、Google が管理する Cloud Run functions リソースにのみ適用されます。ユーザーのソースコード リポジトリ、顧客プロジェクトに存在するイベント チャネル、関数で使用されるサービスなど、ユーザーが管理しているデータとリソースはユーザーが保護する必要があります。
始める前に
関数の暗号化に使用する単一リージョンの鍵を作成します。鍵の作成方法については、対称暗号鍵の作成をご覧ください。
CMEK が有効な Artifact Registry リポジトリを作成します。関数で CMEK を有効にする場合と同じ鍵を Artifact Registry リポジトリに使用する必要があります。
イベント ドリブン関数の場合は、Google チャネルの CMEK を有効にするで概説されている追加の設定を行います。
サービス アカウントに鍵へのアクセス権を付与する
すべての関数について、次のサービス アカウントに鍵へのアクセス権を付与する必要があります。
Cloud Run functions サービス エージェント(
service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
)Artifact Registry サービス エージェント(
service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com
)Cloud Storage サービス エージェント(
service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com
)Cloud Run サービス エージェント(
service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com
)Eventarc サービス エージェント(
service-PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com
)
これらのサービス アカウントに鍵へのアクセス権を付与するには、各サービス アカウントを鍵のプリンシパルとして追加し、サービス アカウントに Cloud KMS CryptoKey Encrypter/Decrypter
ロールを付与します。
コンソール
Google Cloud コンソールで、Cloud Key Management Service のページに移動します。
Cloud KMS のページに移動選択した鍵を含むキーリングの名前をクリックします。
鍵の名前をクリックすると、鍵の詳細が表示されます。
[権限] タブで、[アクセス権を付与] をクリックします。
[新しいプリンシパル] フィールドに、上記の 3 つのサービス アカウントすべてのメールアドレスを入力して、一度で 3 つのアカウントすべてに権限を割り当てます。
[ロールを選択] メニューで、[Cloud KMS 暗号鍵の暗号化 / 復号] を選択します。
[保存] をクリックします。
gcloud
前述のサービス アカウントごとに、次のコマンドを実行します。
gcloud kms keys add-iam-policy-binding KEY \ --keyring KEY_RING \ --location LOCATION \ --member serviceAccount:SERVICE_AGENT_EMAIL \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
次のように置き換えます。
KEY
: 鍵の名前。例:my-key
KEY_RING
: キーリングの名前。例:my-keyring
LOCATION
: 鍵のロケーション。例:us-central1
SERVICE_AGENT_EMAIL
: サービス アカウントのメールアドレス。
関数の CMEK を有効にする
CMEK を有効にして Artifact Registry リポジトリを設定し、Cloud Run functions に鍵へのアクセス権を付与したので、関数で CMEK を有効にする準備が整いました。
関数の CMEK を有効にするには、次のコマンドを実行します。
gcloud functions deploy FUNCTION \ --kms-key=KEY \ --docker-repository=REPOSITORY \ --source=YOUR_SOURCE_LOCATION FLAGS...
次のように置き換えます。
FUNCTION
: CMEK を有効にする関数の名前。例:cmek-function
KEY
: 鍵の完全修飾名(projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME
の形式)。REPOSITORY
: Artifact Registry リポジトリの完全修飾名(projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY
の形式)。YOUR_SOURCE_LOCATION
: 既存の関数に対して CMEK を有効にする場合は、このパラメータを明示的に指定し、目的のソースコードが再デプロイされていることを確認してください。FLAGS...
: 関数のデプロイ(特にデプロイの作成)に必要な追加のフラグ。詳細については、Cloud Run 関数をデプロイするをご覧ください。
関数の CMEK が有効になります。必要に応じて、CMEK の組織のポリシーを有効にして、すべての新しい関数が CMEK に準拠するようにします。
Cloud Run functions は CMEK 保護に常に鍵のメイン バージョンを使用します。関数の CMEK を有効にするときに使用する特定の鍵バージョンを指定することはできません。
鍵が破棄された場合、無効になった場合、または必要な権限が取り消された場合、その鍵で保護されている関数のアクティブなインスタンスはシャットダウンされません。すでに進行中の関数の実行は継続されますが、Cloud Run functions が鍵にアクセスできない限り、新しい実行は失敗します。