保護存取金鑰的安全 - AWS Identity and Access Management

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

保護存取金鑰的安全

擁有您存取金鑰的任何人都擁有與您相同層級的存取 AWS 資源。因此, AWS 為了保護您的存取金鑰,採取了很大的長度,並且為了符合我們的共同責任模型,您也應該這麼做。

展開下列各節,以取得協助您保護存取金鑰的指引。

注意

您組織的安全要求和政策,可能會與本主題中所述的狀況不同。這裡提供的建議旨在做為一般指導方針。

保護帳戶其中一個最佳方法是,不要有 AWS 帳戶根使用者的存取金鑰。除非您必須要有根使用者存取金鑰 (少數情況下),否則最好不要產生存取金鑰。反之,請在 中 AWS IAM Identity Center 為每日管理任務建立管理使用者。如需如何在 IAM Identity Center 中建立管理使用者的相關資訊,請參閱《IAM Identity Center 使用者指南》中的入門

如果您已經有帳戶的根使用者存取金鑰,建議您執行以下步驟:找出應用程式中目前使用金鑰 (如果有) 的地方,以 IAM 使用者存取金鑰取代根使用者存取金鑰。然後停用並移除根使用者存取金鑰。如需有關如何更新存取金鑰的詳細資訊,請參閱 更新存取金鑰

在許多情況下,您不必像 IAM 使用者一樣需要永遠不會過期的長期存取金鑰。反之,您可以建立 IAM 角色並產生暫時安全憑證。臨時安全登入資料包含存取金鑰 ID 和私密存取金鑰,但其中也包含指出登入資料何時到期的安全符記。

例如與 IAM 使用者和根使用者相關聯的長期存取金鑰,會一直保持有效,直到您手動撤銷為止。不過,透過 IAM 角色和其他 功能取得的臨時安全登入資料會在短時間內 AWS Security Token Service 過期。使用臨時安全登入資料,可協助降低風險,以防登入資料意外洩露。

請在以下案例中使用 IAM 角色和臨時安全憑證:

  • 您有應用程式或 AWS CLI 指令碼在 Amazon EC2 執行個體上執行。請勿直接在應用程式中使用存取金鑰。請勿將存取金鑰傳遞至應用程式、將其嵌入應用程式中,或讓應用程式從任何來源讀取存取金鑰。反之,請定義具有應用程式適當權許可的 IAM 角色,然後使用 EC2 角色啟動 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。這樣做會將 IAM 角色與 Amazon EC2 執行個體相關聯。這種做法也可讓應用程式取得臨時安全憑證,以便用來對 AWS進行程式化呼叫。 AWS SDKs 和 AWS Command Line Interface (AWS CLI) 可以自動從角色取得臨時登入資料。

  • 您需要授予跨帳戶存取權。使用 IAM 角色培養帳戶之間的信任,然後對一個帳戶中的使用者授予有限的許可,以存取信任的帳戶。如需詳細資訊,請參閱IAM 教學課程:使用 IAM 角色將存取許可委派給不同 AWS 帳戶

  • 您有一個行動應用程式。請勿使用應用程式內嵌存取金鑰,甚至是內嵌於加密儲存中。反之,請使用 Amazon Cognito 來管理應用程式中的使用者身分。此服務可讓您使用 Login with Amazon、Facebook、Google 或任何與身分提供者相容的 OpenID Connect (OIDC),驗證使用者的身分。然後,您可以使用 Amazon Cognito 憑證供應商,管理應用程式用來向 AWS提出請求的憑證。

  • 您想要與 聯合, AWS 且您的組織支援 SAML 2.0。如果您處理的組織是具有支援 SAML 2.0 的身分識別提供者的組織,請將提供者設定為使用 SAML。您可以使用 SAML 與 交換身分驗證資訊, AWS 並取回一組臨時安全登入資料。如需詳細資訊,請參閱SAML 2.0 聯合身分

  • 您想要與 聯合 AWS ,且您的組織具有內部部署身分存放區。如果使用者可以在您的組織內部進行身分驗證,您可以撰寫應用程式,以發出臨時安全登入資料供他們存取 AWS 資源。如需詳細資訊,請參閱啟用 AWS 主控台的自訂身分代理程式存取

  • 使用 IAM 政策中的條件,僅允許從預期的網路存取。您可以藉由實作 IAM 政策來限制存取金鑰的使用位置和方式,條件指定並僅允許預期的網路,例如公有 IP 地址或虛擬私有雲端 (VPCs)。如此一來,您就知道存取金鑰只能從預期和可接受的網路使用。

