API 키 안전하게 보관하기

고라니·2023년 11월 7일
1

TIL

목록 보기
45/67

API를 통해 우리는 서비스와 데이터를 연결하고, 외부 서비스와 상호작용한다. 이러한 기능들을 잘 활용하기 위해서는 먼저 API 키의 보안 문제와 중요성을 알아야 한다.

API 키는 애플리케이션이 외부 서비스와 통신할 때 사용되는 비밀 코드로, 유출되면 악의적인 사용자가 중요한 데이터에 엑세스 하거나 서비스를 남용할 수 있다. 즉 API 키를 제대로 관리하지 않으면 앱의 보안이 위험하게 될 수 있다는 것이다. (깃허브에 API 키가 유출되어 수백만원의 비용이 발생한 사례도 있음 😥)
그래서 이번에 API키를 안전하게 저장하고 깃 저장소에 노출되지 않도록 하는 방법 중 하나를 알아보려고 한다.

.xcconfig?

.xcconfig 파일은 Xcode 프로젝트 설정을 외부 파일로 분리하고 관리하기 위한 설정 파일이다.
주로 빌스 설정 및 환경 변수와 관련된 정보를 포함한다.

주요 사용 사례를 보자

  • 빌드 설정 분리: .xcconfig 파일을 사용하여 빌드 설정을 분리할 수 있다.
  • 정보 보안: 중요한 API 키나 인증 정보를 .xcconfig 파일에 저장하고 해당 파일을 .gitignore에 추가하여 보안 정보를 코드 저장소에 저장하지 않도록 할 수 있다.
  • 환경 변수 설정: 환경 변수를 .xcconfig 파일에 설정하고 관리하면 프로젝트 설정을 다양한 관경에서 재사용하기 편하다.

.xcconfig 파일은 텍스트 파일로 구성, 설정 값과 주석을 포함
Xcode에서 이러한 파일을 프로젝트 설정에 쉽게 적용 가능, 설정 값의 출동을 방지하고 유지 관리를 단순화 한다.

사례들 중 두번째 사례가 이번에 알아볼 내용이다.

API Key를 안전하게 저장하는 방법

.xcconfig 파일 생성

새파일을 눌러 Configuration Settings File을 생성한다.

Secret이라는 이름으로 생성했고. 프로젝트파일의 바로 하위에 위치시켜준다.

Secret내부에 API_KEY를 입력해준다.

프로젝트파일 > PROJECT > Info > Configurations 에서 Secrets.xcconfig을 추가해준다.
이 때 배포용이 아니라면 Release에는 추가하지 않아도 된다.

프로젝트파일 > Targets > Info 에서 Key와 Value를 이미지처럼 추가해준다.

이제 Bunle을 통해 API 키를 사용할 수 있다.
Bundle을 확장하면 좀더 편리하게 관리 할 수 있다.

import Foundation

extension Bundle {
    var apiKey: String? {
        return infoDictionary?["API_KEY"] as? String
    }
}

사용할 때

guard let apiKey = Bundle.main.apiKey else {
    print("API 키를 로드하지 못했습니다.")
    return
}

이정도면 거의 끝났다고 생각할 수 있다, 하지만 아주 중요한 과정이 남아있다.

중요!

이대로 커밋하면 설정한 API 키가 그대로 저장소에 저장되게 된다.
그 전에 꼭 .gitignore 파일을 통해 Secret.xcconfig 파일을 제외시켜야 한다.

.gitignore 파일에 "*.xcconfig"을 작성해준다.

끝났다고 볼 수 있지만 이대로 끝내지 말고 커밋 이후에 꼭 .xcconfig 파일이 포함되어 있지 않은지 확인해야 한다.

이미 .xcconfig 파일을 생성할 때 캐시가 남아 있는 상태에서 .gitingore가 제대로 적용이 안될 수도 있다. (나의 프로젝트도 커밋하고보니 .xcconfig파일이 제외되지 않았다. redo했더니 .gitignore가 그제서야 적용되어 Secret파일이 제외되었다.)
정확한 방법으로는 직접 캐시를 제거하는 방법이다.

git rm -r --cached .


마치면서

앱 개발자로서 보안은 항상 최우선으로 고려해야할 사항이다. 개발자는 중요한 정보와 데이터를 보호하고 안전하게 관리해야 한다. .xcconfig 파일을 사용하여 API 키와 같은 민감한 정보를 안전하게 보관하고 설정을 단순화 할 수 있었다. 앱을 안전하게 하는 방법은 이 방법 말고도 많은 방법들이 있다. 안전한 개발을 지향하고, 민감한 정보를 보호하기 위해 이런 방법들을 잘 숙지하도록 하자

profile
🍎 무럭무럭

4개의 댓글

comment-user-thumbnail
2024년 3월 24일

안녕하세요
혹시 위 내용과 관련하여 질문 드려도 될까요 ??

1개의 답글