http://jawsug-cli.doorkeeper.jp/events/13796 でのハンズオン資料です。
このハンズオンでは、AWSの管理者として、IAMグループとIAMユーザを作成するために、下記の作業を行います。
- IAMグループの作成
- グループポリシーの作成
- IAMユーザの作成
- IAMユーザの初期パスワード設定
- IAMユーザのIAMグループへの追加
前提条件
- IAMへのフルアクセス権限
- IAMグループの作成
===================
まず最初に、IAMグループを作成します。
IAMでは、管理を楽にするために、まずグループ設計を行い、個別のユーザを各グループに所属させるようにしましょう。
1.1. IAMグループの作成
例として、'operators'グループを作成します。
IAM_GROUP_NAME=operators
aws iam create-group \
--group-name ${IAM_GROUP_NAME}
{
"Group": {
"Path": "/",
"CreateDate": "2014-09-07T08:52:09.308Z",
"GroupId": "AGPAI5KIHK7xxxxxxxxxx",
"Arn": "arn:aws:iam::XXXXXXXXXXXX:group/operators",
"GroupName": "operators"
}
}
1.2. IAMグループの一覧
operatorsグループが存在することを確認します。
aws iam list-groups
{
"Groups": [
{
"Path": "/",
"CreateDate": "2014-09-07T08:52:09Z",
"GroupId": "AGPAI5KIHK7xxxxxxxxxx",
"Arn": "arn:aws:iam::XXXXXXXXXXXX:group/operators",
"GroupName": "operators"
},
{
"Path": "/",
"CreateDate": "2014-09-07T03:37:40Z",
"GroupId": "AGPAJYZGCT6xxxxxxxxxx",
"Arn": "arn:aws:iam::XXXXXXXXXXXX:group/admin",
"GroupName": "admin"
}
]
}
1.3. IAMグループの詳細確認
get系コマンドでは、その対象の詳細情報を確認することができます。
aws iam get-group \
--group-name ${IAM_GROUP_NAME}
{
"Group": {
"Path": "/",
"CreateDate": "2014-09-07T08:52:09Z",
"GroupId": "AGPAI5KIHK7xxxxxxxxxx",
"Arn": "arn:aws:iam::XXXXXXXXXXXX:group/operators",
"GroupName": "operators"
},
"Users": []
}
- グループポリシーの作成
=========================
IAMグループを作成したら、グループ設計に従い、IAMグループのポリシーを設定します。
ここでは、S3へのフルアクセス権限をoperatorsグループに対して付与します。
2.1. グループポリシーが未適応(初期状態)であることを確認
IAMグループは、作成直後はグループポリシーが空になっています。
(何の権限も持ちません。)
aws iam list-group-policies \
--group-name ${IAM_GROUP_NAME}
{
"PolicyNames": []
}
2.2. グループポリシーの作成
グループポリシーは、IAMポリシードキュメントの仕様に従って、JSON形式で記述します。
グループポリシーの設定は、適用対象となるIAMグループとJSONファイルを指定して行います。
IAM_GP_NAME='s3-full'
IAM_GP_FILE=group-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
[注意] ブラケット({}や[])のインデント位置が開きと閉じで同じでない場合、下記のエラーが出るようです。
A client error (MalformedPolicyDocument) occurred when calling the PutGroupPolicy operation: The policy is not in the valid JSON format.
JSONファイルを作成したら、フォーマットが壊れてないか必ず確認します。
cat ${IAM_GP_FILE} | json_verify
JSON is valid
aws iam put-group-policy \
--group-name ${IAM_GROUP_NAME} \
--policy-name "${IAM_GP_NAME}" \
--policy-document file://${IAM_GP_FILE}
(戻り値なし)
2.3. グループポリシーの一覧
operatorsグループにs3-fullポリシーが適用されたことを確認しましょう。
aws iam list-group-policies \
--group-name ${IAM_GROUP_NAME}
{
"PolicyNames": [
"s3-full"
]
}
2.4. グループポリシーの詳細確認
get系コマンドでは、その対象の詳細情報を確認することができます。
aws iam get-group-policy \
--group-name ${IAM_GROUP_NAME} \
--policy-name ${IAM_GP_NAME}
{
"GroupName": "operators",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "s3:*",
"Resource": "*",
"Effect": "Allow"
}
]
},
"PolicyName": "s3-full"
}
ここまでで、IAMグループの作成と設定は完了です。
- IAMユーザの作成
==================
次に、Operatorsグループに所属するメンバーのIAMユーザを作成します。
今回は、'taro'さん一人だけがOperatorsグループのメンバーだとします。
3.1. IAMユーザの作成
taroさんのIAMユーザを作成します。
IAM_USER_NAME='taro'
aws iam create-user \
--user-name ${IAM_USER_NAME}
{
"User": {
"UserName": "taro",
"Path": "/",
"CreateDate": "2014-09-07T11:01:01.687Z",
"UserId": "AIDAJMUDSVOxxxxxxxxxx",
"Arn": "arn:aws:iam::XXXXXXXXXXXX:user/taro"
}
}
3.2. IAMユーザの一覧
IAMユーザの一覧にtaroユーザが存在することを確認します。
aws iam list-users
{
"Users": [
{
"UserName": "taro",
"Path": "/",
"CreateDate": "2014-09-07T11:01:01Z",
"UserId": "AIDAJMUDSVOxxxxxxxxxx",
"Arn": "arn:aws:iam::XXXXXXXXXXXX:user/taro"
}
]
}
3.3. IAMユーザの詳細確認
get系コマンドでは、その対象の詳細情報を確認することができます。
aws iam get-user \
--user-name ${IAM_USER_NAME}
{
"User": {
"UserName": "taro",
"Path": "/",
"CreateDate": "2014-09-07T11:01:01Z",
"UserId": "AIDAJMUDSVOxxxxxxxxxx",
"Arn": "arn:aws:iam::XXXXXXXXXXXX:user/taro"
}
}
- IAMユーザのパスワード設定
===========================
作成したIAMユーザがマネジメントコンソールからアクセスする場合は、IAMユーザのパスワード設定が必要です。
(AWS APIしか利用しない場合は、この作業は不要です。パスワード設定をしないことで、マネジメントコンソールからのログインを防止することができます。)
4.1. IAMユーザのパスワード設定
taroユーザのパスワードを設定します。
IAM_PASSWORD_NEW='#userPass123'
aws iam create-login-profile \
--user-name ${IAM_USER_NAME} \
--password ${IAM_PASSWORD_NEW}
{
"LoginProfile": {
"UserName": "taro",
"CreateDate": "2014-09-07T12:01:53.109Z",
"PasswordResetRequired": false
}
}
4.2. IAMユーザのパスワード設定状況確認
get系コマンドでは、その対象の詳細情報を確認することができます。
aws iam get-login-profile \
--user-name ${IAM_USER_NAME}
{
"LoginProfile": {
"UserName": "taro",
"CreateDate": "2014-09-07T12:01:53Z",
"PasswordResetRequired": false
}
}
- IAMユーザのIAMグループへの追加
===============================
IAMユーザは、初期状態でどのIAMグループにも属していません。
(何の権限も持ちません。)
IAMグループと同様に、IAMユーザにもポリシーを設定することが可能ですが、管理をシンプルにするために、ユーザポリシーは極力使わず、適切なIAMグループに所属させるようにしましょう。
ここでは、taroユーザをOperatorsグループに所属させます。
5.1. IAMユーザがどのIAMグループにも所属していないこと(初期値)を表示
まず、taroユーザがどのIAMグループにも所属していないことを確認します。
aws iam list-groups-for-user \
--user-name ${IAM_USER_NAME}
{
"Groups": []
}
5.2. IAMユーザのIAMグループへの追加
taroユーザをOperatorsグループに所属させます。
aws iam add-user-to-group \
--group-name ${IAM_GROUP_NAME} \
--user-name ${IAM_USER_NAME}
(戻り値なし)
5.3. IAMユーザの所属するIAMグループを表示
taroユーザが所属するIAMグループの一覧を表示してみましょう。
aws iam list-groups-for-user \
--user-name ${IAM_USER_NAME}
{
"Groups": [
{
"Path": "/",
"CreateDate": "2014-09-07T08:52:09Z",
"GroupId": "AGPAI5KIHK7xxxxxxxxxx",
"Arn": "arn:aws:iam::XXXXXXXXXXXX:group/operators",
"GroupName": "operators"
}
]
}
以上で、IAMユーザの作成と、IAMグループへの登録は完了です。