

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

# 保護存取金鑰的安全
<a name="securing_access-keys"></a>

擁有您存取金鑰的任何人都擁有與您執行之 AWS 資源相同的存取層級。因此， AWS 會竭盡全力保護您的存取金鑰，而且為了符合我們的[共同責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)，您也應該這麼做。

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

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

## 移除 （或不產生） AWS 帳戶根使用者 存取金鑰
<a name="root-password"></a>

**保護帳戶其中一個最佳方法是，不要有 AWS 帳戶根使用者的存取金鑰**。除非您必須要有根使用者存取金鑰 (少數情況下)，否則最好不要產生存取金鑰。反之，請在 中 AWS IAM Identity Center 為每日管理任務建立管理使用者。如需如何在 IAM Identity Center 中建立管理使用者的相關資訊，請參閱《*IAM Identity Center 使用者指南*》中的[入門](https://docs.aws.amazon.com//singlesignon/latest/userguide/getting-started.html)。

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



## 使用臨時安全憑證 (IAM 角色)，而不是長期存取金鑰
<a name="use-roles"></a>

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

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

請在以下案例中使用 IAM 角色和臨時安全憑證：
+ **您有應用程式或 AWS CLI 指令碼在 Amazon EC2 執行個體上執行。**請勿直接在應用程式中使用存取金鑰。請勿將存取金鑰傳遞至應用程式、將其嵌入應用程式中，或讓應用程式從任何來源讀取存取金鑰。反之，請定義具有應用程式適當權許可的 IAM 角色，然後使用 [EC2 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html)啟動 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。這樣做會將 IAM 角色與 Amazon EC2 執行個體相關聯。這種做法也可讓應用程式取得臨時安全憑證，以便用來對 AWS進行程式化呼叫。 AWS SDKs 和 AWS Command Line Interface (AWS CLI) 可以自動從角色取得臨時登入資料。
+ **您需要授予跨帳戶存取權。**使用 IAM 角色培養帳戶之間的信任，然後對一個帳戶中的使用者授予有限的許可，以存取信任的帳戶。如需詳細資訊，請參閱[IAM 教學課程：使用 IAM 角色在 AWS 帳戶之間委派存取權](tutorial_cross-account-with-roles.md)。
+ **您有一個行動應用程式。**請勿使用應用程式內嵌存取金鑰，甚至是內嵌於加密儲存中。反之，請使用 [Amazon Cognito](https://aws.amazon.com/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 聯合身分](id_roles_providers_saml.md)。
+ **您想要與 聯合， AWS 而且您的組織具有內部部署身分存放區。**如果使用者可以在您的組織內部進行身分驗證，您可以撰寫應用程式，向他們發出臨時安全登入資料以存取 AWS 資源。如需詳細資訊，請參閱[啟用 AWS 主控台的自訂身分代理程式存取](id_roles_providers_enable-console-custom-url.md)。
+ **在 IAM 政策中使用條件，僅允許從預期網路進行存取。**您可以透過實作[具有條件的 IAM 政策](reference_policies_elements_condition_operators.md)來限制存取金鑰的使用位置和方式，這些條件指定並僅允許預期網路，例如公有 IP 位址或虛擬私有雲端 (VPC)。如此一來，便能確保存取金鑰僅從預期且可接受的網路使用。

**注意**  
您是否將 Amazon EC2 執行個體與需要以程式設計方式存取 AWS 資源的應用程式搭配使用？ 如果是，請使用[適用於 EC2 的 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html)。

## 適當管理 IAM 使用者存取金鑰
<a name="iam-user-access-keys"></a>

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

遵循這些預防措施，以協助保護 IAM 使用者存取金鑰：
+ **請勿將存取金鑰直接嵌入程式碼。**[AWS SDK](https://aws.amazon.com/tools/#sdk) 和 [AWS 命令列工具](https://aws.amazon.com/tools/#cli)可讓您將存取金鑰放入已知位置，如此一來，就不必將其留在程式碼中。

  將存取金鑰放入以下其中一個位置：
  + ** AWS 登入資料檔案。**SDKs和 AWS AWS CLI 會自動使用您在登入資料檔案中存放的 AWS 登入資料。

    如需有關使用 AWS 登入資料檔案的資訊，請參閱 SDK 的文件。範例包括《 *適用於 Java 的 AWS SDK 開發人員指南*》中的[設定 AWS 登入資料和區域](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup-credentials.html)，以及*AWS Command Line Interface 《 使用者指南*》中的[組態和登入資料檔案](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)。

    若要存放 適用於 .NET 的 AWS SDK 和 的登入資料 AWS Tools for Windows PowerShell，建議您使用 SDK 存放區。如需詳細資訊，請參閱《適用於 .NET 的 AWS SDK 開發人員指南》**中的[使用 SDK Store](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/sdk-store.html)。
  + **環境變數.** 在多租用戶系統中，請選擇使用者環境變數，而不是系統環境變數。

    如需有關使用環境變數來存放憑證的詳細資訊，請參閱《AWS Command Line Interface 使用者指南》**中的[環境變數](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html)。
+ **對不同的應用程式使用不同的存取金鑰。**如果它們已經公開，這麼做可以隔離許可，並撤銷個別應用程式的存取金鑰。針對不同的應用程式擁有獨立的存取金鑰，也會在 [AWS CloudTrail](https://aws.amazon.com/cloudtrail/) 日誌檔中產生不同的項目。此組態可讓您更容易判斷哪個應用程式執行特定動作。
+ **視需要更新存取金鑰。**若有存取金鑰可能遭洩露的風險，請更新該存取金鑰並刪除先前的存取金鑰。如需詳細資訊，請參閱[更新存取金鑰](id-credentials-access-keys-update.md) 
+ **移除未使用的存取金鑰。**如果使用者離開組織，請移除相對應的 IAM 使用者，使該使用者無法再存取您的資源。若要了解上次使用存取金鑰的時間，請使用 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccessKeyLastUsed.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccessKeyLastUsed.html) API (AWS CLI 命令：[https://docs.aws.amazon.com/cli/latest/reference/iam/get-access-key-last-used.html](https://docs.aws.amazon.com/cli/latest/reference/iam/get-access-key-last-used.html))。
+ **為最機密的 API 操作使用臨時憑證並設定多重驗證。**利用 IAM 政策，可以指定允許使用者呼叫的 API 操作。在某些情況下，您可能希望在允許使用者執行特別敏感的動作之前，要求使用者使用 AWS MFA 進行身分驗證的額外安全性。例如，您可能擁有允許使用者執行 Amazon EC2 `RunInstances`、`DescribeInstances` 與 `StopInstances` 動作的政策。但您可能想要限制類似 的破壞性動作，`TerminateInstances`並確保使用者只有在使用 AWS MFA 裝置進行身分驗證時，才能執行該動作。如需詳細資訊，請參閱[透過 MFA 實現安全的 API 存取](id_credentials_mfa_configure-api-require.md)。

## 使用存取金鑰 AWS 存取行動應用程式
<a name="access-keys-mobile-app"></a>

您可以使用 AWS 行動應用程式存取一組有限的 AWS 服務和功能。行動應用程式可協助您在外出時支援事件回應。如需詳細資訊及下載應用程式，請參閱 [AWS 主控台行動應用程式](https://aws.amazon.com/console/mobile/)。

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

**使用存取金鑰登入 (行動應用程式)**

1. 在行動裝置上開啟應用程式。

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

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

1. 在 **Access keys (存取金鑰)** 頁面輸入您的資訊。
   + **存取金鑰 ID** – 輸入您的存取金鑰 ID。
   + **私密存取金鑰** – 輸入您的私密存取金鑰。
   + **身分名稱** – 輸入將顯示在行動應用程式中的身分識別名稱。這不需要與您的 IAM 使用者名稱相符。
   + **身分識別 PIN** – 建立您將在未來登入期間使用的個人識別碼 (PIN)。
**注意**  
如果您為 AWS 行動應用程式啟用生物識別，系統會提示您使用您的指紋或臉部辨識進行驗證，而不是 PIN 碼。如果生物特徵辨識失敗，系統可能會提示您輸入 PIN 碼。

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

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

## 相關資訊
<a name="more-resources"></a>

下列主題提供設定 AWS SDKs和 AWS CLI 以使用存取金鑰的指引：
+ 《 *適用於 Java 的 AWS SDK 開發人員指南*》中的[設定 AWS 登入資料和區域](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup-credentials.html) 
+ 《適用於 .NET 的 AWS SDK 開發人員指南》**中的[使用 SDK Store](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/sdk-store.html)
+ 《適用於 PHP 的 AWS SDK 開發人員指南》**中的[對 SDK 提供憑證](https://docs.aws.amazon.com/aws-sdk-php/v2/guide/credentials.html)
+ Boto 3 （適用於 Python 的AWS SDK) 文件中的[組態](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#configuration) 
+ 《AWS Tools for Windows PowerShell 使用者指南》**中的[使用 AWS 憑證](https://docs.aws.amazon.com/powershell/latest/userguide/specifying-your-aws-credentials.html) 
+ 《AWS Command Line Interface 使用者指南》**中的[組態和憑證檔案](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) 
+ 《適用於 .NET 的 AWS SDK 開發人員指南》**中的[使用 IAM 角色授予存取權](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-hosm.html)
+ *AWS SDK for Java 2.x* 中的[為 Amazon EC2 設定 IAM 角色](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/java-dg-roles.html)

## 使用存取金鑰和秘密金鑰憑證存取主控台
<a name="console-access-security-keys"></a>

除 AWS CLI外，還可以使用存取金鑰和秘密金鑰憑證直接存取 AWS 管理主控台 。這可以使用 API AWS STS [https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html)呼叫來實現。IAM 主體只需透過使用 `GetFederationToken` 提供的臨時憑證和權杖建構主控台 URL，就能存取主控台。如需詳細資訊，請參閱[啟用 AWS 主控台的自訂身分代理程式存取](id_roles_providers_enable-console-custom-url.md)。

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



## 稽核存取金鑰
<a name="Using_access-keys-audit"></a>

您可以檢閱程式碼中的 AWS 存取金鑰，以判斷金鑰是否來自您擁有的帳戶。您可以使用 [https://docs.aws.amazon.com/cli/latest/reference/sts/get-access-key-info.html](https://docs.aws.amazon.com/cli/latest/reference/sts/get-access-key-info.html) AWS CLI 命令或 [https://docs.aws.amazon.com/STS/latest/APIReference/API_GetAccessKeyInfo.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetAccessKeyInfo.html) AWS API 操作傳遞存取金鑰 ID。

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

基於安全考量，您可以[檢閱 AWS CloudTrail 日誌](cloudtrail-integration.md#cloudtrail-integration_signin-tempcreds)，以了解在其中執行動作的人員 AWS。您可以使用角色信任政策中的 `sts:SourceIdentity` 條件金鑰，請求使用者在擔任角色時指定身分。例如，您可以請求 IAM 使用者將自己的使用者名稱指定為其來源身分。這可以協助您判斷哪位使用者在 AWS中執行了特定動作。如需詳細資訊，請參閱[`sts:SourceIdentity`](reference_policies_iam-condition-keys.md#ck_sourceidentity)。

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