暗号化されたリソースの使用

このページでは、暗号化されたリソースをビルド リクエストで使用する方法について説明します。ファイルや変数などの暗号化されたリソースを使用して、承認トークンなどの機密情報をビルドステップに渡すことができます。

Cloud Key Management Service(Cloud KMS)の暗号鍵を使用してリソースの暗号化と復号化を行うことができます。これにより、暗号鍵へのアクセスとローテーションを柔軟かつ簡単に管理できます。 暗号鍵キーリングに格納されています。キーリングとは、整理するために鍵をグループ化したものです。

Cloud KMS を理解し、Cloud KMS API を有効にするには、Cloud KMS クイックスタートを完了する必要があります。

クラウド KMS のキーリングと暗号鍵を作成する

gcloud kms keyrings create コマンドと gcloud kms keys create コマンドを使用して、キーリングと暗号鍵を作成できます。

キーリングを作成するには、シェルまたはターミナル ウィンドウで次のコマンドを実行します。

gcloud kms keyrings create [KEYRING-NAME] \
  --location=global

暗号鍵を作成するには、次のコマンドを実行します。

gcloud kms keys create [KEY-NAME] \
  --location=global \
  --keyring=[KEYRING-NAME] \
  --purpose=encryption

ここで:

  • [KEYRING-NAME] は、作成するキーリングの名前です。
  • [KEY-NAME] は、作成する暗号鍵の名前です。

Cloud Build サービス アカウントに暗号鍵へのアクセス権を付与する

ビルド中にリソースを復号化するには、Cloud Build サービス アカウントに暗号鍵にアクセスする権限を付与する必要があります。ファイルの復号化のみを行う場合は、復号化権限を付与することのみが必要となります。

権限を付与する手順は次のとおりです。

Console

  1. Cloud Platform Console の [IAM] メニューにアクセスします。
  2. Cloud Build サービス アカウントのメールアドレスをコピーします。これには @cloudbuild.gserviceaccount.com が含まれています。
  3. Cloud Platform Console の [暗号鍵] メニューにアクセスします。
  4. リストからキーリングを選択し、[権限] をクリックします。
  5. [メンバーを追加] フィールドにサービス アカウントのメールアドレスを入力します。
  6. [役割] プルダウン メニューから [Cloud KMS CryptoKey Decrypter] を選択します。
  7. [追加] をクリックします。

gcloud

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

gcloud kms keys add-iam-policy-binding \
    [KEY-NAME] --location=global --keyring=[KEYRING-NAME] \
    --member=serviceAccount:[SERVICE-ACCOUNT]@cloudbuild.gserviceaccount.com \
    --role=roles/cloudkms.cryptoKeyEncrypterDecrypter

このコマンドの詳細については、gcloud kms keys のドキュメントをご覧ください。

Cloud Build サービス アカウントのメールアドレスがわからない場合は、Google Cloud Platform Console の [IAM] メニューにアクセスしてください。サービス アカウントのメールアドレスには @cloudbuild.gserviceaccount.com が含まれています。

鍵へのアクセス権の付与の詳細については、Cloud KMS ドキュメントの IAM と Cloud KMS の使用をご覧ください。

暗号鍵を使用してファイルを暗号化する

ファイルを暗号化するには、シェルまたはターミナル ウィンドウで次のコマンドを実行します。

gcloud kms encrypt \
  --plaintext-file=secrets.json \
  --ciphertext-file=secrets.json.enc \
  --location=global \
  --keyring=[KEYRING-NAME] \
  --key=[KEY-NAME]

これにより、secrets.json.enc という名前の暗号化されたファイルが生成されます。このファイルには、secrets.json の内容が含まれています。

暗号化されたファイルを保存する

ファイルを暗号化したら、Cloud Source Repository または接続された GitHub や Bitbucket レポジトリなど、ソースコードと同じロケーションにファイルを保存できます。

たとえば、暗号化されたファイルを Git レポジトリに追加して commit するには、次のように指定します。

git add secrets.json.enc
git commit -am "Add encrypted secrets.json.enc"
git push

