証明書の認証を使用した IPsec の設定 - FSx for ONTAP

証明書の認証を使用した IPsec の設定

次のトピックでは、FSx for ONTAP ファイルシステムと、Libreswan IPsec を実行しているクライアントで、証明書の認証を使用して IPsec 暗号化を設定する方法について説明します。このソリューションでは、AWS Certificate Manager と AWS Private Certificate Authority を使用してプライベート認証機関を作成し、証明書を生成します。

FSx for ONTAP ファイルシステムと接続されたクライアントの両方で、証明書の認証を使用して IPsec 暗号化を設定する高レベルの手順は、次のとおりです。

  1. 証明書を発行するための認証機関を用意します。

  2. ファイルシステムとクライアントの CA 証明書を生成し、エクスポートします。

  3. 証明書をインストールし、クライアントインスタンスに IPsec を設定します。

  4. 証明書をインストールし、お使いのファイルシステムに IPsec を設定します。

  5. セキュリティポリシーデータベース (SPD) を定義します。

  6. 複数のクライアントアクセス用に IPsec を設定します。

CA 証明書の作成とインストール

証明書の認証を行うには、認証機関の証明書を生成して、FSx for ONTAP ファイルシステムと、ファイルシステムのデータにアクセスするクライアントに、インストールする必要があります。次の例では、AWS Private Certificate Authority を使用してプライベート認証機関を設定し、ファイルシステムとクライアントにインストールする証明書を生成します。AWS Private Certificate Authority を使用すると、自社用の、AWS が完全にホストする、ルートと下位の認証機関 (CA) の階層を作成できます。このプロセスは、次の 5 つのステップから成ります。

  1. AWS Private CA を使用してプライベート認証機関 (CA) を作成します。

  2. ルート証明書を発行してプライベート CA にインストールします。

  3. お使いのファイルシステムとクライアント用のプライベート証明書を AWS Certificate Manager にリクエストします。

  4. ファイルシステムとクライアントの証明書をエクスポートします。

詳細については、「AWS Private Certificate Authority ユーザーガイド」の「Private CA administration」を参照してください。

ルートプライベート CA を作成するには
  1. CA を作成するときは、指定したファイルで CA 設定を指定する必要があります。次のコマンドは、テキストエディタの nano を使用して ca_config.txt ファイルを作成します。このファイルでは以下の情報が指定されています。

    • アルゴリズムの名前

    • CA が署名に使用する署名アルゴリズム

    • X.500 件名情報

    $ > nano ca_config.txt

    テキストエディタが表示されます。

  2. CA の仕様に合わせてファイルを編集します。

    { "KeyAlgorithm":"RSA_2048", "SigningAlgorithm":"SHA256WITHRSA", "Subject":{ "Country":"US", "Organization":"Example Corp", "OrganizationalUnit":"Sales", "State":"WA", "Locality":"Seattle", "CommonName":"*.ec2.internal" } }
  3. ファイルを保存て閉じ、テキストエディタを終了します。詳細については、「AWS Private Certificate Authority ユーザーガイド」の「Procedure for creating a CA」を参照してください。

  4. create-certificate-authority AWS Private CA CLI コマンドを使用して、プライベート CA を作成します。

    ~/home > aws acm-pca create-certificate-authority \ --certificate-authority-configuration file://ca_config.txt \ --certificate-authority-type "ROOT" \ --idempotency-token 01234567 --region aws-region

    作成されると、このコマンドは CA の Amazon リソースネーム (ARN) を出力します。

    { "CertificateAuthorityArn": "arn:aws:acm-pca:aws-region:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012" }
