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

[JAWS-UG CLI] IAM:#6 CloudTrail構築用グループとユーザを作成する

More than 5 years have passed since last update.

http://jawsug-cli.doorkeeper.jp/events/18569 でのハンズオン資料です。

AWS CLIを利用して、CloudTrailの初期構築に必要なIAMグループとIAMユーザを作成してみます。

前提条件

IAMへの権限

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

AWS CLIのバージョン

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

  • AWS CLI 1.7.0

0. 事前準備

0.1. IAMグループの決定

コマンド
IAM_GROUP_NAME="cloudtrail-builder"

IAMグループの重複確認

同じ名前のIAMグループが存在しないことを確認します。

コマンド
aws iam get-group --group-name ${IAM_GROUP_NAME} --query 'Group'
結果
A client error (NoSuchEntity) occurred when calling the GetGroup operation: The group with name cloudtrail-builder cannot be found.

0.2. IAMユーザの決定

コマンド
IAM_USER_NAME='cloudtrail-builder'

IAMユーザの重複確認

同じ名前のIAMユーザが存在しないことを確認します。

コマンド
aws iam get-user --user-name ${IAM_USER_NAME}
結果
A client error (NoSuchEntity) occurred when calling the GetUser operation: The user with name cloudtrail-builder cannot be found.

1. グループの作成

1.1. IAMグループの作成

IAMグループを作成します。

コマンド
aws iam create-group --group-name ${IAM_GROUP_NAME}
結果
{
    "Group": {
        "Path": "/", 
        "CreateDate": "2015-01-17T11:33:25.902Z", 
        "GroupId": "AGPAXXXXXXXXXXXXXXXXX", 
        "Arn": "arn:aws:iam::XXXXXXXXXXXX:group/cloudtrail-builder", 
        "GroupName": "cloudtrail-builder"
    }
}

1.2. IAMグループの確認

コマンド
aws iam get-group --group-name ${IAM_GROUP_NAME}
結果
{
    "Group": {
        "Path": "/", 
        "CreateDate": "2015-01-19T06:36:27Z", 
        "GroupId": "AGPAXXXXXXXXXXXXXXXXX", 
        "Arn": "arn:aws:iam::XXXXXXXXXXXX:group/cloudtrail-builder", 
        "GroupName": "cloudtrail-builder"
    }, 
    "Users": []
}

2. グループポリシーの適用

2.1. IAMグループポリシーの作成

コマンド
FILE_IAM_POLICY='cloudtrail-builder.json'
S3_BUCKET_PREFIX='trail-'

ポリシーファイルを作成します。

コマンド
cat << EOF > ${FILE_IAM_POLICY}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sns:AddPermission",
        "sns:CreateTopic",
        "sns:GetTopicAttributes",
        "sns:ListTopics",
        "sns:ListSubscriptionsByTopic",
        "sns:Subscribe",
        "sns:SetTopicAttributes"
      ],
      "Resource": "arn:aws:sns:*:*:*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:CreateBucket",
        "s3:GetBucketAcl",
        "s3:GetBucketLocation",
        "s3:GetBucketNotification",
        "s3:GetBucketPolicy",
        "s3:GetObject",
        "s3:ListAllMyBuckets",
        "s3:ListBucket",
        "s3:PutBucketPolicy"
      ],
      "Resource": "arn:aws:s3:::${S3_BUCKET_PREFIX}*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "cloudtrail:CreateTrail",
        "cloudtrail:DescribeTrails",
        "cloudtrail:GetTrailStatus",
        "cloudtrail:StartLogging",
        "cloudtrail:UpdateTrail"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:GetUser"
      ],
      "Resource": "arn:aws:iam::*"
    }
  ]
}
EOF

JSONファイルを作成したら、フォーマットが壊れてないか必ず確認します。

コマンド
$ cat ${FILE_IAM_POLICY} | json_verify
結果
JSON is valid

json_verifyでエラーが出たときはjsonlintでチェックします。

コマンド
$ cat ${FILE_IAM_POLICY} | jsonlint

2.2. IAMグループポリシーの適用

グループポリシーをIAMグループに適用します。

コマンド
aws iam put-group-policy --group-name ${IAM_GROUP_NAME} --policy-name "${IAM_GROUP_NAME}" --policy-document file://${FILE_IAM_POLICY}
結果
(戻り値なし)

2.3. IAMグループポリシーの確認

IAMグループのグループポリシーを確認します。

コマンド
aws iam get-group-policy --group-name ${IAM_GROUP_NAME} --policy-name "${IAM_GROUP_NAME}" 
結果
{
    "GroupName": "cloudtrail-builder", 
    "PolicyDocument": {
        "Version": "2012-10-17", 
        "Statement": [
            {
                "Action": [
                    "sns:AddPermission", 
                    "sns:CreateTopic", 
                    "sns:GetTopicAttributes", 
                    "sns:ListTopics", 
                    "sns:ListSubscriptionsByTopic", 
                    "sns:Subscribe", 
                    "sns:SetTopicAttributes"
                ], 
                "Resource": "arn:aws:sns:*:*:*", 
                "Effect": "Allow"
            }, 
            {
                "Action": [
                    "s3:CreateBucket", 
                    "s3:GetBucketAcl", 
                    "s3:GetBucketLocation", 
                    "s3:GetBucketNotification", 
                    "s3:GetBucketPolicy", 
                    "s3:GetObject", 
                    "s3:ListAllMyBuckets", 
                    "s3:ListBucket", 
                    "s3:PutBucketPolicy"
                ], 
                "Resource": "arn:aws:s3:::trail-*", 
                "Effect": "Allow"
            }, 
            {
                "Action": [
                    "cloudtrail:CreateTrail", 
                    "cloudtrail:DescribeTrails", 
                    "cloudtrail:GetTrailStatus", 
                    "cloudtrail:StartLogging", 
                    "cloudtrail:UpdateTrail"
                ], 
                "Resource": "*", 
                "Effect": "Allow"
            }, 
            {
                "Action": [
                    "iam:GetUser"
                ], 
                "Resource": "arn:aws:iam::*", 
                "Effect": "Allow"
            }
        ]
    }, 
    "PolicyName": "cloudtrail-builder"
}

