serverless.com 프로젝트를 위해 암호화 된 비밀을 코드로 저장하는 방법은 무엇입니까?


12

serverless.com을 사용하면 AWS Lambda 함수에 비밀을 노출하는 가장 쉬운 방법은 serverless.yml파일에 파일 을 저장하는 것입니다 (예 : KMS로 암호화).

그러나 Git에 암호화 된 비밀을 저지르는 것이 세상에서 가장 좋은 것은 아닙니다. 비밀을 변경해야 할 때 코드 변경이 필요합니다.

그러나 보안 측면에서만 더 나은 대안은 무엇입니까? 예를 들어 비밀은 S3 (암호화)에 저장 될 수 있는데, Lambda는 해당 위치와 KMS 키에 액세스 할 수 있지만 실제로 의미있는 방식으로 더 나을까요?


이 의견 공포증 시맨틱 체조는 관심이 없습니다.
Assaf Lavie

답변:


7

여기서 고려해야 할 몇 가지 요소가 있습니다.

  1. 구성중인 코드와 별도의 릴리스 케이던스로 구성을 유지 관리 할 수있는 기능을 보유하는 것이 중요합니다. 그렇게하면 자격 증명을 자동화 된 방식으로 교체 할 수 있으며 정기적으로 고통을 덜어줍니다.

  2. 구성 범위가 둘 이상의 서비스에 걸쳐있을 가능성이 있기 때문에 아마도 다른 저장소에 있지만 Git에 모든 구성을 저장하는 것은 "Infrastructure as Code"관점에서 전적으로 합리적입니다.

  3. 위의 두 진술이 귀하의 상황과 관련이 있다고 가정하면 KMS로 데이터를 암호화하고 S3 또는 DynamoDB에 저장하는 경향이 있습니다. 매우 간단한 상황에서는 KMS 자체 내에서 데이터암호화하고 저장하는 것이 적합 할 것이라고 말하기까지했습니다 .

이 작업을 지원하는 몇 가지 오픈 소스 라이브러리가 있습니다.


1

나는 일반적으로 비밀을 범위 내의 구성 데이터로 취급합니다. 따라서 다른 릴리스 일정 및 프로세스에서 처리되므로 코드와 함께 작동하지 않습니다. 별도의 git repo, KMS, dynamo, s3 또는 구성 관리 시스템 내부 (chef 세계의 chef-vault / encrypted 데이터베이스)는 좋은 장소입니다. 기본적으로 비밀 업데이트를 위해 새 소프트웨어 릴리스를 빌드 및 배포하지 않아도됩니다.

비밀 관리 요구가 더 복잡하다면 Hasicorp Vault ( https://github.com/hashicorp/vault ) 와 같은 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.