注意

您是否將 Amazon EC2 執行個體與需要以程式設計方式存取 AWS 資源的應用程式搭配使用? 如果是,請使用適用於 EC2 的 IAM 角色

如果您必須為程式設計存取建立存取金鑰 AWS,請為 IAM 使用者建立存取金鑰,僅授予使用者所需的許可。

遵循這些預防措施,以協助保護 IAM 使用者存取金鑰:

  • 請勿將存取金鑰直接嵌入程式碼。AWS SDKAWS 命令列工具可讓您將存取金鑰放入已知位置,如此一來,就不必將其留在程式碼中。

    將存取金鑰放入以下其中一個位置:

    • AWS 登入資料檔案。SDKs和 AWS AWS CLI 會自動使用您在登入資料檔案中存放的 AWS 登入資料。

      如需有關使用 AWS 登入資料檔案的資訊,請參閱 SDK 的文件。範例包括 AWS SDK for Java 開發人員指南中的設定 AWS 登入資料和區域,以及 AWS Command Line Interface 使用者指南中的組態和登入資料檔案

      若要存放 AWS SDK for .NET 和 的登入資料 AWS Tools for Windows PowerShell,建議您使用 SDK Store。如需詳細資訊,請參閱《AWS SDK for .NET 開發人員指南》中的使用 SDK Store

    • 環境變數. 在多租用戶系統中,請選擇使用者環境變數,而不是系統環境變數。

      如需有關使用環境變數來存放憑證的詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的環境變數

  • 對不同的應用程式使用不同的存取金鑰。如果它們已經公開,這麼做可以隔離許可,並撤銷個別應用程式的存取金鑰。針對不同的應用程式擁有獨立的存取金鑰,也會在 AWS CloudTrail 日誌檔中產生不同的項目。此組態可讓您更容易判斷哪個應用程式執行特定動作。

  • 視需要更新存取金鑰。若有存取金鑰可能遭洩露的風險,請更新該存取金鑰並刪除先前的存取金鑰。如需詳細資訊,請參閱更新存取金鑰

  • 移除未使用的存取金鑰。如果使用者離開組織,請移除相對應的 IAM 使用者,使該使用者無法再存取您的資源。若要了解上次使用存取金鑰的時間,請使用 GetAccessKeyLastUsed API (AWS CLI 命令:aws iam get-access-key-last-used)。

  • 為最機密的 API 操作使用臨時憑證並設定多重驗證。利用 IAM 政策,可以指定允許使用者呼叫的 API 操作。在某些情況下,您可能希望在允許使用者執行特別敏感的動作之前,要求使用者使用 AWS MFA 進行身分驗證的額外安全性。例如,您可能擁有允許使用者執行 Amazon EC2 RunInstancesDescribeInstancesStopInstances 動作的政策。但您可能想要限制類似 的破壞性動作,TerminateInstances並確保使用者只有在使用 AWS MFA 裝置進行身分驗證時,才能執行該動作。如需詳細資訊,請參閱透過 MFA 實現安全的 API 存取

您可以使用 AWS 行動應用程式存取一組有限的 AWS 服務和功能。行動應用程式可協助您在外出時支援事件回應。如需詳細資訊及下載應用程式,請參閱 AWS 主控台行動應用程式

