MFA 必須のIAM ユーザでIDE からAWS にアクセスする

MFA を必須にした環境でEclipse などの開発環境からAWS にアクセスするにはどうするのか?を記述します。

以前のブログにて、AWS CLI からアクセスする場合にMFA 必須の構成をする方法を記載しました。

この環境において開発環境にどのようにアクセスキーを設定するのかを記述しています。

sts get-session-token を利用する

結論から書きますと、sts のget-session-token を利用することができます。
詳細は、以下のURL をご参照ください。

https://aws.amazon.com/jp/premiumsupport/knowledge-center/authenticate-mfa-cli/

sts get-session-token を利用するとMFA 認証済みの一時的なアクセスキーを入手できます。

$ aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token --profile your-cli-profile

上記の “–serial-number” に指定するのはIAM ユーザに作成したMFA デバイスのARN です。前述の記事をご参照ください。”–profile” は前述の記事で設定した<any-name-1>を指定します。
上記コマンドを実行すると以下のような一時的アクセスキー(AccessKeyId/SecretAccessKey/SessionToken) を入手できます。

{
    "Credentials": {
        "SecretAccessKey": "xxxxxxxxxxxxxxxxxxxxxx", 
        "SessionToken": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 
        "Expiration": "2019-03-12T19:38:46Z", 
        "AccessKeyId": "XXXXXXXXXXXXXXXXXXXXXXX"
    }
}

デフォルト指定では、12時間有効なキーとなり、Expiration にて有効期限を確認できます。有効期限は、”–duration-seconds ” 引数で任意に指定することも可能です。(最短15 分 〜 最長36時間)
この認証情報は、MFA による認証済みの認証情報になりますので、MFA 必須の環境でAWS リソースにアクセス可能です。

AWS Toolkit for Eclipse に設定する

ここで入手できた一時的アクセスキーをAWS Toolkit に指定します。ここではAWS Toolkit for Eclipse での設定方法をご紹介します。
AWS Toolkit for Eclipse のインストール方法は割愛していますが、Eclipse のHelp の Install New Software からインストールするだけです。以下をご参照ください。

https://aws.amazon.com/jp/eclipse/

一時的アクセスキーを設定するには、Eclipse > 環境設定(Preferencies) を選択して[Prefernces] ダイアログを開き、[AWS Toolkit] を選択します。
ダイアログにて、Access Key ID/Secret Access Key および”Use session Token” にチェックを入れて”Session Token” に先程取得した一時的アクセスキーを設定します。

ここで入力したアクセスキーは、開発環境上の <ユーザディレクトリ>/.aws/credentials ファイルに自動的に書き込まれます。このファイルはAWS CLI やAWS SDK for Java がデフォルトで利用する認証情報を保存しておきファイルになります。逆に言うと、こちらのファイルに直接書き込んでもEclipse ように認証情報をセットできるということになります。
デフォルトでは、”default” プロファイルが作成されますので、上記画面の”Add profile” から任意のプロファイルを作成したほうが良いです。

うまく行けば、以下のようにAWS Explorer から各種情報を参照できます。


設定を自動化する

get-session-token は一時的な認証情報を発行しますので、指定した時間が経過すると認証情報は無効になります。ここまでの手順を毎回開発環境で実施するのは面倒なので設定を自動化します。実施することは~/.aws/credentials の内容をsts get-session-token で取得した値に書き換えることだけです。

以下のようなシェルを組みます。(Mac or Linux 環境を想定しています。Windows でも同じような仕組みで作成できると思います。)”<>” で囲まれた部分は適宜ご自身の環境に置き換えてください。

上記シェル実行時に、引数にMFA デバイスで発行されたパスコードを入れてください。自動的に ~/.aws/credentials の内容が書き換わります。

以上です。