nkjmkzk.net

powered by Kazuki Nakajima

ZFSのiSCSI TargetをLinuxから利用するときのアクセス制御設定

仮想化環境でゲストOSにネットワーク経由(iSCSI)で直接ストレージを認識させる場合、ストレージ側で何らかの接続制御を行う必要に迫られます。何も制御してないと、ゲストOS: NKJMからゲストOS:SUZUKI用のボリュームに接続できてしまったりと、意図的であろうとなかろうと本来接続するボリュームとは違うボリュームに接続してしまう可能性があるからです。

ちなみにゲストOSから直接ストレージを認識させる形式ではなく、一旦ホストOS(dom0)に認識させてからゲストOSに貸し出すような形であればホストOS側で制御できるのでそこまでデリケートになる必要はないでしょう。

今回はiSCSIストレージにZFS、ゲストOSにLinux(Oracle Enterprise Linux 5.x, Redhat Enterprise Linux 5.x, CentOS 5.x)を使用しているときのアクセス制御についてまとめておきます。

「オペレーションミスを予防する」という目的であればInitiator IQNでアクセス制御する程度がシンプルでいいでしょう。しかしInitiator IQNは簡単に詐称できるので、セキュリティを真に確保しなければいけないPublicな環境であればより強固な認証を実施することが求められるでしょう。

それぞれの制御方法について順に紹介していきます。

Initiator IQNで認証

特定のTargetにアクセスできるInitiator IQNをあらかじめ定義しておき、アクセス時のInitiator IQNをベースに制御を行うものです。

Initiator側(Linux)

特に設定は必要ありませんが、Initiator IQNの情報だけ取得しておく必要があります。

[root@initiator1]# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.1994-05.com.redhat:123456

Target側(OpenSolaris)

まず接続を許可するInitiator IQNのオブジェクトを作成します。オブジェクト名は何でも構いませんが今回はinitiator1としています。

[root@target]# iscsitadm create initiator -n iqn.1994-05.com.redhat:123456 initiator1

次にそのInitiatorオブジェクトと、アクセスを許可したいTargetを紐づけます。

[root@target]# iscsitadm modify target -l initiator1 [TARGET_NAME]

これでTARGET_NAMEはinitiator1,つまりiqn.1994-05.com.redhat:123456からのアクセスのみを許可するようになります。

CHAP認証

CHAP認証ではInitiator IQNの検査に加えusername/passwordによる認証を行います。

Initiator側(Linux)

CHAPのusername/passwordを設定します。これには設定ファイルを編集する方法と、TargetをDiscoveryして登録し、登録されたTargetのプロファイルを設定する方法があります。前者はグローバルなデフォルト設定になるので、新しく登録されたTargetにはすべてこの設定ファイルに記載されているusername/passwordでログインしにいくようになります。Target個別に認証方法やusername/passwordを設定する場合は後者の方法で設定する必要があります。以下では前者の設定ファイルの編集を解説します。

[root@initiator1]# vi /etc/iscsi/iscsid.conf
node.session.auth.authmethod = CHAP
node.session.auth.username = user1
node.session.auth.password = zfszfszfszfs (12文字以上16文字以内)

編集が完了したら設定を反映させるためにiscsidをリスタートします。

[root@initiator1]# service iscsi restart

以上でInitiator側の設定は完了です。

Target側(OpenSolaris)

まず接続を許可するInitiator IQNのオブジェクトを作成します。オブジェクト名は何でも構いませんが今回はinitiator1としています。

[root@target]# iscsitadm create initiator -n iqn.1994-05.com.redhat:123456 initiator1

次にそのInitiatorにusername/passwordを設定します。これはInitiator側で設定したusername/passwordと一致しなければなりません。

まずはusernameです。

[root@target]# iscsitadm modify initiator -H initiator1 user1

次にpasswordです。

[root@target]# iscsitadm modify initiator -C initiator1
*プロンプトが表示され、パスワード(今回はzfszfszfszfs)を2度入力します。

次にそのInitiatorオブジェクトと、アクセスを許可したいTargetを紐づけます。

[root@target]# iscsitadm modify target -l initiator1 [TARGET_NAME]

これでTARGET_NAMEはinitiator1,つまりiqn.1994-05.com.redhat:123456からのアクセスのみを許可し、さらにCHAPの認証が通った場合だけアクセスできるようになります。以下のようにInitiator側から登録とログインを行ってみてください。

[root@initiator1]# iscsiadm -m discovery -t st -p [TARGET_IP]
[root@initiator1]# iscsiadm -m node --login

なお、すでにInitiator側でTargetを登録した状態でiscsid.confを編集してservice iscsi restartしてもログインは成功しません。すでにそのTargetのプロファイルはCHAP認証なしということで作成されているからです。この場合は一度プロファイルをiscsiadm -m node -o deleteとして削除してdiscoverからやり直すか、Targetのプロファイルを個別に設定してやる必要があります。その方法を以下に記載しておきます。

[root@initiator1]# iscsiadm -m node -T [TARGET_IQN] -o update -n node.session.auth.authmethod -v CHAP
[root@initiator1]# iscsiadm -m node -T [TARGET_IQN] -o update -n node.session.auth.username -n user1
[root@initiator1]# iscsiadm -m node -T [TARGET_IQN] -o update -n node.session.auth.password -n zfszfszfszfs

という感じです。

without comments

Written by 中嶋 一樹

9月 19th, 2009 at 6:12 pm

Posted in Uncategorized

Tagged with , , ,

Leave a Reply