認証にスマートカードを使用する - Amazon WorkSpaces

認証にスマートカードを使用する

WorkSpaces Streaming Protocol (WSP) バンドルの Windows および Linux WorkSpaces では、認証に共通アクセスカード (CAC) およびパーソナル ID 検証 (PIV) スマートカードを使用できます。

Amazon WorkSpaces は、セッション前認証セッション内認証の両方でスマートカードの使用をサポートします。セッション前認証とは、ユーザーが WorkSpaces にログインしている間に実行されるスマートカード認証をいいます。セッション内認証とは、ログイン後に実行される認証をいいます。

例えば、ユーザーは、ウェブブラウザやアプリケーションを操作しながら、セッション内認証にスマートカードを使用できます。また、管理アクセス許可が必要な操作にスマートカードを使用することもできます。例えば、ユーザーが Linux WorkSpace に対する管理アクセス許可を持っている場合、sudo および sudo -i コマンドの実行時にスマートカードを使用して自身を認証できます。

Requirements

  • セッション前認証には、Active Directory Connector (AD Connector) ディレクトリが必要です。AD Connector は、証明書ベースの相互 Transport Layer Security (相互 TLS) 認証を使用し、ハードウェアまたはソフトウェアベースのスマートカード証明書を使用して Active Directory に対してユーザーを認証します。AD Connector およびオンプレミスのディレクトリを設定する方法の詳細については、ディレクトリ設定 を参照してください。

  • Windows または Linux WorkSpace でスマートカードを使用するには、Amazon WorkSpaces Windows クライアントバージョン 3.1.1 以降または WorkSpaces MacOS クライアントのバージョン 3.1.5 以降を使用する必要があります。Windows および MacOSクライアントでスマートカードを使用する方法の詳細については、Amazon WorkSpaces ユーザーガイドスマートカードのサポートを参照してください。

  • ルート CA 証明書およびスマートカード証明書は、特定の要件を満たしている必要があります。詳細については、 AWS Directory Service 管理ガイドの「スマートカードで使用する AD Connector で mTLS 認証を有効にする」および Microsoft のドキュメントの「証明書の要件」を参照してください。

    これらの要件に加えて、Amazon WorkSpaces へのスマートカード認証に使用されるユーザー証明書には、以下の属性を含める必要があります。

    • 証明書の subjectAltName (SAN) フィールドの AD ユーザーの userPrincipalName (UPN)。ユーザーのデフォルト UPN のスマートカード証明書を発行することをお勧めします。

    • クライアント認証 (1.3.6.1.5.5.7.3.2) 拡張キー使用法 (EKU) 属性。

    • スマートカードログオン (1.3.6.1.4.1.311.20.2.2) EKU 属性。

  • セッション前認証では、証明書失効チェックにオンライン証明書状態プロトコル (OCSP) は必須です。セッション内認証では、OCSP を使用することをお勧めしますが、必須ではありません。

Limitations

  • 現在、WorkSpaces の Windows クライアントアプリケーションバージョン 3.1.1 以降と macOS クライアントアプリケーションバージョン 3.1.5 以降のみが、スマートカード認証をサポートしています。

  • WorkSpaces Windows クライアントアプリケーション 3.1.1 以降では、クライアントが 64 ビットバージョンの Windows で実行されている場合にのみ、スマートカードがサポートされます。

  • 現在、スマートカード認証では、AD Connector ディレクトリのみがサポートされています。

  • セッション内認証は、WSP がサポートされているすべてのリージョンで利用可能です。セッション前認証は、以下のリージョンで使用できます。

    • アジアパシフィック (シドニー) リージョン

    • アジアパシフィック (東京) リージョン

    • リージョン ‐ 欧州 (アイルランド)

    • AWS GovCloud (米国西部) リージョン

    • 米国東部 (バージニア北部) リージョン 600

    • 米国西部 (オレゴン) リージョン - 600

  • 現在、Linux または Windows WorkSpaces でのセッション内認証およびセッション前認証では、一度に 1 つのスマートカードのみが許可されています。

  • 現在、セッション前認証では、同じディレクトリでスマートカード認証とユーザー名およびパスワードを使用する認証の両方を有効にすることはサポートされていません。

  • 現時点では、CAC カードと PIV カードのみがサポートされています。他のタイプのハードウェアまたはソフトウェアベースのスマートカードも機能する可能性がありますが、WSP での使用は完全にはテストされていません。

  • 現在、Windows WorkSpace または Linux WorkSpace セッション中にスマートカードを使用して画面のロックを解除することはサポートされていません。Windows WorkSpaces でこの問題を回避するには、「Windows ロック画面を検出し、セッションを切断するには」をご参照ください。Linux WorkSpaces でこの問題を回避するには、「Linux WorkSpaces でロック画面を無効にするには」をご参照ください。

