2017-11-27 3 views
2

로커는 Zap 로거를 사용하고 있으며 기록되는 정보를 제한하려고합니다. 예를 들어, 내가 코드로그에 비밀 번호가 표시되지 않음

func (m *mountCommand) Execute(args []string) error { 

    filelogger.Info("First log", zap.Strings("input args", args)) 

이하가 그리고 어떻게 그냥 인해 로그에 추가하기에서 키 액세스와 비밀 키 값을 방지 할

{"level":"info","ts":"2017-11-16T10:04:40.225Z","msg":"First log","input args":["/var/lib/kubelet/pods/74785895-cab5-11e7-88ed-ce1c8b57856c/volumes/xyz-xandndnd", 
    "{\"kubernetes.io/secret/access-key\":\"Qdfnnfbbdnsjnxni8ehh=\",\"kubernetes.io/secret/secret-key\":\"GGHNHwsffUIJMNBNBVV==\", 
\"parallel-count\":\"5\",\"region\":\"iam-standard\"}"]} 

다음과 같이 로그 출력은 데이터의 민감도.

이동에서 많은 문자열 조작 함수를 시도 했으므로 zap 객체를 사용하기 전에 해당 내용을 제거 할 수 있습니다.이 간단한 직선적 인 방법으로 단순하게 수행 할 수있는 간단한 함수는없는 것 같습니다. 현재 args

답변

2

는 다음 string의 한 조각이다 : 보안에 민감한 데이터가 인덱스 1에 있습니다 포함

/var/lib/kubelet/pods/74785895-cab5-11e7-88ed-ce1c8b57856c/volumes/xyz-xandndnd 
{"kubernetes.io/secret/access-key":"Qdfnnfbbdnsjnxni8ehh=","kubernetes.io/secret/secret-key":"GGHNHwsffUIJMNBNBVV==","parallel-count":"5","region":"iam-standard"} 

입력 인수, 그리고 그것은 JSON 텍스트입니다.

JSON 텍스트를 "문자열 조작"하면 안됩니다. 먼저 Go 값으로 비 정렬 화 한 다음 조작 한 다음 다시 마샬링해야합니다.

는이 작업을 수행 할 수있는 방법입니다 :

// Make a copy of args: 
args2 := append([]string{}, args...) 

// Unmarshal: 
var m map[string]interface{} 
if err := json.Unmarshal([]byte(args2[1]), &m); err != nil { 
    panic(err) 
} 

// Modify: 
m["kubernetes.io/secret/access-key"] = "XXX" 
m["kubernetes.io/secret/secret-key"] = "YYY" 

// Marshal: 
s2, err := json.Marshal(m) 
if err != nil { 
    panic(err) 
} 
args2[1] = string(s2) 

// Verify: 
fmt.Println(args2[1]) 

// Now use args2 to log 
filelogger.Info("First log", zap.Strings("(masked) input args", args2)) 

은 "확인"분명히 필요하지 않습니다, 그것은 우리가 결과를 볼 단지에 대한합니다. Go Playground에 출력 : 당신은 또한 런타임 공황을 방지하기 위해 슬라이스 인덱스 검사를 추가해야합니다 솔루션에서

{"kubernetes.io/secret/access-key":"XXX","kubernetes.io/secret/secret-key":"YYY","parallel-count":"5","region":"iam-standard"} 

.

관련 문제