다음 두 줄의 bash 코드는 RHEL8을 실행하는 Azure VM의 cloud-init 스크립트로 비밀을 추출합니다. 그러나 이 두 줄 각각에는 전 세계가 볼 수 있도록 클라우드 초기화 로그에 비밀을 인쇄하는 의도하지 않은 부작용이 있습니다.
비밀이 로그에 인쇄되지 않도록 하려면 다음 두 줄에서 구체적으로 무엇을 변경해야 합니까?
myVar=$(az keyvault secret show --name "mySecretsFile" --vault-name "$VAULT_NAME" --query "value")
echo "$myVar" | base64 --decode --ignore-garbage >>/home/username/somefoldername/keys.yaml
위의 두 줄에 대한 로그는 다음과 같습니다. 여기서는 공개 포럼의 실제 비밀을 편집합니다. 실제 로그에서는 비밀이 두 번 인쇄됩니다.
+ myVar='"really-long-alpha-numeric-secret-redacted-for-stack-exchange"'
+ echo '"really-long-alpha-numeric-secret-redacted-for-stack-exchange"'
이것은 아마도 로그에서 특정 유형의 항목 인쇄를 억제하는 방법에 대한 간단한 bash 질문일 것입니다.
답변1
가장 빠르고 쉬운 해결책은 아마도 set +x
상위 스크립트에 설정된 것으로 보이는 쉘 추적 옵션을 비활성화하는 것입니다.
궁극적으로 더 나은 해결책은 set -x
. 이러한 스크립트를 테스트하고 디버깅한 후에는 이와 같은 추적 옵션이 set -x
더 이상 도움이 되지 않으며, 이 예에서 볼 수 있듯이 중요한 자격 증명이나 기타 데이터를 실수로 노출시켜 해로울 수도 있습니다.
클라우드 서버의 사용자 데이터에서 호출되는 스크립트와 cloud-init에서 실행되는 상위/하위 스크립트를 작성했습니다. 내 스크립트의 상단 근처에는 추적을 활성화하는 줄이 있지만 소스 코드 저장소에 체크인된 버전에는 항상 해당 줄이 주석 처리되어 있습니다. #set -x
현장 문제 해결을 위해 주석 처리를 해제할 수 있지만 기본적으로는 주석 처리가 해제되지 않습니다.