iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 6
0
自我挑戰組

30天初探 Amazon Web Services系列 第 6

[Day6] AWS Secrets Manager

AWS 上有一個服務 AWS Secrets Manager,聽起來用它來儲存金鑰資訊更高大上些。它同樣提供了用 KMS Key 加密儲存字串的功能,字串最大也是 4096 個字元。從 AWS Web 控制檯上看可配置用 Key/Value 的形式,其實本質也是儲存為一個 JSON 字串。

Secrets Manager 與 Parameter Store 更多的功能是能與 RDS 整合 -- 選擇資料庫收集資料庫的配置資訊(主機名,埠,例項等), 還有就是可配置定期更新金鑰,這對一個安全的系統定期改密碼很重要。對於定期更新金鑰的未作深入研究,AWS Secrets Manager 本身知道如何輪換 RDS 資料庫的金鑰,其他的需要一個 Lambda 來支援

Secrets Manger 相比於 Parameter Store 除了可定期輪換密碼,再就是審計功能,其他的話沒有太大的差別。對了 Secrets Manager 要錢的,一個金鑰一個月 $0.40, 每 10,000 次 API 呼叫收 $0.05。如果用 Parameter Store, 結合 CloudWatch 和 Lambda 也能實現定期輪換密碼。

爲了方便 Parameter Store 過度到 Secrets Manager,我們還能用 Parameter Store(SSM) 的 API 來獲得 Secrets Manager 中配置的值。支援 GetParameter 和 GetParameters 操作,需要加上特定的 Key 字首來指明獲取的是 Secrets Manager 中的金鑰,如 Key: /aws/reference/secretsmanager/ 。

獲取 Secret
在 AWS 控制檯開啟每個 Secret 下方要獲取金鑰的示例程式碼,包含 Java, Javascript, C#, Python3, Ruby 和 Go 語言的。下面以 Python 3 為例,只保留了關鍵程式碼 :

import boto3 
import json   

session = boto3.Session(...)     

def get_secret():     
    secret_name = "qa/postgres/my_db"     
    client = session.client('secretsmanager')     
    get_secret_value_response = client.get_secret_value(SecretId=secret_name)     
    return get_secret_value_response['SecretString']     

if __name__ == '__main__':       
for i in range(20):         
    secret_json = json.loads(get_secret())         
    print(secret_json['username'])

上一篇
[Day5] AWS Lambda
下一篇
[Day7] Amazon Redshift
系列文
30天初探 Amazon Web Services30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言