

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

# AWS IAM Roles Anywhere 使用私有憑證保護
<a name="iam-roles-anywhere-private-ca"></a>

*Barnali Singh，Amazon Web Services*

## 摘要
<a name="iam-roles-anywhere-private-ca-summary"></a>

此模式示範如何使用 AWS IAM Roles Anywhere AWS 私有憑證授權單位 (AWS 私有 CA) 實作 ，為存取 AWS 資源的外部工作負載啟用安全的憑證型身分驗證。解決方案使用 X.509 憑證取得臨時 AWS 登入資料，無需長期存取金鑰。這是一種雲端原生安全模式，包括透過 AWS CloudFormation 範本和 shell 指令碼進行完全自動化，讓組織能夠快速部署現場部署應用程式、CI/CD 管道和外部系統的安全混合身分驗證。

## 先決條件和限制
<a name="iam-roles-anywhere-private-ca-prereqs"></a>

**先決條件**

**對於**AWS**基礎設施部署：**
+ AWS CLI 已安裝並設定管理許可
+ IAM IAM Roles Anywhere、 和 AWS 私有 CA 服務的管理許可

**對於用戶端系統設定：**
+ AWS CLI安裝在具有下列許可的用戶端系統上：
  + `acm-pca:IssueCertificate`
  + `acm-pca:GetCertificate`
+ 安裝在用戶端系統的 OpenSSL 
+ AWS 在每個用戶端系統上安裝簽署 Helper
+ 對 X.509 憑證和 PKI 概念的基本了解

**注意**  
CloudFormation 範本會自動處理 AWS 資源建立。只有使用憑證存取 資源的外部系統才需要 OpenSSL。 AWS 

**限制**
+ 根 CA 的憑證有效期間上限為 10 年
+ 定期輪換用戶端憑證。我們建議您至少每年執行一次此操作。
+ 區域限制：信任錨點和 AWS 私有 CA 必須位於相同 AWS 區域
+ 憑證大小上限：用戶端憑證為 16KB 

**產品版本**
+ AWS CLI 2.0 版或更新版本
+ OpenSSL 1.1.1 或更新版本
+ AWS 簽署 Helper 1.4.0 或更新版本
+ AWS 私有 CA，目前版本
+ IAM Roles Anywhere e，目前版本

## Architecture
<a name="iam-roles-anywhere-private-ca-architecture"></a>

**目標技術堆疊**

• AWS 私有 CA - 憑證發行的根 CA

• IAM Roles Anywhere - 憑證型角色擔任服務

• IAM 角色和政策 - 存取控制和許可

• AWS 簽署協助程式 - 用戶端憑證擷取工具

• OpenSSL - 憑證和金鑰產生

• CloudFormation - 基礎設施自動化

**目標架構**

** **

![](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/2600dc9f-9c1a-442e-9523-1c925aff7620/images/309c3de5-255e-4257-8ad8-af58c1ce8855.png)


圖 1 IAM Roles Anywhere憑證型身分驗證

**架構包含：**

1. 目前憑證 - 外部系統向 提供 X.509 憑證 AWS

1. 驗證 - IAM Roles Anywhere 接收憑證並啟動 身分驗證

1. 驗證 - 信任錨點會針對信任的憑證 授權單位驗證憑證

1. 驗證 - AWS 私有 CA 驗證憑證真偽和狀態

1. 憑證有效 - AWS 私有 CA 確認憑證有效且受信任

1. 擔任角色 - IAM Roles Anywhere 允許外部系統擔任設定的 IAM 角色

1. 授予存取權 - 外部系統接收臨時登入資料以存取 AWS 資源

*自動化和擴展*

此模式包含完全自動化，透過：

• 使用可設定 IAM 許可進行 AWS 資源佈建的 CloudFormation 範本

• 憑證產生和用戶端設定的 Shell 指令碼

• 多個環境和自訂 IAM 政策的參數化組態

• 為多個用戶端產生批次憑證

• 自動化登入資料協助程式安裝和組態

**工作流程**