プライベートルート CA の証明書を作成してインストールするには (AWS CLI)
  1. get-certificate-authority-csr AWS CLI コマンドを使用して証明書の署名リクエスト (CSR) を生成します。

    $ aws acm-pca get-certificate-authority-csr \ --certificate-authority-arn arn:aws:acm-pca:aws-region:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012 \ --output text \ --endpoint https://acm-pca.aws-region.amazonaws.com \ --region eu-west-1 > ca.csr

    生成されたファイル ca.csr は base64 形式でエンコードされた PEM ファイルで、次のような外見をしています。

    -----BEGIN CERTIFICATE----- MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6 b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ 21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4 nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE= -----END CERTIFICATE-----

    詳細については、「AWS Private Certificate Authority ユーザーガイド」の「ルート CA 証明書のインストール」を参照してください。

  2. issue-certificate AWS CLI コマンドを使用してルート証明書を発行し、プライベート CA にインストールします。

    $ aws acm-pca issue-certificate \ --certificate-authority-arn arn:aws:acm-pca:aws-region:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012 \ --csr file://ca.csr \ --signing-algorithm SHA256WITHRSA \ --template-arn arn:aws:acm-pca:::template/RootCACertificate/V1 \ --validity Value=3650,Type=DAYS --region aws-region
  3. get-certificate AWS CLI コマンドを使用してルート証明書をダウンロードします。

    $ aws acm-pca get-certificate \ --certificate-authority-arn arn:aws:acm-pca:aws-region:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012 \ --certificate-arn arn:aws:acm-pca:aws-region:486768734100:certificate-authority/12345678-1234-1234-1234-123456789012/certificate/abcdef0123456789abcdef0123456789 \ --output text --region aws-region > rootCA.pem
  4. import-certificate-authority-certificate AWS CLI コマンドを使用してルート証明書をプライベート CA にインストールします。

    $ aws acm-pca import-certificate-authority-certificate \ --certificate-authority-arn arn:aws:acm-pca:aws-region:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012 \ --certificate file://rootCA.pem --region aws-region
ファイルシステムとクライアント証明書を生成し、エクスポートします。
  1. request-certificate AWS CLI コマンドを使用して、ファイルシステムとクライアントで使用する AWS Certificate Manager 証明書をリクエストします。

    $ aws acm request-certificate \ --domain-name *.ec2.internal \ --idempotency-token 12345 \ --region aws-region \ --certificate-authority-arn arn:aws:acm-pca:aws-region:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012

    リクエストが成功すると、発行された証明書の ARN が返されます。

  2. セキュリティ上の理由から、プライベートキーをエクスポートするときはパスフレーズを割り当てる必要があります。パスフレーズを作成し、passphrase.txt という名前のファイルに保存します。

  3. export-certificate AWS CLI コマンドを使用して、前に発行したプライベート証明書をエクスポートします。エクスポートしたファイルには、証明書、証明書チェーン、証明書に埋め込まれているパブリックキーに関連付けられた、暗号化されたプライベート 2048 ビット RSA キー、が含まれています。セキュリティ上の理由から、プライベートキーをエクスポートするときはパスフレーズを割り当てる必要があります。以下は、Linux EC2 インスタンスの場合の例です。

    $ aws acm export-certificate \ --certificate-arn arn:aws:acm:aws-region:111122223333:certificate/12345678-1234-1234-1234-123456789012 \ --passphrase $(cat passphrase.txt | base64)) --region aws-region > exported_cert.json
  4. 次の jq コマンドを使用して、JSON レスポンスからプライベートキーと証明書を抽出します。

    $ cat exported_cert.json | jq -r .PrivateKey > prv.key cat exported_cert.json | jq -r .Certificate > cert.pem openssl rsa -in prv.key -passin pass:$passphrase -out decrypted.key
  5. 次の openssl コマンドを使用して、JSON レスポンスからプライベートキーを復号します。コマンドを入力すると、パスフレーズの入力を求められます。

    $ openssl rsa -in prv.key -passin pass:$passphrase -out decrypted.key

Libreswan IPsec を Amazon Linux 2 クライアントにインストールし、設定する

以下のセクションでは、Amazon Linux 2 を実行している Amazon EC2 インスタンスに Libreswan IPsec をインストールし、設定する方法について説明します。

