保護存取金鑰的安全 - 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 SDK 和 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 位址或虛擬私有雲端 (VPC)。如此一來,便能確保存取金鑰僅從預期且可接受的網路使用。

注意

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

如果您必須為程式化存取 AWS 建立存取金鑰,請為 IAM 使用者建立這些金鑰,並且僅授予使用者其所需的許可。

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

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

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

    • AWS 登入資料檔案。AWS 軟體開發套件和 AWS CLI 會自動使用您儲存在 AWS 登入資料檔案中的登入資料。

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

      若要存放適用於 適用於 .NET 的 AWS SDK 和 AWS Tools for Windows PowerShell 的憑證,建議您使用 SDK Store。如需詳細資訊,請參閱《適用於 .NET 的 AWS SDK 開發人員指南》中的使用 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 SDK 和 AWS CLI 來使用存取金鑰。

使用存取金鑰和秘密金鑰憑證存取主控台

除 AWS CLI 外,還可以使用存取金鑰和秘密金鑰憑證直接存取 AWS 管理主控台。此操作可透過 AWS STS GetFederationToken API 呼叫實現。IAM 主體只需透過使用 GetFederationToken 提供的臨時憑證和權杖建構主控台 URL,就能存取主控台。如需更多詳細資訊,請參閱 使自訂身分經紀人存取 AWS 主控台

值得釐清的是,直接使用 IAM 或根使用者憑證登入主控台並啟用 MFA 時,將需要 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 帳戶根使用者 的長期登入資料。開頭為 ASIA 的存取金鑰 ID 是使用 AWS STS 操作建立的臨時性憑證。如果回應中的帳戶是您的,您可以根使用者的身分登入並檢閱根使用者存取金鑰。然後,您可以提取憑證報告來了解擁有索引鍵的是哪位 IAM 使用者。若要了解 ASIA 存取金鑰臨時性憑證的申請者,請在 CloudTrail 日誌中檢視 AWS STS 事件。

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

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