AWS Secrets Manager
AWS Secrets Manager 作為金鑰值儲存庫,用於儲存密碼、存取權杖和加密金鑰等機密資訊。AWS 使用 AWS 金鑰管理服務 (AWS-KMS) 加密這些機密資訊。
本教學說明如何設定 KES 伺服器,該伺服器使用 AWS Secrets Manager 作為由 AWS-KMS 保護的持久性金鑰儲存庫。
AWS Secrets Manager
-
建立 AWS 存取/秘密金鑰對
-
附加 AWS 政策
將一個或多個政策附加到新使用者,以授予對 AWS Secrets Manager 和 AWS-KMS 的存取權。
您的 AWS IAM 使用者需要具有下列權限
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1578498399136", "Action": [ "secretsmanager:CreateSecret", "secretsmanager:DeleteSecret", "secretsmanager:GetSecretValue", "secretsmanager:ListSecrets" ], "Effect": "Allow", "Resource": "*" }, { "Sid": "Stmt1578498562539", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:Encrypt" ], "Effect": "Allow", "Resource": "*" } ] }
AWS 預定義了政策 (SecretsManagerReadWrite
和AWSKeyManagementServicePowerUser
)。然而,這些政策授與的權限超出實際所需。
KES 伺服器設定
-
產生 KES 伺服器私鑰與憑證
首先,我們需要為我們的 KES 伺服器產生一個 TLS 私鑰和憑證。KES 伺服器是預設安全的,並且只能在 TLS 的情況下運行。為了簡單起見,這裡我們使用自簽憑證。
以下命令會為 IP 位址
127.0.0.1
和 DNS 名稱localhost
產生一個新的 TLS 私鑰/公鑰對和憑證$ kes identity new --ip "127.0.0.1" localhost Private key: private.key Certificate: public.crt Identity: 2e897f99a779cf5dd147e58de0fe55a494f546f4dcae8bc9e5426d2b5cd35680
如果您已經有 TLS 私鑰和憑證,例如來自 WebPKI 或內部 CA,您可以使用它們來代替。請記得稍後調整tls
設定區段。 -
產生客戶端憑證
以下命令會產生一個新的 TLS 私鑰/公鑰對
$ kes identity new --key=client.key --cert=client.crt MyApp Private key: client.key Certificate: client.crt Identity: 02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b
Identity
是client.crt
中公鑰的唯一指紋,您可以隨時重新計算。$ kes identity of client.crt Identity: 02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b
-
設定 KES 伺服器
建立 KES 伺服器設定檔:
config.yml
。身分 (Identity) **必須**與client.crt
身分政策區段中的內容相符。address: 0.0.0.0:7373 # Listen on all network interfaces on port 7373 admin: identity: disabled # We disable the admin identity since we don't need it in this guide tls: key: private.key # The KES server TLS private key cert: public.crt # The KES server TLS certificate policy: my-app: allow: - /v1/key/create/my-key* - /v1/key/generate/my-key* - /v1/key/decrypt/my-key* identities: - 02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b # Use the identity of your client.crt keystore: aws: secretsmanager: endpoint: secretsmanager.us-east-2.amazonaws.com # Use the SecretsManager in your region. region: us-east-2 # Use your region kmskey: "" # Your AWS-KMS master key (CMK) - optional. credentials: accesskey: "" # Your AWS Access Key secretkey: "" # Your AWS Secret Key
-
啟動 KES 伺服器
$ kes server --config config.yml --auth off
Linux 交換保護在 Linux 環境中,KES 可以使用
mlock
系統調用來防止作業系統將記憶體中的資料寫入磁碟 (交換)。這樣可以防止洩漏敏感資料。使用以下命令允許 KES 使用
mlock
系統調用,而無需使用root
權限執行sudo setcap cap_ipc_lock=+ep $(readlink -f $(which kes))
啟動一個具有記憶體保護的 KES 伺服器實例
kes server --config config.yml --auth off --mlock
KES CLI 存取
-
設定
KES_SERVER
端點此環境變數會告訴 KES CLI 它應該與哪個伺服器通訊。
$ export KES_SERVER=https://127.0.0.1:7373
-
使用客戶端憑證
以下環境變數設定 KES CLI 用來與 KES 伺服器通訊的存取憑證。
$ export KES_CLIENT_CERT=client.crt
$ export KES_CLIENT_KEY=client.key
-
測試存取
執行任何根據我們在上面指派的政策允許的 API 操作。
例如,建立一個金鑰
$ kes key create my-key-1
使用金鑰產生新的資料加密金鑰
$ kes key dek my-key-1 { plaintext : UGgcVBgyQYwxKzve7UJNV5x8aTiPJFoR+s828reNjh0= ciphertext: eyJhZWFkIjoiQUVTLTI1Ni1HQ00tSE1BQy1TSEEtMjU2IiwiaWQiOiIxMTc1ZjJjNDMyMjNjNjNmNjY1MDk5ZDExNmU3Yzc4NCIsIml2IjoiVHBtbHpWTDh5a2t4VVREV1RSTU5Tdz09Iiwibm9uY2UiOiJkeGl0R3A3bFB6S21rTE5HIiwiYnl0ZXMiOiJaaWdobEZrTUFuVVBWSG0wZDhSYUNBY3pnRWRsQzJqWFhCK1YxaWl2MXdnYjhBRytuTWx0Y3BGK0RtV1VoNkZaIn0= }
將 KES 與 MinIO 伺服器搭配使用
MinIO 伺服器需要 KES 啟用伺服器端資料加密。
請參閱KES for MinIO 指示指南,了解將您的新 KES 伺服器與 MinIO 伺服器搭配使用所需的其他步驟。
設定參考
以下章節描述金鑰加密服務 (KES) 設定,以使用 AWS Secrets Manager 和 AWS Key Management System 作為根 KMS,來儲存外部金鑰,例如用於 MinIO 伺服器上的伺服器端加密的金鑰。