EC2インスタンス作成時に、githubのプライベートリポジトリからcloneしておく、というのをやりたく、
無事にできたので手順をメモ。
やりたいこと
- EC2インスタンス作成時に特定のgitリポジトリをcloneしたい
- EC2のユーザデータにgit clone を記載しておく
- gitのtoken はパラメータストアで管理する
ざっくり構成図
ParameterStoreの設定
- 名前は
/git/token
としました - 機密データなので種類は SecureString (安全な文字列)としています
- 作成時のKMSはデフォルトを使用しました
IAMの設定
EC2インスタンスが、パラメータストアから値を取得できるよう、IAMの設定を行います。
パラメータストアから getParameters できるポリシーを作成し、ロールに付与します。
そのロールをEC2インスタンスに設定します。
IAMポリシーの作成
Demo_SSM_GetParametes
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ssm:GetParameters",
"ssm:GetParameter"
],
"Resource": "arn:aws:ssm:ap-northeast-1:************:parameter/git/token"
}
]
}
IAMロールの作成
- 名前は
Demo_SSM_getParameters_Role
としました - サービス/ユースケースは
EC2
を指定 - 許可ポリシーは先ほど作成した
Demo_SSM_GetParametes
を指定
EC2インスタンスから取得できることの確認
IAMロールの設定
- 動作確認のため予め起動してあった適当なEC2インスタンスにIAMロール付与します
CLIで取得
IAMロールを付与したEC2インスタンスにSSH接続し、以下のコマンドを実行。
[ec2-user@ip-172-31-43-85 conf]$ aws ssm get-parameters --region ap-northeast-1 --names /git/token --with-decryption --query "Parameters[0].Value" --output text
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[ec2-user@ip-172-31-43-85 conf]$
-
XXXX・・・
と伏字にしていますが無事に取得できました。 -
--with-decryption
: 複合化して取得するようにしています。今回はKMSの設定をデフォルトのままとしているのであまり意識しませんでしたが、自前のキーを使うことで許可設定も増えるかもしれません。
EC2起動テンプレートの作成
IAMロールの設定
-
Demo_SSM_getParameters_Role
を設定
ユーザデータの作成
ユーザーデータ
#!/bin/bash
yum update
yum install -y git
git clone https://XXXXXXXXXX:`aws ssm get-parameters --region ap-northeast-1 --names /git/token --with-decryption --query "Parameters[0].Value" --output text`@github.com/XXXXXXXXXXXXXXXXX.git /home/ec2-user/XXXXX
- 細かいですが、1秒めの
#!/bin/bash
書き忘れててなかなかうまく動きませんでした。 - これで無事に、EC2インスタンス作成時に、パラメータストアからtokenを取得してgit cloneする、ということが実現できました。