限定公開 GitHub リポジトリへのアクセス

このチュートリアルでは、暗号化されたシークレットCloud Key Management Service(KMS)を使用して限定公開 GitHub リポジトリを操作する方法を説明します。

目標

  • GitHub SSH 認証鍵を設定する。
  • SSH 認証鍵を非公開リポジトリのデプロイ鍵に追加する。
  • Cloud KMS を使用して SSH 認証鍵を暗号化する。
  • 鍵を復号するビルドを送信し、それを使用して非公開リポジトリにアクセスする。

料金

このチュートリアルでは、以下を含む Cloud Platform の課金対象コンポーネントを使用します。

  • Cloud KMS
  • Cloud Build

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを作成できます。

Cloud Platform を初めて使用される方は、無料トライアルをご利用いただけます。

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. GCP プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

  3. Google Cloud Platform プロジェクトに対して課金が有効になっていることを確認します。 詳しくは、課金を有効にする方法をご覧ください。

  4. Cloud KMS API を有効にします。

    APIを有効にする

  5. Cloud SDK をインストールして初期化します。
  6. GitHub 用の SSH 認証鍵を作成します
  7. 限定公開リポジトリにデプロイ鍵を追加します

Cloud KMS クイックスタートも、このプロダクトに慣れるのに役立ちます。

Cloud KMS キーリングおよび暗号鍵の作成

Cloud Build で SSH 認証鍵を使用するには、Cloud KMS CryptoKey を使用して鍵を暗号化および復号する必要があります。CryptoKey は KeyRing オブジェクトに格納されます。

KeyRing と CryptoKey を作成するには、それぞれ gcloud kms keyrings create コマンド、gcloud kms keys create コマンドを使用します。

KeyRing を作成するには、shell またはターミナル ウィンドウで次のコマンドを実行します。このチュートリアルではキーリングに my-keyring という名前を付けます。

gcloud kms keyrings create my-keyring --location=global

次に、github-key という名前の暗号鍵を作成します。このコマンドは my-keyring キーリングに github-key 暗号鍵を作成します。

gcloud kms keys create github-key \
--location=global --keyring=my-keyring \
--purpose=encryption

--location=global フラグは、Cloud KMS が複数の地理的ロケーションからの読み書きオペレーションを処理することを示します。

SSH 認証鍵の暗号化

SSH 認証鍵を作成すると、環境内に id_rsa 鍵ファイルが作成されます。誰でもこのファイルを使用してアカウントに対して認証を行うことができるため、ファイルをビルドで使用する前に暗号化する必要があります。

gcloud kms encrypt コマンドを使用するとリソースを暗号化できます。

SSH 認証鍵を暗号化するには、次のコマンドを実行します。正しいパスを指定してください。

gcloud kms encrypt --plaintext-file=/path/to/sshkey/id_rsa \
--ciphertext-file=/path/to/save/encryptedkey/id_rsa.enc \
--location=global --keyring=my-keyring --key=github-key

このコマンドにより id_rsa の暗号化されたコピーである id_rsa.enc ファイルが作成されます。

Cloud Build サービス アカウントへの復号化権限の付与

ビルド中に暗号鍵にアクセスして復号化するための権限を Cloud Build サービス アカウントに付与する必要があります。

サービス アカウントに復号化権限を付与する方法については、暗号化されたリソースの使用をご覧ください。

known_hosts ファイルの作成または更新

github.comrsa 鍵を含む known_hosts ファイルを提供する必要があります。

known_hosts ファイルを作成するには、次のコマンドを実行します。

ssh-keyscan -t rsa github.com > known_hosts

ビルドの準備

ビルドを準備するには、次のものを含む新しいディレクトリを環境内に作成します。

  • id_rsa.enc ファイル
  • known_hosts ファイル
  • ビルド リクエスト YAML ファイル

次のビルドでは、SSH 認証鍵を暗号化し、SSH 認証鍵を使用するように git を構成し、git@github.com:[GIT-USERNAME]/[REPOSITORY] でリポジトリのクローンを作成します。

リポジトリのプレースホルダ値を変更した後、このビルドの例を cloudbuild.yaml として保存します。

cloudbuild.yaml

# Decrypt the file containing the key
steps:
- name: 'gcr.io/cloud-builders/gcloud'
  args:
  - kms
  - decrypt
  - --ciphertext-file=id_rsa.enc
  - --plaintext-file=/root/.ssh/id_rsa
  - --location=global
  - --keyring=my-keyring
  - --key=github-key
  volumes:
  - name: 'ssh'
    path: /root/.ssh

# Set up git with key and domain.
- name: 'gcr.io/cloud-builders/git'
  entrypoint: 'bash'
  args:
  - '-c'
  - |
    chmod 600 /root/.ssh/id_rsa
    cat <<EOF >/root/.ssh/config
    Hostname github.com
    IdentityFile /root/.ssh/id_rsa
    EOF
    mv known_hosts /root/.ssh/known_hosts
  volumes:
  - name: 'ssh'
    path: /root/.ssh

# Use git clone.
- name: 'gcr.io/cloud-builders/git'
  args:
  - clone
  - git@github.com:[GIT-USERNAME]/[REPOSITORY]
  volumes:
  - name: 'ssh'
    path: /root/.ssh

ビルドの送信

ビルドを送信するには、id_rsa.enc ファイル、known_hosts ファイル、cloudbuild.yaml ファイルを含むディレクトリから次のコマンドを実行します。

gcloud builds submit --config=cloudbuild.yaml .

出力は次のようになります。

Creating temporary tarball archive of 3 file(s) totalling 4.1 KiB before compression.
Uploading tarball of [.] to [gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz]
Created [https://cloudbuild.googleapis.com/v1/projects/[PROJECT-ID]/builds/871b68bc---].
Logs are available at [https://console.cloud.google.com/gcr/builds/871b68bc---?project=[PROJECT-ID]].
----------------------------- REMOTE BUILD OUTPUT ------------------------------
starting build "871b68bc-cefc-4411-856c-2a2b7c7d2487"

FETCHSOURCE
Fetching storage object: gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz#1504288640827178
Copying gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz#1504288640827178...
/ [1 files][  3.9 KiB/  3.9 KiB]
Operation completed over 1 objects/3.9 KiB.
BUILD
Step #0: Already have image (with digest): gcr.io/cloud-builders/gcloud
Starting Step #0
Finished Step #0
Step #1: Already have image (with digest): gcr.io/cloud-builders/git
Starting Step #1
Step #1: # github.com SSH-2.0-libssh_0.7.0
Finished Step #1
Step #2: Already have image (with digest): gcr.io/cloud-builders/git
Starting Step #2
Step #2: Cloning into '[REPOSITORY-NAME]'...
Step #2: Warning: Permanently added the RSA host key for IP address 'XXX.XXX.XXX.XXX' to the list of known hosts.
Finished Step #2
PUSH
DONE
-----------------------------------------------------------------------------------------------------------------

ID                                    CREATE_TIME                DURATION  SOURCE                                                                              IMAGES  STATUS
871b68bc-cefc-4411-856c-2a2b7c7d2487  XXXX-XX-XXT17:57:21+00:00  13S       gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz  -                                 SUCCESS

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud Platform アカウントに課金されないようにする手順は次のとおりです。

プロジェクトの削除

課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

プロジェクトを削除するには:

  1. GCP Console で [プロジェクト] ページに移動します。

    プロジェクト ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ

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

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

Cloud Build のドキュメント