Transfer Family での SSH キーと PGP キーの管理 - AWS Transfer Family

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Transfer Family での SSH キーと PGP キーの管理

このセクションでは、SSHキーの生成方法やローテーション方法など、SSHキーに関する情報を見ることができます。で Transfer Family を使用してキー AWS Lambda を管理する方法の詳細については、ブログ記事「A AWS Transfer Family と によるユーザーのセルフサービスキー管理の有効化 AWS Lambda」を参照してください。

注記

AWS Transfer Family は RSA、ECDSA、ED25519 キーを受け入れます。

このセクションでは、プリティ・グッド・プライバシー (PGP) キーを生成して管理する方法についても説明します。

ユーザーキーとサーバーキーでサポートされるアルゴリズム

AWS Transfer Family内のユーザーキーペアとサーバーキーペアでは、以下のキーアルゴリズムがサポートされています。

注記

ワークフローで PGP 復号化に使用するアルゴリズムについては、「PGP キーペアでサポートされるアルゴリズム」を参照してください。

  • ED25519 の場合:ssh-ed25519

  • RSA の場合:

    • rsa-sha2-256

    • rsa-sha2-512

  • ECDSA の場合:

    • ecdsa-sha2-nistp256

    • ecdsa-sha2-nistp384

    • ecdsa-sha2-nistp521

注記

古いセキュリティポリシーはSHA1 を使用した ssh-rsa をサポートしています。詳細については、「暗号アルゴリズム」を参照してください。

サービス管理ユーザーの SSH キーの生成

サーバーをセットアップする際、サービスで管理された認証方法でユーザーを認証するよう設定できます。この方法では、ユーザー名と SSH キーは、サービスに保存されます。ユーザーのパブリック SSH キーは、ユーザーのプロパティとしてサーバーにアップロードされます。このキーは、キーベースの標準認証プロセスの一部としてサーバーによって使用されます。各ユーザーに対し、個々のサーバーに複数のパブリック SSH キーを登録できます。ユーザ 1 人あたりに保存できるキー数の制限については、「Amazon Web Services 全般のリファレンス」の「AWS Transfer Family エンドポイントとクォータ」を参照してください。

サービスマネージド認証方法の代わりに、カスタム ID プロバイダー、または を使用してユーザーを認証できます AWS Directory Service for Microsoft Active Directory。詳細については、カスタム ID プロバイダーの使用またはAWS Directory Service ID プロバイダーの使用を参照してください。

サーバーがユーザー認証に使用できる方法は 1 つのみ (サービスマネージドまたはカスタム ID プロバイダー) であり、サーバーの作成後にそのメソッドを変更することはできません。

macOS、Linux、または UNIX で SSH キーを作成する

macOS、Linux、または UNIX のオペレーティングシステムでは、ssh-keygen コマンドを使用して、キーペトと呼ばれる SSH パブリックキーと SSH プライベートキーを作成します。

