IAM要素解析(10/24週)

# はじめに
10/24-10/27までの1週間は、JAWS-UG CLI専門支部よりIAM要素解析のイベントが開催されました。
（仕事の都合上、全ての枠には参加ができませんでしたが、）12:00-13:00枠なので、お昼ご飯を食べながら参加しました。ふり返りを兼ね、アウトプットとしてまとめます。

# ハンズオン事前作業
IAMユーザを作成する必要があります。
```
aws iam create-user \
 --user-name XXXXXXXX
 ```

# 20231024 アクセスキー

アクセスキーは、IAMが持つ「認証」の機能です。
* 1ユーザ当たり、2つのアクセスキーを作成できます。
* アクセスキーIDとシークレットアクセスキーで構成されています。
* アクセスキーIDは、アクセスキーに固有名を割り当てます。（IAMにより自動割り当て）AKIA～から始まる最大128文字の文字列です。
* シークレットアクセスキーは、アクセスキーを作成したときにしか取得できません。
「アクセスキーの状態」は変更が可能です。（ActiveもしくはInactive）
※Inactiveは一時的に無効・ローテーションする際に利用されることが多い。

## ハンズオンの備忘録
※アクセスキーを保存するディレクトリ名を指定する（ハンズオン時）
```
ls -d ${HOME}/environment/conf-handson-cli-iam > /dev/null
2>&1 \
 || mkdir -p ${HOME}/environment/conf-handson-cli-iam
```
IAMアクセスキーを作成する（ハンズオン時に、上記で指定したディレクトリへ保存）
```
aws iam create-access-key \
 --user-name XXXXXXXX \
 > ${HOME}/environment/conf-handson-cli-iam/handson-cli-iamuser-token-0.json \
 && cat ${HOME}/environment/conf-handson-cli-iam/handsoncli-iam-user-token-0.json
```
アクセスキーの一覧を出力する
```aws iam list-access-keys \
 --user-name XXXXXXXX
```
アクセスキーのIDを出力させる
* `--query`でアクセスキーIDを指定する
[【参考】以前の記事](https://qiita.com/kokichi8/items/dbed0fc7c95a4a8a8784)
```

iam_access_key_id=$( \
 aws iam list-access-keys \
 --user-name XXXXXXXX \
 --query 'AccessKeyMetadata[].AccessKeyId' \
 --output text \
) \
 && echo ${iam_access_key_id}

```
アクセスキーの情報を取得する
```
aws iam get-access-key-last-used \
 --access-key-id ${iam_access_key_id}
```
アクセスキーを削除する
```
aws iam delete-access-key \
 --user-name XXXXXXXX \
 --access-key-id ${iam_access_key_id}
```

# 20231026 ログインプロファイル
ログインプロファイルには、以下の3つの要素があります。
「パスワード文字列」「パスワードリセット要求」「作成日時」
* パスワード文字列は変更◎　※表示はできない
* パスワードリセット要求は、「次回サインインの時にPW変更を強制」させます。
`password-reset-requied`もしくは`no-password-reset-requied`　
[【参考】CreateLoginProfile](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateLoginProfile.html)
* 作成日時は変更できません

## ハンズオンの備忘録
* 指定したIAMユーザのパスワードを作成する
[【参考】create-login-profile](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-login-profile.html)

ログインプロファイルの作成
```
aws iam create-login-profile \
 --user-name XXXXXXXX \
  --password 'XXXXXXXX'
```
ログインプロファイルの情報を取得する
```
aws iam get-login-profile \
 --user-name XXXXXXXX
```
IAMユーザが、自分のパスワードを更新する
```
aws iam change-password \
 --old-password 'XXXXXXXX' \
 --new-password 'ZZZZZZZZ'
```
IAM管理者がIAMユーザのパスワードを更新する
```
aws iam update-login-profile \
 --user-name XXXXXXXX \
 --password 'ZZZZZZZZ'
```
ログインプロファイルの削除
```
aws iam delete-login-profile \
 --user-name XXXXXXXX
```

# 20231027 MFA
MFAデバイスの識別子は「シリアル番号」です。以下の3つの要素があります。
* IAMユーザ名
* TOTP秘密鍵
* 有効化日時

このうち、「TOTP秘密鍵」は隠し属性で仮想MFAデバイスにおいては紐づけるときに生成されます。MFAデバイスとIAMのサービスオブジェクト間で「秘密鍵を共有する」役割を担います。

（※補足）IAMユーザ当たりのMFAでバスは最大で8つです
## ハンズオンの備忘録
※MFAブートストラップ出力ファイルを保存するディレクトリ名を指定する（ハンズオン時に実施）
```
ls -d ${HOME}/environment/conf-handson-cli-iam > /dev/null
2>&1 \
 || mkdir -p ${HOME}/environment/conf-handson-cli-iam
```
仮想MFAデバイス（以降はデバイスと表記）の作成
```
aws iam create-virtual-mfa-device \
 --virtual-mfa-device-name XXXXXXXX \
 --bootstrap-method QRCodePNG \
 --outfile ${HOME}/environment/conf-handson-cli-iam/handsoncli-iam-mfa.png
```
デバイスの一覧取得
```
aws iam list-mfa-devices \
 --user-name 'XXXXXXXX'
```
デバイスの一覧取得
```
aws iam list-virtual-mfa-devices
```
※デバイスのシリアル番号取得
```
mfa_device_serial=$( \
 aws iam list-virtual-mfa-devices \
 --query "VirtualMFADevices[?SerialNumber ==
\`arn:aws:iam::${aws_account_id}:mfa/handson-cli-iammfa\`].SerialNumber" \
 --output text \
) \
 && echo ${mfa_device_serial}
```
※アカウントIDの取得
```
aws_account_id=$( \
 aws sts get-caller-identity \
 --query 'Account' \
 --output text \
) \
 && echo ${aws_account_id}
```
デバイスの有効化
```
aws iam enable-mfa-device \
 --user-name XXXXXXXX \
 --serial-number ${mfa_device_serial} \
 --authentication-code1 <連続した認証コードの1回目> \
 --authentication-code2 <連続した認証コードの2回目>
```
デバイスの再同期
```
aws iam resync-mfa-device \
 --user-name XXXXXXXX \
 --serial-number ${mfa_device_serial} \
 --authentication-code1 <連続した認証コードの1回目> \
 --authentication-code2 <連続した認証コードの2回目>
```
デバイスの無効化
```
aws iam deactivate-mfa-device \
 --user-name XXXXXXXX \
 --serial-number ${mfa_device_serial}
```
デバイスの削除
```
aws iam delete-virtual-mfa-device \
 --serial-number ${mfa_device_serial}
```

# ハンズオン事後作業
IAMユーザを削除
```
aws iam delete-user \
 --user-name 'XXXXXXXX'
```
作成したハンズオンのディレクトリを削除
```
rm -R ${HOME}/environment/conf-handson-cli-iam 
```

# 最後に
テレワークだったので、お昼休みの時間を有意義に使うことができました。
しばらくの間、12:00-13:00枠で予定が組まれているので積極的に参加していきたいです。

最後のアンケートでも、参加された方からの自分の視点とは異なった意見が聞けてとても勉強になりました。実業務のエピソードや自分の知らない領域のお話が聞ける機会は貴重だな、と改めて感じました。