みなさんこんにちは!
クラウドコンサルティング課の滝澤です。
担当しているプロジェクトでMFAでWinAuthを使うことがあり、弊社のブログを見ていたのですが、 3年前の記事となっておりマネジメントコンソールのUIもアップデートされているので再度ブログを書くことにしました。
過去の記事はこちら
WinAuthダウンロード
まず、WinAuthを公式ページからダウンロードします。 winauth.github.io
現在の最新バージョンであるWinAuth 3.5.1 (2016-06-07)をダウンロードします。
WinAuth 3.5.1のと書いてあるリンクをクリックするとWinAuth-3.5.1.zipがダウンロードされます。

MFA仮想デバイス設定
ダウンロードしたWinAuth-3.5.1.zipをインストールするWindows PCの任意の場所で展開し、フォルダ内のWinAuth.exeをダブルクリックで実行します。
「Add」ボタンから、「Authenticator」を選択します。

続いて、AWS側の設定を行います。
AWSマネジメントコンソールにログインし、右上のユーザーを選択します。
「セキュリティ認証情報」を選択します。

多要素認証(MFA)で、「MFAデバイスの割り当て」を選択します。
※後述しますが、MFA関連の操作許可ポリシーが付与されていない場合、「MFAデバイスの割り当て」は実行できません。

MFAデバイスを選択画面で、デバイス名とデバイスオプションを選択します。
今回WinAuthを登録するため、「認証アプリケーション」を選択します。

デバイスの設定画面で②の「シークレットキーを表示」を選択し、表示されたシークレットキーをコピーします。
ここでコピーしたシークレットキーをWinAuth側で使用します。

WinAuthに戻り、Add Authenticator画面で「Name」に任意のデバイス名を設定します。
1. Enter the Secret Code for your authenticator. ~の入力フォームに前の手順でコピーしたシークレットキーを入力します。

2. Choose if this is a time-based or a counter-based authenticator.でTime-basedのラジオボタンを選択します。

「Verify Authenticator」を押下すると、4. Verify the following code matches your service.にワンタイムパスワードが表示されるのでコピーします。
コードは30秒で変わってしまうので注意してください。

AWSマネジメントコンソールに戻り、前の手順でコピーしたワンタイムパスワードを③の「仮想アプリケーションのコードを以下で入力してください」に入力します。
30秒経過したのち、WinAuthで生成された新しいワンタイムパスワードを同様に「30秒待ってから、2つ目のコードエントリを入力してください。」に入力します。
入力が完了したら「MFAを追加」を押下します。

正常に割り当てが完了すると「割り当て済みのMFAデバイス」が表示され、多要素認証(MFA)に追加したMFAデバイスが表示されます。

以上でWinAuthでのMFA仮想デバイスの追加が完了となります!
サインイン確認
設定したMFA仮想デバイスでサインインができるか確認しましょう!
通常通り、サインインを行うとMFAのコード入力が求められるので、WinAuthに表示された6桁のコードを入力します。
「Sign In」を押下します。


問題なくログインできたことが確認できましたね!

以上でWinAuthを使ったMFAでのサインインは完了です!
MFAデバイス関連の操作許可ポリシーについて
さて、「MFAデバイスの割り当て」手順でMFA関連の操作許可ポリシーが付与されていない場合、「MFAデバイスの割り当て」は実行できませんと記載しました。
具体的には、以下のような権限が必要となりますので、AWS管理者へ連絡して付与してもらうか、ご自身で権限を付与してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowListActions",
"Effect": "Allow",
"Action": [
"iam:ListUsers",
"iam:ListVirtualMFADevices"
],
"Resource": "*"
},
{
"Sid": "AllowUserToCreateVirtualMFADevice",
"Effect": "Allow",
"Action": [
"iam:CreateVirtualMFADevice"
],
"Resource": "arn:aws:iam::*:mfa/*"
},
{
"Sid": "AllowUserToManageTheirOwnMFA",
"Effect": "Allow",
"Action": [
"iam:EnableMFADevice",
"iam:GetMFADevice",
"iam:ListMFADevices",
"iam:ResyncMFADevice"
],
"Resource": "arn:aws:iam::*:user/${aws:username}"
},
{
"Sid": "AllowUserToDeactivateTheirOwnMFAOnlyWhenUsingMFA",
"Effect": "Allow",
"Action": [
"iam:DeactivateMFADevice"
],
"Resource": [
"arn:aws:iam::*:user/${aws:username}"
],
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": "true"
}
}
},
{
"Sid": "BlockMostAccessUnlessSignedInWithMFA",
"Effect": "Deny",
"NotAction": [
"iam:CreateVirtualMFADevice",
"iam:EnableMFADevice",
"iam:ListMFADevices",
"iam:ListUsers",
"iam:ListVirtualMFADevices",
"iam:ResyncMFADevice"
],
"Resource": "*",
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "false"
}
}
}
]
}
上記ポリシーでは、MFAデバイスの操作を許可するポリシーとMFAが有効になっていない場合ほとんどの操作を拒否するポリシーとなっています。
AWSのDocsにも記載があるので参考にしてください。
docs.aws.amazon.com
まとめ
WinAuthのMFAデバイス登録をやってみましたがいかがだったでしょうか?昨今のセキュリティではMFAが必須となっている場合がほとんどだと思います。
Google AuthenticatorやMicrosoft Authenticatorとさまざまなものがありますが、Windows端末の場合はWinAuthが選択肢になってくる場合もあると思います。
ただし、MFAの本質を考えた場合、PCにMFAアプリがインストールされているとPCを紛失/盗難された場合、アクセスされてしまう可能性が高くなるので、
可能であれば、スマートフォンなど別の端末へのMFAアプリのインストールを推奨します。
この記事が誰かの役に立つと幸いです。
kento.takizawa(記事一覧)
妻と娘をこよなく愛すエンジニア