ディレクトリ設定

スマートカード認証を有効にするには、AD Connector ディレクトリおよびオンプレミスのディレクトリを次の方法で設定する必要があります。

AD Connector ディレクトリの設定

開始する前に、AWS Directory Service 管理ガイド AD Connector の前提条件の説明に従って AD Connector ディレクトリが設定されていることを確認します。特に、ファイアウォールで必要なポートを開いていることを確認してください。

AD Connector ディレクトリの設定を完了するには、AWS Directory Service 管理ガイドの「スマートカードで使用する AD Connector で mTLS 認証を有効にする」の手順に従います。

オンプレミスのディレクトリの設定

AD Connector ディレクトリを設定するだけでなく、オンプレミスのディレクトリのドメインコントローラーに発行される証明書に「KDC 認証」拡張キー使用法 (EKU) が設定されていることも確認する必要があります。これを行うには、Active Directory Domain Services (AD DS) のデフォルトの Kerberos 認証証明書テンプレートを使用します。ドメインコントローラー証明書テンプレートまたはドメインコントローラー認証証明書テンプレートには、スマートカード認証に必要な設定が含まれていないため、これらのテンプレートを使用しないでください。

Windows WorkSpaces のスマートカードを有効にする

Windows でスマートカード認証を有効にする方法の一般的なガイダンスについては、Microsoft のドキュメントの「サードパーティの証明機関でスマートカードログオンを有効にするためのガイドライン」をご参照ください。

Windows ロック画面を検出してセッションを切断するには

画面がロックされているときに、スマートカードのセッション前認証が有効になっている Windows WorkSpaces のロックをユーザーが解除できるようにするには、ユーザーのセッションで Windows ロック画面の検出を有効にします。Windows ロック画面が検出されると、WorkSpace セッションは切断され、ユーザーはスマートカードを使用して WorkSpaces クライアントから再接続できます。

グループポリシー設定を使用して、Windows ロック画面が検出されたときに、セッションの切断を有効にできます。詳細については、「」を参照してくださいWSP の画面ロックの場合のセッションの切断を有効化/無効化する

セッション内認証またはセッション前認証を有効にするには

デフォルトでは、Windows WorkSpaces は、セッション前認証またはセッション内認証にスマートカードの使用をサポートするために有効化されていません。必要に応じグループポリシー設定を使用して、Windows WorkSpaces のセッション前認証およびセッション内認証を有効にできます。詳細については、「WSP のスマートカードリダイレクトを有効化/無効化する」を参照してください。

セッション前認証を使用するには、グループポリシー設定の更新に加えて、AD Connector ディレクトリ設定からセッション前認証を有効にする必要があります。詳細については、AWS Directory Service 管理ガイドの「スマートカードで使用する AD Connector で mTLS 認証を有効にする」を参照してください。

ユーザーがブラウザでスマートカードを使用できるようにするには

ユーザーが Chrome をブラウザとして使用している場合、スマートカードを使用するために特別な設定は必要ありません。

ユーザーが Firefox をブラウザとして使用している場合は、グループポリシーを通じて Firefox でスマートカードを使用できるように設定できます。GitHub では、これらの Firefox グループポリシーテンプレートを使用できます。

例えば、PKCS #11 をサポートするために、Windows 用 OpenSC の 64 ビットバージョンをインストールし、次のグループポリシー設定を使用できます。ここで、NAME_OF_DEVICE は PKCS #11 の識別に使用する任意の値 (OpenSC など)、PATH_TO_LIBRARY_FOR_DEVICE は PKCS #11 モジュールへのパスです。このパスは、.DLL 拡張子の付いたライブラリ (C:\Program Files\OpenSC Project\OpenSC\pkcs11\onepin-opensc-pkcs11.dll など) をポイントする必要があります。

Software\Policies\Mozilla\Firefox\SecurityDevices\NAME_OF_DEVICE = PATH_TO_LIBRARY_FOR_DEVICE
ヒント

OpenSC を使用している場合は、pkcs11 プログラムを実行して OpenSC pkcs11-register.exe モジュールを Firefox にロードすることもできます。このプログラムを実行するには、C:\Program Files\OpenSC Project\OpenSC\tools\pkcs11-register.exe のファイルをダブルクリックするか、コマンドプロンプトウィンドウを開き、次のコマンドを実行します。

"C:\Program Files\OpenSC Project\OpenSC\tools\pkcs11-register.exe"

