http://jawsug-cli.doorkeeper.jp/events/18569 でのハンズオン資料です。
AWS CLIを利用して、CloudTrailの初期構築に必要なIAMグループとIAMユーザを作成してみます。
前提条件
IAMへの権限
- IAMに対してフル権限があること。
AWS CLIのバージョン
以下のバージョンで動作確認済
- AWS CLI 1.7.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. 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.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.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.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"
}
- ユーザの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
- ユーザの切り替え
==========================
export AWS_DEFAULT_PROFILE=${IAM_USER_NAME}
aws cloudtrail describe-trails
{
"trailList": []
}
完了
次にCloudTrailのログ保存用S3バケットを作成します。
http://qiita.com/tcsh/items/0ecbb828d3476449891c