기밀 정보가 cloud-init 로그에 인쇄되지 않도록 방지

기밀 정보가 cloud-init 로그에 인쇄되지 않도록 방지

스크립트는 cloud-init비밀을 포함하도록 환경 변수 값을 설정해야 합니다.

비밀이 로그 에 인쇄 PASS되는 것을 방지하기 위해 아래에서 어떤 특정 구문을 변경할 수 있습니까 ?PSScloud-init

현재 코드:

다음은 보안 비밀이 로그 파일에 기록되도록 하는 cloud-init 스크립트 부분의 예입니다.

export PASS=$PSS
echo "export PASS='$PSS'" >> /etc/environment
echo "export PASS='$PSS'" >> /etc/bashrc
echo "export PASS='$PSS'" >> /etc/profile

질문:

문제는 위에 표시된 현재 코드가 변수에 포함된 명시적 값을 cloud-init 로그에 인쇄한다는 것입니다. 즉, 현재 비밀을 보호하는 유일한 방법은 로그를 잠그고 비밀 순환에 대해 최대한 경계하는 것입니다.

우리에게 필요한 것:

기밀 정보가 출력 및 로그에 인쇄되는 것을 방지하는 Linux 기본 방법이 있습니까?

우리는 도구와 클라우드에 구애받지 않기를 원합니다. 이는 우리가 파이프라인 도구의 비밀 난독화 기능에 의존하는 것을 피하고 AWS, Azure 또는 기타 클라우드 공급자에서 실행되는 경우에도 비밀을 숨길 수 있기를 원한다는 것을 의미합니다. 우리는 이 문제에 대해 이식 가능하고 Linux/bash에 구애받지 않는 솔루션을 원했습니다.

순수 RHEL뿐만 아니라 Amazon Linux 2 및 CentOS도 포함하여 모든 Linux 인스턴스에 RHEL 기반 이미지를 사용합니다.

댓글에 대한 응답

@falcajr문제 에 따라 cloud-init 스크립트가 시작되고, #!/bin/bash스크립트에 문제가 존재하는지 여부에 관계없이 문제가 지속됩니다. set -e우리가 보는 비밀 로그는 cloud init 스크립트가 실행될 때의 콘솔 출력입니다. 의심의 여지 없이 이미 어딘가에 저장되어 있으므로 자체 자동화 시스템에 별도로 저장해야 합니다. OP에는 Linux 기본 솔루션이 필요하므로 대상이 어디에 있는지는 중요하지 않습니다. 예를 들어 함수가 있는 경우 obscureFromOutput()유효한 구문으로 구성된 의사 코드 대신 다음과 같은 것을 요청합니다.

echo "export PASS='obscureFromOutput($PSS)'" >> /etc/environment

@Isaac의견 에 따르면 PSScloud-init 스크립트의 입력 변수로 수신됩니다. PSS우리는 다른 도구로 전환해도 잘 작동하는 Linux 기본 솔루션을 원하기 때문에 현재 패커가 입력 변수를 보내는 도구라는 것은 중요하지 않다고 믿습니다 . 이 문제에 대한 구체적인 해결책이 있는 경우 이 OP는 구체적인 해결책을 요구합니다.ARM templatescloud formation

@falcojr그런 다음 각 명령을 다음과 같이 만드는 두 번째 제안을 시도했지만 비밀은 여전히 ​​패커 명령줄 출력에 표시되고 로그에 푸시되었습니다.

echo "export PASS='$PSS'" >> /etc/environment &> /dev/null  

올바른 구문을 사용하고 있나요? 제가 시도할 수 있는 다른 것이 있나요?

답변1

파일에 정적으로 배치하는 대신 코드 내에서 AWS Secrets Manager에 저장하고 검색할 수 있습니까? 서버가 시작 시 권한을 검색하고, 변수에 저장하고, 실행 중에 사용할 수 있도록 인스턴스 구성 파일에 권한을 추가할 수 있습니다.

답변2

스크립트에 캡슐화할 수 없나요?

내가 이해한 바에 따르면 문제는 Amazon이 각 줄을 로그에 반영하고 로깅하기 전에 환경 변수를 확장한다는 것입니다.

스크립트로 래핑하면 환경 변수를 확장하기 전에 강제로 로그를 기록해야 합니다.

아직 테스트해 보지 않았습니다(전화로 입력 중).

sh -c "
echo \"export PASS='\$PSS'\" >> /etc/environment
echo \"export PASS='\$PSS'\" >> /etc/bashrc
echo \"export PASS='\$PSS'\" >> /etc/profile
"

답변3

스크립트에 하나가 있으면 set -x다음과 같이 트릭을 수행할 수 있습니다.

# Turn off tracing before any commands with a secret in them.
set +x

export PASS=$PSS
echo "export PASS='$PSS'" >> /etc/environment
echo "export PASS='$PSS'" >> /etc/bashrc
echo "export PASS='$PSS'" >> /etc/profile

# Turn tracing back on after.
set -x

~에 따르면문서:

-x

확장 후 및 실행 전의 인수 또는 관련 단어 목록과 함께 간단한 명령, for명령, case명령 , 명령 및 산술 명령의 추적을 인쇄합니다. select변수 for의 값이 PS4확장되고 결과 값이 명령 및 확장된 인수 앞에 인쇄됩니다.

편집: 문구 및 서식.

관련 정보