API 키는 외부 서비스와의 통신에서 중요한 역할을 합니다.
하지만 이 키가 노출되면 보안 문제가 발생할 수 있으므로, Git과 같은 공개적인 저장소에 API 키를 포함시키지 않도록 해야 합니다.
이 글에서는 API 키를 안전하게 관리할 수 있는 방법들을 단계별로 설명하겠습니다.
1. API 키의 위험성
API 키가 노출되면 다음과 같은 보안 위협을 초래할 수 있습니다:
- 무단 사용: 악의적인 사용자가 API 키를 이용해 서비스에 불법으로 접근할 수 있습니다.
- 서비스 남용: 키를 통해 서비스의 한도를 초과하거나 악용될 수 있습니다.
- 데이터 유출: 민감한 데이터나 사용자 정보를 외부에서 훔칠 수 있습니다.
따라서 API 키를 Git과 같은 공개된 저장소에 저장하지 않고, 안전하게 관리해야 합니다.
2. Git에 API 키 노출 방지 방법
2.1. local.properties 파일 사용하기 (Android)
local.properties 파일은 Android 프로젝트에서 API 키를 안전하게 저장할 수 있는 방법 중 하나입니다. 이 파일은 기본적으로 Git에 커밋되지 않으며, 각 개발자 환경에 맞게 설정할 수 있습니다.
1. local.properties 파일에 API 키 저장:
Android 프로젝트의 루트 디렉토리에 local.properties 파일을 생성하거나 기존 파일을 열어, 여기에 API 키를 저장합니다.
google_maps_api_key=AIzaSyBJzxNtFyK19
- 파일 위치: <프로젝트 루트>/local.properties
2. .gitignore에 local.properties 추가:
Git에 local.properties 파일이 커밋되지 않도록 .gitignore에 추가합니다.
local.properties는 각 개발자가 로컬에서만 사용할 수 있도록 설정됩니다.
# Ignore local.properties file which contains sensitive API keys
local.properties
- 파일 위치: <프로젝트 루트>/.gitignore
3. build.gradle 파일에서 API 키 읽기:
build.gradle 파일에서 local.properties에 저장된 API 키를 읽어옵니다.
다음과 같이 google_maps_api_key 값을 불러올 수 있습니다.
def googleMapsApiKey = project.hasProperty('google_maps_api_key') ? project.google_maps_api_key : ""
- 파일 위치: <프로젝트 루트>/android/build.gradle
4. AndroidManifest.xml에서 API 키 사용:
AndroidManifest.xml에서 ${googleMapsApiKey}를 참조하여 API 키를 사용합니다.
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="${googleMapsApiKey}"/>
- 파일 위치: <프로젝트 루트>/android/app/src/main/AndroidManifest.xml
2.2. 환경 변수 사용하기
환경 변수는 시스템에 설정된 값을 코드에서 읽어오는 방법입니다.
환경 변수에 API 키를 저장하면 Git에 노출되지 않도록 할 수 있습니다.
1. 환경 변수 설정
- Windows: 시스템 환경 변수에 GOOGLE_MAPS_API_KEY와 같은 이름으로 API 키를 저장합니다.
- Mac/Linux: ~/.bashrc 또는 ~/.zshrc 파일에 환경 변수를 추가합니다.
export GOOGLE_MAPS_API_KEY="AIzaSyBJzxNtFyK19"
- 파일 위치 (Mac/Linux): ~/.bashrc 또는 ~/.zshrc 파일
- 파일 위치 (Windows): 시스템 환경 변수 설정 화면에서 추가
2. build.gradle에서 환경 변수 읽기
Gradle 파일에서 환경 변수를 읽어옵니다.
def googleMapsApiKey = System.getenv("GOOGLE_MAPS_API_KEY")
- 파일 위치: <프로젝트 루트>/android/build.gradle
3. AndroidManifest.xml에서 API 키 사용.
AndroidManifest.xml에서 환경 변수로 저장된 API 키를 참조합니다.
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="${googleMapsApiKey}"/>
- 파일 위치: <프로젝트 루트>/android/app/src/main/AndroidManifest.xml
2.3. 비공개 Git 리포지토리 및 비밀 관리 서비스 활용
비공개 Git 리포지토리와 비밀 관리 서비스를 사용하여 API 키를 관리할 수 있습니다.
클라우드 서비스에서는 API 키와 같은 민감한 정보를 안전하게 저장하고 관리할 수 있는 도구를 제공합니다.
- AWS Secrets Manager: AWS의 비밀 관리 서비스로, 안전하게 API 키를 저장하고 애플리케이션에서 동적으로 키를 가져올 수 있습니다.
- Azure Key Vault: Microsoft Azure의 비밀 관리 서비스로, API 키와 같은 민감한 정보를 안전하게 저장하고 관리합니다.
- HashiCorp Vault: 클라우드와 온프레미스 환경에서 API 키를 안전하게 관리할 수 있는 오픈소스 도구입니다.
이 방법을 사용하면 API 키를 소스 코드와 분리하여 안전하게 관리할 수 있습니다.
2.4. .env 파일 사용하기 (Node.js, React Native 등)
Flutter 외에도 .env 파일을 사용하는 방법이 있습니다.
.env 파일에 API 키를 저장하고 이를 코드에서 참조하는 방법입니다.
이 방법은 Node.js, React Native 프로젝트 등에서도 사용됩니다.
- .env 파일에 API 키 저장:
- 프로젝트 루트에 .env 파일을 만들고 API 키를 저장합니다.
GOOGLE_MAPS_API_KEY=AIzaSyBJzxNtFyK19
- 파일 위치: <프로젝트 루트>/.env
2. .gitignore에 .env 파일 추가:
.env 파일을 Git에 커밋하지 않도록 .gitignore에 추가합니다.
# Ignore .env file containing sensitive API keys
.env
3. 환경 변수로 API 키 읽기:
dotenv 패키지를 사용해 .env 파일에서 API 키를 읽습니다.
예를 들어, Node.js에서 dotenv 패키지를 사용하여 API 키를 읽어올 수 있습니다.
require('dotenv').config();
const apiKey = process.env.GOOGLE_MAPS_API_KEY;
- 파일 위치: <프로젝트 루트>/index.js 또는 관련 파일
3. 기타 유용한 보안 팁
- API 키 최소화: API 키에 대한 권한을 최소화하여 외부에서 악용될 가능성을 줄입니다. 예를 들어, IP 주소나 도메인에 대한 액세스 제한을 설정하세요.
- API 키 주기적인 갱신: 보안 사고 발생 시, API 키를 주기적으로 갱신하는 것이 좋습니다.
- 개발/테스트 환경과 프로덕션 환경 분리: 개발 환경과 프로덕션 환경에서 서로 다른 API 키를 사용하여 보안을 강화할 수 있습니다.
API 키는 중요한 인증 정보이므로 Git에 노출되지 않도록 관리해야 합니다. local.properties 파일, 환경 변수, 비밀 관리 서비스 등을 사용하여 API 키를 안전하게 관리할 수 있습니다.
또한, .gitignore를 활용하여 민감한 파일이 Git에 커밋되지 않도록 주의해야 합니다.
이러한 방법을 통해 보안 위협을 최소화하고 애플리케이션의 안전성을 높일 수 있습니다.
구독!! 공감과 댓글,
광고 클릭은 저에게 큰 힘이 됩니다.
Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.
Tester Share [테스터쉐어] - Google Play 앱
Tester Share로 Google Play 앱 등록을 단순화하세요.
play.google.com
'Program Development Tips > Git' 카테고리의 다른 글
Git에서 Pull Request(PR)란? (0) | 2025.01.14 |
---|---|
macOS에서 Git 계정 쉽게 변경하기: 기존 계정 삭제 후 새 계정 추가 방법 (0) | 2024.11.16 |
[Synology NAS]에서 Git Server(Gitea) 설치하기 (3) | 2024.11.03 |
Git 서버 만들기 (7) | 2024.10.14 |
[Git] Git과 GitHub 사용의 기초부터 실전까지 최종 정리 (1) | 2024.09.03 |