OpenSC pkcs11 モジュールが Firefox にロードされたことを確認するには、次の操作を行います。

  1. Firefox が既に実行されている場合は、Firefox を終了します。

  2. Firefox を開きます。右上のメニューボタン 
                                Firefox menu button
                            を選択し、[Options] (オプション) を選択します。

  3. [about:preferences] ページの左側のナビゲーションペインで、[Privacy & Security] (プライバシーとセキュリティ) を選択します。

  4. [Certificates] (証明書) で、[Security Devices] (セキュリティデバイス) を選択します。

  5. [Device Manager] (デバイスマネージャー) ダイアログボックスで、左側のナビゲーションに OpenSC スマートカードフレームワーク (0.21) が表示され、選択すると次の値が表示されます。

    モジュール: OpenSC smartcard framework (0.21)

    パス: C:\Program Files\OpenSC Project\OpenSC\pkcs11\onepin-opensc-pkcs11.dll

Troubleshooting

スマートカードのトラブルシューティングについては、Microsoft のドキュメントの「証明書と構成に関する問題」をご参照ください。

問題を引き起こす可能性のある一般的な問題は次のとおりです。

  • 証明書へのスロットのマッピングが正しくありません。

  • ユーザーと一致する複数の証明書がスマートカードにあること。証明書は、以下の基準を使用して照合されます。

    • 証明書のルート CA。

    • 証明書の <KU> フィールドおよび <EKU> フィールド。

    • 証明書のサブジェクトの UPN。

  • キーの使用に <EKU>msScLogin が含まれる複数の証明書を有していること。

一般的に、スマートカード認証のために、スマートカードの最初のスロットにマッピングされた証明書を 1 つだけ使用することがベストプラクティスです。

スマートカード上の証明書およびキーを管理するためのツール (証明書およびキーの削除または再マッピングなど) は、製造元によって異なる場合があります。詳細については、スマートカードの製造元から提供されているドキュメントをご参照ください。

Linux WorkSpaces のスマートカードを有効にする

注記

Linux WorkSpaces on WorkSpaces Streaming Protocol (WSP) バンドルは、現時点では AWS GovCloud (米国西部)リージョンでのみ利用できます。

現在、WSP の Linux WorkSpaces には、次の制限があります。

  • クリップボード、オーディオ入力、ビデオ入力、およびタイムゾーンのリダイレクトはサポートされていません。

  • マルチモニターはサポートされていません。

  • WSP の Linux WorkSpaces に接続するには、WorkSpaces Windows クライアントアプリケーションを使用する必要があります。

Linux WorkSpaces でスマートカードを使用できるようにするには、ルート CA 証明書ファイルを PEM 形式で WorkSpace イメージに含める必要があります。

ルート CA 証明書を取得するには

