ONTAPのSecurity機能について3【公開鍵認証でSSH接続編】

## はじめに
NetApp StorageであるAFFやFASのOSであるONTAPには様々な機能がありますが、
この記事ではSecurityに関する機能である公開鍵認証の設定方法について記載します。
設定はCLIを用いて行います。


## 何をしたい？できる？
- パスワードを使わないでSSHログイン
- <font color="Red">**ONTAPに登録した鍵を持った人だけがSSHログインできるようにする**</font>
- Windowsクライアントから設定

Linuxからの設定については、以下の記事が参考になります。
[パスワード認証無しでONTAPにログインし、ONTAP CLIを実行する方法](https://qiita.com/kan_itani/items/43529ddf3894a9dee6e8)

## 公開鍵認証とは
パスワードを使った認証は、「アカウント」と「パスワード」さえ知っていれば、どのPC上のユーザからでもログインすることができます。
一方で**公開鍵認証方式は、「公開鍵」と「秘密鍵」のペア（キーペア）を用いて認証を行う方式**で、**事前に登録した鍵を持ってるPC＋ユーザのみログインさせる事ができる**ようになります。(PCやユーザ毎に鍵は異なる)


以下の簡易化したイメージではPCを動物に置き換えてますが、パスワードを知っていれば入れるのではなく、登録されている鍵を持ってる場合にのみ入る事ができるというように考えて頂くと理解し易くなると思います。
![SSH01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/d2aa500f-96c5-4595-2719-f2281b70da5a.png)

仕組みは自体はちょっと難しいところもありますが、実際に設定が必要なものは、
**・クラアントで鍵のペア生成**
**・ONTAP側にユーザ作成＋公開鍵認証を使う旨の設定**
**・ONTAP側に公開鍵の登録**
の3つのみとなります。
以下公開鍵認証のイメージにおける通信部分は、クライアントとONTAP側で内部的に実施する内容となる為、操作者自体が何かを行うということではありません。
![SSH02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/0a8d14cd-c08d-4df3-632a-bb3babb4a5f6.png)


<font color="Red">**ONTAP側の鍵登録やユーザ作成が完了するまでは、ONTAPに対してパスワード方式でログインして操作を実施する必要があります。**</font>


## 設定手順

例で指定されている以下のパラメータは、環境によって異なる内容なので適宜変更して下さい。
また、ONTAPで提供しているユーザ用SVMへSSH接続する事を前提としての記載です。
- 仮想Storage(SVM)名：cifs100
- ONTAP側管理ユーザ：vsadmin
- ONTAP側公開鍵アクセス用ユーザ：ssh_user100
- Windows端末側のユーザ：ssh_user01


#### 1. 鍵作成用のフォルダを作成

##### 1-1. Windows端末でPowershellを起動しフォルダ作成
```powershell:
> mkdir .ssh
```
![SSH03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/366cc48d-9547-fc5c-7a03-897704214fcc.png)

##### 1-2. 公開鍵認証の鍵ペアの作成
ここでは、暗号化に関する**オプションは何も指定しないのでssh-keygenコマンドのデフォルト値であるRSAの2048bitが利用**されます。

IPAで翻訳している[NIST Special Publication 800-57](https://www.ipa.go.jp/files/000055490.pdf)によると、RSAの2048bitの利用は2030年以降は安全ではないという扱いとなります。
もし不安なようであれば、オプションを付けてED25519のような強度の高いものを指定して鍵作成を実施することもできます。

パスワードを使わないでSSHログインという目的の内容の為、**コマンド実行後のパスフレーズは入力しないで進めます。**

```powershell:
> ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\ssh_user01/.ssh/id_rsa): #鍵の作成場所を確認
Enter passphrase (empty for no passphrase): #パスフレーズは入力しない
Enter same passphrase again:　#パスフレーズは入力しない
```


##### 1-3. 公開鍵が作成されている事の確認
拡張子がPUBとなっているファイルが公開鍵となり、後にONTAPで作成したユーザと紐付けが必要になります。
![SSH04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/b3c822dc-ab22-e98b-7b78-b1b870bcda7d.png)


#### 2. ONTAP(管理SVM)から公開鍵認証用でログインする為のユーザを作成
<font color="Red">**ユーザ作成の為には、個々のデータアクセス用のSVMではなくクラスタ管理SVMにへログインが必要です。**</font>

```bash:
security login create -vserver cifs100 -user-or-group-name ssh_user100 -application ssh -authentication-method publickey -role vsadmin
```

#### 3. 作成したONTAP(SVM)上のユーザへWindowsで作成した公開鍵の紐付け


##### 3-1. Windows上の公開鍵を確認
メモ帳等を使い、拡張子がPUBのファイルを確認し、表示されている行をコピーします。
(ssh-rsaから末尾まで全部)
![SSH05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/f6ab28ce-f450-1a8c-52f6-99440bdf8023.png)


##### 3-2. ONTAP(SVM)上のユーザへ公開鍵の紐付け
この操作はクラスタ管理SVMでも操作可能ですが、個々のデータアクセス用のSVMからも実施することができます。
-publickeyの引数でコピーした公開鍵を貼り付けますが、""で囲ってコピーします。

```bash:
security login publickey create -vserver cifs100 -username ssh_user100 -index 0 -publickey "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDXLlWAUiOm8xYEaH99j1NDTmgNgoQHT6ZNUYqv1fgNsWyVfCt38iM6CnY2nVkp/65C51HCrbREBmluXXXXXXXXXXXXXXXXXXXXXXXXXXXXXwFx1qPVqzKeT7aaKiD7sX0XXXXXXXXXXXXXXXXXXXXXXXXX2JaxfpmpL2CfX30DWvoWyhsE1KSraD6+DvAPXXXXXXXXXXXXXXXXXXXXX7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ssh_user01@WIn2019-01"
```



#### 4. Windows端末からONTAPへのSSHを確認
SSH接続の際には、Windows側に作成されている**秘密鍵を指定してログイン**を実行します。


```powershell:
ssh -i id_rsa ssh_user100@<"IPやHost名">
```
![SSH06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/138bb534-cafe-0076-2126-b9f96b14b568.png)


鍵ペアの作成や登録をRSA以外で設定しても以下のようにログイン可能です。
![SSH07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/968057f4-e00a-af41-fef6-d45d04a0ddd2.png)
## 参考及びリンク
[ONTAPの操作でSSH 公開鍵アカウントを有効化](https://docs.netapp.com/ja-jp/ontap/authentication/enable-ssh-public-key-accounts-task.html)
[ONTAP管理者アカウントに公開鍵を関連付け](https://docs.netapp.com/ja-jp/ontap/authentication/manage-public-key-authentication-concept.html)