概要

IAMユーザーのログイン時にMFAを要求され、OTPにて認証を行っている人は多いかと存じます。
弊社内ではSAMLを使用したフェデレーション認証を行っているのでIAMユーザー自体にMFAを設定して利用するケースは少ないのですが、お客様保有アカウントなどにアクセスを行う際にMFA有効化状態でIAMユーザーを発行して頂くケースはあります。

OTPの面倒な点として、毎回OTPのアプリケーションを開きワンタイムパスワードを確認・入力するという手間がかかってしまう所があります。
入力ミスをしてしまったり、ちょうどワンタイムパスワードが切り替わるタイミングで認証に失敗したりといった経験がある人はいるのではないでしょうか。

今回は物理のセキュリティキーを使用して、2段階目の認証をタッチのみ、もしくはPIN入力 + タッチで行える方法について記載していきます。

なお、2023年11月15日頃にGoogleから発表されたTitanセキュリティキーを個人的に入手したため、それを使用してのPasskey認証を行って、ノンパスワードのログインを実現したかったのですが、記事作成時点では一般向けリージョンには対応していないようなのでMFA認証によるアクセスを試してみようと思います。

Googleの物理セキュリティキー「Titan」、「パスキー」保存可能に – ITmedia Mobile
AWS IAM が AWS GovCloud (米国) リージョンでの多要素認証用 FIDO2 をサポート

FIDOとは

FIDOとはデバイス側に秘密鍵、サービス側に公開鍵を持った状態とし、認証時にチャレンジをデバイス側に送信し、受け取ったチャレンジを秘密鍵で暗号化します。暗号化したデータをサービス側に送信し、サービス側では公開鍵で復号を試みます。復号出来る事が確認出来れば正式な所有者と判断出来る事から認証を通すという仕組みになっています。

次世代認証技術「FIDO」 – 厚生労働省

Yubikey等のセキュリティキーはキー内部に証明書を保持しており、ブラウザからセキュリティキーにチャレンジを渡したものを暗号化する処理を担っています。
この際、PINを設定しているキーの場合は認証処理の前にPINの入力が行われ、それをパスした後に暗号化処理を実施します。

IAMユーザーの場合、FIDO認証を利用してMFAを行う方式となっており、ユーザー/パスワードでログインした後にセキュリティキーによる認証を実施する方式となっています。

試すセキュリティキー

今回試す為に用意したセキュリティキーは下記の2種類となります。

Yubikey 5cは元々所有しており、GitHubや個人で使用しているVPSサービスなどの認証に利用しているものです。
TitanセキュリティキーはPasskey普及が見えてきてYubikey 5cでは証明書保存数が25と少々心許ない事から250保存可能となった新型のTitanセキュリティキーを購入しています。

今回は各キーを1本ずつの登録を試していますが、2本以上用意して複数登録しておくことで紛失時などに残っているセキュリティキーを使用してログインを行い、紛失した方のセキュリティキーを無効化するなどの運用が可能となりますので新たに購入して登録したい場合には2本以上まとめて購入しておくことをオススメします。
なお、2本同じ形のキーを用意した場合、どちらのキーか判らなくなるので色違いのストラップを付けるなどで区別出来る様にしておくと便利です。

Yubikey5c

Titanセキュリティキー

IAMユーザーのポリシー追加

IAMユーザーの認証にセキュリティキーを登録するには、MFAデバイスとして登録を行います。
実験ではAdministratorAccessポリシーを持っているユーザーで行っている、かつMFA必須の制限を加えない状態にするため特にポリシー設定を行っておりませんが、MFAを有効にする場合はポリシーの設定が必要となります。

FIDO セキュリティキーの有効化 (コンソール) – AWS Identity and Access Management に記載されているポリシーを指定する事でMFAの登録や解除を行う事が可能になり、かつMFAを通していない場合はMFAの登録以外の処理は拒否するように設定されますので適宜付与してください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowManageOwnUserMFA",
            "Effect": "Allow",
            "Action": [
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:GetUser",
                "iam:ListMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "DenyAllExceptListedIfNoMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:EnableMFADevice",
                "iam:GetUser",
                "iam:ListMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}

セキュリティキーの登録

セキュリティキーはIAMユーザーのMFAとして登録する事が可能です。
OTPの設定と同様にMFAデバイスの割り当てから設定を行います。
MFAデバイス一覧

MFAデバイスを選択画面でSecurity Keyが選べますので、そちらを選択してください。
デバイス名はデバイスを一意で認識出来る名称を付ける事をオススメします。
例えば自身のYubikey 5cには黒いストラップ、茶色いストラップを付けているのでYubikey-BlackYubikey-Brown、またシリアル番号が裏に書かれているので下3桁を付けてYubikeyXXXなど、判りやすい形で付けておきましょう。
例では1本しか登録しないので省略してYubikeyとしています。
セキュリティキー登録情報

次の画面に進むと、セキュリティキーの設定画面が表示されます。
セキュリティキー登録

セキュリティキーを指していない場合はセキュリティキーの選択、セキュリティキーを指している場合でセキュリティキー側にPINが設定されている場合はPIN入力が要求されるので、指示に従ってセキュリティキーを指して、PINの入力を完了してください。
セキュリティキーの選択
PIN入力

セキュリティキーの使用準備が完了すると、下記図のようにタップ指示が出ます。セキュリティキーにあるボタンをタップすると認証が完了となります。
セキュリティキー認証

なお、初回の認証時にはセキュリティキーへのアクセスを許可するかを確認されますので許可しておいてください。
こちらはドメイン単位での許可となりますので、他サービスを使用時にも出てくるのでご注意ください。
セキュリティキーアクセス許可

これでセキュリティキーの登録が完了します。
セキュリティキー登録完了

なお、Titanセキュリティキーでも登録を行ってみたのですが、所持している2本のTitanセキュリティキーでは正常に完了する事が出来ませんでした。
原因は不明で調査をしているのですが現時点ではFIDO2の対応版のTitanセキュリティキーは使用出来ない可能性がありますのでご注意ください。
セキュリティキー登録エラー

ログイン

まずは通常通り、アカウントID(OR アカウントエイリアス)、IAMユーザー名、パスワードでログインします。
AWSコンソールログイン画面

サインインすると、使用するキーの選択を要求されるので、スマートフォン、タブレット、またはセキュリティキーを使用するを選択します。
セキュリティキーの選択

すると認証待ち状態になるため、セキュリティキーにタップする事で認証が完了し、コンソールが表示されます。
セキュリティキー認証

CLIについて

残念ながらセキュリティキーによるCLIの認証はサポートされていません。
AWS CLI 経由で MFA を使用してアクセスを認証する | AWS re:Post

CLIでMFAを使用したい場合はOTPによる多要素認証を使用してください。
一つのIAMユーザーには複数のMFA(最大8件)を登録する事が可能となっていますので、コンソールアクセスにはセキュリティキー、CLIにはOTPを使用することが出来ます。