[JAWS-UG CLI] IAM:#5 仮想MFAデバイスの登録

JAWS-UG CLI #3 (IAM)で話題になったMFAに関する追加ハンズオンです。

AWS CLIで仮想MFAデバイスを作成・設定【JAWS-UG CLI #3 参加レポート】  http://dev.classmethod.jp/cloud/aws/virtual-mfa-by-aws-cli/ を参考にさせていただきました。

三井田さんありがとうございます。

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

* IAMへのフルアクセス権限
* 仮想MFAデバイスの用意 (iOSやAndroidの場合は、Google Authenticatorが使えます。)



1. 仮想MFAデバイスの追加
=====================


1.1. 仮想MFAデバイス名の決定
-----------------------

仮想デバイス上で表示される名前を決めます。

```bash:コマンド:
   $ MFA_DEVICE_NAME='testmfa'
```


1.2. 登録用データの出力設定
----------------------

仮想MFAソフトウェアで読み込むために、バーコード形式で出力します。

```bash:コマンド:
   $ MFA_BS_METHOD='QRCodePNG'
   $ FILE_MFA_OUT="${HOME}/${MFA_DEVICE_NAME}-QR.png"
```

```bash:コマンド:
   $ aws iam create-virtual-mfa-device --virtual-mfa-device-name ${MFA_DEVICE_NAME} --bootstrap-method ${MFA_BS_METHOD} --outfile ${FILE_MFA_OUT}
```

```json:結果:
   {
       "VirtualMFADevice": {
           "SerialNumber": "arn:aws:iam::XXXXXXXXXXXX:mfa/testmfa"
       }
   }
```


1.3. 確認
----

仮想デバイスがIAMに登録されたことを確認します。

```bash:コマンド:
   $ aws iam list-virtual-mfa-devices
```

```json:結果:
   {
       "VirtualMFADevices": [
           {
               "SerialNumber": "arn:aws:iam::XXXXXXXXXXXX:mfa/testmfa"
           }
       ]
   }
```


2. 仮想MFAソフトウェアへの登録
===========================

QRコードのファイルを画像ビューワソフトなどで開き、仮想MFAソフトウェアで読み取ります。

詳細は、例えば Software Design 8月号 http://gihyo.jp/magazine/SD/archive/2014/201408 「シェルスクリプトではじめるAWS 入門」の記事などを参照ください。



3. 仮想MFAソフトウェアとIAMユーザを関連付ける
==========================================

次に、仮想MFAソフトウェアとIAMユーザを関連付けます。

3.1. シリアル番号の取得
------------------

まず、未登録の仮想MFAデバイスのシリアルナンバーを取得します。

```bash:コマンド:
   $ MFA_SERIAL=`aws iam list-virtual-mfa-devices --assignment-status Unassigned --query 'VirtualMFADevices[]' --output text | grep ${MFA_DEVICE_NAME}` && echo ${MFA_SERIAL}
```

```text:結果:
   arn:aws:iam::XXXXXXXXXXXX:mfa/testmfa
```


3.2. MFAデバイスの利用IAMユーザの確定
--------------------------------

仮想MFAデバイスを関連付けるIAMユーザを決めます。
ここでは taroユーザに先程の仮想MFAデバイスを関連付けます。

```bash:コマンド:
   $ IAM_USER_NAME='taro'
```


3.3. 仮想MFAソフトウェアとIAMユーザの関連付け
----------------------------------------

仮想ソフトウェア上で30秒毎に更新されるワンタイムパスワードを連続2回分入力します。

```bash:コマンド:
   $ IAM_AUTH_CODE1=123456
   $ IAM_AUTH_CODE2=654321
```

割と忙しいので、慎重に手早く入力しましょう。

```bash:コマンド:
   $ aws iam enable-mfa-device --user-name ${IAM_USER_NAME} --serial-number ${MFA_SERIAL} --authentication-code-1 ${IAM_AUTH_CODE1} --authentication-code-2 ${IAM_AUTH_CODE2}
```

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

シリアル番号、2つのワンタイムパスワードのいずれかが間違っていると以下のようなエラーが出力されます。
シリアル番号を確認の上、再度ワンタイムパスワードの取得をやりなおしてください。

```bash:コマンド:
   A client error (InvalidAuthenticationCode) occurred when calling the EnableMFADevice operation: Authentication code for device is not valid.
```


3.4. 仮想MFAデバイスの一覧
---------------------

関連付けが完了すると、仮想MFAデバイス一覧に表示されます。

```bash:コマンド:
   $ aws iam list-virtual-mfa-devices
```

```json:結果:
   {
       "VirtualMFADevices": [
           {
               "SerialNumber": "arn:aws:iam::XXXXXXXXXXXX:mfa/testmfa", 
               "EnableDate": "2014-09-09T23:55:25Z", 
               "User": {
                   "UserName": "taro", 
                   "Path": "/", 
                   "CreateDate": "2014-07-14T01:44:28Z", 
                   "UserId": "AIDAI4FHXXXXXXXXXXXXX", 
                   "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/taro"
               }
           }
       ]
   }
```

4. AWSマネジメントコンソールへのログイン確認
=========================================

AWSマネジメントコンソールへログインするときに、パスワードとMFAによるワ
ンタイムパスワードの両方がそろってないとログインできないことが確認できれば作業は完了です。