macOS、Linux、または UNIX のオペレーティングシステムで SSH キーを作成するには
  1. macOS、Linux、または UNIX でコマンドターミナルを開きます。

  2. AWS Transfer Family は、RSA、ECDSA、ED25519-formattedキーを受け入れます。生成するキーペアのタイプに基づいて適切なコマンドを選択してください。

    注記

    以下の例では、パスフレーズは指定していません。この場合、ツールはパスフレーズの入力を要求し、確認のためもう一度入力するように求めます。パスフレーズを作成すると、秘密鍵の保護が強化され、システム全体のセキュリティも向上する可能性があります。パスフレーズは復元できません。忘れた場合は、新しいキーを作成する必要があります。

    ただし、サーバーホスト鍵を生成する場合、Transfer Family サーバーは起動時にパスワードを要求できないため、コマンドで -N "" オプションを指定する(またはプロンプトが表示されたら Enter を 2 回押す)ことで、空のパスフレーズを「必ず」指定する必要があります。

    • 4096 ビット RSA キーペアを生成する

      ssh-keygen -t rsa -b 4096 -f key_name
    • ECDSA 521 ビットのキーペア (ECDSA のビットサイズは 256、384、521) を生成するには:

      ssh-keygen -t ecdsa -b 521 -f key_name
    • ED25519キーペアを生成するには:

      ssh-keygen -t ed25519 -f key_name
    注記

    key_name は SSH キーペアファイル名です。

    ssh-keygen 出力の例を以下に示します。

    ssh-keygen -t rsa -b 4096 -f key_name Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in key_name. Your public key has been saved in key_name.pub. The key fingerprint is: SHA256:8tDDwPmanTFcEzjTwPGETVWOGW1nVz+gtCCE8hL7PrQ bob.amazon.com The key's randomart image is: +---[RSA 4096]----+ | . ....E | | . = ... | |. . . = ..o | | . o + oo = | | + = .S.= * | | . o o ..B + o | | .o.+.* . | | =o*+*. | | ..*o*+. | +----[SHA256]-----+
    注記

    上記の ssh-keygen コマンドを実行すると、現在のディレクトリにパブリックキーとプライベートキーが作成されます。

    これで、SSH キーペアを使用する準備が整いました。ステップ 3 と 4 に従って、サービスマネージドユーザーの SSH パブリックキーを保存します。これらのユーザーは、Transfer Family サーバーエンドポイントでファイルを転送するときに キーを使用します。

  3. key_name.pub.ファイルを見つけて開きます。

  4. テキストをコピーして、サービス管理対象ユーザーの「SSH 公開鍵」に貼り付けます。

    1. https://console.aws.amazon.com/transfer/ で AWS Transfer Family コンソールを開き、ナビゲーションペインからサーバーを選択します。

    2. サーバー」ページで、更新するユーザーを含むサーバーの「サーバー ID」を選択します。

    3. パブリックキーを追加するユーザーを選択します。

    4. SSH 公開鍵」ペインで、「SSH 公開鍵を追加」を選択します。

      選択したユーザーのユーザーの詳細を表示する AWS Transfer Family コンソール。
    5. 生成した公開鍵のテキストを SSH 公開鍵テキストボックスに貼り付け、「鍵の追加」を選択します。

      AWS Transfer Family コンソールには、パブリックキーを追加するためのキーの追加ページが表示されます。

      新しい鍵は SSH 公開鍵ペインに一覧表示されます。

      SSH パブリックキーセクションに新しく追加されたパブリックキーを表示する AWS Transfer Family コンソール。

Microsoft Windows での SSH キーの作成

Windows で使用される SSH キーペア形式は、わずかに異なります。パブリックキーは PUB 形式、プライベートキーは PPK 形式である必要があります。Windows では、PuTTYgen を使用すれば正しい形式の SSH キーペアが作成できます。PuTTYgen を使用して、ssh-keygen で生成されたプライベートキーを .ppk ファイルに変換することもできます。

注記

.ppk 形式でないプライベート・キー・ファイルを WinSCP に提示すると、WinSCP クライアントはキーを .ppk 形式に変換します。

Windows で PuTTYgen を使用して SSH キーを作成する方法のチュートリアルは、「SSH.com ウェブサイト」 にあります。

SSH2 公開鍵を PEM 形式に変換します。

AWS Transfer Family は PEM 形式のパブリックキーのみを受け入れます。SSH2 公開鍵がある場合は、それを変換する必要があります。SSH2 公開鍵は以下の形式になります。

---- BEGIN SSH2 PUBLIC KEY ---- Comment: "rsa-key-20160402" AAAAB3NzaC1yc2EAAAABJQAAAgEAiL0jjDdFqK/kYThqKt7THrjABTPWvXmB3URI : : ---- END SSH2 PUBLIC KEY ----

PEM 公開鍵は以下の形式になります。

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAA...

次のコマンドを実行して、SSH2 形式の公開鍵を PEM 形式の公開鍵に変換します。「ssh2-キー」は SSH2 キーの名前に置き換え、「PEM キー」は PEM キーの名前に置き換えてください。

ssh-keygen -i -f ssh2-key.pub > PEM-key.pub

SSH キーのローテーション

セキュリティ上、ベストプラクティスとして SSH キーのローテーションをお勧めします。通常、このローテーションは、セキュリティポリシーの一部として指定され、自動化した形で実装されます。セキュリティのレベルに応じて、機密性の高い通信では、SSH キーペアが 1 回しか使用されない場合もあります。これにより、キーを保存することのリスクがなくなります。ただし一般的には、SSH 認証情報を一定期間にわたって保存し、その期間をユーザーに過度の負荷がかからないような長さに設定するのが普通です。標準的な設定は 3 か月です。