ルート CA 証明書は、いくつかの方法で取得できます。

  • サードパーティーの証明機関によって運用されるルート CA 証明書を使用できます。

  • ウェブ登録サイト (http://ip_address/certsrv または http://fqdn/certsrv) を使用して、独自のルート CA 証明書をエクスポートできます。ここで、ip_address および fqdn はルート証明書 CA サーバーの IP アドレスおよび完全修飾ドメイン名 (FQDN) です。ウェブ登録サイトの使用の詳細については、Microsoft のドキュメントの「ルート証明機関の証明書をエクスポートする方法」をご参照ください。

  • 次の手順を使用して、Active Directory 証明書サービス (AD CS) を実行しているルート CA 証明書サーバーからルート CA 証明書をエクスポートできます。AD CS のインストールの詳細については、Microsoft のドキュメントの「証明機関をインストールする」をご参照ください。

    1. 管理者アカウントを使用してルート CA サーバーにログインします。

    2. Windows の [Start] (スタート) メニューから、コマンドプロンプトウィンドウ ([Start] (スタート) > [Windows System] (Windows システム) > [Command Prompt] (コマンドプロンプト)) を開きます。

    3. 次のコマンドを使用して、ルート CA 証明書を新しいファイルにエクスポートします。ここで、rootca.cer は新しいファイルの名前です。

      certutil -ca.cert rootca.cer

      certutil の実行の詳細については、Microsoft のドキュメントの「certutil」をご参照ください。

    4. 次の OpenSSL コマンドを使用して、エクスポートされたルート CA 証明書を DER 形式から PEM 形式に変換します。ここで、rootca は証明書の名前です。OpenSSL の詳細については、www.openssl.org をご参照ください。

      openssl x509 -inform der -in rootca.cer -out /tmp/rootca.pem

Linux WorkSpaces にルート CA 証明書を追加するには

お客様がスマートカードを有効にするのをサポートするために、この enable_smartcard スクリプトを当社の Amazon Linux WSP バンドルに追加しました。このスクリプトは以下のアクションを実行します。

  • ルート CA 証明書をネットワークセキュリティサービス (NSS) データベースにインポートします。

  • PAM (Pluggable Authentication Module) 認証用の pam_pkcs11 モジュールをインストールします。

  • WorkSpace プロビジョニング中の pkinit の有効化を含む、デフォルト設定を実行します。

次の手順では、enable_smartcard スクリプトを使用して Linux WorkSpaces にルート CA 証明書を追加し、Linux WorkSpaces でスマートカードを有効にする方法について説明します。

  1. WSP プロトコルを有効にして新しい Linux WorkSpace を作成します。Amazon WorkSpaces コンソールで WorkSpace を起動する際に、[Select Bundles] (バンドルの選択) ページで、プロトコルとして [WSP] を選択し、いずれかの Amazon Linux 2 パブリックバンドルを選択します。

  2. 新しい WorkSpace で、次のコマンドをルートとして実行します。ここで、pem-path は PEM 形式のルート CA 証明書ファイルへのパスです。

    /usr/lib/skylight/enable_smartcard --ca-cert pem-path
    注記

    Linux WorkSpaces では、スマートカード上の証明書が、ユーザーのデフォルトのユーザープリンシパル名 (UPN) について発行されることを前提としています (sAMAccountName@domain など)。ここで、domain は完全修飾ドメイン名 (FQDN) です。

    代替 UPN サフィックスを使用するには、run /usr/lib/skylight/enable_smartcard --help をご参照ください。代替 UPN サフィックスのマッピングは、各ユーザーに固有です。したがって、そのマッピングは、各ユーザーの WorkSpace で個別に実行する必要があります。

  3. (オプション) デフォルトでは、Linux WorkSpaces ですべてのサービスについてスマートカード認証が使用できるように設定されています。特定のサービスについてのみスマートカード認証を使用できるようにするには、/etc/pam.d/system-auth を編集する必要があります。必要に応じて、authpam_succeed_if.so 行のコメントを解除し、サービスのリストを編集します。

    auth 行のコメントを解除した後、あるサービスについてスマートカード認証を使用できるようにするには、その行をリストに追加する必要があります。あるサービスにについてパスワード認証のみを使用するには、リストからそのサービスを削除する必要があります。

  4. (オプション) 現在、スマートカードを使用して画面のロックを解除することはサポートされていません。Linux WorkSpaces でロック画面を無効にするには、次の内容を持つ /usr/share/glib-2.0/schemas/10_screensaver.gschema.override という名前のファイルを作成します。

    [org.mate.screensaver] lock-enabled=false

    このファイルを作成したら、次のコマンドを実行します。

    sudo glib-compile-schemas /usr/share/glib-2.0/schemas/
  5. WorkSpace に追加のカスタマイズを実行します。例えば、システム全体のポリシーを追加して、ユーザーが Firefox でスマートカードを使用できるようにします。(Chrome ユーザーは、ユーザー自身がスマートカードを有効にする必要があります。 詳細については、Amazon WorkSpaces ユーザーガイドの「スマートカードのサポート」を参照してください。

  6. WorkSpace からカスタム WorkSpace イメージとバンドルを作成します。

  7. 新しいカスタムバンドルを使用して、ユーザーの WorkSpaces を起動します。

ユーザーが Firefox でスマートカードを使用できるようにするには

Linux WorkSpace イメージに SecurityDevices ポリシーを追加することで、ユーザーが Firefox でスマートカードを使用できるようにすることができます。システム全体のポリシーの Firefox への追加の詳細については、GitHub の Mozilla のポリシーテンプレートをご参照ください。

  1. WorkSpace イメージの作成に使用している WorkSpace で、policies.json という名前の新しいファイルを /usr/lib64/firefox/distribution/ で作成します。

  2. JSON ファイルで、次の SecurityDevices ポリシーを追加します。ここで、NAME_OF_DEVICEpkcs モジュールの識別に使用する任意の値です。例えば、"OpenSC" などの値を使用できます。

    { "policies": { "SecurityDevices": { "NAME_OF_DEVICE": "/usr/lib64/opensc-pkcs11.so" } } }

Troubleshooting

トラブルシューティングのために、pkcs11-tools ユーティリティを追加することをお勧めします。このユーティリティを使用すると、次のアクションを実行できます。

  • 各スマートカードを一覧表示します。

  • 各スマートカードのスロットを一覧表示します。

  • 各スマートカードの証明書を一覧表示します。

問題を引き起こす可能性のある一般的な問題は次のとおりです。

  • 証明書へのスロットのマッピングが正しくありません。

  • ユーザーと一致する複数の証明書がスマートカードにあること。証明書は、以下の基準を使用して照合されます。

    • 証明書のルート CA。

    • 証明書の <KU> フィールドおよび <EKU> フィールド。

    • 証明書のサブジェクトの UPN。

  • キーの使用に <EKU>msScLogin が含まれる複数の証明書を有していること。

一般的に、スマートカード認証のために、スマートカードの最初のスロットにマッピングされた証明書を 1 つだけ使用することがベストプラクティスです。

スマートカード上の証明書およびキーを管理するためのツール (証明書およびキーの削除または再マッピングなど) は、製造元によって異なる場合があります。スマートカードの操作に使用できるその他のツールは次のとおりです。

  • opensc-explorer

  • opensc-tool

  • pkcs11_inspect

  • pkcs11_listcerts

  • pkcs15-tool

デバッグログを有効にするには

pam_pkcs11 および pam-krb5 の設定のトラブルシューティングを行うには、デバッグのログを有効にします。

  1. /etc/pam.d/system-auth-ac ファイルで、auth アクションを編集し、nodebugpam_pksc11.so パラメータを debug に変更します。

  2. /etc/pam_pkcs11/pam_pkcs11.conf ファイルで、debug = false;debug = true; に変更します。debug オプションは、各マッパーモジュールに個別に適用されるので、pam_pkcs11 セクションの直下と適切なマッパーセクション (デフォルトでは、これは mapper generic) の両方で変更する必要がある場合があります。

  3. /etc/pam.d/system-auth-ac ファイルで、auth アクションを編集し、debug または debug_sensitive パラメータを pam_krb5.so に追加します。

デバッグのログを有効にすると、システムはアクティブな端末に直接 pam_pkcs11 デバッグメッセージを出力します。pam_krb5 からのメッセージは /var/log/secure でログインされます。

スマートカード証明書がマップされるユーザー名を確認するには、次の pklogin_finder コマンドを使用します。

sudo pklogin_finder debug config_file=/etc/pam_pkcs11/pam_pkcs11.conf

プロンプトが表示されたら、スマートカードの PIN を入力します。pklogin_finder は、スマートカード証明書のユーザー名を stdoutNETBIOS\username 形式で出力します。このユーザー名は WorkSpace ユーザー名と一致する必要があります。

Active Directory Domain Services (AD DS) では、NetBIOS ドメイン名は Windows 2000 より前のドメイン名です。通常 (ただし、常にではありません)、NetBIOS ドメイン名はドメインネームシステム (DNS) ドメイン名のサブドメインです。例えば、DNS ドメイン名が example.com の場合、NetBIOS ドメイン名は通常 EXAMPLE です。DNS ドメイン名が corp.example.com の場合、NetBIOS ドメイン名は通常 CORP です。

例えば、mmajor ドメイン内のユーザー corp.example.com の場合、pklogin_finder からの出力は CORP\mmajor です。

注記

メッセージ "ERROR:pam_pkcs11.c:504: verify_certificate() failed" を受け取った場合、このメッセージは、pam_pkcs11 がユーザー名の条件に一致する証明書をスマートカード上に見つけたものの、マシンで認識されるルート CA 証明書に連鎖していないことを示します。この場合、pam_pkcs11 は上記のメッセージを出力し、次の証明書を試します。認証を許可するのは、ユーザー名と一致し、かつ、認識されたルート CA 証明書まで連鎖する証明書が見つかった場合だけです。

pam_krb5 設定をトラブルシューティングするには、次のコマンドを使用して、デバッグモードで手動で kinit を起動できます。

KRB5_TRACE=/dev/stdout kinit -V

このコマンドは、Kerberos Ticket Granting Ticket (TGT) を正常に取得するはずです。失敗する場合は、正しい Kerberos プリンシパル名をコマンドに明示的に追加してみてください。例えば、ドメイン mmajor 内のユーザー corp.example.com の場合は、次のコマンドを使用します。

KRB5_TRACE=/dev/stdout kinit -V mmajor

このコマンドが成功した場合、WorkSpace ユーザー名から Kerberos プリンシパル名へのマッピングに問題がある可能性が最も高いです。[appdefaults]/pam/mappings ファイル内の /etc/krb5.conf セクションを確認してください。

このコマンドが成功せず、パスワードベースの kinit コマンドが成功した場合は、pkinit_ ファイル内の /etc/krb5.conf に関連する設定を確認してください。例えば、スマートカードに複数の証明書が含まれている場合は、pkinit_cert_match に変更を加える必要がある場合があります。