平文の secrets.json ファイルがレポジトリに commit されないようにするには、レポジトリの .gitignore ファイルにファイル名を追加します。

echo "secrets.json" >> .gitignore
git commit -am "Add secrets.json to .gitignore"
git push

ビルド中にファイルを復号化する

Builder サービス アカウントがアクセスできる暗号鍵を使用してファイルが暗号化されるようになったため、ビルドステップを追加して、暗号化されたファイルの内容を復号化することができます。

ビルド リクエストで、復号化された secrets.json ファイルとのやり取りをするビルドステップの前に、gcloud Builder を呼び出し暗号鍵を使用して secrets.json.enc を復号化するビルドステップを追加します。このビルドステップは、ファイルを暗号化するために使用するコマンドに似ています。

steps:
- name: gcr.io/cloud-builders/gcloud
  args:
  - kms
  - decrypt
  - --ciphertext-file=secrets.json.enc
  - --plaintext-file=secrets.json
  - --location=global
  - --keyring=[KEYRING-NAME]
  - --key=[KEY-NAME]
# more steps here

このステップの完了後は、後続のステップで、ワークスペース ディレクトリ内の復号化された secrets.json ファイルを使用できます。

たとえば、このファイル内のシークレットを使用して、外部依存関係をフェッチしたり、ビルドした Docker コンテナ イメージにシークレット トークンを含めたりすることができます。

暗号鍵を使用して環境変数を暗号化する

環境変数を暗号化するには、シェルまたはターミナル ウィンドウで次のコマンドを実行します。

echo -n $MY_SECRET | gcloud kms encrypt \
  --plaintext-file=- \  # - reads from stdin
  --ciphertext-file=- \  # - writes to stdout
  --location=global \
  --keyring=[KEYRING-NAME] \
  --key=[KEY-NAME] | base64

このコマンドは、暗号鍵を使用して環境変数 $MY_SECRET の値を暗号化します。暗号化された値は Base64 エンコード文字列であるため、値をビルド リクエストに簡単に含めることができます。

暗号化された変数をビルド リクエストで使用する

ビルド リクエストに、暗号化された値を指定する secrets フィールドと、暗号化された値を復号化するために使用する暗号鍵を含めます。

secrets:
- kmsKeyName: projects/[PROJECT-ID]/locations/global/keyRings/[KEYRING-NAME]/cryptoKeys/[KEY-NAME]
  secretEnv:
    MY_SECRET: <base64-encoded encrypted secret>

ビルドステップでは、復号化された値を環境変数として使用できるように指定します。

steps:
- name: 'my-builder-image'
  args: ['my', 'args']
  env: ['FOO=foo', 'BAR=bar']
  secretEnv: ['MY_SECRET']

暗号化された変数を使用したビルド リクエストの例

次のビルド リクエストの例は、暗号化された Dockerhub パスワードを使用して Docker イメージを Dockerhub に push します。

steps:

# Pull a public image from Dockerhub.
- name: 'gcr.io/cloud-builders/docker'
  args: ['pull', 'ubuntu']

# Retag the image into a user's repository.
- name: 'gcr.io/cloud-builders/docker'
  args: ['tag', 'ubuntu', '[MY-USER]/myubuntu']

# Login to provide credentials for the push.
# PASSWORD is decrypted before this step runs.
# Note: You need a shell to resolve environment variables with $$
- name: 'gcr.io/cloud-builders/docker'
  entrypoint: 'bash'
  args: ['-c', 'docker login --username=[MY-USER] --password=$$PASSWORD']
  secretEnv: ['PASSWORD']

# Push the image to Dockerhub.
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', '[MY-USER]/myubuntu']

secrets:
- kmsKeyName: projects/[PROJECT-ID]/locations/global/keyRings/[KEYRING-NAME]/cryptoKeys/[KEY-NAME]
  secretEnv:
    PASSWORD: <base64-encoded encrypted Dockerhub password>

この例では、docker login ステップは、指定されたユーザー名と復号化された Dockerhub パスワードを使用して Dockerhub にログインします。これにより、次のステップでこれらの認証情報を使用して、ユーザーのレポジトリから Dockerhub にイメージを docker push できます。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

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