セキュリティ キーを使用した SSH

このチュートリアルでは、Compute Engine で OpenSSH とセキュリティ キーを使用して VM に接続する方法について説明します。

OpenSSH 8.2 での FIDO2/U2F 機能のリリースにより、セキュリティ キーを使用して、ハードウェア保護された SSH 認証鍵ペアを有効にできるようになりました。セキュリティ キーを使用すると、攻撃の影響を軽減できる高度なセキュリティを実現できます。

概要

セキュリティ キーにリンクされた SSH 認証鍵を生成するには、ssh-keygen コマンドに -t ecdsa-sk フラグを指定します。このコマンドで、公開鍵、秘密鍵、U2F 鍵ハンドル(または FIDO2 認証情報 ID)を作成します。これらのアイテムは次のように保存されます。

  • 秘密鍵はセキュリティ デバイスに保存されます。
  • 鍵ハンドルと公開鍵は、ローカルにある従来の SSH 認証鍵ファイルに保存されます。鍵ハンドルは、必要に応じてパスフレーズで暗号化できます。

SSH 認証鍵が生成されたら、生成された SSH 公開鍵を使用するようにユーザー アカウントを構成します。

これで、VM に SSH 接続できるようになります。VM が ecdsa-sk キーのいずれかを受け入れる場合、クライアント側でセキュリティ キーをタッチして接続を検証するように求めるプロンプトが表示されます。

目標

このチュートリアルでは、次の手順を行う方法を説明します。

  1. VM を作成します。Compute Engine では、Ubuntu 20.04 に、セキュリティ キーの検証に使用できる最新の OpenSSH 8.2 インストールが含まれています。このチュートリアルでは、Ubuntu 20.04 で実行される VM を使用します。
  2. クライアントに OpenSSH 8.2 をインストールし、SSH 公開鍵を生成します。このチュートリアルでは、Ubuntu 16.04 で実行されるクライアントを使用します。
  3. 生成された SSH 公開鍵を VM に追加します。
  4. OpenSSH とセキュリティ キーを使用して、クライアントから VM に接続します。

料金

このチュートリアルでは、Google Cloud の課金対象となるコンポーネント(Compute Engine を含む)を使用しています。

料金計算ツールを使用して、1 日または 1 か月の料金を見積もることができます。

新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    [プロジェクトの選択] ページに移動

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. Cloud Shell を使用して gcloud コマンドライン ツールのコマンドを実行する方法を学習します。
  5. クライアントで、gcloud コマンドライン ツールの最新バージョンをインストールするか、最新バージョンに更新します。
  6. オプション: デフォルトのリージョンとゾーンを設定します。

VM の設定

  1. Google Cloud Console で、Cloud Shell に移動します。

    Cloud Shell に移動

  2. 将来的に使用するコマンドに備えて、プロジェクト ID を設定する環境変数をエクスポートします。

    export PROJECT_ID='PROJECT_ID'
  3. 最新の Ubuntu 20.04 LTS イメージを使用して、ゾーン us-west4-c に VM host-vm を作成します。この VM で OS Login を有効にします。OS Login は VM へのアクセスを管理するために使用されます。

    この VM を作成するには、次のコマンドを実行します。

    gcloud compute instances create host-vm \
       --project $PROJECT_ID \
       --zone us-west4-c \
       --image-family ubuntu-2004-lts \
       --image-project ubuntu-os-cloud \
       --metadata enable-oslogin=true
    
  4. VM 用の鍵を生成します。gcloud compute ssh コマンドを使用して VM に接続すると、Compute Engine によって VM の RSA SSH 認証鍵ペアが自動的に生成されます。

    gcloud compute ssh host-vm
    

ローカル ワークステーション(クライアント)の設定