Libreswan をインストールして設定するには
  1. SSH を使用して EC2 インスタンスに接続します。具体的な手順については、Amazon Elastic Compute Cloud Linux インスタンス用ユーザーガイドの「SSH クライアントを使用して Linux インスタンスに接続する」を参照してください。

  2. 次のコマンドを実行して libreswan をインストールします。

    $ sudo yum install libreswan
  3. (オプション) 後のステップで IPsec を検証する際、これらの設定を行っていないのにプロパティにフラグが付いていることがあります。これらの設定を行わずに、先にセットアップをテストしてみることをお勧めします。接続に問題があれば、このステップに戻って次の変更を施します。

    インストールが完了したら、任意のテキストエディタを使って次のエントリを /etc/sysctl.conf ファイルに追加します。

    net.ipv4.ip_forward=1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.lo.accept_redirects = 0 net.ipv4.conf.lo.send_redirects = 0 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.eth0.rp_filter = 0

    変更を保存して、テキストエディタを終了します。

  4. 変更を適用します。

    $ sudo sysctl -p
  5. IPsec の設定を確認します。

    $ sudo ipsec verify

    インストールした Libreswan のバージョンが実行していることを確認します。

  6. IPsec NSS データベースを初期化します。

    $ sudo ipsec checknss
証明書をクライアントにインストールするには
  1. クライアント用に生成した証明書を EC2 インスタンスの作業ディレクトリにコピーします。お客様

  2. 前に生成した証明書を libreswan と互換性のある形式にエクスポートします。

    $ openssl pkcs12 -export -in cert.pem -inkey decrypted.key \ -certfile rootCA.pem -out certkey.p12 -name fsx
  3. 再フォーマットしたキーをインポートし、プロンプトが表示されたらパスフレーズを指定します。

    $ sudo ipsec import certkey.p12
  4. 任意のテキストエディタを使用して IPsec 設定ファイルを作成します。

    $ sudo cat /etc/ipsec.d/nfs.conf

    以下のエントリを設定ファイルに追加します。

    conn fsxn authby=rsasig left=172.31.77.6 right=198.19.254.13 auto=start type=transport ikev2=insist keyexchange=ike ike=aes256-sha2_384;dh20 esp=aes_gcm_c256 leftcert=fsx leftrsasigkey=%cert leftid=%fromcert rightid=%fromcert rightrsasigkey=%cert

ファイルシステムで IPsec を設定したら、クライアントで IPsec を起動します。

ファイルシステムで IPsec を設定する

このセクションでは、FSx for ONTAP ファイルシステムに証明書をインストールし、IPsec を設定する方法について説明します。

