【初心者向け】AWSのCloudShell（CLI）でIAMユーザー作成とコンソールアクセスの有効化/無効化をやってみた

# はじめに

今回はAWSのManagement Consoleで利用できるCloudShell（CLI）にて、以下の作業を行いました。

1. IAMユーザーを所属させるIAMグループの作成とポリシーのアタッチ
2. IAMユーザーの作成とグループへのアタッチ
3. IAMユーザーのManagement Consoleアクセス有効化・無効化

![20230710093156.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804767/6b15f2e7-7bb8-767b-c0c6-51feea9feba1.png)

Management ConsoleにてGUIで対応することも可能ですが、IAMユーザーやIAMグループを複数作成する場合に、誤操作による設定不備が発生する可能性があります。その際にAWSが提供するCloudShell（CLI）を活用することで可能な限り誤操作を減らし、手順を簡略化しつつ再現性を高めることができると考え、以下リンク先のコマンドを元に試してみました。

参考）[AWSコマンド一覧](awscli.amazonaws.com "awscli.amazonaws.com")

# 前提

まず前提として、作業対象のAWSアカウント上でIAMの管理権限を持っているユーザーでログインすることが必要です。IAMの設定変更を行える権限を持っていないと、GUI操作と同じくエラーメッセージが返ってきてしまいます。

### 作業の流れ

今回は以下の流れで一連の作業を行いました。

1. IAMグループ作成
2. IAMグループへポリシーアタッチ
3. IAMユーザー作成
4. IAMユーザーをIAMグループへ所属させる
5. IAMユーザーのコンソールアクセス有効化
6. IAMユーザーのコンソールアクセス無効化

# 0. 準備

CLIでの作業を行うため、まずはAWSアカウントのManagement ConsoleにログインしてCloudShellを開きます。
![0.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804767/bc00b8df-51f9-0360-8043-b54db8779130.png)

※画面下部にCloudShellが埋まってしまっている場合には、必要なサイズに拡大してください。
![0.2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804767/b2a7ebf9-89b1-43d9-1a8b-2c19571acade.png)

# 1. IAMユーザーを所属させるIAMグループの作成とポリシーのアタッチ

まずはIAMユーザーを所属させるIAMグループの作成と、そのグループに所属しているIAMユーザーが適切な権限を持つためのポリシーをIAMグループにアタッチします。
![1.0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804767/1e14a726-df49-d73d-532f-d003f599e330.png)

今回の例のようにユーザー数が少ない場合にはIAMユーザーに直接ポリシーをアタッチすることも可能ですが、ユーザー数が増加するにつれてユーザー毎のポリシー管理を行う工数と時間がかかってしまうため、グループに所属させることで権限管理を確実、かつ簡易化します。

### 手順1.1

**ReadOnlyTestGroup**という名前のIAMグループを作成します。

```cli:ReadOnlyTestGroup作成
aws iam create-group --group-name ReadOnlyTestGroup
```
![1.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804767/bdeb8c5c-7ab4-831c-ef66-2b650369461f.png)

### 手順1.2

