Akamai MFAを利用してSSHの公開鍵認証をよりセキュアにする

# Akamai MFA とは

Akamai MFAは、FIDO2に対応しているスマートフォンのMFA(多要素認証)アプリです。
不正アクセスに対して強力なMFA機能を利用することによって、対象のアカウントは、フィッシングやソーシャルエンジニアリング攻撃など、アカウントに対する様々な攻撃から保護することができます。

Akamai MFAは以下のプラットフォームに対応しており、無料のアプリです。

- iOS 13 以降 (iPad、iPhone、iPod Touch) : [App Store](https://apps.apple.com/jp/app/akamai-mfa/id1503619894
)
- Android 7 以上 (スマートフォンおよびタブレット) : [Google Play](https://play.google.com/store/apps/details?id=com.akamai.pushzero&hl=ja&gl=US
)

AkamaiはKryptCoを2019年に買収し、KryptCoが開発していたMFAアプリKryptonの機能はAkamai MFAに引き継がれています。
Akamai MFAはゼロトラストネットワークアクセス(ZTNA)のソリューションであるAkamai EAAとも組み合わせることができます。

https://techdocs.akamai.com/mfa/docs

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/6d2153ff-6eea-6a2c-c5ec-9734c00716d1.png)



# Krypton akr FIDO2 SSH Agent(akr) を利用してSSH接続をよりセキュアに

サーバーやGitへSSH接続する際には通常、公開鍵認証にて接続します。
この接続の際には、認証を行うために秘密鍵利用する必要がありますが、その秘密鍵は接続元の端末内で管理されることが多いです。
Akamai MFAでは、その秘密鍵をスマートフォン内で管理することができ、秘密鍵を利用する際にMFAによる認証を付与することができます。
この方法により、秘密鍵を複製または漏洩を防ぐことができ、不正に秘密鍵を利用されることを防ぐことができます。
SSH接続元の端末がスマートフォンのAkamai MFAに秘密鍵を取得する際に利用するのが、Krypton akr FIDO2 SSH Agent になります。

:::note warn
akrの機能はベータ提供中となり、機能の動作を保証するものではありません。
https://techdocs.akamai.com/mfa/docs/akr-fido2-ssh-agent
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/7b2aa2b6-e19a-2e69-9b9f-6dda40433c8d.png)

# akrをインストールする

akr はオープンソースで提供されており、無料で利用することができます。

https://github.com/akamai/akr

今回は、SSHの接続元はMac、接続先はLinodeのサーバーという構成にて接続方法を紹介します。

akrは以下の環境にてインストールが可能です。

- macOS (10.15+) or Linux (64 Bit) (Debian, RHEL, and CentOS).
- OpenSSH Client and Server 8.2+
- pinentry

## akr インストール (macOS)

akrを動作させるためには、OpenSSHのバージョンが8.2以上である必要があります。
今回はHomebrewを利用したアップデート方法になります。

```
# SSH Version確認
ssh -V

# 8.1以下の場合はVersion UPを実行
brew install openssh

# shell 再読み込み
exec $SHELL -l

# SSH Version確認
ssh -V
```

akrと動作に必要なpinentryをインストールします。

```
brew install akamai/mfa/akr
brew install pinentry-mac
```

akrの初期設定をします。

```
# akrの初期セットアップ
akr setup
# 設定内容の確認
akr setup --print-only
```

ssh configに以下の設定が記載されていることを確認します。

```
cat ~/.ssh/config

# Begin Akamai MFA SSH Config
Host *
	IdentityAgent /Users/hisat/.akr/akr-ssh-agent.sock
# End Akamai MFA SSH Config
```

pairのコマンドを発行し、端末とAkamai MFAのアプリを紐付けします。

```
akr pair
```

QRコードが表示されます。Akamai MFAのアプリを立ち上げ、表示されたQRコードをスキャンし、pairを完了させます。

<img width="500" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/047958c2-3c53-c996-bd98-def9cd41caf1.png">
<img width="250" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/d889c7a8-d7ab-4f4c-89e4-9edfb1ca24b2.png">


秘密鍵の作成を行い、公開鍵情報を取得します。

```
akr generate --name mykey

sk-ecdsa-sha2-nistp256@openssh.com XXXXXXXXXXXXXXXXXXXXX ssh:mykey
```

公開鍵の情報はloadコマンドで確認することができます。(秘密鍵の情報は確認することはできません。)

```
akr load
```

## 接続先のLinodeサーバーに公開鍵を登録

接続テストとして、今回はLinodeのサーバーに公開鍵を登録します。

https://qiita.com/isss802/items/5313c7a6da1d9ed50a38

サーバーに接続し、先程表示された公開鍵情報を登録します。

```
vim ~/.ssh/authorized_keys

sk-ecdsa-sha2-nistp256@openssh.com XXXXXXXXXXXXXXXXXXXXX ssh:mykey
```

## Akamai MFAに登録された秘密鍵を利用してLinodeのサーバーに接続

akrをセットアップしたmacOSに接続先のサーバー情報をssh configに記載します。

```
vim ~/.ssh/config

Host linode
  Hostname 192.0.2.1(記載しているIPは記入例)
  User root

# Begin Akamai MFA SSH Config
Host *
  IdentityAgent /Users/hisat/.akr/akr-ssh-agent.sock
# End Akamai MFA SSH Config
```

サーバーにSSH接続します。

```
ssh linode
```

接続の際にAkamai MFAにプッシュ通知が来て、Allowすることで秘密鍵の情報を取得し、SSHすることが可能となります。

<img width="250" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/20d937f7-4bbb-a7da-fe38-c19c412c6913.png">


# まとめ

Akamai MFAとakrを利用することにより、SSH接続する際の秘密鍵の管理をよりセキュアに運用していくことが可能です。
Linodeなどのサーバーを運用する場合や、Githubへの接続への利用など様々な公開鍵認証を行う接続に活用していくことができます。

# 関連記事

アカマイ・テクノロジーズ合同会社のQiitaではAkamaiの製品を活用した開発者向けの記事を記載しております。

https://qiita.com/organizations/Akamai