自分メモ用。
概要
CloudBuildのビルドコンテナからEC2にアクセスする方法。
前提として、EC2にはIP制限&SSHキーで接続する。
手順
- CloudBuildのビルドコンテナをVPC内で立ち上げる
- SSMパラメータストアにSSHキー登録する
- ビルド時にSSHキーを読み込んで接続
1. CloudBuildのビルドコンテナをVPC内で立ち上げる
基本的に上の手順の通り。
CodeBuildのロールにVPCのポリシーをアタッチする必要がある。
2. SSMパラメータストアにSSHキー登録する
SSM(Systems Manager)パラメータストアにSSHキー登録。
id_rsa.pub(公開鍵)、id_rsa(秘密鍵)の二つをKMSを利用して登録する。
IAMでCodeBuildのロールにAmazonSSMReadOnlyAccessのポリシーをアタッチする必要あり。
3. ビルド時にキーを読み込んでEC2に接続
詳しい手順は以下を参考に。
buildspec.ymlを作成
buildspec.yml
version: 0.2
env:
parameter-store:
ssh_key: id_rsa
ssh_pub: id_rsa.pub
phases:
build:
commands:
- echo "$ssh_key" > ~/.ssh/id_rsa
- echo "$ssh_pub" > ~/.ssh/id_rsa.pub
- chmod 0700 ~/.ssh
- chmod 0600 ~/.ssh/id_rsa
- ssh USER_NAME@TARGET -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -t -t
USER_NAMEはEC2のデフォルトだとec2-user
。
TARGETはサブネット間の通信なのでEC2のプライベートIPアドレス
を指定する。
(補足)セッションマネージャ使ってCodeBuildのビルドコンテナに接続する
ビルドコンテナの中身に入れると調査に便利。
最後に
もっと他にいい方法あるよとかあれば教えてください