azhy의 iOS 이야기

[iOS] github에 API Key 숨기기 본문

iOS

[iOS] github에 API Key 숨기기

azhy 2024. 11. 11. 21:01

2022년 6월 18일에 작성됨

 

API Key를 숨기지 않고 깃허브에 그대로 올리면 다른 사람들도 API key를 볼 수 있어서 되돌릴 수 없는 일들이 벌어질 수도 있습니다.

AWS 해킹당한 경험담 실제로 GitHub에 Key를 숨기지 않고 올려서 150만 원 정도 청구된 사례도 있죠.

지금 OpenWeatherMap API 를 이용해서 간단한 작업을 하고 있는데, 이 API를 사용하려면 API Key 가 필요했고 Key를 숨기는 작업이 필요해서 정리해보려 합니다.

API Key 숨기기

1. New File -> Property List

 

2. 생성된 파일에 String Type을 가진 key를 하나 만드시고 Value에 실제 Key 값이 아닌 임시로 아무 string 값을 넣어줍니다.

 

 

사실 2번에서 실제 Key 값을 넣어도 상관은 없습니다.

원래 Key 값을 넣고 .gitignore 세팅을 하면 만든 .plist 파일이 포함안되게 하는 방법인데 .gitignore 세팅을 하기 전에 .plist 파일을 만들면 git은 처음에 만든 .plist 파일을 계속 포함시키기 때문에 맨 처음부터 .gitignore 에 해당 파일을 추가하거나 저처럼 임시로 string 값 넣고 .gitignore 파일 수정, push 하고 나면 그 뒤부터는 생성한. plist 파일을 추적하지 않습니다.


혹시나 .gitignore가 적용이 안되고 파일을 추적, 포함시킨다면 git update-index --skip-worktree {ProjectName}/{plistname.plist} 입력하고 git status를 확인하면 추적하고 있던. plist 파일을 더 이상 추적하지 않습니다.

 

3. .gitignore 파일 수정 -> commit, push -> 임시로 넣은 string 값에서 실제 API Key 값을 입력 후 git이 .plist 파일을 추적하는지 안 하는지 확인해 주세요!

 

Key 값 불러오기

Bundle에 extension으로 작성해 주는데, forResource 에는 본인의 .plist 파일 이름을 넣어주시고 WEATHER_API_KEY 에는 본인이 작성한 Key 이름을 넣어주시면 됩니다.

extension Bundle {

    // 생성한 .plist 파일 경로 불러오기
    var WEATHER_API_KEY: String {
        guard let file = self.path(forResource: "WeatherInfo", ofType: "plist") else { return "" }

        // .plist를 딕셔너리로 받아오기
        guard let resource = NSDictionary(contentsOfFile: file) else { return "" }

        // 딕셔너리에서 값 찾기
        guard let key = resource["WEATHER_API_KEY"] as? String else {
            fatalError("WEATHER_API_KEY error")
        }
        return key
    }
}

 

사용법은 Bundle.main.{본인이 작성한 Key 이름}으로 사용하시면 Key 값이 정상적으로 출력됩니다.