AWS에서 Step 함수 데이터 읽기 방지
9604 단어 serverlesstypescriptawssecurity
AWS 계단식 함수는 무엇입니까?
AWS Step Functions는 Amazon 클라우드 서비스로 상태기를 만들고 여러 Lambda 함수, 지점 논리와 외부 서비스를 한 위치에 조화롭게 하는 데 목적을 둔다.이것은 serverless services의 대부분의 장점을 보여 준다. 축소는 즉각적이고 가격은 계산 시간과 단계적 전환에 기초한 수량에 불과하다.
상태기는 JSON 구성을 통해 AWS 콘솔에서 직접 정의할 수 있으며, 워크플로우의 그래픽 표현을 직접 얻을 수 있습니다.
AWS 단계 기능 상태도
Theodo에서 우리는 Serverless를 우리의 프레임워크로 사용하고 Step Functions 플러그인을 사용하여 AWS Lambda 함수를 작성하여 우리의 자원(DynamoDB와 대기열)을 정의하고 우리의 코드 라이브러리에 AWS Step 함수와 상태기를 직접 설정합니다.
예: Step 기능이 있는 인증 워크플로우
위의 그림은 인증 워크플로우를 보여 줍니다.이것은 은행 응용 프로그램의 더 큰 검증 흐름의 일부분이다.
이것은 제3자 시스템에 표지 URL을 요청하여 문자로 이 링크를 신청자에게 보내고 인증이 완료되기를 기다리는 것이다.
완성된 후 제3자 시스템은 웹훅을 호출하고 웹훅은 상태기를 다시 시작하며 재시도를 터치하고 거부 이메일을 보내거나 전역 검증 과정을 계속합니다.
식별 프로세스
이러한 모든 작업을 수행하기 위해 민감한 정보는 상태 머신 단계의 입력과 출력을 통과합니다.
문제: 민감한 데이터를 공개하고 있습니다.
이를 통해 우리는 민감한 데이터가 상태기의 입력과 출력을 직접 통과하는 것을 볼 수 있다.
state-machine.yaml
----------
SendIdentificationRequest:
Type: Task
Resource: arn:aws:states:::lambda:invoke
Parameter:
FunctionName:
Fn::ImportValue: ${self:provider.stage}-sendSMS-Function-arn
Payload:
creditApplicationId.$: $.creditApplicationId
creditApplicant.$: $.creditApplicant
phoneNumber.$: $.phoneNumber
message.$: $.smsBody
ResultPath: $.identificationSMS
Next: WaitIdentification
입력과 출력을 통한 민감한 데이터 예문제는 현재 대부분의 DevOps 엔지니어, 개발자, 심지어 일부 제품 매니저들이 AWS를 방문하여 이러한 정보를 볼 수 있다는 것이다.GDPR은 우호적이지 않습니까?또한 AWS Lambda 덤프는 S3 저장소에 저장되며, 이 저장소는 기본 설정 암호화를 사용하지 않습니다.AWS 스택에 대한 악의적인 접근은 데이터베이스 파괴보다 민감한 정보를 누설할 수 있다.여러 서비스 간에 민감한 정보를 전파할수록 위험은 커진다.마지막으로 AWS documentation 설명:
Any data that you enter into Step Functions or other services might get picked up for inclusion in diagnostic logs.
이 점을 기억하십시오. AWS 단계 함수를 완전히 저장하거나 해결 방안을 찾으려고 시도할 수 있습니다. 이 도구는 여전히 훌륭하고 당신의 요구에 적합하기 때문입니다!
Dell의 솔루션
민감한 정보가 누설되는 것을 방지하기 위해서, 우리는 모든 단계의 함수 입력과 출력을 정리해야 한다.여기에는 두 가지 방법이 있다.
단계 간에 민감한 데이터를 전송하고 실행 중에 직접 검색하지 마십시오
우리는 이미 AWS DynamoDB를 lambda 함수의 대기 영패로 사용하고 있기 때문에 절차 간의 민감한 데이터를 저장할 새 표를 만들기로 결정했다.
외부 KMS 키를 사용하여 다음과 같이 구성합니다.
resources.yaml
----------
StepSentiveInputTable:
Type: AWS::DynamoDB::Table
DeletetionPolicy: Retain
Properties:
TableName: step-sensitive-input-table
AttributeDefinitions:
- AttributeName: sensitiveInputId
AttributeType: S
KeySchema:
- AttributeName: sensitiveInputId
KeyType: HASH
BillingMode: PAY_PER_REQUEST
PointInTimeRecoverySpecification:
PointINTimeRecoveryEnabled: true
SSESpecification:
SSEEnabled: true
SSEType: KMS
KeyId: hsm-key-id
서버에서 DynamoDB 테이블 정의 없음우리는 이미 lambda의 DynamoDB를 사용하여 기다리는 작업 영패를 저장하고 있으며, 단계 사이의 민감한 데이터를 저장하기 위해 다른 표를 추가하기로 했습니다.또한 AWS에서 DynamoDB 테이블의 암호화 키를 AWS에 저장하는 것을 선택할 수 있습니다. 이것은 저희에게 큰 장점입니다.
중복을 피하기 위해서, 우리는 모든 lambda에 사용할 포장기를 만들었다.다음 작업을 수행합니다.
lambda로 돌아가면 포장기:
주 lambda 함수를 실행하기 전에 패키지:
// encryption-wrapper.ts
export default (lambdaHandler: LambdaHandler): LambdaHandler => {
const decryptHandler = async (event: any) => {
const decryptedInformation = await getSensitiveData(event.sensitiveInputId);
return lambdaHandler({ ...event, ...decryptedInformation });
};
return async (event: any) => {
const clearOutput = await decryptHandler(event);
const sensitiveInputId = await storeSensitiveData(clearOutput);
for (const sensitiveKey of sensitiveInputKeys) {
delete clearOutput[sensitiveKey];
}
return { sensitiveInputId, ...clearOutput };
};
};
사용자 정의 암호화 패키지마지막으로, 우리는 API의 상태기가 시작할 때 첫 번째 입력을 암호화하여 최종적으로 사용자 정보의 안전을 보호해야 한다!
활주로
Reference
이 문제에 관하여(AWS에서 Step 함수 데이터 읽기 방지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sc0ra/prevent-aws-from-reading-your-step-functions-data-10m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)