SSH キーのローテーションを実行するには、2 つの方法があります。

  • コンソールで新しい SSH パブリックキーをアップロードすると既存の SSH 公開キーを削除できます。

  • API を使用すると、 DeleteSshPublicKey API を使用してユーザーの Secure Shell (SSH) パブリックキーを削除し、 ImportSshPublicKey API を使用してユーザーのアカウントに新しい Secure Shell (SSH) パブリックキーを追加することで、既存のユーザーを更新できます。

Console
コンソールでキーローテーションを実行するには
  1. https://console.aws.amazon.com/transfer/ で AWS Transfer Family コンソールを開きます。

  2. [Servers] (サーバー) ページに移動します。

  3. [Server ID] (サーバー ID) 列で ID を選択すると、[Server Configuration] (サーバーの構成) ページが表示されます。

  4. [Users] (ユーザー) の下で、SSH パブリックキーをローテーションするユーザーのチェックボックスをオンにし、[Actions] (アクション) を選択してから [Add key] (キーの追加) を選択すると [Add key] (キーの追加) ページが表示されます。

    または

    ユーザー名を選択してユーザーの詳細ページを表示し、SSHパブリックキーの追加を選択してキーの追加ページを表示する。

  5. 新しい SSH パブリックキーを入力し、[Add key] (キーを追加する) を選択します。

    重要

    SSH 公開鍵の形式は、生成した鍵のタイプによって異なります。

    • RSA キーの場合、形式は ssh-rsa string です。

    • ED25519 キーの場合、形式は ssh-ed25519 string です。

    • ECDSA キーの場合、生成したキーのサイズに応じてキーはecdsa-sha2-nistp256ecdsa-sha2-nistp384、または ecdsa-sha2-nistp521 で始まります。他のキータイプと同様に、最初の文字列の後には string が続きます。

    [User details] (ユーザーの詳細) ページに戻ると、先ほど入力した SSH パブリックキーが [SSH public key] (SSH パブリックキー) セクションに表示されます。

  6. 削除したい古いキーのチェックボックスをオンにしてから [Delete] (削除) を選択します。

  7. delete という語を入力して削除オペレーションを確認してから [Delete] (削除) を選択します。

API
API を使用してキーローテーションを実行するには
  1. macOS、Linux、または UNIX でコマンドターミナルを開きます。

  2. 次のコマンドを入力することで、削除したい SSH キーを取得します。このコマンドを使用するには、serverID をTransfer FamilyサーバーのサーバーIDに、username をユーザー名に置き換えます。

    aws transfer describe-user --server-id='serverID' --user-name='username'

    このコマンドは、ユーザーについての詳細を返します。"SshPublicKeyId": フィールドの内容をコピーします。この手順の後半で、この値を入力する必要があります。

    "SshPublicKeys": [ { "SshPublicKeyBody": "public-key", "SshPublicKeyId": "keyID", "DateImported": 1621969331.072 } ],
  3. 次に、ユーザー用の新しい SSH キーをインポートします。 プロンプトで次のコマンドを入力します。このコマンドを使用するには、serverID をTransfer FamilyサーバーのサーバーIDに、username をユーザー名に、public-key を新しい公開鍵のフィンガープリントに置き換えます。

    aws transfer import-ssh-public-key --server-id='serverID' --user-name='username' --ssh-public-key-body='public-key'

    コマンドが成功した場合、出力は返りません。

  4. 最後に、次のコマンドを実行して、古いキーを削除します。このコマンドを使用するには、serverID をTransfer FamilyサーバーのサーバーIDに、username をユーザー名に、keyID-from-step-2 をこの手順のステップ2でコピーしたキーID値に置き換えます。

    aws transfer delete-ssh-public-key --server-id='serverID' --user-name='username' --ssh-public-key-id='keyID-from-step-2'
  5. (オプション) 古いキーがもう存在しないことを確認するには、ステップ 2 を繰り返します。

PGPキーの生成と管理

Transfer Family がワークフローで処理するファイルで、Pretty Good Privacy (PGP) 復号化を使用できます。ワークフローステップで復号を使用するには、PGP キーを指定します。

AWS ストレージブログには、Transfer Family Managed ワークフロー、PGP および を使用したファイルの暗号化と復号化を使用してコードを記述せずにファイルを復号する方法 AWS Transfer Familyを説明する投稿があります。

PGP キーを生成する

PGP キーの生成に使用する演算子は、オペレーティングシステムと、使用しているキー生成ソフトウェアのバージョンによって異なります。

Linux または Unix を使用している場合は、パッケージインストーラーを使用して gpg をインストールします。お使いの Linux ディストリビューションに応じて、以下のコマンドのいずれかが動作するはずです。

sudo yum install gnupg
sudo apt-get install gnupg

Windows または macOS の場合は、「https://gnupg.org/download/」から必要なものをダウンロードできます。

PGP キージェネレータソフトウェアをインストールしたら、「gpg --full-gen-key」または「gpg --gen-key」コマンドを実行してキーペアを生成します。

注記

GnuPG バージョン 2.3.0 以降を使用している場合は、gpg --full-gen-key を実行する必要があります。作成する鍵の種類を求められたら、RSA または ECC を選択します。ただし、ECC を選択した場合は、必ず楕円曲線用に NIST または BrainPool を選択してください。Curve 25519 を「選びません」。

PGP キーペアでサポートされるアルゴリズム

PGP キーペアでは、次のアルゴリズムがサポートされています。

  • RSA

  • エルガマル

  • ECC:

    • NIST

    • BrainPool

注記

cCurve25519 キーはサポートされていません。

役立つgpg サブコマンド

以下は gpg に役立つサブコマンドです。

  • gpg --help — このコマンドには、使用可能なオプションが一覧表示され、例もいくつか含まれている場合があります。

  • gpg --list-keys – このコマンドは、作成したすべてのキーペアの詳細を一覧表示します。

  • gpg --fingerprint – このコマンドは、各キーのフィンガープリントを含む、すべてのキーペアの詳細を一覧表示します。

  • gpg --export -a user-name — このコマンドは、user-nameキーの生成時に使用されたキーの公開キー部分をエクスポートします。

キーペアを管理する

PGP キーを管理するには、 を使用します AWS Secrets Manager。

注記

シークレットネームには、Transfer FamilyのサーバーIDが含まれます。つまり、PGP キー情報を AWS Secrets Manager保存する「前」に、サーバーを特定または作成しておく必要があります。

1つのキーとパスフレーズをすべてのユーザーに使いたい場合は、PGPキーブロック情報を秘密名 aws/transfer/server-id/@pgp-defaultserver-id はTransfer FamilyサーバーのID)の下に保存することができます。Transfer Family は、 がワークフローを実行しているユーザーuser-nameと一致するキーがない場合、このデフォルトキーを使用します。

特定のユーザーのキーを作成できます。この場合、シークレット名の形式は です。 はaws/transfer/server-id/user-name、Transfer Family サーバーのワークフローを実行しているユーザーuser-nameと一致します。

注記

Transfer Family サーバー 1 台につき、1 ユーザーにつき最大 3 つの PGP 秘密鍵を保存できます。