証明書をファイルシステムにインストールするには
  1. ルート証明書 (rootCA.pem)、クライアント証明書 (cert.pem)、復号されたキー (decrypted.key) の各ファイルをファイルシステムにコピーします。証明書のパスフレーズを書き留めておく必要があります。

  2. NetApp ONTAP CLI にアクセスするには、次のコマンドを実行して、Amazon FSx for NetApp ONTAP ファイルシステムの管理ポートで SSH セッションを確立します。management_endpoint_ip をファイルシステムの管理ポートの IP アドレスに置き換えます。

    [~]$ ssh fsxadmin@management_endpoint_ip

    詳細については、「ONTAP CLI を使用したファイルシステムの管理」を参照してください。

  3. 各ファイルの出力をコピーし、次のステップで画面に指示が出たときに貼り付けられるよう、(ファイルシステムではなく) クライアントで cat を使用して rootCA.pemcert.pemdecrypted.key ファイルの内容を一覧表示します。

    $ > cat cert.pem

    証明書の内容をコピーします。

  4. すでにインストールされている場合 (ONTAP 自己署名ルート CA のケースなど) を除き、相互認証時に使用されるすべての CA 証明書を、ONTAP 側およびクライアント側両方の CA を含め、ONTAP 証明書管理にインストールする必要があります。

    security certificate install NetApp CLI コマンドを次のように使用して、クライアント証明書をインストールします。

    FSxID123:: > security certificate install -vserver dr -type client -cert-name ipsec-client-cert
    Please enter Certificate: Press <Enter> when done

    前にコピーした cert.pem ファイルの内容を貼り付け、Enter キーを押します。

    Please enter Private Key: Press <Enter> when done

    前にコピーした decrypted.key ファイルの内容を貼り付け、Enter キーを押します。

    Do you want to continue entering root and/or intermediate certificates {y|n}:

    n を入力し、クライアント証明書の入力を完了します。

  5. SVM で使用する証明書を作成し、インストールします。この証明書の発行者 CA は、既に ONTAP にインストールされ、 IPsec に追加されている必要があります。

    以下のコマンドを使用して、ルート証明書をインストールします。

    FSxID123:: > security certificate install -vserver dr -type server-ca -cert-name ipsec-ca-cert
    Please enter Certificate: Press <Enter> when done

    前にコピーした rootCA.pem ファイルの内容を貼り付け、Enter キーを押します。

  6. インストールされている CA が、認証中に IPsec CA 検索パス内に存在していることを確かめるには、security ipsec ca-certificate add コマンドを使って ONTAP 証明書管理 CA を IPsec モジュールに追加します。

    以下のコマンドを入力し、ルート証明書を追加します。

    FSxID123:: > security ipsec ca-certificate add -vserver dr -ca-certs ipsec-ca-cert
  7. 次のコマンドを入力し、必要な IPsec ポリシーをセキュリティポリシーデータベース (SPD) に作成します。

    security ipsec policy create -vserver dr -name policy-name -local-ip-subnets 198.19.254.13/32 -remote-ip-subnets 172.31.0.0/16 -auth-method PKI -action ESP_TRA -cipher-suite SUITEB_GCM256 -cert-name ipsec-client-cert -local-identity "CN=*.ec2.internal" -remote-identity "CN=*.ec2.internal"
  8. 次のコマンドを使用してファイルシステムの IPsec ポリシーを表示し、確認します。

    FSxID123:: > security ipsec policy show -vserver dr -instance Vserver: dr Policy Name: promise Local IP Subnets: 198.19.254.13/32 Remote IP Subnets: 172.31.0.0/16 Local Ports: 0-0 Remote Ports: 0-0 Protocols: any Action: ESP_TRA Cipher Suite: SUITEB_GCM256 IKE Security Association Lifetime: 86400 IPsec Security Association Lifetime: 28800 IPsec Security Association Lifetime (bytes): 0 Is Policy Enabled: true Local Identity: CN=*.ec2.internal Remote Identity: CN=*.ec2.internal Authentication Method: PKI Certificate for Local Identity: ipsec-client-cert

クライアントで IPsec を起動する

IPsec を FSx for ONTAP ファイルシステムとクライアントの両方で設定したので、これで IPsec をクライアントで起動できます。

  1. SSH を使用してクライアントシステムに接続します。

  2. IPsec を起動します。

    $ sudo ipsec start
  3. IPsec のステータスをチェックします。

    $ sudo ipsec status
  4. ファイルシステムにボリュームをマウントします。

    $ sudo mount -t nfs 198.19.254.13:/benchmark /home/ec2-user/acm/dr
  5. FSx for ONTAP ファイルシステムの暗号化された接続を表示し、IPsec の設定を確認します。

    FSxID123:: > security ipsec show-ikesa -node FsxId123 FsxId08ac16c7ec2781a58::> security ipsec show-ikesa -node FsxId08ac16c7ec2781a58-01 Policy Local Remote Vserver Name Address Address Initator-SPI State ----------- ------ --------------- --------------- ---------------- ----------- dr policy-name 198.19.254.13 172.31.77.6 551c55de57fe8976 ESTABLISHED fsx policy-name 198.19.254.38 172.31.65.193 4fd3f22c993e60c5 ESTABLISHED 2 entries were displayed.

