2

AWS 람다 함수 내부에는 OS 환경에서 중요한 정보를 찾는 라이브러리가 있습니다. KMS를 사용하여 환경을 암호화 할 수 있지만 람다 (lambda) 처리기 모듈에서 암호화 된 환경 변수를 덮어 써야한다는 것을 알았습니다 - 이것이 취약점입니까? 예 :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에서 알 수 있듯이, 컨테이너가 즉시 파괴되지 않을 수도 있습니다.

# 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 

그것 (지저분한이기는하지만) 충분할 것이다 단지 해제 관련 변수 :

또한, 제안 된 암호 해독 코드에서 AWS가 (람다 대시 보드)를 제공 니펫, 코멘트 내 관심을 끌었 함수의 끝에서?

덕분에

답변

1

용기는 즉시 파기되지 않을 수 있습니다.

컨테이너는 거의 확실 즉시 파괴되지 않을 것입니다 ...하지만이 나쁘지 않다.

컨테이너는 몇 분에서 몇 시간 동안 지속되어 재사용 될 수 있습니다. 이상적인 조건에서 대부분의 함수 호출이 재사용 할 수있는 유휴 컨테이너를 찾을 것이기 때문에 람다 함수가 일반적으로 그렇게 빨리 실행할 수있는 이유입니다 .

그러나 ... 용기는 의 유일한 단일 기능인 단일 버전으로 다시 사용됩니다.. 다른 사람이 아니며 동일한 기능의 다른 기능이나 다른 버전이없는 경우에도 동일한 계정에서 컨테이너를 다시 사용하십시오. 컨테이너를 작성하게 한 함수 버전.

인프라 스트럭처는 더 이상 필요하지 않은 컨테이너를 파괴하며, 기능이보고있는 (또는 표시되지 않는) 트래픽을 기반으로합니다. 일화적인 관찰은 당신의 기능 호출을 완전히 멈추는 경우 모든 유휴 컨테이너가 10-15 분 후에 완전히 사라질 것이라고 제안하지만 이것은 문서화되지 않았으며 다양 할 수도 있습니다. 이 전화를하는 것은 매우 비효율적이다 -

코멘트

코멘트는 그래서 그들은 세계적인 범위에있는 당신이 핸들러 함수 외부에서 해독 된 변수를 저장해야한다는 말을 내 관심을 끌었 함수를 호출 할 때마다 변수를 해독하는 KMS API 생각할 수 있지만 암호화 된 환경 변수를 다른 이름으로 저장 한 다음 해독 된 값을 코드에서 예상하는 이름으로 설정해야합니다.

함수 끝 부분에서 관련 변수의 설정을 해제하는 것만으로도 충분합니까 (지저분하지만)겠습니까?다른 곳에서 귀하의 예제 코드는 암호화 된 값을 덮어 것이며, 다음 번에이 기능이 있다는 점에서 실행되기 때문에, (예 : 다른 초기 환경 변수 이름을 사용)을 원래의 암호화 된 값을 저장하지 않으면 작동하지 않습니다

컨테이너의 경우 설정되지 않은 값의 암호를 해독하지 못합니다.

암호화 된 환경 변수의 요점은 그들이 람다 인프라 스트럭처에 의해 저장되어있는 동안 암호화된다는 것입니다. 일단 컨테이너의 메모리 공간에 있으면, 위에서 언급했듯이 컨테이너가 귀하의 기능에 독점하기 때문에 위험에 빠질 수있는 의미있는 기회가 아닙니다.