공공데이터 포털을 통해 API신청하여 데이터를 불러왔었습니다.

API신청시 통신할 수 있는 개인 인증키가 주어지는데, 문득 의문점이 들었습니다.

현재 이 데이터를 받아서 사용하는 프로젝트가 깃허브에 올라와있고 public인데, 누가 악용할 수 있지 않을까?

검색해보니 몇가지 악용사례가 있었다고 합니다.

(AWS의 인증키가 악용되어 많은 요금이 청구되는 사건..)

공공데이터포털이라 악용사례가 적을 순 있어도, 개인 인증키는 어떠한 경우에도 공유하면 안되기 때문에 이를 가려보고자 합니다.

정말 좋은 방법을 적어주신 분의 글을 참고하여 작성합니다.

https://leeari95.tistory.com/76

 

[iOS] Github에서 API KEY를 숨기기 위한 여러가지 방법들

다들 API KEY 관리를 어떻게 하시나요? 개발자마다 각각 방식이 다 다른 것 같아요. 이 글에서는 제가 협업하면서, 개인 프로젝트를 진행하면서 알게 된 관리 방법들을 적어보았습니다. 혹시 또 다

leeari95.tistory.com

 

xcconfig과 gitignore을 활용

사실 프로젝트를 private로 돌리면 끝이지만, 포트폴리오용으로도 사용가능성이 있기에, public으로 설정해야 한다면 깃허브에는 올라가지 않도록 gitignore을 활용해보려 합니다.

 

먼저 인증키를 저장할 xcconfig을 생성합니다.

 

 

생성한 xcconfig에 인증키를 작성합니다.

 

 

해당 프로젝트의 config을 설정해줍니다.

 

 

config에 저장된 개인키를 plist의 Information Property List에 추가합니다.

다른 plist 파일을 만들어서 넣어도 상관없지만, 저는 Info.plist에 넣었습니다.

인증키는 API_KEY = 1234 로 저장되있으므로 Value는 $(API_KEY)로 저장합니다.

(Key값은 상관없습니다.)

 

xcconfig 파일은 gitignore에 넣어서 제외시키도록 합니다.

// .gitignore
*.xcconfig

제 프로젝트에는 xcconfig파일 한개만 존재하고, 이는 인증키 숨기기위해 사용했으므로 xcconfig확장자를 갖는 모든 파일을 제외시켰습니다.

만약 여러개를 사용한다면 파일명을 정확히 넣어서 제외시켜주세요.

 

키값을 불러오기

// plist에 저장된 Information Property List의 값 중 인증키가 저장된 키의 값 불러오기
guard let url = Bundle.main.url(forResource: "Info", withExtension: "plist") else { return }
guard let dictionary = NSDictionary(contentsOf: url) else { return }
print(dictionary["ApiKey"] as! String)

// 1234

plist의 값은 키,값이 존재하는 Dictionary형태로 해당 키의 값을 불러옵니다.

불러온 값을 이용하여 네트워크 통신을 하면 완료!

 

 

xcconfig 파일을 제외하고 깃허브에 올리면 개인키가 저장된 xcconfig은 로컬저장소에만 존재하고

해당 파일 없이 깃허브에 업로드 됩니다.

위 작업을 브랜치 생성후 pr한다음 main에서 확인해본 결과 xcconfig이 로컬저장소에 남아있어서 개인키가 정상적으로 활용되었습니다.

다만 clone을 이용하여 해당 프로젝트를 다운로드받는다면 개인키가 저장된 xcconfig은 존재하지 않으므로 추가해줘야합니다.

+ Recent posts