- AWS
IAMユーザーとグループをAWS CLIで作成|権限付与・一覧・削除
IAM の権限は「グループにポリシーを付け、ユーザーをグループに入れる」形にすると管理しやすくなります。AWS CLI では create-group → attach-group-policy → create-user → add-user-to-group の 4 つのコマンドで組み立てられます。 人が増えたり担当が変わったりしても、グループへの出し入れだけで権限をそろえられるのが利点です。
この記事では、この 4 つのコマンドを実行出力つきで通したあと、「誰がどのグループにいて、どの権限を持っているか」を確かめる一覧コマンドと --query の例、ユーザー削除で出る DeleteConflict の読み方、削除前に外すものの一覧表、一括で削除するスクリプトまでを扱います。
確認環境:Ubuntu 24.04、AWS CLI 1.46.1、Python 3.11。AWS の API をローカルで再現するツール(moto 5.2.3)で実行しました。掲載するコマンドは、ローカル向けの接続先指定を外して AWS でそのまま使える形にしています。アカウント ID は例示用の 123456789012 です。
IAM ユーザー・グループ操作の早見表
作成・確認・削除でよく使うコマンドを、やりたいことから引けるようにまとめます。
| やりたいこと | コマンド |
|---|---|
| グループを作る | aws iam create-group --group-name developers |
| グループに管理ポリシーを付ける | aws iam attach-group-policy --group-name developers --policy-arn ARN |
| グループにインラインポリシーを書く | aws iam put-group-policy --group-name developers --policy-name 名前 --policy-document file://x.json |
| ユーザーを作る | aws iam create-user --user-name taro |
| ユーザーをグループに入れる | aws iam add-user-to-group --group-name developers --user-name taro |
| ユーザーを一覧する | aws iam list-users |
| グループを一覧する | aws iam list-groups |
| ユーザーの所属グループを見る | aws iam list-groups-for-user --user-name taro |
| グループのメンバーを見る | aws iam get-group --group-name developers |
| グループの管理ポリシーを見る | aws iam list-attached-group-policies --group-name developers |
| グループのインラインポリシーを見る | aws iam list-group-policies --group-name developers |
| ポリシーが誰に付いているかを見る | aws iam list-entities-for-policy --policy-arn ARN |
| ユーザーをグループから外す | aws iam remove-user-from-group --group-name developers --user-name taro |
| グループからポリシーを外す | aws iam detach-group-policy --group-name developers --policy-arn ARN |
| ユーザーを削除する | aws iam delete-user --user-name taro(付いているものを先に外す) |
| グループを削除する | aws iam delete-group --group-name developers(メンバーとポリシーを先に外す) |
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「IAMユーザーとグループをAWS CLIで作成|権限付与・一覧・削除」
グループを作ってポリシーを付け、ユーザーを所属させる
1. グループを作成する(create-group)
aws iam create-group --group-name developers
{
"Group": {
"Path": "/",
"GroupName": "developers",
"GroupId": "uzrt15n11rob277nqtqq",
"Arn": "arn:aws:iam::123456789012:group/developers",
"CreateDate": "2026-10-05T06:43:40.289700Z"
}
}
作った時点のグループは、メンバーも権限も持たない空の入れ物です。 IAM ユーザーガイドによると、グループには次の性質があります。
| 性質 | 内容 |
|---|---|
| 入れ子 | グループの中にグループは入れられない。入れられるのはユーザーだけ |
| 所属の数 | 1 人のユーザーが複数のグループに所属できる |
| 既定のグループ | 全ユーザーが自動で入るグループは無い。必要なら自分で作って追加する |
| ポリシーの Principal | グループをリソースベースポリシーの Principal には指定できない |
2. グループにポリシーを付ける(attach-group-policy)
AWS があらかじめ用意している管理ポリシー ReadOnlyAccess を付けます。成功すると何も出力されません。
aws iam attach-group-policy \
--group-name developers \
--policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess
AWS 管理ポリシーの ARN は arn:aws:iam::aws:policy/ポリシー名 の形です。名前がうろ覚えのときは list-policies で探せます。
aws iam list-policies --scope AWS \
--query "Policies[?contains(PolicyName,'ReadOnlyAccess')].PolicyName | [0:5]"
[
"AIDevOpsAgentReadOnlyAccess",
"AIOpsReadOnlyAccess",
"AWSAccountManagementReadOnlyAccess",
"AWSAppFabricReadOnlyAccess",
"AWSAppRunnerReadOnlyAccess"
]
特定のバケットだけ読み書きさせたい、といったそのグループ専用の細かい権限は、インラインポリシーとして直接書き込めます。次の JSON を inline-s3.json として保存します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:::example-app-logs/*"
}
]
}
aws iam put-group-policy \
--group-name developers \
--policy-name app-logs-rw \
--policy-document file://inline-s3.json
| 付け方 | コマンド | 向いている場面 |
|---|---|---|
| 管理ポリシーをアタッチ | attach-group-policy |
複数のグループやロールで同じ権限を使い回す |
| インラインポリシーを書き込む | put-group-policy |
そのグループだけの権限を、グループと一緒に管理する |
IAM のクォータの説明によると、1 つのグループにアタッチできる管理ポリシーは 10 個まで、グループのインラインポリシーは合計 5,120 文字までです。
3. ユーザーを作成する(create-user)
aws iam create-user --user-name taro --tags Key=team,Value=web
{
"User": {
"Path": "/",
"UserName": "taro",
"UserId": "x1vejdd40ptbf06c4y62",
"Arn": "arn:aws:iam::123456789012:user/taro",
"CreateDate": "2026-10-05T06:43:56.007306Z",
"Tags": [
{
"Key": "team",
"Value": "web"
}
]
}
}
create-user が作るのは「名前だけのユーザー」です。 パスワードもアクセスキーも権限も、まだ何も持っていません。出力が長いときは --query で必要な項目だけにできます。
aws iam create-user --user-name hanako --query 'User.[UserName,Arn]' --output text
hanako arn:aws:iam::123456789012:user/hanako
名前の決まり(IAM のクォータの説明より)は次のとおりです。
| 対象 | 長さ | 使える文字 | 大文字・小文字 |
|---|---|---|---|
| ユーザー名 | 64 文字まで | 英数字と + = , . @ _ - |
区別されない(ADMINS と admins は同時に作れない) |
| グループ名 | 128 文字まで | 同上 | 同上 |
マネジメントコンソールにサインインさせるユーザーには、初期パスワードを設定します。--password-reset-required は、CLI のヘルプで「次回のサインイン時に新しいパスワードの設定を求めるかどうか」を指定するオプションと説明されています。
aws iam create-login-profile --user-name taro \
--password 'Init-Pass-2026!' --password-reset-required \
--query 'LoginProfile.UserName' --output text
taro
4. ユーザーをグループに入れる(add-user-to-group)
成功すると何も出力されません。
aws iam add-user-to-group --group-name developers --user-name taro
aws iam add-user-to-group --group-name developers --user-name hanako
もう 1 つ admins グループを作り、AdministratorAccess を付けて taro だけを追加しておきます。
aws iam create-group --group-name admins --query 'Group.GroupName' --output text
aws iam attach-group-policy --group-name admins \
--policy-arn arn:aws:iam::aws:policy/AdministratorAccess
aws iam add-user-to-group --group-name admins --user-name taro
admins
これで次の状態になりました。
| ユーザー | 所属グループ | グループ経由で持つ権限 |
|---|---|---|
| taro | developers、admins | ReadOnlyAccess、app-logs-rw(インライン)、AdministratorAccess |
| hanako | developers | ReadOnlyAccess、app-logs-rw(インライン) |
誰がどの権限を持つかを一覧で確かめる
確認は「ユーザーから見る」「グループから見る」「ポリシーから見る」の 3 方向でできます。
ユーザーとグループの一覧
aws iam list-users --query 'Users[].[UserName,Arn,CreateDate]' --output table
------------------------------------------------------------------------------------
| ListUsers |
+--------+-----------------------------------------+-------------------------------+
| taro | arn:aws:iam::123456789012:user/taro | 2026-10-05T06:43:56.007306Z |
| hanako| arn:aws:iam::123456789012:user/hanako | 2026-10-05T06:44:00.274226Z |
+--------+-----------------------------------------+-------------------------------+
aws iam list-groups --query 'Groups[].[GroupName,Arn]' --output table
--------------------------------------------------------------
| ListGroups |
+------------+-----------------------------------------------+
| developers| arn:aws:iam::123456789012:group/developers |
| admins | arn:aws:iam::123456789012:group/admins |
+------------+-----------------------------------------------+
ユーザーから見る:所属グループ(list-groups-for-user)
aws iam list-groups-for-user --user-name taro \
--query 'Groups[].GroupName' --output text
developers admins
全ユーザーの所属を 1 行ずつ並べるには、list-users の結果でループします。
for u in $(aws iam list-users --query 'Users[].UserName' --output text); do
echo "$u: $(aws iam list-groups-for-user --user-name $u \
--query 'Groups[].GroupName' --output text)"
done
taro: developers admins
hanako: developers
グループから見る:メンバーとポリシー(get-group ほか)
get-group は、グループの情報と一緒にメンバーのユーザー一覧を返します。
aws iam get-group --group-name developers --query 'Users[].UserName' --output text
taro hanako
グループに付いているポリシーは、管理ポリシーとインラインポリシーで別のコマンドです。
aws iam list-attached-group-policies --group-name developers
{
"AttachedPolicies": [
{
"PolicyName": "ReadOnlyAccess",
"PolicyArn": "arn:aws:iam::aws:policy/ReadOnlyAccess"
}
]
}
aws iam list-group-policies --group-name developers
{
"PolicyNames": [
"app-logs-rw"
]
}
インラインポリシーの中身は get-group-policy で読めます。
aws iam get-group-policy --group-name developers --policy-name app-logs-rw \
--query 'PolicyDocument.Statement[0].Action'
[
"s3:GetObject",
"s3:PutObject"
]
ポリシーから見る:どこに付いているか(list-entities-for-policy)
強い権限のポリシーが誰に渡っているかを調べるときは、ポリシー側から引くのが早道です。
aws iam list-entities-for-policy \
--policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess
{
"PolicyGroups": [
{
"GroupName": "developers",
"GroupId": "uzrt15n11rob277nqtqq"
}
],
"PolicyUsers": [],
"PolicyRoles": []
}
aws iam list-entities-for-policy \
--policy-arn arn:aws:iam::aws:policy/AdministratorAccess \
--query 'PolicyGroups[].GroupName' --output text
admins
アカウント内でどこかに付いている AWS 管理ポリシーだけを、付いている数と一緒に並べることもできます。
aws iam list-policies --scope AWS --only-attached \
--query 'Policies[].[PolicyName,AttachmentCount]' --output text
AdministratorAccess 1
ReadOnlyAccess 1
1 人のユーザーが持つ権限をまとめて表示するスクリプト
ユーザーの権限は、本人に直接付いたポリシーと、所属する各グループのポリシーの合計です。4 種類の一覧コマンドを順に呼ぶスクリプトにしておくと、確認が 1 回で済みます。
#!/bin/bash
# 使い方: bash who.sh ユーザー名
USER_NAME=$1
echo "== $USER_NAME に直接付いた管理ポリシー"
aws iam list-attached-user-policies --user-name "$USER_NAME" \
--query 'AttachedPolicies[].PolicyName' --output text
echo "== $USER_NAME のインラインポリシー"
aws iam list-user-policies --user-name "$USER_NAME" \
--query 'PolicyNames' --output text
for g in $(aws iam list-groups-for-user --user-name "$USER_NAME" \
--query 'Groups[].GroupName' --output text); do
echo "== グループ $g の管理ポリシー"
aws iam list-attached-group-policies --group-name "$g" \
--query 'AttachedPolicies[].PolicyName' --output text
echo "== グループ $g のインラインポリシー"
aws iam list-group-policies --group-name "$g" \
--query 'PolicyNames' --output text
done
bash who.sh taro
== taro に直接付いた管理ポリシー
== taro のインラインポリシー
== グループ developers の管理ポリシー
ReadOnlyAccess
== グループ developers のインラインポリシー
app-logs-rw
== グループ admins の管理ポリシー
AdministratorAccess
== グループ admins のインラインポリシー
taro 本人には何も付いておらず、権限はすべてグループ経由だとわかります。
| 確かめたいこと | 管理ポリシー | インラインポリシー |
|---|---|---|
| ユーザーに直接付いたもの | list-attached-user-policies |
list-user-policies |
| グループに付いたもの | list-attached-group-policies |
list-group-policies |
ユーザー削除と DeleteConflict
付いているものがあると delete-user は止まる
CLI からのユーザー削除は、ユーザーに付いているものを先に自分で外す必要があります。 IAM の API リファレンス(DeleteUser)にも「マネジメントコンソールと違い、プログラムから削除するときは、ユーザーに付いている項目を手動で削除する。そうしないと削除は通らない」という説明があります。
taro に、アクセスキー・管理ポリシー・インラインポリシーを追加した状態で試します(パスワードは設定済み、2 つのグループに所属)。
aws iam create-access-key --user-name taro --query 'AccessKey.[UserName,Status]' --output text
aws iam attach-user-policy --user-name taro \
--policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
aws iam put-user-policy --user-name taro \
--policy-name app-logs-rw --policy-document file://inline-s3.json
aws iam delete-user --user-name taro
taro Active
An error occurred (DeleteConflict) when calling the DeleteUser operation: Cannot delete entity, must detach all policies first.
管理ポリシーをデタッチして、もう一度削除を試します。
aws iam detach-user-policy --user-name taro \
--policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
aws iam delete-user --user-name taro
An error occurred (DeleteConflict) when calling the DeleteUser operation: Cannot delete entity, must delete policies first.
エラー文の後半が変わりました。 「must detach all policies first」は管理ポリシーが、「must delete policies first」はインラインポリシーが残っているという意味です。DeleteConflict は「削除しようとしたものに、まだ付属するものがある」ときのエラーコードで、メッセージが何を外せばよいかを教えてくれます。
残りを順に外すと、削除が通ります。
aws iam delete-user-policy --user-name taro --policy-name app-logs-rw
aws iam delete-login-profile --user-name taro
aws iam list-access-keys --user-name taro \
--query 'AccessKeyMetadata[].[AccessKeyId,Status]' --output text
aws iam delete-access-key --user-name taro --access-key-id AKIARZPUZDIKE5DUWXOJ
aws iam remove-user-from-group --group-name developers --user-name taro
aws iam remove-user-from-group --group-name admins --user-name taro
aws iam delete-user --user-name taro
aws iam list-users --query 'Users[].UserName' --output text
AKIARZPUZDIKE5DUWXOJ Active
hanako
削除前に外すものの一覧表
IAM ユーザーガイド(IAM ユーザーの削除)と API リファレンス(DeleteUser)に挙げられている項目を、確認コマンドと外すコマンドの組にしました。
| 順 | 外すもの | 確認するコマンド | 外すコマンド |
|---|---|---|---|
| 1 | コンソール用パスワード | get-login-profile |
delete-login-profile |
| 2 | アクセスキー | list-access-keys |
delete-access-key |
| 3 | 署名証明書 | list-signing-certificates |
delete-signing-certificate |
| 4 | SSH 公開鍵 | list-ssh-public-keys |
delete-ssh-public-key |
| 5 | Git 認証情報(サービス固有の認証情報) | list-service-specific-credentials |
delete-service-specific-credential |
| 6 | MFA デバイス | list-mfa-devices |
deactivate-mfa-device、仮想 MFA は続けて delete-virtual-mfa-device |
| 7 | インラインポリシー | list-user-policies |
delete-user-policy |
| 8 | 管理ポリシー | list-attached-user-policies |
detach-user-policy |
| 9 | 所属グループ | list-groups-for-user |
remove-user-from-group |
| 10 | ユーザー本体 | get-user |
delete-user |
ユーザーを一括で削除するスクリプト
上の表のうち、パスワード・アクセスキー・署名証明書・SSH 公開鍵・MFA デバイス・ポリシー・所属グループを順に外してからユーザーを削除するスクリプトです。Git 認証情報を発行しているユーザーは、表の 5 のコマンドで先に削除しておきます。
#!/bin/bash
# 使い方: bash delete-user.sh ユーザー名
# ユーザーに付いているものを順に外してから、ユーザー本体を削除する
set -euo pipefail
U=$1
# 0. ユーザーがいなければ終了
if ! aws iam get-user --user-name "$U" >/dev/null 2>&1; then
echo "user not found: $U"
exit 1
fi
# 1. コンソール用パスワード(無ければ何もしない)
if aws iam get-login-profile --user-name "$U" >/dev/null 2>&1; then
aws iam delete-login-profile --user-name "$U"
echo "deleted login profile"
fi
# 2. アクセスキー
for K in $(aws iam list-access-keys --user-name "$U" \
--query 'AccessKeyMetadata[].AccessKeyId' --output text); do
aws iam delete-access-key --user-name "$U" --access-key-id "$K"
echo "deleted access key: $K"
done
# 3. 署名証明書・SSH 公開鍵
for C in $(aws iam list-signing-certificates --user-name "$U" \
--query 'Certificates[].CertificateId' --output text); do
aws iam delete-signing-certificate --user-name "$U" --certificate-id "$C"
echo "deleted signing certificate: $C"
done
for S in $(aws iam list-ssh-public-keys --user-name "$U" \
--query 'SSHPublicKeys[].SSHPublicKeyId' --output text); do
aws iam delete-ssh-public-key --user-name "$U" --ssh-public-key-id "$S"
echo "deleted ssh public key: $S"
done
# 4. MFA デバイス
for M in $(aws iam list-mfa-devices --user-name "$U" \
--query 'MFADevices[].SerialNumber' --output text); do
aws iam deactivate-mfa-device --user-name "$U" --serial-number "$M"
echo "deactivated mfa device: $M"
done
# 5. インラインポリシー
for P in $(aws iam list-user-policies --user-name "$U" \
--query 'PolicyNames' --output text); do
aws iam delete-user-policy --user-name "$U" --policy-name "$P"
echo "deleted inline policy: $P"
done
# 6. 管理ポリシー
for A in $(aws iam list-attached-user-policies --user-name "$U" \
--query 'AttachedPolicies[].PolicyArn' --output text); do
aws iam detach-user-policy --user-name "$U" --policy-arn "$A"
echo "detached policy: ${A##*/}"
done
# 7. 所属グループ
for G in $(aws iam list-groups-for-user --user-name "$U" \
--query 'Groups[].GroupName' --output text); do
aws iam remove-user-from-group --group-name "$G" --user-name "$U"
echo "removed from group: $G"
done
# 8. ユーザー本体
aws iam delete-user --user-name "$U"
echo "deleted user: $U"
パスワード・アクセスキー・管理ポリシー・インラインポリシーを持ち、2 つのグループに所属する hanako に対して実行した結果です。2 回目は、ユーザーがもういないことを知らせて終わります。
bash delete-user.sh hanako
bash delete-user.sh hanako
deleted login profile
deleted access key: AKIARZPUZDIKHFCGPDOQ
deleted inline policy: app-logs-rw
detached policy: AmazonS3ReadOnlyAccess
removed from group: admins
removed from group: developers
deleted user: hanako
user not found: hanako
グループを削除する
グループも、メンバーとポリシーを外してから削除します。 API リファレンス(DeleteGroup)には「グループにユーザーが含まれておらず、ポリシーがアタッチされていないこと」が条件として書かれており、条件を満たさない場合のエラーとして DeleteConflict が挙げられています。
| 順 | 外すもの | コマンド |
|---|---|---|
| 1 | メンバー | remove-user-from-group |
| 2 | 管理ポリシー | detach-group-policy |
| 3 | インラインポリシー | delete-group-policy |
| 4 | グループ本体 | delete-group |
#!/bin/bash
# 使い方: bash delete-group.sh グループ名
# メンバーとポリシーを外してから、グループ本体を削除する
set -euo pipefail
G=$1
if ! aws iam get-group --group-name "$G" >/dev/null 2>&1; then
echo "group not found: $G"
exit 1
fi
# 1. メンバーを外す
for U in $(aws iam get-group --group-name "$G" \
--query 'Users[].UserName' --output text); do
aws iam remove-user-from-group --group-name "$G" --user-name "$U"
echo "removed user: $U"
done
# 2. 管理ポリシーをデタッチ
for A in $(aws iam list-attached-group-policies --group-name "$G" \
--query 'AttachedPolicies[].PolicyArn' --output text); do
aws iam detach-group-policy --group-name "$G" --policy-arn "$A"
echo "detached policy: ${A##*/}"
done
# 3. インラインポリシーを削除
for P in $(aws iam list-group-policies --group-name "$G" \
--query 'PolicyNames' --output text); do
aws iam delete-group-policy --group-name "$G" --policy-name "$P"
echo "deleted inline policy: $P"
done
# 4. グループ本体
aws iam delete-group --group-name "$G"
echo "deleted group: $G"
taro と hanako が所属し、管理ポリシーとインラインポリシーが 1 つずつ付いた developers に対して実行した結果です。
bash delete-group.sh developers
bash delete-group.sh developers
removed user: taro
removed user: hanako
detached policy: ReadOnlyAccess
deleted inline policy: app-logs-rw
deleted group: developers
group not found: developers
グループを削除しても、メンバーだったユーザーは残ります。所属だけが無くなります。
aws iam list-groups-for-user --user-name taro --query 'Groups[].GroupName'
[]
よく出るエラーと対処
IAM のエラーは、かっこ内のエラーコードで大きく 3 種類に分けて読めます。 「もうある(EntityAlreadyExists)」「見つからない(NoSuchEntity)」「まだ付いているものがある(DeleteConflict)」です。今回の確認環境で実際に出たものを並べます。
| 操作 | エラー文 | 対処 |
|---|---|---|
同じ名前で create-user |
(EntityAlreadyExists) … User taro already exists |
既存を使う。別人なら名前を変える |
同じ名前で create-group |
(EntityAlreadyExists) … Group developers already exists |
既存のグループにポリシーやメンバーを足す |
パスワード設定済みのユーザーに create-login-profile |
(EntityAlreadyExists) … User taro already has password |
変更は update-login-profile を使う |
いないユーザーを add-user-to-group |
(NoSuchEntity) … The user with name jiro cannot be found. |
先に create-user。名前のつづりを確認 |
無いグループに add-user-to-group |
(NoSuchEntity) … Group nogroup not found |
list-groups で名前を確認 |
| ポリシー ARN の名前が違う | (NoSuchEntity) … Policy arn:aws:iam::aws:policy/NoSuchPolicy was not found. |
list-policies で正しい名前を探す |
| ARN ではなくポリシー名だけを渡した | Parameter validation failed: Invalid length for parameter PolicyArn, value: 14, valid min length: 20 |
arn:aws:iam::aws:policy/名前 の形で渡す |
| 所属していないグループから外そうとした | (NoSuchEntity) … User hanako not in group admins |
list-groups-for-user で所属を確認 |
| 付いていないポリシーをデタッチ | (NoSuchEntity) … Policy arn:aws:iam::aws:policy/ReadOnlyAccess was not found. |
list-attached-group-policies で確認 |
| 無いインラインポリシーを削除 | (NoSuchEntity) … Policy nothing not found |
list-group-policies で名前を確認 |
パスワード未設定のユーザーに get-login-profile |
(NoSuchEntity) … Login profile for hanako not found |
未設定という意味。必要なら create-login-profile |
管理ポリシーが残ったまま delete-user |
(DeleteConflict) … Cannot delete entity, must detach all policies first. |
detach-user-policy で外す |
インラインポリシーが残ったまま delete-user |
(DeleteConflict) … Cannot delete entity, must delete policies first. |
delete-user-policy で削除する |
既にグループにいるユーザーへの add-user-to-group と、既に付いているポリシーへの attach-group-policy は、もう一度実行してもエラーにならず、そのまま終わりました。スクリプトを繰り返し流すときは、create-user と create-group だけ「あるかどうか」を先に確かめれば足ります。
aws iam get-user --user-name taro >/dev/null 2>&1 || aws iam create-user --user-name taro
補足:パスでユーザーを整理する
人数が増えてきたら、--path でユーザーを部署やチームごとに分けておくと、一覧を絞り込めます。パスは ARN の一部になります。
aws iam create-user --user-name saburo --path /dev/ --query 'User.Arn' --output text
aws iam list-users --path-prefix /dev/ --query 'Users[].UserName' --output text
arn:aws:iam::123456789012:user/dev/saburo
saburo
よくある質問
Q. ポリシーはユーザーに直接付けてもよいですか?
A. attach-user-policy で直接付けることもできます。ただ、同じ役割の人が複数いるなら、グループに付けてユーザーを所属させるほうが、担当変更のときに add-user-to-group と remove-user-from-group だけで済み、確認も get-group 1 回でできます。
Q. グループに入れた権限はいつから使えますか? A. グループにポリシーを付ける順番と、ユーザーを入れる順番はどちらが先でもかまいません。両方がそろった時点で、メンバー全員にそのグループのポリシーが適用されます。
Q. DeleteConflict が出たら何を見ればよいですか?
A. エラー文の後半に、外すべきものの種類が書かれています。この記事の「削除前に外すものの一覧表」の確認コマンドで残っているものを調べ、対応するコマンドで外します。まとめて行うなら delete-user.sh が使えます。
Q. グループを削除するとメンバーのユーザーも消えますか? A. 消えません。メンバーを外してからグループを削除するので、ユーザーは残り、そのグループ経由の権限だけが無くなります。
まとめ
- 権限は「グループにポリシー、ユーザーはグループに所属」の形にすると、出し入れだけで管理できる
- 作成は
create-group→attach-group-policy→create-user→add-user-to-groupの 4 コマンド - 確認はユーザー(
list-groups-for-user)・グループ(get-group)・ポリシー(list-entities-for-policy)の 3 方向から行える - 管理ポリシーは
list-attached-…、インラインポリシーはlist-…-policiesと、コマンドが分かれている delete-userの前に、パスワード・アクセスキー・ポリシー・所属グループなどを外す。残っているとDeleteConflictになる- グループの削除も、メンバーとポリシーを外してから行う
- エラーは EntityAlreadyExists・NoSuchEntity・DeleteConflict の 3 種類に分けて読むと対処が早い
参考・出典
- IAM API リファレンス:DeleteUser、DeleteGroup
- IAM ユーザーガイド:IAM ユーザーの削除、IAM ユーザーグループ、IAM と AWS STS のクォータ
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「IAMユーザーとグループをAWS CLIで作成|権限付与・一覧・削除」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。