您可以使用主控台密碼或存取金鑰登入行動應用程式。根據最佳實務,請勿使用根使用者存取金鑰。相反地,我們強烈建議除了在行動裝置上使用密碼或生物識別鎖定之外,您還要建立專門用於使用行動應用程式管理 AWS 資源的 IAM 使用者。如果您遺失行動裝置,您可以移除 IAM 使用者的存取權。

使用存取金鑰登入 (行動應用程式)
  1. 在行動裝置上開啟應用程式。

  2. 如果這是您第一次將身分新增至裝置,請依序選擇 Add an identity (新增身分) 及選擇 Access keys (存取金鑰)

    如果您已經使用其他身分登入,請依序選擇功能表圖示及 Switch identity (切換身分)。然後依序選擇 Sign in as a different identity (以不同的身分登入)Access keys (存取金鑰)

  3. Access keys (存取金鑰) 頁面輸入您的資訊。

    • 存取金鑰 ID – 輸入您的存取金鑰 ID。

    • 私密存取金鑰 – 輸入您的私密存取金鑰。

    • 身分名稱 – 輸入將顯示在行動應用程式中的身分識別名稱。這不需要與您的 IAM 使用者名稱相符。

    • 身分識別 PIN – 建立您將在未來登入期間使用的個人識別碼 (PIN)。

      注意

      如果您為 AWS 行動應用程式啟用生物識別,系統會提示您使用您的指紋或臉部辨識進行驗證,而不是 PIN。如果生物特徵辨識失敗,系統可能會提示您輸入 PIN 碼。

  4. 選擇 Verify and add keys (驗證並新增金鑰)

    您現在可以使用行動應用程式存取精選的一組資源。

下列主題提供設定 AWS SDKs和 AWS CLI 以使用存取金鑰的指引:

使用存取金鑰和私密金鑰登入資料進行主控台存取

可以使用存取金鑰和私密金鑰登入資料進行直接 AWS Management Console 存取,而不只是 AWS CLI。這可以使用 API AWS STS GetFederationToken呼叫來達成。透過使用 提供的臨時憑證和字符建構主控台 URLGetFederationToken,IAM 主體可以存取主控台。如需詳細資訊,請參閱啟用 AWS 主控台的自訂身分代理程式存取

值得釐清的是,在啟用 MFA 的情況下,直接使用 IAM 或根使用者登入資料登入主控台時,將需要 MFA。不過,如果使用上述方法 (搭配 使用臨時憑證GetFederationToken),則不需要 MFA。

稽核存取金鑰

您可以檢閱程式碼中的 AWS 存取金鑰,以判斷金鑰是否來自您擁有的帳戶。您可以使用 aws sts get-access-key-info AWS CLI 命令或 GetAccessKeyInfo AWS API 操作傳遞存取金鑰 ID。

AWS CLI 和 AWS API 操作會傳回 AWS 帳戶 存取金鑰所屬的 ID。開頭為 AKIA 的存取金鑰是 IAM 使用者或 AWS 帳戶根使用者的長期登入資料。以 開頭的存取金鑰 IDs ASIA 是使用 AWS STS 操作建立的臨時憑證。如果回應中的帳戶是您的,您可以根使用者的身分登入並檢閱根使用者存取金鑰。然後,您可以提取憑證報告來了解擁有金鑰的是哪位 IAM 使用者。若要了解誰請求ASIA存取金鑰的臨時登入資料,請檢視 CloudTrail 日誌中的 AWS STS 事件。

為了安全起見,您可以檢閱 AWS CloudTrail 日誌,以了解在其中執行動作的人員 AWS。您可以使用角色信任政策中的 sts:SourceIdentity 條件金鑰,請求使用者在擔任角色時指定身分。例如,您可以請求 IAM 使用者將自己的使用者名稱指定為其來源身分。這可以協助您判斷哪位使用者在 AWS中執行了特定動作。如需詳細資訊,請參閱sts:SourceIdentity

此操作不會指出存取金鑰的狀態。金鑰可能是作用中、非作用中或已刪除。作用中金鑰可能沒有操作的執行許可。提供已刪除的存取金鑰可能會傳回金鑰不存在的錯誤。