金鑰管理 - AWS Transfer Family

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

金鑰管理

在本節中,您可以找到有關安全殼層金鑰的資訊,包括如何產生這些金鑰以及如何旋轉這些金鑰。如需使用 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

注意

我們為ssh-rsa舊版安全性原則提供 SHA1 支援。如需詳細資訊,請參閱 加密算法

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

您可以將伺服器設定為使用服務管理的驗證方法來驗證使用者,其中使用者名稱和 SSH 金鑰會儲存在服務中。使用者的公開安全殼層金鑰會作為使用者的屬性上傳至伺服器。伺服器會使用此金鑰做為標準金鑰型驗證程序的一部分。每個使用者都可以針對個別伺服器上的檔案擁有多個公有 SSH 金鑰。如需每位使用者可儲存的金鑰數目限制,請參閱AWS Transfer Family Amazon Web Services 一般參考.

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

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

在 macOS、Linux 或 Unix 上建立安全殼層金鑰

在 macOS、Linux 或 Unix 作業系統上,您可以使用ssh-keygen指令來建立安全殼層公開金鑰和 SSH 私密金鑰 (也稱為 key pair)。

在 macOS、Linux 或 Unix 作業系統上建立安全殼層金鑰
  1. 在 macOS、Linux 或 Unix 作業系統上,開啟指令終端機。

  2. AWS Transfer Family 接受 RSA、ECDSA 和格式化的金鑰。根據您要產生的金鑰配對類型選擇適當的指令。

    注意

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

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

    • 若要產生 RSA 4096 位元 key pair,請執行下列動作:

      ssh-keygen -t rsa -b 4096 -f key_name
    • 若要產生一組 521 位元金鑰配對 (ECDSA 的位元大小為 256、384 和 521),請執行下列動作:

      ssh-keygen -t ecdsa -b 521 -f key_name
    • 若要產生 ED25519 key pair:

      ssh-keygen -t ed25519 -f key_name
    注意

    key_name是 SSH key pair 檔案名稱。

    以下顯示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 key pair 現在已準備好可供使用。依照步驟 3 和 4 為您的服務管理使用者儲存 SSH 公開金鑰。這些使用者在傳輸系列伺服器端點上傳輸檔案時會使用這些金鑰。

  3. 導航到該key_name.pub文件並打開它。

  4. 複製文字並將其貼到服務管理使用者的 SSH 公開金鑰中。

    1. https://console.aws.amazon.com/transfer/ 開啟 AWS Transfer Family 主控台,然後從導覽窗格中選取 [伺服器]。

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

    3. 選取要新增公開金鑰的使用者。

    4. 在 [SSH 公開金鑰] 窗格中,選擇 [新增安全殼層公開金鑰]。

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

      
                                         AWS Transfer Family 控制台,顯示用於添加公鑰的添加密鑰頁面。

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

      
                                        控 AWS Transfer Family 制台,在 SSH 公鑰部分中顯示新添加的公鑰。

在 Microsoft 視窗上建立 SSH 金鑰

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

注意

如果您以非.ppk格式的私密金鑰檔案呈現 WinSCP,則該用戶端會提供將金鑰轉換為您的.ppk格式。

如需在 Windows 上使用 Puttygen 建立安全殼層金鑰的教學課程,請參閱 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 key pair 可能只會使用一次。這樣做可消除任何因存放金鑰所帶來的風險。但是,存儲 SSH 憑據一段時間並設置不會給用戶造成不必要負擔的間隔更為常見。常見的間隔是三個月。

執行 SSH 金鑰輪換的方法有兩種:

  • 在主控台上,您可以上傳新的安全殼層公開金鑰,並刪除現有的安全殼層公開金鑰。

  • 使用 API,您可以使用 DeleteSshPublicKeyAPI 刪除使用者的安全殼層 (SSH) 公開金鑰,以及將新的安全殼層 (SSH) 公開金鑰新增至使用者帳戶的 ImportSshPublicKeyAPI 來更新現有使用者。

Console
在主控台中執行按鍵旋轉
  1. 請在以下位置開啟 AWS Transfer Family 主控台。 https://console.aws.amazon.com/transfer/

  2. 瀏覽至「伺服器」頁面。

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

  4. 在 [使者] 底下,選取您要輪換其安全殼層公開金鑰之使用者的核取方塊,然後選擇 [動作],然後選擇 [新增金鑰] 以查看 [新增金鑰] 頁面。

    選擇使用者名稱以查看 [使用者詳細資料] 頁面,然後選擇 [新增安全殼層公開金鑰] 查看 [新增金鑰] 頁面。

  5. 輸入新的 SSH 公開金鑰,然後選擇 [新增金鑰]。

    重要

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

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

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

    • 對於 ECDSA 金鑰,金鑰會以ecdsa-sha2-nistp256、或開頭 ecdsa-sha2-nistp384ecdsa-sha2-nistp521,視您產生的金鑰大小而定。然後,開始字符串後跟string,類似於其他鍵類型。

    您會返回 [使用者詳細資料] 頁面,而您剛才輸入的新安全殼層公開金鑰會出現在 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為您的使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 存儲博客有一篇文章,描述瞭如何加密和解密文件,使用 PGP 和 AWS Transfer Family解密文件

