Amplify Branch Basic Auth 비밀번호 노출

Amplify Branch의 Basic Auth 비밀번호를 템플릿에 직접 넣으면 브랜치 보호용 자격 증명이 코드에 남을 수 있습니다.

설명

CloudFormation의 AWS::Amplify::Branch에서 BasicAuthConfig.Password를 직접 쓰거나 파라미터의 Default에 넣으면 브랜치 보호용 비밀번호가 템플릿과 이력에 남습니다.

잠재적 영향

사용자 이름과 비밀번호가 노출되면 보호된 브랜치 사이트에 무단으로 접근할 수 있습니다. 같은 비밀번호를 사용하는 다른 브랜치도 영향을 받을 수 있습니다.

해결 방법

비밀번호를 Secrets Manager에서 참조하고 파라미터 기본값에는 저장하지 마세요. 노출된 비밀번호는 교체하고, 새 값이 적용되도록 Amplify 브랜치 리소스도 업데이트하세요. 보안 암호의 값만 바꾸면 브랜치 설정은 자동으로 갱신되지 않습니다.

예시

AmplifyAppId에는 기존 앱 ID를, BranchName에는 대상 브랜치 이름을 입력합니다. 변경 전 비밀번호는 예시이며, 변경 후에는 별도의 Basic Auth 비밀번호를 생성해 참조합니다.

변경 전

yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  AmplifyAppId:
    Type: String
  BranchName:
    Type: String
Resources:
  NewAmpApp1:
    Type: AWS::Amplify::Branch
    Properties:
      AppId: !Ref AmplifyAppId
      BranchName: !Ref BranchName
      EnableAutoBuild: false
      EnablePerformanceMode: false
      EnablePullRequestPreview: false
      BasicAuthConfig:
        EnableBasicAuth: true
        Password: "@skdsjdk0234!AB"
        Username: admin

변경 후

yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  AmplifyAppId:
    Type: String
  BranchName:
    Type: String
Resources:
  NewAmpApp1:
    Type: AWS::Amplify::Branch
    Properties:
      AppId: !Ref AmplifyAppId
      BranchName: !Ref BranchName
      EnableAutoBuild: false
      EnablePerformanceMode: false
      EnablePullRequestPreview: false
      BasicAuthConfig:
        EnableBasicAuth: true
        Password: !Sub '{{resolve:secretsmanager:${MyAmpAppSecretManagerRotater}:SecretString:password}}'
        Username: !Sub '{{resolve:secretsmanager:${MyAmpAppSecretManagerRotater}:SecretString:username}}'
  MyAmpAppSecretManagerRotater:
    Type: AWS::SecretsManager::Secret
    Properties:
      GenerateSecretString:
        SecretStringTemplate: '{"username": "admin"}'
        GenerateStringKey: password
        PasswordLength: 16

참조