ローカル ワークステーション(クライアント)は、クラウド ネットワークへの接続に使用されるデバイスです。

  1. ローカルの Linux ワークステーションに OpenSSH 8.2 をインストールします。現在のところ、OpenSSH 8.2 はすべての Linux ディストリビューションで利用できるわけではないため、ソースからコンパイルすることをおすすめします。

    たとえば、Ubuntu 16.04 クライアントでは次の手順を行います。

    1. 依存関係をインストールします。

      sudo apt update
      sudo apt install build-essential
      sudo apt-add-repository ppa:yubico/stable
      sudo apt update
      sudo apt install libz-dev libcurl4-openssl-dev libssl-dev libcbor-dev libfido2-dev
    2. 作業ディレクトリを設定します。

      mkdir openssh-8
      cd openssh-8
    3. Openssh 8.2 パッケージをダウンロードします。

      wget http://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.2p1.tar.gz
      tar xvzf openssh-8.2p1.tar.gz
      cd openssh-8.2p1
      
    4. セキュリティ キーのサポートを指定して OpenSSH 8.2 をインストールします。

      ./configure --with-security-key-builtin
      make
      sudo make install
    5. インストールを検証します。

      ssh -V

      出力は次のようになります。

      OpenSSH_8.2p1, OpenSSL 1.0.2g  1 Mar 2016
    6. -t ecdsa-sk フラグを指定して ssh-keygen コマンドを実行します。

      出力は次のようになります。

      Generating public/private ecdsa-sk key pair.
      You may need to touch your authenticator to authorize key generation.
      Key enrollment failed: device not found
      
  2. キーをローカル ワークステーションに接続します。

  3. -t ecdsa-sk フラグを指定して ssh-keygen を実行します。

    ssh-keygen -t ecdsa-sk

    出力は次のようになります。

    Generating public/private ecdsa-sk key pair.
    You may need to touch your authenticator to authorize key generation.Enter file in which to save the key (/home/$USER/.ssh/id_ecdsa_sk):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /home/$USER/.ssh/id_ecdsa_sk
    Your public key has been saved in /home/$USER/.ssh/id_ecdsa_sk.pub
    The key fingerprint is:
    SHA256:esvq6KPZ5FGttkaYUUeUcf/Oo0hhsRAaB6NKN48kkeo ubuntu-17-02-2020-4432343
    The key's randomart image is:
    +-[ECDSA-SK 256]--+
    |  ..  ++*o.      |
    |  .. ..=oo .     |
    | .o =.... . .    |
    |.. =.+ . . o .   |
    |. . .+o S +   .  |
    | E  o..o . . o   |
    |    o.+ . .   +  |
    |   =.+.+ o . . . |
    |  oo=++.o . .    |
    +----[SHA256]-----+
    
  4. ローカル ワークステーションに gcloud コマンドライン ツールの最新バージョンをインストールするか、最新バージョンに更新します。

  5. VM の承認済みファイルにセキュリティ キーを追加します。host-vm で OS Login を有効にしているため、gcloud compute os-login ssh-keys add コマンドを使用して、公開 SSH 認証鍵を関連付けることができます。

    gcloud compute os-login ssh-keys add \
        --project $PROJECT_ID \
        --key-file .home/$USER/.ssh/id_ecdsa_sk
    

    詳細については、ユーザー アカウントに SSH 認証鍵を追加するをご覧ください。

  6. これで、OpenSSH とセキュリティ キーを使用してローカル ワークステーションから VM に接続できるようになりました。

    接続するには、次のコマンドを実行します。

    gcloud compute ssh host-vm
    
    # Prompt for user to touch security key
    Confirm user presence for key ECDSA-SK SHA256:...
    Welcome to Ubuntu Focal Fossa...
    

    セットアップが正常に完了している場合は、SSH 接続時にセキュリティ キーをタップしてアクセスを認証するように求めるプロンプトが表示されます。VM がキーを検証し、アクセス権を付与します。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud Platform アカウントに課金されないようにする手順は次のとおりです。

  1. Google Cloud Console で、Cloud Shell に移動します。

    Cloud Shell に移動

  2. host-vm という名前のインスタンスを削除します。

    gcloud compute instances delete host-vm
       --project $PROJECT_ID \
       --zone us-west4-c

次のステップ