API Gateway에서 민감한 데이터 유출을 방지하는 방법
Wei Liu
March 3, 2023
민감한 데이터를 보호해야 하는 이유
민감한 데이터는 기밀 데이터라고도 불리며, 주로 유출 시 기업, 정부 및 개인에게 큰 문제를 일으킬 수 있는 데이터를 의미합니다. 이는 비즈니스 운영 데이터, 개인 신원 정보 등을 포함하지만 이에 국한되지 않습니다.
기업의 경우, 민감한 데이터는 기업의 정보 보안과 직접적으로 연결됩니다. 예를 들어, 키와 인증서와 같은 민감한 정보가 유출되면 조직의 평판에 치명적인 영향을 미치고, 금전적 손실을 초래하며, 심지어 법적 책임을 질 수도 있습니다.
개인의 경우, 민감한 데이터 유출은 사회 보장 번호부터 은행 정보까지 모든 것을 노출시킬 수 있습니다. 신원 도용은 광고로 괴롭힘을 당하거나, 신용을 망가뜨리거나, 법적 문제에 휘말리거나, 당신의 이름으로 다양한 사기 행위를 저지를 수 있습니다.
API 게이트웨이에 있는 민감한 데이터의 종류
비즈니스 트래픽의 입구인 API 게이트웨이는 종종 API 키, 인증에 사용되는 토큰 등과 같은 많은 양의 민감한 데이터를 포함합니다. 따라서 기본적인 로드 밸런싱 및 트래픽 라우팅 기능 외에도 보안을 강화하고 민감한 데이터가 유출되지 않도록 하는 것이 API 게이트웨이의 중요한 측면입니다.
API 게이트웨이가 민감한 데이터를 보호하는 방법
일반적인 아이디어는 다음과 같습니다:
-
민감한 데이터를 보호된 영역에 두고 접근 권한을 엄격히 통제합니다.
-
위험 관리 시스템을 개선하여 비정상적인 행동과 비즈니스 규정 준수 위험을 관리합니다.
-
민감한 데이터를 비식별화하거나 암호화합니다.
다음으로, Apache APISIX를 예로 들어 API 게이트웨이에서 민감한 데이터를 보호하는 방법을 보여드리겠습니다.
Apache APISIX의 개인 데이터 보호 사례
Apache APISIX는 Apache 소프트웨어 재단의 오픈소스 프로젝트이며, 현재 가장 활발한 오픈소스 게이트웨이 프로젝트입니다. 완전 동적, 실시간, 고성능 오픈소스 API 게이트웨이로서 Apache APISIX는 로드 밸런싱, 동적 업스트림, 카나리 릴리스, 서킷 브레이커, 인증, 관찰 가능성 등과 같은 풍부한 트래픽 관리 기능을 제공합니다.
또한, 사용자는 자신만의 플러그인을 작성하여 Apache APISIX의 기능을 사용자 정의할 수 있습니다. 활발한 커뮤니티와 증가하는 개발자 덕분에 Apache APISIX 플러그인의 수는 매일 증가하고 있으며, 그 중 일부는 민감한 정보를 포함하고 있습니다. 예를 들어, jwt-auth 플러그인 구성의 secret
및 private_key
와 같은 정보입니다. 이러한 데이터가 불법적으로 획득되는 것을 방지하기 위해 암호화된 저장소를 사용해야 합니다.
APISIX의 보안을 강화하고 사용자의 개인 정보를 더 잘 보호하기 위해 APISIX는 3.1.0 버전에서 Global Data Encryption
기능을 도입했습니다. 개발자가 이 기능을 사용하여 새로운 플러그인을 개발할 때, 개발자는 스키마에서 암호화할 데이터를 지정하기만 하면 APISIX가 컨트롤 플레인에 쓸 때 자동으로 암호화하고 저장하며, 데이터 플레인이 읽을 때 자동으로 복호화합니다.
구체적인 예를 살펴보겠습니다.
데이터 암호화가 활성화되지 않은 경우
- 구성 전송
curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"username": "foo",
"plugins": {
"basic-auth": {
"username": "foo",
"password": "bar"
}
}
}'
- etcd에서 민감한 데이터의 상태
etcdctl get /apisix/consumers/foo
{"username":"foo","update_time":1675414313,"create_time":1674009211,"plugins":{"basic-auth":{"username":"foo","password":"bar"}} }
password
필드가 평문으로 저장되어 있으며 쉽게 유출될 수 있음을 확인할 수 있습니다.
데이터 암호화가 활성화된 경우
config.yaml
에서data_encryption
활성화:
apisix:
data_encryption:
enable: true
keyring:
-edd1c9f0985e76a2
- 데이터 암호화를 지원하는 플러그인 활성화, 여기서는
basic-auth
를 예로 듭니다.
curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"username": "foo",
"plugins": {
"basic-auth": {
"username": "foo",
"password": "bar"
}
}
}'
- 플러그인 테스트
curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"methods": ["GET"],
"uri": "/get",
"plugins": {
"basic-auth": {}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org": 1
}
}
}'
접근 성공
curl -i -ufoo:bar http://127.0.0.1:9080/get
HTTP/1.1 200 OK
...
접근 실패, 비밀번호 오류
curl -i -ufoo:test http://127.0.0.1:9080/get
HTTP/1.1 401 Unauthorized
...
{"message":"Invalid user authorization"}
플러그인이 정상적으로 작동합니다.
- etcd에서 민감한 데이터의 상태
etcdctl get /apisix/consumers/foo
{"create_time":1674009211,"update_time":1674009211,"plugins":{"basic-auth":{"password":"+kOEVUuRc5rC5ZwvvAMLwg=","username":"foo"}},"username": "foo"}
password
필드가 성공적으로 암호화되었음을 확인할 수 있습니다. 데이터가 유출되더라도 해커가 이를 사용할 수 없습니다.
요약
API 게이트웨이는 많은 민감한 데이터를 포함하고 있으므로 데이터를 보호하기 위한 효과적인 조치를 취하는 것이 필요합니다. 이 글에서는 APISIX를 예로 들어 Global Data Encryption
기능을 사용하여 민감한 데이터를 보호하는 방법을 소개했습니다. 이를 통해 평문으로 저장된 민감한 데이터가 없도록 하여, etcd에 저장된 모든 데이터가 유출되더라도 민감한 데이터 유출을 방지할 수 있습니다. 이는 APISIX의 보안을 효과적으로 향상시킵니다.
동시에, 민감한 데이터를 암호화하는 것 외에도 APISIX는 민감한 정보를 직접 타사 서비스에 넣는 것을 지원합니다. 즉, Secret Manager를 사용하여 보안을 더욱 강화할 수 있습니다.
이 글이 API 게이트웨이에서 민감한 데이터를 보호하고 비즈니스에서 정보 보안을 보장하는 방법에 대해 더 많이 배우는 데 도움이 되길 바랍니다.