Help us understand the problem. What is going on with this article?

[JAWS-UG CLI] IAM #43 IAMユーザの作成 (CodeCommitへのSSHアクセス用)

More than 3 years have passed since last update.

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. 準備

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}

1. 事前作業

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. ユーザの作成

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. グループへのユーザ追加

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

4. 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

5. 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

6. 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.

完了

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした