金鑰管理 - AWS Transfer Family

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

金鑰管理

在本節中,您可以找到有關SSH金鑰的資訊,包括如何產生金鑰以及如何輪換金鑰。如需使用 Transfer Family AWS Lambda 搭配 管理金鑰的詳細資訊,請參閱部落格文章使用 A AWS Transfer Family 和 啟用使用者自助式金鑰管理 AWS Lambda

注意

AWS Transfer Family 接受 RSA、 ECDSA和 ED25519金鑰。

本節也說明如何產生和管理 Pretty Good Privacy (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

注意

我們支援 ssh-rsa SHA1的舊版安全政策。如需詳細資訊,請參閱 密碼編譯演算法

為受服務管理的使用者產生SSH金鑰

您可以設定伺服器,使用服務受管身分驗證方法驗證使用者,其中使用者名稱和SSH金鑰存放在服務中。使用者的公有SSH金鑰會以使用者屬性的形式上傳到伺服器。伺服器會將此金鑰用作標準金鑰型身分驗證程序的一部分。每個使用者可以在具有個別伺服器的檔案中擁有多個公有SSH金鑰。如需每個使用者可儲存的金鑰數量限制,請參閱 中的AWS Transfer Family 端點和配額Amazon Web Services 一般參考

作為服務受管身分驗證方法的替代方案,您可以使用自訂身分提供者或 來驗證使用者 AWS Directory Service for Microsoft Active Directory。如需詳細資訊,請參閱 使用自訂身分提供者使用 AWS Directory Service 身分提供者

伺服器只能使用一種方法 (服務受管、目錄服務或自訂身分提供者) 來驗證使用者,且在建立伺服器後無法變更該方法。

在 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格式化金鑰。根據您要產生的金鑰對類型選擇適當的命令。

    注意

    在下列範例中,我們不會指定密碼片語:在此情況下,該工具會要求您輸入密碼片語,然後重複進行驗證。建立複雜密碼可為私有金鑰提供更好的保護,也可能改善整體系統安全性。您無法復原密碼:如果忘記密碼,則必須建立新的金鑰。

    不過,如果您要產生伺服器主機金鑰,則必須在命令中指定 -N ""選項 (或在出現提示時按Enter兩次) 來指定空密碼,因為 Transfer Family 伺服器無法在啟動時請求密碼。

    • 若要產生 RSA 4096 位元金鑰對:

      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. 在 開啟 AWS Transfer Family 主控台https://console.aws.amazon.com/transfer/,然後從導覽窗格中選取伺服器

    2. 伺服器頁面上,選取包含您要更新之使用者之伺服器的伺服器 ID

    3. 選取您要為其新增公有金鑰的使用者。

    4. SSH公有金鑰窗格中,選擇新增SSH公有金鑰

      AWS Transfer Family 主控台會顯示所選使用者的使用者詳細資訊。
    5. 將產生的公有金鑰文字貼到SSH公有金鑰文字方塊,然後選擇新增金鑰

      AWS Transfer Family 主控台會顯示新增金鑰頁面,以新增公有金鑰。

      新的金鑰會列在SSH公有金鑰窗格中。

      AWS Transfer Family 主控台會在公有金鑰區段中顯示新增的SSH公有金鑰。

在 Microsoft Windows 上建立SSH金鑰

Windows 使用略有不同的SSH金鑰對格式。公有金鑰的格式必須是 PUB 格式,私有金鑰的格式則必須是 PPK 格式。在 Windows 上,您可以使用 P uTTYgen 以適當的格式建立SSH金鑰對。您也可以使用 P uTTYgen 將 產生的私有金鑰轉換為 ssh-keygen .ppk 檔案。

注意

如果您使用非 .ppk 格式的私有金鑰檔案展示 WinSCP,該用戶端會提議將金鑰轉換為 .ppk 格式。

如需在 Windows uTTYgen 上使用 P 建立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格式化的公有金鑰。Replace (取代) ssh2-key 您的SSH2金鑰名稱,以及 PEM-key 您的PEM金鑰名稱。

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

輪換SSH索引鍵

為了安全起見,我們建議您輪換SSH金鑰的最佳實務。通常,此輪換會指定為安全政策的一部分,並以某些自動化方式實作。根據安全層級,對於高度敏感的通訊,SSH金鑰對只能使用一次。這樣做可消除任何因存放金鑰所帶來的風險。不過,儲存SSH憑證一段時間,並設定不會對使用者造成過度負擔的間隔比較常見。常見的間隔是三個月。

有兩種方法可用來執行SSH金鑰輪換:

  • 在主控台上,您可以上傳新的SSH公有金鑰並刪除現有的SSH公有金鑰。

  • 您可以使用 更新現有使用者API,方法是使用 DeleteSshPublicKeyAPI刪除使用者的 Secure Shell (SSH) 公有金鑰,以及ImportSshPublicKeyAPI將新的 Secure Shell (SSH) 公有金鑰新增至使用者帳戶。

Console
在主控台中執行金鑰輪換
  1. 在 開啟 AWS Transfer Family 主控台https://console.aws.amazon.com/transfer/

  2. 導覽至伺服器頁面。

  3. 伺服器 ID 欄中選擇識別碼,以查看伺服器詳細資訊頁面。

  4. 使用者 下,選取您要輪換其SSH公有金鑰的使用者核取方塊,然後選擇動作 ,然後選擇新增金鑰以查看新增金鑰頁面。

    選擇使用者名稱以查看使用者詳細資訊頁面,然後選擇新增SSH公有金鑰以查看新增金鑰頁面。

  5. 輸入新的SSH公有金鑰,然後選擇新增金鑰

    重要

    SSH 公有金鑰的格式取決於您產生的金鑰類型。

    • 對於RSA金鑰,格式為 ssh-rsa string

    • 對於ED25519金鑰,格式為 ssh-ed25519 string

    • 對於ECDSA金鑰,金鑰以 ecdsa-sha2-nistp256ecdsa-sha2-nistp384或 開頭ecdsa-sha2-nistp521,取決於您產生的金鑰大小。開始字串後面接著 string,類似於其他金鑰類型。

    您會返回使用者詳細資訊頁面,而您剛輸入的新SSH公有金鑰會顯示在SSH公有金鑰區段中。

  6. 選取您要刪除之舊金鑰的核取方塊,然後選擇刪除

  7. 輸入單字 來確認刪除操作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以使用者名稱取代 ,並以您在此程序的步驟 2 中複製的keyID-from-step-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金鑰

您可以使用 Pretty Good Privacy (PGP) 解密搭配 Transfer Family 與工作流程處理的檔案。若要在工作流程步驟中使用解密,您必須提供PGP金鑰。

AWS 儲存部落格有一個文章,說明如何使用 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-keygpg --gen-key命令以產生金鑰對。

注意

如果您使用的是 2GnuPG.3.0 版或更新版本,則必須執行 gpg --full-gen-key。當提示要建立的金鑰類型時,請選擇 RSA或 ECC。不過,如果您選擇 ECC,請務必選擇 NIST 或 BrainPool 橢圓曲線。請勿選擇 Curve 25519.

PGP金鑰對支援的演算法

PGP 金鑰對支援下列演算法:

  • RSA

  • 高端

  • ECC:

    • NIST

    • BrainPool

注意

不支援 Curve25519 金鑰。

有用的gpg子命令

以下是 的一些實用子命令gpg

  • gpg --help – 此命令會列出可用的選項,並可能包含一些範例。

  • gpg --list-keys – 此命令會列出您已建立的所有金鑰對的詳細資訊。

  • gpg --fingerprint – 此命令會列出所有金鑰對的詳細資訊,包括每個金鑰的指紋。

  • gpg --export -a user-name – 此命令會匯出產生金鑰時user-name所使用的 金鑰的公有金鑰部分。

管理 PGP 金鑰

若要管理PGP金鑰,您必須使用 AWS Secrets Manager。

注意

您的秘密名稱包含 Transfer Family 伺服器 ID。這表示在將PGP金鑰資訊存放在 之前,您應該已經識別或建立伺服器 AWS Secrets Manager。

如果您想要為所有使用者使用一個金鑰和密碼片語,您可以將PGP金鑰區塊資訊存放在秘密名稱 下aws/transfer/server-id/@pgp-default,其中 server-id是 Transfer Family 伺服器的 ID。如果沒有 與執行工作流程的使用者user-name相符的金鑰,則會使用此預設金鑰。

或者,您可以為特定使用者建立金鑰。在此情況下,秘密名稱的格式為 aws/transfer/server-id/user-name,其中 與執行 Transfer Family 伺服器工作流程的使用者user-name相符。

注意

每個 Transfer Family 伺服器、每個使用者最多可以存放 3 個PGP私有金鑰。

設定PGP金鑰以搭配解密使用
  1. 根據您GPG使用的 版本,執行下列其中一個命令來產生不使用 Curve 25519 加密演算法的PGP金鑰對。

    • 如果您使用的是 2.3.0 GnuPG版或更新版本,請執行下列命令:

      gpg --full-gen-key

      您可以選擇 RSA,或者,如果您選擇 ECC,您可以選擇橢圓曲線BrainPoolNIST或 。如果您gpg --gen-key改為執行,則會建立使用 ECC Curve 25519 加密演算法的金鑰對,我們目前不支援該PGP金鑰。

    • 對於 2.3.0 GnuPG之前的 版本,您可以使用下列命令,因為 RSA是預設加密類型。

      gpg --gen-key
    重要

    在金鑰產生過程中,您必須提供密碼和電子郵件地址。請務必記下這些值。在本程序中 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 並在 開啟 AWS Secrets Manager 主控台https://console.aws.amazon.com/secretsmanager/

    2. 在左側導覽窗格中,選擇秘密

    3. 秘密頁面上,選擇儲存新的秘密

    4. 選擇秘密類型頁面上,針對秘密類型 ,選取其他類型的秘密

    5. 鍵/值對區段中,選擇鍵/值索引標籤。

      • 金鑰 – 輸入 PGPPrivateKey

        注意

        您必須確實輸入PGPPrivateKey字串:請勿在字元之前或之間新增任何空格。

      • – 將私有金鑰的文字貼到值欄位中。您可以在本程序中稍早匯出金鑰時指定的檔案 (例如 private.pgp) 中找到私有金鑰的文字。金鑰開頭為 -----BEGIN PGP PRIVATE KEY BLOCK-----,結尾為 -----END PGP PRIVATE KEY BLOCK-----

        注意

        請確定文字區塊僅包含私有金鑰,也不包含公有金鑰。

    6. 選取新增列,然後在鍵/值對區段中,選擇鍵/值索引標籤。

      • 金鑰 – 輸入 PGPPassphrase

        注意

        您必須確實輸入PGPPassphrase字串:請勿在字元之前或之間新增任何空格。

      • value – 輸入您在產生PGP金鑰對時使用的密碼片語。

      AWS Secrets Manager 主控台,顯示您為了管理金鑰而輸入的PGP金鑰和值。
      注意

      您最多可以新增 3 組金鑰和密碼片語。若要新增第二組,請新增兩列,然後PGPPassphrase2輸入 鍵的 PGPPrivateKey2 和 ,然後貼到另一個私有金鑰和密碼片語中。若要新增第三組,金鑰值必須為 PGPPrivateKey3PGPPassphrase3

    7. 選擇 Next (下一步)

    8. 設定秘密頁面上,輸入秘密的名稱和描述。

      • 如果您要建立預設金鑰,亦即任何 Transfer Family 使用者都可以使用的金鑰,請輸入 aws/transfer/server-id/@pgp-defaultserver-id 以包含具有解密步驟之工作流程的伺服器 ID 取代 。

      • 如果您要建立金鑰以供特定 Transfer Family 使用者使用,請輸入 aws/transfer/server-id/user-nameserver-id 以包含具有解密步驟之工作流程的伺服器 ID 取代 ,並以執行工作流程user-name的使用者名稱取代 。user-name 會儲存在 Transfer Family 伺服器正在使用的身分提供者中。

    9. 選擇下一步,並接受設定輪換頁面上的預設值。然後選擇下一步

    10. 檢閱頁面上,選擇儲存以建立和儲存秘密。

下列螢幕擷取畫面顯示marymajor特定 Transfer Family 伺服器的使用者詳細資訊。此範例顯示三個金鑰及其對應的密碼片語。

AWS Secrets Manager 主控台會顯示機密詳細資訊頁面,其中包含 Transfer Family 伺服器和使用者的三個金鑰和密碼片語。

支援的PGP用戶端

下列用戶端已使用 Transfer Family 進行測試,可用於產生PGP金鑰,以及加密您打算使用工作流程解密的檔案。

  • Gpg4win + Kleopatra

    注意

    當您選取簽署/加密檔案 時,請務必清除簽署為 的選擇:我們目前不支援簽署加密檔案。

    用於簽署和加密檔案的 Kleopatra 選項。簽章為 的選項已清除,且已選取 Encrypt for me 的選項。
  • 主要 GnuPG 版本:2.4、2.3、2.2、2.0 和 1.4。

請注意,其他PGP用戶端可能也適用,但只有此處提到的用戶端已經過 Transfer Family 測試。