2017-02-25 117 views
1

我有本地AWS Lambda環境變量,想用特定的KMS密鑰加密並分配給Lambda函數。如何使用AWS CLI設置加密的Lambda環境變量?

我倒是覺得像

aws lambda update-function-configuration --function-name functionName --cli-input-json file://config.json 

config.json

{ 
    "Environment": { 
    "Variables": { 
     "var01": "Variable one", 
     "var02": "Variable two" 
    } 
    }, 
    "KMSKeyArn": "arn:aws:kms:us-west-1:09238573743:key/...." 
} 

會做到這一點。但變量最終未加密。 「KMSKeyArn」似乎只用於解密(例如,在boto3.client('kms').decrypt的函數處理程序中)。

如何使用AWS CLI獲取理想的JSON指定的本地(未加密)值,並使用特定的KMS密鑰將它們分配爲Lambda函數環境變量的加密值(並確保將相同的密鑰分配給功能通過boto3.client('kms').decrypt用?

我也想以確保如果可能的話我的變量從未以純文本(也就是加密局部出現)傳輸。

回答

3

與AWS控制檯是爲了能夠跨越多種服務進行多次呼叫,AWS CLI只進行一次呼叫 這就是爲什麼$ aws lambda update-function-configuration不會加密我們的v ariables。

因此,爲了做到這一點,我們只需要兩個命令:

$ aws kms encrypt --key-id **** --plaintext "Variable one"

再取從結果密文,並把它作爲變量:

$ aws lambda update-function-configuration --function-name functionName --kms-key-arn **** --environment Variables={var01=XXXXXXXXX}

- 編輯:

,我們可以在爭論的aws lambda update-function-configuration命令設置的關鍵是在靜止的加密。 (如在控制檯中)

對於環境變量解密,不需要告訴lambda必須使用哪個密鑰,因爲此信息位於密文上。但我們必須確保le lambda可以訪問密鑰,方法是在AWS IAM中將lambda的角色設置爲密鑰的用戶。

+1

謝謝。如何確保我的Lambda函數中的代碼可以解密這些變量;只需在控制檯的「配置>高級設置> KMS密鑰」下分配與****相匹配的密鑰?或者是爲了某種其他目的而設置的? – orome

+0

這是一個很好的問題,應該在我的回答中: 該設置與AWS CLI中的設置相同:它爲您的lambda中的數據的靜態加密設置密鑰。所以它不用於解密你的環境變量。 爲了確保您的lambda函數能夠解密您的加密變量(即它可以使用您的密鑰),您必須進入AWS IAM,將您的lambda的角色設置爲密鑰的用戶。 – DaMaill

+0

這就是讓我感到困惑的問題:我不清楚「休息時」是什麼意思,與「boto3」執行的加密不同。客戶端('kms'),「解密」或在控制檯中使用CLI或「加密助手」執行的加密。 (例如,如果變量被加密爲「靜止」 - 並且顯然自動解密而無需在函數中使用KMS API - 爲什麼還要使用其他加密?) – orome