2

AWS Lambda関数の中には、os環境で機密情報を探すライブラリがいくつかあります。私はKMSを使用して環境変数を暗号化できますが、ラムダハンドラモジュールで暗号化された環境変数を上書きしなければならないことが判明しました。これは脆弱性ですか?例えば。AWS Lambda関数内の環境変数を解読して設定することは脆弱ですか?

# lambda_handler.py 

encrypted_env_var = os.environ["SECRET_KEY"] 
decrypted_env_var = decrypt(encrypted_env_var) 
os.environ["SECRET_KEY"] = decrypted_env_var 

def lambda_function(event, context): 
    ... libs get and use SECRET_KEY ... 

私はそれらの暗号化があなたをカバーすると理解します。 awscliを使用しているときに、コンテナ内にこれを設定することは脆弱ですか? hereからわかるように、コンテナはすぐに破棄されないかもしれません。

さらに、提案復号化コードでAWSが(ラムダダッシュボードに)あなたを与えることスニペット、コメントは私の注意を引いた:

# lambda_handler.py 

ENCRYPTED = os.environ['SECRET_KEY'] 
# Decrypt code should run once and variables stored outside of the function 
# handler so that these are decrypted once per container 
DECRYPTED = boto3.client('kms').decrypt(CiphertextBlob=b64decode(ENCRYPTED))['Plaintext'] 

def lambda_handler(event, context): 
    # handle the event here 

(乱雑が)、それは十分であるだけで解除に関連する変数関数の終わりに?

おかげ

答えて

1

は、コンテナはすぐに破壊されないことがあります。

コンテナはほぼ確実はすぐに破棄されることはありません...しかし、それは悪いことではありません。

コンテナは数分から数時間持続することができ、かつ再利用されている - 理想的な条件の下で、あなたの関数呼び出しの大半は、彼らが再利用できるアイドルコンテナを見つけますので、ラムダ関数は、通常、こんなに早く実行することができます理由です。

ただし、...コンテナはの1つの単一のバージョンでのみ再利用されます。他の誰も、同じ機能の他の機能やバージョンがなく、同じアカウントからでもコンテナを再利用できます。コンテナが作成された機能バージョンのみ。

インフラストラクチャは、不要になったコンテナを破棄します。これは、機能が表示している(または表示していない)トラフィックに基づいて行われます。あなたの機能の呼び出しを完全に停止すると、アイドル状態のコンテナはすべて10-15分後に完全に消滅することがありますが、これは文書化されておらず、変更される可能性があります。呼び出すことは非常に非効率的だろう -

コメントは

コメントので、彼らはグローバルスコープであるあなたがハンドラ関数外に復号化された変数を格納すべきであると言っている私の注意を引きました関数の呼び出しごとに変数を復号化するKMS APIあなたはおそらくそれを行うことができますが、暗号化された環境変数を別の名前で保存して、暗号化された値をコードが想定する名前に設定する必要があります。

関数の最後に関連する変数を設定解除するだけで十分ですか(乱雑ですが)。あなたが他の場所であなたの例のコードは暗号化された値を上書きしてしまい、次回はあなたの関数は、その中で実行されるため、(例えば異なる初期環境変数名を使用するなど)、元の暗号化された値を保存しない限り、動作しません

それらの設定されていない値の解読に失敗します。

暗号化された環境変数のポイントは、Lambdaインフラストラクチャによって安心して保存されている間は暗号化されている点です。一度それらがあなたのコンテナのメモリ空間に入ると、(上記のように)それらのコンテナはあなたの機能に排他的であるので、それらが危うくなる可能性はありません。

関連する問題