LoginSignup
8
9

More than 5 years have passed since last update.

[JAWS-UG CLI] IAM:#23 IAMインスタンスプロファイルの作成 (ECSコンテナインスタンス)

Posted at

AWS CLIを利用して、ECSインスタンス用のIAMインスタンスプロファイルの作成をしてみます。

前提条件

IAMへの権限

IAMに対してフル権限があること。

AWS CLIのバージョン

以下のバージョンで動作確認済

  • AWS CLI 1.7.36
コマンド
aws --version
結果(例)
aws-cli/1.7.36 Python/2.7.5 Darwin/13.4.0

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           ap-northeast-1              env    AWS_DEFAULT_REGION

0.2. IAMロールの確認

変数の設定
IAM_ROLE_NAME="ecsInstanceRole"

IAMロールの確認

コマンド
aws iam get-role \
         --role-name ${IAM_ROLE_NAME}
結果(例)
      {
        "Role": {
          "AssumeRolePolicyDocument": {
              "Version": "2008-10-17",
              "Statement": [
                  {
                      "Action": "sts:AssumeRole",
                      "Principal": {
                          "Service": "ec2.amazonaws.com"
                      },
                      "Effect": "Allow",
                      "Sid": ""
                  }
              ]
          },
          "RoleId": "AROAJXV2BZSUC7HOEJV2Q",
          "CreateDate": "2015-07-05T05:12:53Z",
          "RoleName": "ecsInstanceRole",
          "Path": "/",
          "Arn": "arn:aws:iam::XXXXXXXXXXXX:role/ecsInstanceRole"
        }
      }

ロールポリシの確認

コマンド
aws iam list-attached-role-policies \
        --role-name ${IAM_ROLE_NAME}
結果(例)
      {
        "AttachedPolicies": [
          {
              "PolicyName": "AmazonEC2ContainerServiceforEC2Role",
              "PolicyArn": "arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role"
          }
        ],
        "IsTruncated": false
      }

1. 事前作業

IAMインスタンスプロファイル名の決定

IAMインスタンスプロファイル名には、適用するIAMロールの名前を利用します。

変数の設定
IAM_INSTANCE_PROFILE_NAME=${IAM_ROLE_NAME} \
        && echo ${IAM_INSTANCE_PROFILE_NAME}

同名のIAMインスタンスプロファイルが存在しないことを確認します。

コマンド
aws iam get-instance-profile \
        --instance-profile-name ${IAM_INSTANCE_PROFILE_NAME}
結果(例)
      A client error (NoSuchEntity) occurred when calling the GetInstanceProfile operation: Instance Profile ecsInstanceRole cannot be found.

2. IAMインスタンスプロファイルの作成

2.1. IAMインスタンスプロファイルの作成

変数の確認
cat << ETX

        IAM_INSTANCE_PROFILE_NAME: ${IAM_INSTANCE_PROFILE_NAME}

ETX
コマンド
aws iam create-instance-profile \
        --instance-profile-name ${IAM_INSTANCE_PROFILE_NAME}
結果(例)
      {
        "InstanceProfile": {
          "InstanceProfileId": "AIPAxxxxxxxxxxxxxxxxx",
          "Roles": [],
          "CreateDate": "2015-07-05T01:23:45.678",
          "InstanceProfileName": "ecsInstanceRole",
          "Path": "/",
          "Arn": "arn:aws:iam::XXXXXXXXXXXX:instance-profile/ecsInstanceRole"
        }
      }
コマンド
aws iam get-instance-profile \
        --instance-profile-name ${IAM_INSTANCE_PROFILE_NAME}
結果(例)
      {
        "InstanceProfile": {
          "InstanceProfileId": "AIPAXXXXXXXXXXXX",
          "Roles": [],
          "CreateDate": "2015-07-05T01:23:45.678",
          "InstanceProfileName": "ecsInstanceRole",
          "Path": "/",
          "Arn": "arn:aws:iam::XXXXXXXXXXXX:instance-profile/ecsInstanceRole"
        }
      }

2.2. IAMインスタンスプロファイルへのロールの追加

コマンド
ARRAY_IAM_ROLES=$( \
        aws iam get-instance-profile \
          --instance-profile-name ${IAM_INSTANCE_PROFILE_NAME} \
          --query 'InstanceProfile.Roles[].RoleName' \
          --output text
) \
        && echo ${ARRAY_IAM_ROLES}
結果
      (戻り値なし)
コマンド
aws iam add-role-to-instance-profile \
        --instance-profile-name ${IAM_INSTANCE_PROFILE_NAME} \
        --role-name ${IAM_ROLE_NAME}
結果
      (戻り値なし)
コマンド
ARRAY_IAM_ROLES=$( \
        aws iam get-instance-profile \
          --instance-profile-name ${IAM_INSTANCE_PROFILE_NAME} \
          --query 'InstanceProfile.Roles[].RoleName' \
          --output text
) \
        && echo ${ARRAY_IAM_ROLES}
結果(例)
      ecsInstanceRole

3. 事後作業

IAMインスタンスプロファイルの確認

コマンド
aws iam get-instance-profile \
        --instance-profile-name ${IAM_INSTANCE_PROFILE_NAME}
結果(例)
      {
        "InstanceProfiles": [
          {
              "InstanceProfileId": "AIPAXXXXXXXXXXXXXXXXX",
              "Roles": [
                  {
                      "AssumeRolePolicyDocument": {
                          "Version": "2008-10-17",
                          "Statement": [
                              {
                                  "Action": "sts:AssumeRole",
                                  "Principal": {
                                      "Service": "ec2.amazonaws.com"
                                  },
                                  "Effect": "Allow",
                                  "Sid": ""
                              }
                          ]
                      },
                      "RoleId": "AROAXXXXXXXXXXXXXXXXX",
                      "CreateDate": "2015-07-05T01:23:45Z",
                      "RoleName": "ecsInstanceRole",
                      "Path": "/",
                      "Arn": "arn:aws:iam::XXXXXXXXXXXX:role/ecsInstanceRole"
                  }
              ],
              "CreateDate": "2015-07-05T00:41:39Z",
              "InstanceProfileName": "ecsInstanceRole",
              "Path": "/",
              "Arn": "arn:aws:iam::XXXXXXXXXXXX:instance-profile/ecsInstanceRole"
          }
        ]
      }

完了

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9