產生 PGP 金鑰

您用來產生 PGP 金鑰的方法取決於您的作業系統和您使用的金鑰產生軟體版本。

如果您使用的是 Linux 或 Unix,請使用套件安裝程式進行安裝gpg。根據您的 Linux 發行版本,下列其中一個指令應適用於您。

sudo yum install gnupg
sudo apt-get install gnupg

對於視窗或 macOS,您可以從以下位置下載所需的內容 https://gnupg.org/download/

安裝 PGP 金鑰產生器軟體之後,您可以執行gpg --full-gen-keygpg --gen-key指令來產生 key pair。

注意

如果您使用的是 2.3.0 或更高GnuPG版本,則必須運行gpg --full-gen-key。當系統提示您輸入要建立的金鑰類型時,請選擇 RSA 或 ECC。但是,如果您選擇 ECC,請務必BrainPool為橢圓曲線選擇NIST或。不要選擇Curve 25519。

PGP 金鑰配對支援的演算法

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

  • RSA

  • 妖精

  • ECC:

    • NIST

    • BrainPool

注意

不支援曲線 25519 金鑰。

有用的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,其中user-name與執行 Transfer Family 伺服器工作流程的使用者相符。

注意

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

設定要與解密搭配使用的 PGP 金鑰
  1. 視您使用的 GPG 版本而定,執行下列其中一個指令來產生不使用 Curve 25519 加密演算法的 PGP key pair。

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

      gpg --full-gen-key

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

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

      gpg --gen-key
    重要

    在金鑰產生過程中,您必須提供密碼片語和電子郵件地址。請務必注意這些值。當您在本程序 AWS Secrets Manager 稍後輸入金鑰的詳細資訊時,必須提供複雜密碼。在下一步中,您必須提供相同的電子郵件地址才能導出私鑰。

  2. 執行下列命令以匯出私密金鑰。若要使private.pgp用此命令,請取代為儲存私密金鑰區塊的檔案名稱,以及marymajor@example.com您在產生金 key pair 時使用的電子郵件地址。

    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字串:請勿在字元之前或之間加入任何空格。

      • value — 將私鑰的文本粘貼到值字段中。您可以在先前在此程序中匯出金鑰時所指定的檔案 (例如private.pgp) 中找到私密金鑰的文字。金鑰的開頭-----BEGIN PGP PRIVATE KEY BLOCK-----與結尾為-----END PGP PRIVATE KEY BLOCK-----

        注意

        請確定文字區塊只包含私密金鑰,而且不包含公開金鑰。

    6. 選擇添加行,然後在「鍵/值對」部分中,選擇「/值」選項卡。

      • -輸入PGPPassphrase

        注意

        您必須完全輸入PGPPassphrase字串:請勿在字元之前或之間加入任何空格。

      • value — 輸入您在產生 PGP key pair 時使用的複雜密碼。

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

      您最多可以新增 3 組金鑰和密碼。若要新增第二個集合,請新增兩個新資料列,然後PGPPassphrase2為金鑰輸入PGPPrivateKey2和,然後貼上另一個私密金鑰和複雜密碼。若要新增第三組,索引鍵值必須是PGPPrivateKey3PGPPassphrase3

    7. 選擇下一步

    8. [設定密碼] 頁面上,輸入密碼的名稱和說明。

      • 如果您要建立預設金鑰,也就是任何「Transfer Family」使用者都可以使用的金鑰,請輸入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」伺服器正在使用的身分識別提供者中。

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

    10. 在「檢閱」頁面上,選擇「儲存」以建立並儲存密碼。

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


                         AWS Secrets Manager 主控台會顯示「密碼詳細資料」頁面,其中包含「轉移系列」伺服器和使用者的三個金鑰和密碼。

支援的 PGP 用戶端

下列用戶端已通過 Transfer Family 的測試,可用來產生 PGP 金鑰,以及加密您要透過工作流程解密的檔案。

  • GPG4 贏 + 克列奧帕特拉。

    注意

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

    
                                用於簽名和加密文件的克列奧帕特拉選項。[簽署為] 的選項已清除,且已選取 [為我加密] 的選項。
  • 主要的 GnuPG 版本:2.4、2.3、2.2、2.0 和 1.4。

請注意,其他 PGP 客戶端可能也可以正常工作,但只有此處提到的客戶端已通過 Transfer Family 進行了測試。