**ReadOnlyTestGroup**にAWS管理ポリシー「[ReadOnlyAccess](https://docs.aws.amazon.com/ja_jp/aws-managed-policy/latest/reference/ReadOnlyAccess.html)」を付与します。

```cli:ReadOnlyAccessの付与
aws iam attach-group-policy --group-name ReadOnlyTestGroup --policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess
```
![1.2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804767/71a1a480-8ecc-981e-5e71-1d7f05fd0db4.png)

### 手順1.3（オプション）

実際にIAMグループの作成とポリシーのアタッチが完了していることを確認します。

```cli:アタッチされているポリシーの確認
aws iam list-attached-group-policies --group-name ReadOnlyTestGroup
```
![1.3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804767/205864c7-b5af-721a-a5b9-1d0e8ecdd5a0.png)

※GUI操作の場合は、Management Console上でIAMを開き、左ペインから「ユーザーグループ」を選択して**ReadOnlyTestGroup**の許可が「<span style="color: green;">**定義済み**</span>」となっている事を確認します。
![1.3.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804767/901e29c2-2c4f-c33a-a370-28965583cec6.png)


# 2. IAMユーザーの作成とグループへのアタッチ

IAMグループの作成とポリシーのアタッチが完了したところで、続いてManagement Consoleにアクセスするユーザーの作成と適切なグループへのIAMユーザーのアタッチを行います。
![2.0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804767/fad97edf-5677-d39b-2b06-74a79fe175a8.png)

IAMグループには複数のIAMユーザーを所属させることができ、IAMユーザーは複数のIAMグループに所属することも可能です。詳細については[AWSの公式ドキュメント](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_groups.html#:~:text=AWS%20Identity%20and%20Access%20Management%20IAM%20%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97,PDF%20RSS%20IAM%20%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%A8%E3%81%AF%E3%80%81IAM%20%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E9%9B%86%E5%90%88%E3%81%A7%E3%81%99%E3%80%82%20%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E8%A4%87%E6%95%B0%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E8%A8%B1%E5%8F%AF%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%A7%E3%81%8D%E3%80%81%E3%81%9D%E3%82%8C%E3%82%89%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E8%A8%B1%E5%8F%AF%E3%82%92%E5%AE%B9%E6%98%93%E3%81%AB%E7%AE%A1%E7%90%86%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%20%E3%81%9F%E3%81%A8%E3%81%88%E3%81%B0%E3%80%81Admins%20%E3%81%A8%E3%81%84%E3%81%86%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%80%81%E7%AE%A1%E7%90%86%E8%80%85%E3%81%8C%E4%B8%80%E8%88%AC%E7%9A%84%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%A8%E3%81%99%E3%82%8B%E3%82%88%E3%81%86%E3%81%AA%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E8%A8%B1%E5%8F%AF%E3%82%92%E3%81%9D%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%AB%E4%BB%98%E4%B8%8E%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82)を参照ください。

### 手順2.1

まずはIAM管理者としてManagement ConsoleにアクセスするIAMユーザーを作成します。今回は**TestUser01**という名前のユーザーを、Environmentタグとして**Test**をつけて作成します。

```cli:TestUser01の作成
aws iam create-user --user-name TestUser01 --tags Key=environment,Value=Test
```
![2.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804767/df604401-2211-c7bd-5b99-38b6afaf2cdf.png)

### 手順2.2

続いて、作成されたIAMユーザー（**TestUser01**）を**ReadOnlyTestGroup**に所属させます。

```cli:TestUser01をReadOnlyTestGroupグループに所属させる
aws iam add-user-to-group --user-name TestUser01 --group-name ReadOnlyTestGroup
```
![2.2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804767/ef15d16a-bebb-09f2-11cb-575c383f65ba.png)

### 手順2.3（オプション）

実際にIAMユーザーがグループに所属できているかを確認します。

```cli:グループへのアタッチ確認
aws iam list-groups-for-user --user-name TestUser01
```
![2.3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804767/4ca364f5-b771-7f6f-2eba-c32f62b829db.png)

赤枠内にて**TestUser01**が**ReadOnlyTestGroup**に所属できていることが確認できます。

※GUI操作の場合は、手順1.3と同じくユーザーグループ画面へ遷移し、**ReadOnlyTestGroup**を選択します。画面下部「このグループのユーザー」欄に**TestUser01**がリストされていることを確認します。
![2.3.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804767/32a4fa57-ed56-7b1a-22fa-36171b77e884.png)

# 3. IAMユーザーのManagement Consoleアクセス有効化・無効化

最後に、作成したIAMユーザーのコンソールアクセス有効化/無効化を行います。
![3.0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804767/eacca6d4-9775-aec8-510d-6c70a0dbd19c.png)

「IAMユーザーの有効化/無効化」と聞くと単純にユーザー自体を有効化/無効化すると考えますが、IAMの仕様上正しくは**ユーザーのコンソールログイン用パスワードの作成/削除**を行います。これによりパスワード削除状態時はコンソールログインができなくなり、<span style="color: red; ">**IAMユーザーの利用者視点ではIAMユーザーが有効化/無効化されているように見える**</span>という仕様になっています。

この手順が活用できるユースケースとしては、「本番環境アカウントで変更作業を行えるIAMユーザーを通常時は無効化しておき、変更作業が必要な際に有効化して本番環境にて作業を実施、その後作業が完了し次第再度無効化を行う」などが考えられます。この運用を行う事により、意図しない本番環境での変更を阻止するといった効果を得ることができます。

### 3.1 IAMユーザーの有効化

まずはIAMユーザーのコンソールログイン用パスワードを作成（＝IAMユーザーを有効化）します。

```cli:コンソールアクセス用PW作成
aws iam create-login-profile --user-name TestUser01 --password Testxxxxxxxxxx --password-reset-required
```
![3.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804767/526b1790-fe94-f8aa-fb44-265769e81c83.png)

このコマンドでは「--password」で一時的なコンソールログイン用パスワードを作成し、その後の「--password-reset-required」を指定することでIAMユーザー初回ログイン時にパスワード変更を強制させています。これによりIAMユーザーの利用者は初回ログイン時以降、任意のパスワードを使用することができます。

:::note warn
IAMユーザー利用者へコンソールログイン有効化の連絡を行う際には、上記「--password」で指定した一時的なパスワードも連携する必要があります。これが無いと初回ログイン＋パスワードリセットを行えないためです。なお、連携の方法についてはセキュリティ面を考慮する必要があります。
:::




### 3.1.(参考) 初回ログイン時のIAMユーザー利用者視点

IAMユーザー利用者は初回ログイン用パスワードが連携されたら、IAMユーザーとしてアカウントにサインインします。
![3.1.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804767/4d39380d-e99e-5257-b483-3e714db3a8f6.png)

その後、パスワードリセット画面へ遷移します。ここで新しいパスワードをセットすることで、次回ログイン時からは新しくリセットされたパスワードを利用することができるようになります。
![3.1.2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804767/d15f6d91-36be-e372-4855-a850e1df2dc7.png)

### 3.2 IAMユーザーの無効化

続いてIAMユーザーのコンソールログイン用パスワードを削除（＝IAMユーザーを無効化）します。

```cli:コンソールアクセス用PW削除
aws iam delete-login-profile --user-name TestUser01
```
![3.2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804767/ee756c13-e4aa-8298-1db6-d280f5071c73.png)

これによりコンソールログイン用パスワードが削除され、IAMユーザー利用者はコンソールにログインできなくなります。

### 3.2.(参考) コンソールログイン用パスワード無効時のIAMユーザー利用者視点

IAMユーザー有効時にログインできていたパスワードでサインインをすると、認証情報が正しくないと表示されコンソールにアクセスできなくなります。
![3.2.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804767/e349a329-ea4a-c5a6-dd08-f1daf534ee23.png)

# まとめ

今回はIAMグループの作成からポリシーのアタッチ、IAMユーザーの作成とグループへのアタッチ、IAMユーザーの有効化/無効化等基本的な作業をCloudShellで行ってみました。単純な作業のためManagement ConsoleにてGUI操作で同等作業を行うことは可能ですが、前述した通り手順の簡略化と再現性の向上を行うためにCLIを利用することも一つの手段だと思います。

またIAMユーザーの有効化/無効化を行う際には、ユーザー自体の有効化/無効化を行うのではなく、実際にはコンソールログイン用パスワードを作成/削除するというIAMの仕様についても気付く事ができました。これ以外にもユーザー視点での動作と実際のAWS内での動作に差異があることはあると考えられるため、今後も新しい気付きがあれば共有できればと思います。

ここまでご覧いただきありがとうございました。