하드코딩된 기본값이 있는 secureString 파라미터

secureString 파라미터의 비밀 기본값을 코드에서 제거하고 배포 시 안전한 경로로 제공하세요.

설명

ARM의 secureString이나 Bicep의 @secure()는 파라미터 값을 일반 배포 기록에 노출하지 않도록 보호합니다. 그러나 비밀번호나 키를 기본값으로 코드에 직접 넣으면 템플릿과 저장소 이력을 읽는 사람이 그 값을 볼 수 있습니다.

보안 파라미터라는 표시만으로 소스 코드에 기록된 비밀이 보호되지는 않습니다.

잠재적 영향

  • 템플릿이나 저장소 이력에 접근하는 사람이 비밀값을 얻을 수 있습니다.
  • 같은 비밀을 여러 환경에서 재사용하면 노출의 영향이 확대될 수 있습니다.

해결 방법

  • 비밀값을 포함한 기본값을 제거하고 배포 시 Key Vault 참조나 보호된 파이프라인 변수 등으로 제공하세요. 값을 출력하거나 일반 로그에 기록하지 마세요.
  • 이미 노출된 비밀은 소비하는 서비스의 설정과 함께 교체하고 이전 값을 무효화하세요. 현재 파일에서 삭제하는 것만으로 저장소 이력의 노출이 사라지지는 않습니다.
  • 배포 권한과 비밀 읽기 권한을 필요한 주체로 제한하고 안전한 입력 경로를 확인하세요.

예시

SQL 서버 이름과 관리자 계정을 실제 요구 사항에 맞게 제공하세요. 비밀번호는 서비스의 복잡성 요구 사항을 충족해야 하며, 네트워크와 접근 권한은 별도로 구성해야 합니다.

변경 전

bicep
@secure()
param adminPassword string = 'HardcodedPassword1!'
param adminLogin string
param sqlServerName string

resource sqlServer 'Microsoft.Sql/servers@2015-05-01-preview' = {
  name: sqlServerName
  location: resourceGroup().location
  tags: {}
  properties: {
    administratorLogin: adminLogin
    administratorLoginPassword: adminPassword
    version: '12.0'
  }
}

HardcodedPassword1!가 소스 코드에 그대로 남아 있습니다. 실제 비밀로 사용하지 마세요.

변경 후

bicep
@secure()
param adminPassword string
param adminLogin string
param sqlServerName string

resource sqlServer 'Microsoft.Sql/servers@2015-05-01-preview' = {
  name: sqlServerName
  location: resourceGroup().location
  tags: {}
  properties: {
    administratorLogin: adminLogin
    administratorLoginPassword: adminPassword
    version: '12.0'
  }
}

기본값을 제거해 배포 시 값을 제공하도록 합니다. 입력값도 보호된 경로에서 가져오고 로그나 소스에 남기지 마세요.

참조