PGP 鍵を復号化に使用するように設定するには
  1. 使用している GPG のバージョンに応じて、次のいずれかのコマンドを実行して、Curve 25519 暗号化アルゴリズムを使用しない PGP キーペアを生成します。

    • GnuPG バージョン 2.3.0 以降を使用している場合は、次のコマンドを実行します。

      gpg --full-gen-key

      RSA を選ぶこともできるし、ECC を選んだ場合は楕円曲線に NISTBrainPool を選ぶこともできます。代わりに gpg --gen-key を実行する場合は、ECC Curve 25519 暗号化アルゴリズムを使用するキーペアを作成します。このアルゴリズムは、現在 PGP キーではサポートされていません。

    • バージョン2.3.0より前の GnuPG では、RSAがデフォルトの暗号化タイプであるため、次のコマンドを使用できます。

      gpg --gen-key
    重要

    キー生成プロセス中に、パスフレーズと E メールアドレスを指定する必要があります。これらの値は必ず書き留めておいてください。この手順の後半で AWS Secrets Manager に鍵の詳細を入力するときに、パスフレーズを提供する必要があります。また、次のステップでプライベートキーをエクスポートする場合も、同じメールアドレスを指定する必要があります。

  2. 以下のコマンドを実行してプライベートキーをエクスポートします。このコマンドを使うには、private.pgp を秘密鍵ブロックを保存するファイル名に、marymajor@example.com をキーペアを生成したときに使った電子メールアドレスに置き換えます。

    gpg --output private.pgp --armor --export-secret-key marymajor@example.com
  3. AWS Secrets Manager を使用して PGP キーを保存します。

    1. にサインイン AWS Management Console し、https://console.aws.amazon.com/secretsmanager/ で AWS Secrets Manager コンソールを開きます。

    2. 左側のナビゲーションペインで [サーバー] を選択します。

    3. [シークレット]ページで、[新しいシークレットの保存]を選択します。

    4. [シークレットタイプの選択] ページの[シークレットタイプ] で[その他のシークレットタイプ] を選択します。

    5. [キー/値のペア] セクションで、[キー/値] タブを選択します。

      • キーPGPPrivateKeyと入力します。

        注記

        PGPPrivateKey 文字列は正確に入力する必要があります。文字の前や間にスペースを入れないでください。

      • 」 — 秘密鍵のテキストを値フィールドに貼り付けます。プライベートキーのテキストは、この手順の前半でキーをエクスポートしたときに指定したファイル (private.pgp など) にあります。キーは -----BEGIN PGP PRIVATE KEY BLOCK----- で始まり、-----END PGP PRIVATE KEY BLOCK----- で終わります。

        注記

        テキストブロックには秘密鍵のみが含まれ、公開鍵も含まれていないことを確認してください。

    6. 行を追加」を選択し、「キー/値のペア」セクションで「キー/値」タブを選択します。

      • キーPGPPassphraseと入力します。

        注記

        PGPPassphrase 文字列は正確に入力する必要があります。文字の前や間にスペースを入れないでください。

      • 」 — PGP キーペアを生成したときに使用したパスフレーズを入力します。

      PGP キーを管理するために入力したキーと値を示す AWS Secrets Manager コンソール。
      注記

      最大 3 セットのキーとパスフレーズを追加できます。2 つ目のセットを追加するには、2 つの新しい行を追加し、キーには PGPPrivateKey2PGPPassphrase2 を入力し、別のプライベートキーとパスフレーズを貼り付けます。3 番目のセットを追加するには、キー値は PGPPrivateKey3PGPPassphrase3 でなければなりません。

    7. [次へ] をクリックします。

    8. [シークレットの設定] ページで、シークレットの名前と説明を入力します。

      • デフォルトキー、つまりTTransfer Family ilyのすべてのユーザーが使用できるキーを作成する場合は、aws/transfer/server-id/@pgp-default と入力します。server-idを、復号化ステップを持つワークフローを含むサーバーの ID に置き換えます。

      • 特定のTransfer Family ユーザーが使用するキーを作成する場合は、aws/transfer/server-id/user-name と入力します。server-id を復号化ステップを持つワークフローを含むサーバーのIDに置き換え、user-name をワークフローを実行しているユーザー名に置き換えます。user-name は、Transfer Family サーバーが使用している ID プロバイダーに保存されます。

    9. 次へ」を選択し、「ローテーションの設定」ページのデフォルトを受け入れます。次いで、[次へ] を選択します。

    10. [レビュー] ページで[ストア] を選択し、シークレットを作成して保存します。

次のスクリーンショットは、特定の Transfer Family サーバのユーザ marymajor の詳細を示している。この例では、3 つのキーとそれに対応するパスフレーズが表示されています。

Transfer Family サーバーとユーザーの 3 つのキーとパスフレーズを含むシークレットの詳細ページを表示する AWS Secrets Manager コンソール。

サポートされている PGP クライアント

以下のクライアントはTTransfer Family ilyでテストされており、PGPキーの生成や、ワークフローで復号化するファイルの暗号化に使用できます。

  • GPG4Win + クレオパトラ。

    注記

    ファイルの署名/暗号化」を選択した場合は、「名前をつけて署名」の選択が解除されていることを確認してください。現在、暗号化されたファイルへの署名はサポートされていません。

    ファイルの署名と暗号化のための Kleopatra オプション。「名前を付けて署名」 のオプションはクリアされ、「自分用に暗号化」のオプションが選択されます。

    暗号化されたファイルに署名し、復号ワークフローを使用して Transfer Family サーバーにアップロードしようとすると、次のエラーが表示されます。

    Encrypted file with signed message unsupported
  • GnuPG」の主要なバージョン:2.4、2.3、2.2、2.0 および 1.4。

他のPGPクライアントも同様に動作する可能性がありますが、TTransfer Family ilyでテストされたのはここに記載されているクライアントのみであることに注意してください。