複数のクライアントに IPsec を設定する

IPsec を使用する必要のあるクライアントが少数である場合は、各クライアントに 1 つの SPD エントリを使用すれば十分です。しかし、数百あるいは数千のクライアントで IPsec を使用する必要がある場合は、IPsec の複数クライアント構成を使用することが推奨されます。

FSx for ONTAPは、複数のネットワーク上にある複数のクライアントを IPsec が有効である 1 つの SVM IP アドレスに接続することを、サポートしています。これは、subnet 構成または Allow all clients 構成のいずれかを使用することで達成できます。その方法については、以下の手順で説明します。

サブネット構成を使用して複数のクライアント用に IPsec を構成するには

特定のサブネット (192.168.134.0/24 など) 上にあるすべてのクライアントを、1 つの SPD ポリシーエントリを使って、1 つの SVM IP アドレスに接続するには、サブネット形式で remote-ip-subnets を指定する必要があります。さらに、正しいクライアント側 ID を使って remote-identity を指定する必要があります。

重要

証明書の認証を使用すると、各クライアントは、独自の証明書か共有証明書を使用して、認証を行うことができます。FSx for ONTAP IPsec は、ローカルのトラストストアにインストールされている CA に基づいて、証明書の有効性をチェックします。FSx for ONTAP は、証明書失効リスト (CRL) のチェックもサポートしています。

  1. NetApp ONTAP CLI にアクセスするには、次のコマンドを実行して、Amazon FSx for NetApp ONTAP ファイルシステムの管理ポートで SSH セッションを確立します。management_endpoint_ip をファイルシステムの管理ポートの IP アドレスに置き換えます。

    [~]$ ssh fsxadmin@management_endpoint_ip

    詳細については、「ONTAP CLI を使用したファイルシステムの管理」を参照してください。

  2. security ipsec policy createNetApp ONTAP CLI コマンドを以下のように使用して、sample の値を特定の値に置き換えます。

    FsxId123456::> security ipsec policy create -vserver svm_name -name policy_name \ -local-ip-subnets 192.168.134.34/32 -remote-ip-subnets 192.168.134.0/24 \ -local-ports 2049 -protocols tcp -auth-method PSK \ -cert-name my_nfs_server_cert -local-identity ontap_side_identity \ -remote-identity client_side_identity
Allow all clients 構成を使用して複数のクライアント用に IPsec を構成するには

ソース IP アドレスに関係なくすべてのクライアントに SVM IPsec 対応 IP アドレスへの接続を許可するには、remote-ip-subnets フィールドを指定するときに 0.0.0.0/0 ワイルドカードを使用します。

さらに、正しいクライアント側 ID を使って remote-identity を指定する必要があります。証明書の認証には、ANYTHING と入力します。

また、0.0.0.0/0 のワイルドカードを使用する場合は、使用する特定のローカルまたはリモートのポート番号を設定する必要があります。例えば、NFS ポート 2049 です。

  1. NetApp ONTAP CLI にアクセスするには、次のコマンドを実行して、Amazon FSx for NetApp ONTAP ファイルシステムの管理ポートで SSH セッションを確立します。management_endpoint_ip をファイルシステムの管理ポートの IP アドレスに置き換えます。

    [~]$ ssh fsxadmin@management_endpoint_ip

    詳細については、「ONTAP CLI を使用したファイルシステムの管理」を参照してください。

  2. security ipsec policy createNetApp ONTAP CLI コマンドを以下のように使用して、sample の値を特定の値に置き換えます。

    FsxId123456::> security ipsec policy create -vserver svm_name -name policy_name \ -local-ip-subnets 192.168.134.34/32 -remote-ip-subnets 0.0.0.0/0 \ -local-ports 2049 -protocols tcp -auth-method PSK \ -cert-name my_nfs_server_cert -local-identity ontap_side_identity \ -local-ports 2049 -remote-identity client_side_identity