Lambda 환경 변수의 AWS 자격 증명 노출 가능성

Lambda 구성에 실제 AWS 자격 증명을 직접 넣지 말고 필요한 권한의 실행 역할을 사용하세요.

설명

Lambda 환경 변수에 장기 AWS 자격 증명을 직접 넣으면 템플릿, 배포 이력이나 함수 설정을 볼 수 있는 경로를 통해 노출될 수 있습니다. 값의 모양만으로 유효한 키라고 단정하지 말고 실제 비밀정보인지 확인하세요. AWS API 접근에는 보통 실행 역할의 임시 자격 증명을 사용할 수 있습니다.

잠재적 영향

실제 접근 키 ID와 비밀 키가 함께 유출되면 해당 키에 허용된 작업이 악용될 수 있습니다. 영향은 연결된 정책과 다른 접근 제어에 따라 달라집니다.

해결 방법

  • 실제 자격 증명을 제거하고 함수에 필요한 권한만 가진 실행 역할을 사용하세요. 다른 시스템의 비밀정보는 적절한 비밀정보 저장소에서 제한된 권한으로 가져오세요.
  • 노출된 실제 키는 사용처를 대체한 뒤 폐기·교체하세요. 템플릿에서 지워도 저장소 이력이나 배포 기록의 사본이 사라지지는 않습니다.

예시

foo의 긴 문자열은 AWS 문서에 공개된 예시 비밀 키이며 실제 자격 증명이 아닙니다. 코드 버킷·객체와 역할 ARN은 실제 배포 값으로 제공하고, 코드가 지정한 런타임과 호환되는지 확인하세요.

변경 전

yaml
Parameters:
  FunctionCodeBucket:
    Type: String
  FunctionCodeKey:
    Type: String
  ExecutionRoleArn:
    Type: String
Resources:
  LambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Handler: index.handler
      Role: !Ref ExecutionRoleArn
      Environment:
        Variables:
          foo: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
          databaseName: lambdadb
          databaseUser: admin
      Code:
        S3Bucket: !Ref FunctionCodeBucket
        S3Key: !Ref FunctionCodeKey
      Runtime: nodejs22.x

자격 증명 값을 구성에 직접 넣는 형태를 보여 줍니다. 예시 문자열을 실제 키로 교체하여 배포하지 마세요.

변경 후

yaml
Parameters:
  FunctionCodeBucket:
    Type: String
  FunctionCodeKey:
    Type: String
  ExecutionRoleArn:
    Type: String
Resources:
  LambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Handler: index.handler
      Role: !Ref ExecutionRoleArn
      Environment:
        Variables:
          foo: test
          databaseName: lambdadb
          databaseUser: admin
      Code:
        S3Bucket: !Ref FunctionCodeBucket
        S3Key: !Ref FunctionCodeKey
      Runtime: nodejs22.x

일반 설정만 남깁니다. 실제 AWS 호출은 실행 역할을 사용하도록 코드도 확인하고 기존 키가 폐기되었는지 검증하세요.

참조