シークレットと認証情報の使用

このページでは、Cloud Build にパスワードや API キーなどの機密情報を含める方法について説明します。

ビルドに機密情報を含める前に、シークレット マネージャーに保存するか、Cloud Key Management Service を使用して暗号化し、暗号化された情報だけを Cloud Build に含めるする必要があります。シークレット マネージャーは、Cloud Build で機密データを管理するためのおすすめの方法です。既存のプロジェクトの場合は引き続き Cloud KMS を使用できますが、新しいプロジェクトの場合は Secret Manager を使用します。

始める前に

このページで説明する gcloud コマンドを実行するには、gcloudコマンドライン ツールをインストールします。

  • すでに Cloud SDK をインストールしたことがある場合は、gcloud components update を実行して最新バージョンを使用していることを確認してください。

Secret Manager の使用

シークレット マネージャーは、API キー、パスワード、その他の機密データを安全に保存する Google Cloud サービスです。

Secret Manager にデータを保存し、そのデータを Cloud Build で使用するには:

  1. Secret Manager API を有効にします。

    Secret Manager API を有効にする

  2. Cloud Build サービス アカウントに Secret Accessor Cloud IAM ロールを付与します。

    1. Cloud Console で Cloud IAM ページを開きます。

      Cloud IAM ページを開く

    2. プロジェクトを選択し、[開く] をクリックします。

    3. 権限の表で、末尾が @cloudbuild.gserviceaccount.com のメールアドレスを見つけて、鉛筆アイコンをクリックします。

    4. Secret Manager Secret Accessor ロールを追加する。

    5. [保存] をクリックします。

  3. Secret Manager にデータを保存する:

    1. Cloud Console の Secret Manager ページに移動します。

      シークレット マネージャー ページに移動

    2. [シークレット マネージャー] ページで、[シークレットを作成] をクリックします。

    3. [シークレットの作成] ページの [名前] に「secret-data」と入力します。

    4. [シークレット値] フィールドにデータを入力します。

    5. [リージョン] セクションは変更しません。

    6. [シークレットを作成] ボタンをクリックします。

    gcloud コマンドライン ツールを使用した Secret Manager の使用方法については、Secret Manager クイックスタートをご覧ください。

  4. ビルド構成ファイルに、シークレット マネージャーでシークレット バージョンにアクセスするビルドステップを追加し、ファイルに保存します。次のビルドステップでは、secret-data にアクセスして decrypted-data.txt という名前のファイルに保存します。

    YAML

    steps:
    - name: gcr.io/cloud-builders/gcloud
      entrypoint: 'bash'
      args: [ '-c', 'gcloud secrets versions access latest --secret=secret-data > decrypted-data.txt' ]
    

    JSON

    {
      "steps": [
      {
        "name": "gcr.io/cloud-builders/gcloud",
        "entrypoint": "bash",
        "args": [
          "-c",
          "gcloud secrets versions access latest --secret=secret-data > decrypted-data.txt"
        ]
      }
      ]
    }
    
  5. ビルドステップで、復号されたデータを含むファイルを使用します。次のコード スニペットは、decrypted-data.txt を使用して非公開 Docker レジストリにログインします。

    YAML

    steps:
    - name: gcr.io/cloud-builders/gcloud
      entrypoint: 'bash'
      args: [ '-c', 'gcloud secrets versions access latest --secret=secret-data > decrypted-data.txt' ]
    - name: gcr.io/cloud-builders/docker
      entrypoint: 'bash'
      args: [ '-c', 'docker login --username=my-user --password-stdin < decrypted-data.txt']
    

    JSON

    {
      "steps": [
      {
        "name": "gcr.io/cloud-builders/gcloud",
        "entrypoint": "bash",
        "args": [
          "-c",
          "gcloud secrets versions access latest --secret=secret-data > password.txt"
         ]
      },
      {
        "name": "gcr.io/cloud-builders/docker",
        "entrypoint": "bash",
        "args": [
          "-c",
          "docker login --username=my-user --password-stdin < decrypted-data.txt"
         ]
      }
      ]
    }
    
  6. ビルド構成ファイルを使用して、ビルドを手動で開始するか、トリガーを使用してビルドを自動化します

Cloud KMS の使用

Cloud KMS は、暗号鍵の管理と使用を可能にする Google Cloud サービスです。