1. 使用 建立憑證型 身分驗證所需的基礎 AWS 服務 IAM Roles Anywhere。

1. 建立和設定用戶端憑證和身分驗證工具，以 安全 AWS 存取。

1. 驗證憑證型身分驗證功能，並建立持續操作 的監控。

## 工具
<a name="iam-roles-anywhere-private-ca-tools"></a>

• CloudFormation - 自動化 PCA、信任錨點、IAM 角色和設定檔的建立

• AWS CLI - 用於 AWS 服務互動的命令列界面

• OpenSSL - 產生憑證簽署請求並管理憑證

• AWS 簽署協助程式 - 交換憑證以取得臨時 AWS 憑證

• Bash/shell 指令碼 - 自動化完整的設定程序

*程式碼儲存庫*

[具有私有憑證授權單位的 AWS IAM Roles Anywhere](https://github.com/aws-samples/sample-aws-iam-roles-anywhere-automation)

## 最佳實務
<a name="iam-roles-anywhere-private-ca-best-practices"></a>
+ 使用 根據最低權限原則設定 IAM 政策 `--iam-policies parameter`
+ 定期輪換用戶端憑證。我們建議您每年執行此操作。
+ 在信任政策中使用強大的憑證驗證
+ 實作憑證撤銷程序
+ 監控憑證過期日期

## 史詩
<a name="iam-roles-anywhere-private-ca-epics"></a>

### 設定 AWS 基礎設施
<a name="set-up-aws-infrastructure"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| **部署**CloudFormation**基礎設施** | 建立和部署佈建所有必要 AWS 資源的 CloudFormation 範本 AWS 私有 CA，包括 Trust Anchor、具有適當政策和 IAM Roles Anywhere 設定檔的 IAM 角色。  設定專案命名、憑證有效期間、工作階段持續時間和 IAM 政策附件的參數，以建立核心基礎設施 基礎。 | 雲端架構師、DevOps 工程師 | 
| 設定憑證授權機構設定 |  AWS 私有 CA 透過 安裝根憑證、設定憑證範本，以及 建立憑證信任鏈來初始化 。設定 IAM Roles Anywhere 驗證所需的憑證有效 期間、金鑰演算法和憑證延伸，以確保適當的 PKI 基礎設施。 | AWS 管理員、雲端管理員 | 
| 驗證 &AWS; 資源組態 | 對所有部署 AWS 的資源執行全面驗證，以確保適當的組態和連線。確認 Trust Anchor 已正確連結至 AWS 私有 CA、IAM 角色具有適當的許可、設定檔已正確設定，且所有資源都處於 憑證型身分驗證工作流程的作用中/就緒狀態。 | AWS 系統管理員、測試工程師 | 

### 產生和部署用戶端憑證
<a name="generate-and-deploy-client-certificates"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 準備用戶端環境 | 透過讓部署指令碼 可執行並確保適當的許可來設定用戶端環境。使用 必要的工具和相依性設定本機系統、驗證指令碼可存取性，並建立憑證產生和部署程序的基礎。 | DevOps 工程師、AWS 系統管理員 | 
| 產生憑證簽署請求 | 使用 OpenSSL 或同等工具為用戶端 系統建立憑證簽署請求 (CSR)。設定憑證參數， 包括主旨資訊、金鑰演算法和憑證延伸。  確保 CSR 符合 AWS 私有 CA 要求，並包含適當的中繼資料 以進行 IAM Roles Anywhere 身分驗證。 | 雲端管理員、DevOps 工程師 | 
| 透過 發行用戶端憑證 AWS 私有 CA | 透過 處理 CSR AWS 私有 CA 以 發出有效的用戶端憑證。設定憑證有效期間、 憑證範本，並確保適當的憑證鏈建立。驗證憑證發行，並下載簽署的憑證以進行用戶端部署。 | AWS 管理員、雲端架構師 | 

### 測試和驗證身分驗證
<a name="test-and-validate-authentication"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 取得臨時 AWS 登入資料 | 執行登入資料協助程式指令碼，以使用設定的用戶端憑證和私有金鑰擷取臨時 AWS 登入資料。驗證 登入資料擷取程序是否正常運作、驗證登入資料格式和過期時間，並確保與 IAM Roles Anywhere 服務適當整合，以實現無縫身分驗證工作流程。 | DevOps 工程師、AWS 系統管理員 | 
| 測試 AWS 資源存取 | 使用 取得的暫時登入資料執行 AWS 資源存取的完整測試。執行各種 AWS CLI 命令和 API 呼叫，以驗證與 Amazon S3、Amazon EC2 和 等目標服務的連線 AWS Lambda。 驗證許可是否符合設定的 IAM 角色政策，並記錄 成功的存取模式。 | 測試工程師、雲端管理員 | 
| 驗證角色假設和許可 | 徹底驗證 IAM 角色擔任程序和 許可界限。測試允許和限制的操作， 以確認已正確強制執行最低權限存取。驗證工作階段持續時間 限制、登入資料重新整理機制，並確保角色假設遵循 安全最佳實務。 | AWS 管理員、測試工程師 | 
| 實作監控和記錄 | 設定 憑證型身分驗證系統的完整監控和記錄。設定稽核 追蹤的 CloudTrail 記錄、實作憑證過期監控、設定 身分驗證失敗警示，以及建立儀表板以追蹤 IAM Roles Anywhere 基礎設施的使用模式 和安全事件。 | DevOps 工程師，雲端架構師 | 

## 疑難排解
<a name="iam-roles-anywhere-private-ca-troubleshooting"></a>


| 問題 | 解決方案 | 
| --- | --- | 
| **憑證驗證失敗 – ** 嘗試驗證時發生「憑證驗證失敗」或「InvalidCertificate」錯誤。 | **解決步驟：**<br />• 使用 驗證憑證有效日期 <br />openssl x509 -in certificate.pem -dates -noout<br />• 檢查信任錨點組態是否指向正確的私有 CA<br />• 確保私有金鑰對應至憑證<br />• 如果憑證是由錯誤的 CA 發行，請重新產生憑證 | 
|  **IAM 許可拒絕錯誤 – **即使身分驗證成功，存取 AWS 資源時仍出現「存取遭拒」或「UnauthorizedOperation」 | **解決步驟：**<br />• 檢閱並展開 IAM 角色政策，以包含必要的許可<br />• 確認信任政策包含 *rolesanywhere.amazonaws.com* 做為信任的實體<br />• 檢查設定檔 ARN 組態是否符合部署的資源<br />• 針對長時間執行的程序實作登入資料重新整理機制 | 

## 相關資源
<a name="iam-roles-anywhere-private-ca-resources"></a>
+ [IAM Roles Anywhere 使用者指南](https://docs.aws.amazon.com/rolesanywhere/latest/userguide/)
+ [AWS 私有憑證授權單位 使用者指南](https://docs.aws.amazon.com/privateca/latest/userguide/)
+ [AWS 簽署協助程式文件](https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html)

## 其他資訊
<a name="iam-roles-anywhere-private-ca-additional"></a>

此模式非常適合具有混合雲端架構、在外部執行的 CI/CD 管道， AWS或任何需要安全 AWS 存取的外部系統的組織。憑證型方法提供比長期存取金鑰更好的安全性，並透過 啟用集中式憑證管理 AWS 私有 CA。

**可設定的 IAM 許可 – **解決方案支援透過 的彈性 IAM 政策組態`--iam-policies parameter`：
+ 預設：`ReadOnlyAccess`用於安全初始部署
+ 自訂：指定特定使用案例的逗號分隔政策 ARNs。例如，`S3ReadOnlyAccess`、 `EC2ReadOnlyAccess`或 自訂政策。針對複雜的許可要求支援多個政策。

**使用範例：**

```
# Default read-only access
./deploy.sh

# S3-only access
./deploy.sh --iam-policies "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess"

# Multiple services
./deploy.sh --iam-policies "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess,arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess"
```