[JAWS-UG CLI] IAM:#1 IAMの全体設定 (Account Alias、パスワードポリシー)


http://jawsug-cli.doorkeeper.jp/events/13796 でのハンズオン資料です。

このハンズオンでは、IAM全体の設定として下記を行ないます。

* Account Aliasの設定 (ログイン画面のURLをわかりやすいものにする)
* パスワードポリシーの設定


前提条件
========

* IAMへのフルアクセス権限


0. 事前作業
===========

Account Aliasに使う文字列をあらかじめ決めておきます。
(AWS利用者の間でユニークである必要があります。)

```bash:コマンド例:
$ IAM_ALIAS=example01
```

1. Account Aliasの設定
=======================

IAMユーザでのログインは、デフォルトでは https://XXXXXXXXXXXX.signin.aws.amazon.com/console になっています。
(XXXXXXXXXXXX: AWSアカウントID)

任意の文字列(Account Alias)に置き換えて、URLを覚えやすいものに変更することができます。


1.1. Account Aliasの作成
--------------------------

```bash:コマンド:
$ aws iam create-account-alias --account-alias ${IAM_ALIAS}
```

```text:結果:
(戻り値なし)
```

1.2. Account Aliasの確認
--------------------------

```bash:コマンド:
$ aws iam list-account-aliases
```

```json:結果(例):
{
       "AccountAliases": [
           "example01"
       ]
}
```

```bash:コマンド
$ IAM_URL="https://${IAM_ALIAS}.signin.aws.amazon.com/console"
$ echo ${IAM_URL}
```

```text:結果(例)
https://example01.signin.aws.amazon.com/console
```

このURLにアクセスすることで、IAMユーザとしてログインできます。



2. パスワードポリシーの設定
==========================

IAMユーザについて、パスワード文字列の文字種、パスワードの有効期間などのポリシーを設定することができます。

なお、一部のポリシー項目だけを変更すると、他のポリシー項目はデフォルト値に戻るようなのでご注意ください。[AWS CLI 1.4.2]


2.1. 事前確認 (初期値)
-----------------------

パスワードポリシーがまだ設定されていないことを確認します。

```bash:command:
$ aws iam get-account-password-policy
```

```text:result:
A client error (NoSuchEntity) occurred when calling the GetAccountPasswordPolicy operation: The Password Policy with domain name XXXXXXXXXXXX cannot be found.
```

2.2a. パスワードポリシーの設定 (文字種のみの場合)
-----------------------------------------------

```bash:command:
$ IAM_PASSWORD_LENGTH=9
```
```bash:コマンド:
$ aws iam update-account-password-policy --minimum-password-length ${IAM_PASSWORD_LENGTH} --require-symbols --require-numbers --require-uppercase-characters --require-lowercase-characters --allow-users-to-change-password
```

```text:result:
(戻り値なし)
```

確認

```bash:command:
$ aws iam get-account-password-policy
```

```json:結果(例)
{
     "PasswordPolicy": {
         "AllowUsersToChangePassword": true,
         "RequireLowercaseCharacters": true,
         "RequireUppercaseCharacters": true,
         "MinimumPasswordLength": 9,
         "RequireNumbers": true,
         "RequireSymbols": true,
         "ExpirePasswords": false
     }
}
```


2.2b. パスワードポリシーの設定 (文字種+有効期間の場合)
--------------------------------------------------

```text:p.env:
IAM_PASSWORD_LENGTH=9
IAM_PASSWORD_AGE=90
IAM_PASSWORD_REUSE=2
```

```bash:command:
$ source p.env
```

```bash:command:
$ aws iam update-account-password-policy --minimum-password-length ${IAM_PASSWORD_LENGTH} --require-symbols --require-numbers --require-uppercase-characters --require-lowercase-characters --allow-users-to-change-password --max-password-age ${IAM_PASSWORD_AGE} --password-reuse-prevention ${IAM_PASSWORD_REUSE} --hard-expiry
```

```text:result:
(戻り値なし)
```

確認

```bash:command:
$ aws iam get-account-password-policy
```

```json:結果(例)
{
       "PasswordPolicy": {
           "AllowUsersToChangePassword": true,
           "RequireLowercaseCharacters": true,
           "RequireUppercaseCharacters": true,
           "MinimumPasswordLength": 9,
           "RequireNumbers": true,
           "PasswordReusePrevention": 2, 
           "HardExpiry": true, 
           "RequireSymbols": true,
           "MaxPasswordAge": 90, 
           "ExpirePasswords": false
     }
}
```


参考: アカウントサマリの表示
===========================

```bash:コマンド:
$ aws iam get-account-summary
```

```json:結果(例)
{
       "SummaryMap": {
           "AccessKeysPerUserQuota": 2,
           "AssumeRolePolicySizeQuota": 2048,
           "UsersQuota": 5000,
           "GroupsPerUserQuota": 10,
           "Users": 4,
           "Roles": 1,
           "Providers": 0,
           "InstanceProfilesQuota": 100,
           "AccountMFAEnabled": 0,
           "ServerCertificates": 0,
           "UserPolicySizeQuota": 2048,
           "RolePolicySizeQuota": 10240,
           "MFADevicesInUse": 0,
           "GroupsQuota": 100,
           "Groups": 2,
           "InstanceProfiles": 1,
           "GroupPolicySizeQuota": 5120,
           "SigningCertificatesPerUserQuota": 2,
           "ServerCertificatesQuota": 20,
           "MFADevices": 0,
           "RolesQuota": 250
       }
}
```