AWS CLIを利用して、CodeCommitへのSSHアクセス用のIAMユーザを作成してみます。
前提条件
IAMへの権限
- IAMに対してフル権限があること。
IAMに対してフル権限があること。
AWS CLIのバージョン
以下のバージョンで動作確認済
- AWS CLI 1.11.2
コマンド
aws --version
結果(例)
aws-cli/1.11.2 Python/2.7.11 Darwin/15.6.0 botocore/1.4.60
バージョンが古い場合は最新版に更新しましょう。
コマンド
sudo -H pip install -U awscli
- 準備
=======
0.1. 変数の確認
プロファイルが想定のものになっていることを確認します。
コマンド
aws configure list
結果(例)
Name Value Type Location
---- ----- ---- --------
profile iamFull-prjZ-mbp13 env AWS_DEFAULT_PROFILE
access_key ****************XXXX shared-credentials-file
secret_key ****************XXXX shared-credentials-file
region us-east-1 env AWS_DEFAULT_REGION
AssumeRoleを利用している場合はprofileが ''と表示されます。 それ以外のときにprofileが '' と表示される場合は、以下を実行してください。
変数の設定
export AWS_DEFAULT_PROFILE=<IAMユーザ名>
0.2. IAMグループの決定
コマンド
aws iam list-groups \
--query 'Groups[].GroupName'
変数の設定
IAM_GROUP_NAME="AWSCodeCommitPowerUser"
0.3. IAMグループポリシーの確認
IAMグループのグループポリシーを確認します。
コマンド
aws iam list-attached-group-policies \
--group-name ${IAM_GROUP_NAME}
結果(例)
{
"AttachedPolicies": [
{
"PolicyName": "AWSCodeCommitPowerUser",
"PolicyArn": "arn:aws:iam::aws:policy/AWSCodeCommitPowerUser"
}
]
}
0.4. SSH鍵の作成 (存在しない場合)
コマンド
ls ~/.ssh/
結果
(戻り値なし)
鍵(id_rsa, id_rsa.pubなど)が表示された場合は、以下の作業は不要です。
コマンド
ssh-keygen -t rsa -b 2048
パスフレーズの設定は任意です。
0.5. SSH鍵の指定
使用するSSH秘密鍵を指定します。
コマンド(例)
FILE_SSH_KEY='id_rsa'
使用するSSH公開鍵を指定します。
コマンド
FILE_SSH_PUBLICKEY="${FILE_SSH_KEY}.pub" \
&& echo ${FILE_SSH_PUBLICKEY}
- 事前作業
===========
IAMユーザ名の決定
今回のハンズオンでは、IAMユーザ名は作業マシンのローカルユーザと同じ名前のIAMユーザを作成します。
コマンド
IAM_USER_NAME=${USER} \
&& echo ${IAM_USER_NAME}
同じ名前のIAMユーザが存在しないことを確認します。
コマンド
aws iam get-user \
--user-name ${IAM_USER_NAME}
結果(例)
A client error (NoSuchEntity) occurred when calling the GetUser operation: The user with name taro cannot be found.
- ユーザの作成
===============
2.1. 作成
IAMユーザを作成します。
変数の確認
cat << ETX
IAM_USER_NAME: ${IAM_USER_NAME}
ETX
コマンド
aws iam create-user \
--user-name ${IAM_USER_NAME}
結果(例)
{
"User": {
"UserName": "taro",
"Path": "/",
"CreateDate": "2016-10-10T12:34:56.012Z",
"UserId": "AIDAXXXXXXXXXXXXXXXXX",
"Arn": "arn:aws:iam::XXXXXXXXXXXX:user/taro"
}
}
2.2. IAMユーザの確認
作成したIAMユーザが存在することを確認します。
コマンド
aws iam get-user \
--user-name ${IAM_USER_NAME}
結果(例)
{
"User": {
"UserName": "taro",
"Path": "/",
"CreateDate": "2016-10-10T01:23:45Z",
"UserId": "AIDAXXXXXXXXXXXXXXXXX",
"Arn": "arn:aws:iam::XXXXXXXXXXXX:user/taro"
}
}
- グループへのユーザ追加
=========================
3.1. 追加
IAMユーザに権限を付与するために、IAMグループに追加します。
変数の確認
cat << ETX
IAM_GROUP_NAME: ${IAM_GROUP_NAME}
IAM_USER_NAME: ${IAM_USER_NAME}
ETX
コマンド
aws iam add-user-to-group \
--group-name ${IAM_GROUP_NAME} \
--user-name ${IAM_USER_NAME}
結果
(戻り値なし)
3.2. ユーザのグループ所属確認
IAMユーザが、IAMグループに所属していることを確認します。
コマンド
aws iam list-groups-for-user \
--user-name ${IAM_USER_NAME} \
--query 'Groups[].GroupName'
結果(例)
{
"GroupName": "AWSCodeCommitPowerUser"
}
3.3. グループへのユーザ所属確認
IAMグループにIAMユーザが所属していることを確認します。
コマンド
aws iam get-group \
--group-name ${IAM_GROUP_NAME} \
--query "Users[?UserName==\`${IAM_USER_NAME}\`]"
結果(例)
{
"UserName": "taro",
"Path": "/",
"CreateDate": "2016-10-10T01:23:45Z",
"UserId": "AIDAxxxxxxxxxxxxxxxxx",
"Arn": "arn:aws:iam::XXXXXXXXXXXX:user/taro"
}
- SSH公開鍵の登録
==================
4.1. SSH公開鍵の登録
変数の確認
cat << ETX
IAM_USER_NAME: ${IAM_USER_NAME}
FILE_SSH_PUBLICKEY: ${FILE_SSH_PUBLICKEY}
ETX
コマンド
pushd ${HOME}/.ssh/
コマンド
aws iam upload-ssh-public-key \
--user-name ${IAM_USER_NAME} \
--ssh-public-key-body file://${FILE_SSH_PUBLICKEY}
結果(例)
{
"SSHPublicKey": {
"UserName": "lab-office",
"Status": "Active",
"SSHPublicKeyBody": "ssh-rsa AAAABxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx taro@hostname.localn",
"UploadDate": "2016-10-10T01:23:45.678Z",
"Fingerprint": "xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx",
"SSHPublicKeyId": "APKAXXXXXXXXXXXXXXXX"
}
}
コマンド
popd
4.2. SSH公開鍵IDの取得
コマンド
IAM_SSH_PUBLIC_KEY_ID=$( \
aws iam list-ssh-public-keys \
--user-name $IAM_USER_NAME \
--query "SSHPublicKeys[?UserName == \`${IAM_USER_NAME}\`].SSHPublicKeyId" \
--output text \
) \
&& echo ${IAM_SSH_PUBLIC_KEY_ID}
結果(例)
APKAXXXXXXXXXXXXXXXX
- sshの設定
============
変数の確認
cat << ETX
IAM_SSH_PUBLIC_KEY_ID: ${IAM_SSH_PUBLIC_KEY_ID}
FILE_SSH_KEY: ${FILE_SSH_KEY}
ETX
コマンド
cat << EOF >> ~/.ssh/config
Host git-codecommit.*.amazonaws.com
User ${IAM_SSH_PUBLIC_KEY_ID}
IdentityFile ~/.ssh/${FILE_SSH_KEY}
EOF
cat ~/.ssh/config
コマンド
chmod 600 ~/.ssh/config
- CodeCommitへのアクセス確認
=============================
コマンド
ssh git-codecommit.us-east-1.amazonaws.com
結果(例)
The authenticity of host 'git-codecommit.us-east-1.amazonaws.com (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)?
入力
yes
結果(例)
You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit. Interactive shells are not supported.Connection to git-codecommit.us-east-1.amazonaws.com closed by remote host.
Connection to git-codecommit.us-east-1.amazonaws.com closed.