3. ユーザの作成

3.1. 作成

IAMユーザを作成します。

コマンド
aws iam create-user --user-name ${IAM_USER_NAME}
結果
{
    "User": {
        "UserName": "cloudtrail-builder", 
        "Path": "/", 
        "CreateDate": "2015-01-18T02:03:54.449Z", 
        "UserId": "AIDAIxxxxxxxxxxxxxxxx", 
        "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/cloudtrail-builder"
    }
}

3.2. IAMユーザの確認

作成したIAMユーザが存在することを確認します。

コマンド
aws iam get-user --user-name ${IAM_USER_NAME}
結果
{
    "User": {
        "UserName": "cloudtrail-builder", 
        "Path": "/", 
        "CreateDate": "2015-01-18T02:03:01Z", 
        "UserId": "AIDAxxxxxxxxxxxxxxxxxx", 
        "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/cloudtrail-builder"
    }
}

4. グループへのユーザ追加

4.1. 追加

IAMユーザに権限を付与するために、IAMグループに追加します。

コマンド
aws iam add-user-to-group \
  --group-name ${IAM_GROUP_NAME} \
  --user-name ${IAM_USER_NAME}
結果
(戻り値なし)

4.2. ユーザのグループ所属確認

IAMユーザが、IAMグループに所属していることを確認します。

コマンド
aws iam list-groups-for-user --user-name ${IAM_USER_NAME} |\
  jq -r --arg group_name ${IAM_GROUP_NAME} '.Groups[] | select( .GroupName == $group_name )'
結果
{
  "Path": "/", 
  "CreateDate": "2015-01-18T02:03:09Z", 
  "GroupId": "AGPAxxxxxxxxxxxxxxxxx", 
  "Arn": "arn:aws:iam::XXXXXXXXXXXX:group/operators", 
  "GroupName": "operators"
}

4.3. グループへのユーザ所属確認

IAMグループにIAMユーザが所属していることを確認します。

コマンド
aws iam get-group --group-name ${IAM_GROUP_NAME} |\
  jq -r --arg user_name ${IAM_USER_NAME} '.Users[] | select( .UserName == $user_name )'
結果
{
  "UserName": "cloudtrail-builder", 
  "Path": "/", 
  "CreateDate": "2015-01-18T02:03:07Z", 
  "UserId": "AIDAxxxxxxxxxxxxxxxxx", 
  "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/cloudtrail-builder"
}

5. ユーザのAPIアクセス設定

5.1. access keyの作成と取得

コマンド
aws iam create-access-key --user-name ${IAM_USER_NAME} > ${IAM_USER_NAME}.json \
  && cat ${IAM_USER_NAME}.json
結果
{
    "AccessKey": {
        "UserName": "cloudtrail-builder", 
        "Status": "Active", 
        "CreateDate": "2015-01-18T03:57:05.919Z", 
        "SecretAccessKey": "XXxxxxxXXXxXXXXxXXxXxXXXXXxxxXxXxXXXXXXX", 
        "AccessKeyId": "AKIAxxxxxxxxxxxxxxxx"
    }
}

5.2. 認証情報の作成

rcファイル

コマンド
cat ${IAM_USER_NAME}.json |\
  jq '.AccessKey | {AccessKeyId, SecretAccessKey}' |\
  sed '/[{}]/d' | sed 's/[\" ,]//g' | sed 's/:/=/' |\
  sed 's/AccessKeyId/aws_access_key_id/' |\
  sed 's/SecretAccessKey/aws_secret_access_key/' \
  > ${IAM_USER_NAME}.rc \
  && cat ${IAM_USER_NAME}.rc
結果
aws_access_key_id=AKIAxxxxxxxxxxxxxxxx
aws_secret_access_key=XXxxxxxXXXxXXXXxXXxXxXXXXXxxxXxXxXXXXXXX

credentialsファイル

コマンド
echo "" >> ~/.aws/credentials
echo "[${IAM_USER_NAME}]" >> ~/.aws/credentials
cat ${IAM_USER_NAME}.rc >> ~/.aws/credentials

configファイル

コマンド
cat << EOF >> ~/.aws/config

[profile ${IAM_USER_NAME}]
region = us-west-2
EOF

6. ユーザの切り替え

コマンド
export AWS_DEFAULT_PROFILE=${IAM_USER_NAME}
コマンド
aws cloudtrail describe-trails 
結果
{
    "trailList": []
}

完了

次にCloudTrailのログ保存用S3バケットを作成します。
http://qiita.com/tcsh/items/0ecbb828d3476449891c

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