Cloud KMS を使用して機密データを暗号化し、そのデータをビルド構成ファイルで使用するには:

  1. Cloud KMS API を有効化します。

    Cloud KMS API を有効化します。

  2. Cloud Build サービス アカウントに Cloud KMS CryptoKey Decrypter Cloud IAM ロールを付与します。

    1. Cloud Console で、Cloud Build の設定ページに移動します。

      設定ページを開く

    2. Cloud KMS CryptoKey Decrypter ロールを持つ行を見つけて、その StatusENABLED に設定します。

  3. ターミナル ウィンドウを開きます。

  4. 新しい Cloud KMS key-ringkeyring-name という名前で作成します。

      gcloud kms keyrings create keyring-name --location global
    
  5. key-ring keyring-name の新しい Cloud KMS key key-name を作成します。

      gcloud kms keys create key-name \
          --location global --keyring keyring-name \
          --purpose encryption
    
  6. 暗号化されたデータを使用するように Cloud Build を構成します。

    • 暗号化された変数を使用するには:

      1. keyring-namekeyring-name を使用して secret-data を暗号化します。暗号化された値は、Base64 でエンコードされた文字列です。secret-data に余分な文字(スペースや改行など)を含めないでください。-n フラグは、終了の改行を含めないように echo に指示します。

         echo -n secret-data | gcloud kms encrypt --plaintext-file=- \
             --ciphertext-file=- --location=global --keyring=keyring-name \
             --key=key-name | base64
        
      2. ビルド構成ファイルで、暗号化された値を指定する secrets フィールドと、その復号に使用する CryptoKey を追加します。次に、暗号化された変数を使用するビルドステップで、secretEnv フィールドを追加して変数を環境変数として指定します。secretEnv フィールドに変数の名前を含めます。変数値、または同じ名前の非シークレット環境変数を指定すると、Cloud Build はエラーをスローします。

        YAML

         steps:
         - name: 'gcr.io/cloud-builders/docker'
           entrypoint: 'bash'
           args: ['-c', 'docker login --username=user-name --password=$$PASSWORD']
           secretEnv: ['PASSWORD']
         - name: 'gcr.io/cloud-builders/docker'
           args: ['push', 'user-name/myubuntu']
         secrets:
         - kmsKeyName: projects/project-id/locations/global/keyRings/keyring-name/cryptoKeys/key-name
           secretEnv:
             PASSWORD: 'encrypted-password'
        

        JSON

         {
           "steps": [
            {
              "name": "gcr.io/cloud-builders/docker",
              "entrypoint": "bash",
              "args": [
                "-c",
                "docker login --username=user-name --password=$$PASSWORD"
               ],
               "secretEnv": [
                 "PASSWORD"
                ]
            },
            {
              "name": "gcr.io/cloud-builders/docker",
              "args": [
                "push",
                "user-name/myubuntu"
               ]
            }
            ],
            "secrets": [
             {
               "kmsKeyName": "projects/project-id/locations/global/keyRings/keyring-name/cryptoKeys/key-name",
               "secretEnv": {
                 "PASSWORD": "encrypted-password"
                }
             }
             ]
         }
        
    • 暗号化されたファイルを使用するには:

      1. keyring-namekeyring-name を使用して、secrets.json という名前のファイルを暗号化します。これにより、secrets.json.enc という名前の暗号化されたファイルが生成されます。secrets.json のサイズは 64 KiB 以下である必要があります。

         gcloud kms encrypt --plaintext-file=secrets.json \
             --ciphertext-file=secrets.json.enc \
             --location=global --keyring=keyring-name\
             --key=key-name
        
      2. ビルド構成ファイルで、復号された secrets.json ファイルを操作するビルドステップの前に、gcloud Cloud Build を呼び出して secrets.json.enc を暗号鍵を使用して復号するビルドステップを追加します。このビルドステップは、ファイルを暗号化するために使用するコマンドに似ています。

        YAML

         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
        

        JSON

         {
           "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"
              ]
            }
            ]
         }
        

        このステップが完了すると、後続のステップで復号された secrets.json ファイルを使用できるようになります。たとえば、このファイル内のシークレットを使用して外部依存関係を取得できます。また、ビルドした Docker コンテナ イメージにシークレット トークンを含めることもできます。

  7. ビルド構成ファイルを使用して、ビルドを手動で開始するか、トリガーを使用してビルドを自動化します

次のステップ