IT이야기

AWS Lambda: 외부 API에 비밀을 저장하는 방법

cyworld 2021. 10. 10. 13:59
반응형

AWS Lambda: 외부 API에 비밀을 저장하는 방법은 무엇입니까?


AWS Lambda를 기반으로 모니터링 도구를 구축 중입니다. 메트릭 세트가 주어지면 Lambdas는 Twilio API를 사용하여 SMS를 보낼 수 있어야 합니다 . API를 사용할 수 있도록 Twilio는 계정 SID와 인증 토큰을 제공합니다.

이러한 비밀을 어떻게 그리고 어디에 보관해야 합니까?

현재 AWS KMS 를 사용할 생각 이지만 다른 더 나은 솔루션이 있을 수 있습니다.


여기 내가 생각해낸 것이 있습니다. AWS KMS를 사용하여 암호를 AWS Lambda에 코드와 함께 업로드하는 파일로 암호화하고 있습니다. 그런 다음 사용해야 할 때 암호를 해독합니다.

다음은 따라야 할 단계입니다.

먼저 KMS 키를 만듭니다. 여기에서 설명서를 찾을 수 있습니다. http://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html

그런 다음 비밀을 암호화하고 결과를 파일에 넣습니다. 이것은 다음을 사용하여 CLI에서 달성할 수 있습니다.

aws kms encrypt --key-id some_key_id --plaintext "This is the scret you want to encrypt" --query CiphertextBlob --output text | base64 -D > ./encrypted-secret

그런 다음 이 파일을 Lambda의 일부로 업로드해야 합니다. 다음과 같이 Lambda에서 암호를 해독하고 사용할 수 있습니다.

var fs = require('fs');
var AWS = require('aws-sdk');
var kms = new AWS.KMS({region:'eu-west-1'});

var secretPath = './encrypted-secret';
var encryptedSecret = fs.readFileSync(secretPath);

var params = {
  CiphertextBlob: encryptedSecret
};

kms.decrypt(params, function(err, data) {
  if (err) console.log(err, err.stack);
  else {
    var decryptedSecret = data['Plaintext'].toString();
    console.log(decryptedSecret);
  }
});

이 정보가 유용하기를 바랍니다.


NodeJS 4.3에 대한 AWS Lambda 지원의 정답은 환경 변수사용 하여 민감한 정보저장하는 것 입니다. 이 기능은 AWS KMS와 통합되므로 기본값이 충분하지 않은 경우 자체 마스터 키를 사용하여 보안 암호를 암호화할 수 있습니다.


There is a blueprint for a Nodejs Lambda function that starts off with decrypting an api key from kms. It provides an easy way to decrypt using a promise interface. It also gives you the role permissions that you need to give the lambda function in order to access kms. The blue print can be found by searching for "algorithmia-blueprint"


Well...that's what KMS was made for :) And certainly more secure than storing your tokens in plaintext in the Lambda function or delegating to a third-party service.

If you go down this route, check out this blog post for an existing usage example to get up and running faster. In particular, you will need to add the following to your Lambda execution role policy:

"kms:Decrypt",
"kms:DescribeKey",
"kms:GetKeyPolicy",

The rest of the code for the above example is a bit convoluted; you should really only need describeKey() in this case.


Whatever you choose to do, you should use a tool like GitMonkey to monitor your code repositories and make sure your keys aren't committed or pushed to them.

ReferenceURL : https://stackoverflow.com/questions/29372278/aws-lambda-how-to-store-secret-to-external-api

반응형