IAM ユーザーは自分自身を削除できるのか色んな方法で試してみた
2020-10-07いきなりですが、 IAM ユーザーは自分自身を削除できるのでしょうか?ちょっとした疑問というか、どうなるんや?と思ったので、いくつかの方法で試してみました。
目次
やること
既存の IAM ユーザーで自分自身を削除することができるのか、いくつかの方法で試してみます。
方法としては、次のとおりです。
- マネジメントコンソールにログインして IAM のコンソールから削除
- ログインした IAM ユーザー自身で削除
- スイッチロールして削除
- AWS CLI の
iam delete-user
コマンドで削除- 自身のプロファイルで削除
- スイッチロールして削除
- マネジメントコンソールにログインして CloudFormation のコンソールからスタックを削除
- 事前に CloudFormation で IAM ユーザーを作成しておきます
- ログインした IAM ユーザー自身で削除
- スイッチロールして削除
やってみる
では、それぞれやっていきます。
1. マネジメントコンソールにログインして IAM のコンソールから削除
事前に will-be-deleted
という IAM ユーザーを作成しておきます。作成する際に、今回 必要になる IAM ポリシーがアタッチされている IAM グループに所属させるものとします。
$ aws iam get-user \
--user-name will-be-deleted
{
"User": {
"Path": "/",
"UserName": "will-be-deleted",
"UserId": "XXXXXXXXXXXXXXXXMWMLT",
"Arn": "arn:aws:iam::12345678XXXX:user/will-be-deleted",
"CreateDate": "2020-10-07T09:21:20+00:00",
"Tags": []
}
}
ログインした IAM ユーザー自身で削除
まずは will-be-deleted
ユーザーでマネジメントコンソールにログインして、 IAM のコンソールから削除を試してみます。
削除 ボタンを押すと削除が始まり、何事もなく削除できてしまいました。
削除後は一旦 IAM ユーザー一覧画面が表示されますが、その後他のページへ移動したり何らかの操作を行うと、ログイン画面へ遷移しました。念のため確認しておきます。
$ aws iam get-user \
--user-name will-be-deleted
An error occurred (NoSuchEntity) when calling the GetUser operation: The user with name will-be-deleted cannot be found.
ということで、もう結論が出てしまった感はありますが、一応 残りのパターンについても試してみます。
スイッチロールして削除
再度 IAM ユーザー will-be-deleted
を作成・ログインして、 michimani-admin
というロールにスイッチしてから will-be-deleted
ユーザーを削除してみます。
この場合も問題なく削除できました。
当該 IAM ユーザー自身で削除する場合と違って、スイッチロールして削除する場合は IAM ユーザー削除後もスイッチ後のロールでマネジメントコンソールを操作することができました。
また、右上のスイッチロール名をクリックしたときに出るメニューから will-be-deleted に戻る を選択しても、元の IAM ユーザーに戻ることもできず、ログイン画面に遷移するわけでもなく、そのままスイッチロールした状態が継続する形となりました。
2. AWS CLI の iam delete-user コマンドで削除
続いては AWS CLI で削除を試してみます。
今回も事前に IAM ユーザー will-be-deleted
を作成しておき、アクセスキーおよびシークレットを作成しておきます。そして、プロファイル名として be-del
という名前をつけておきます。
~/.aws/credentials
は下記のような内容。
[be-del]
aws_access_key_id=AKIA2FQK************
aws_secret_access_key=iis77+******************
自身のプロファイルで削除
まずは自身のプロファイルで削除してみます。
削除の前に確認。
$ aws iam get-user \
--user-name will-be-deleted \
--profile be-del
{
"User": {
"Path": "/",
"UserName": "will-be-deleted",
"UserId": "XXXXXXXXXXXXXXXXTXQKX",
"Arn": "arn:aws:iam::12345678XXXX:user/will-be-deleted",
"CreateDate": "2020-10-07T09:51:06+00:00"
}
}
iam delete-user
コマンドで削除します。
$ aws iam delete-user \
--user-name will-be-deleted \
--profile be-del
An error occurred (DeleteConflict) when calling the DeleteUser operation: Cannot delete entity, must remove users from group first.
まずは IAM グループから remove しなさいと言われました。ということで、 IAM グループから remove して、必要な IAM ポリシーを IAM ユーザー自身にアタッチし、再度試してみます。
$ aws iam delete-user \
--user-name will-be-deleted \
--profile be-del
An error occurred (DeleteConflict) when calling the DeleteUser operation: Cannot delete entity, must detach all policies first.
次はアタッチされているポリシーをすべて削除しなさいと言われました。ということで、アタッチされたポリシーを削除します。でもこうすると…
$ aws iam delete-user \
--user-name will-be-deleted \
--profile be-del
An error occurred (AccessDenied) when calling the DeleteUser operation: User: arn:aws:iam::12345678XXXX:user/will-be-deleted is not authorized to perform: iam:DeleteUser on resource: user will-be-deleted
iam:DeleteUser
の権限がないと言われました。それはそう。
ということで、自身のプロファイルでは自分自身を削除することはできないようです。
スイッチロールして削除
では、 AWS CLI でスイッチロールして削除を試してみます。
CLI でスイッチロールするために、 ~/.aws/config
に次の内容を記載します。
[profile michimani-admin]
role_arn=arn:aws:iam::12345678XXXX:role/michimani-admin
source_profile=be-del
--profile
で michimani-admin
を指定して削除を試します。
$ aws iam delete-user \
--user-name will-be-deleted \
--profile michimani-admin
An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::12345678XXXX:user/will-be-deleted is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::12345678XXXX:role/michimani-admin
sts:AssumeRole
の権限がないと言われました。じゃあ sts:AssumeRole
のポリシーをアタッチすればよいかと言うと、そうすると今度はアタッチしたポリシーを削除してと言われてしまいます。
ということで、スイッチロールしても削除することはできないようです。
3. マネジメントコンソールにログインして CloudFormation のコンソールからスタックを削除
続いては、 IAM ユーザーを CloudFormation で管理し、そのスタックを削除することで IAM ユーザーを削除してみます。今回用意した CloudFormation テンプレートは下記の内容です。
AWSTemplateFormatVersion: "2010-09-09"
Description: "IAM User"
Parameters:
UserPassword:
Type: String
Group:
Type: String
Resources:
IAMUserForDelete:
Type: "AWS::IAM::User"
Properties:
LoginProfile:
Password: !Ref UserPassword
PasswordResetRequired: false
UserName: will-be-deleted
Groups:
- !Ref Group
このテンプレートで IAM ユーザ will-be-deleted
を作成し、マネジメントコンソールからログインしてスタックを削除してみます。ちなみに、ここで所属させる IAM グループには必要な IAM ポリシーがアタッチされているものとします。
ログインした IAM ユーザー自身で削除
will-be-deleted
でマネジメントコンソールにログインし、 CloudFormation のコンソールから該当のスタックを削除します。
問題なく削除できました。そして、 IAM のコンソールから削除したときと同様に、別の操作を行うとログイン画面に遷移しました。
スイッチロールして削除
will-be-deleted
を再度作成 (こういうとき CFn だとすぐに再現できて良いですね) 、マネジメントコンソールにログインして先程と同様に michimani-admin
ロールにスイッチします。そして、 CloudFormation のコンソールから該当のスタックを削除します。
こちらも問題なく削除できました。そして、 IAM のコンソールから削除したときと同様に、スイッチロールは継続、元の IAM ユーザに戻ることはできない という状態になりました。
まとめ
IAM ユーザーは自分自身を削除できるのか、いくつかの方法で試してみた話でした。今回試した方法とその結果のまとめは下記の表のようになります。
方法 | 削除可否 | 備考 |
---|---|---|
IAM コンソールから | ○ | 削除後に別の操作を行うとログイン画面に遷移する |
IAM コンソールから with スイッチロール | ○ | 削除後もスイッチロールは継続、元の IAM ユーザには戻れない |
AWS CLI | × | 最終的に権限が足りなくなる |
AWS CLI with スイッチロール | × | 最終的に権限が足りなくなる |
CloudFormation のスタック削除 | ○ | 削除後に別の操作を行うとログイン画面に遷移する |
CloudFormation のスタック削除 with スイッチロール |
○ | 削除後もスイッチロールは継続、元の IAM ユーザには戻れない |
そもそも自分自身を削除しようとする場面はあまりない (退職とプロジェクトから抜ける時くらい?) と思いますが、もしやるならマネジメントコンソールからの操作であれば削除できそうです。
comments powered by Disqus