이 섹션에서는 API 커넥터 플러그인과 관련된 보안을 다룹니다.
- API 커넥터에 대한 전반적인 내용을 자세히 알아보려면 아래 문서를 확인하세요
API Connector (중급) : 버블 API 커넥터 설정 및 사용, HTTP method, endpoint > 바로가기
- API 커넥터는 외부 앱 및 시스템에 대한 아웃바운드 API 호출을 수행하는 데 사용되는 버블 기반 플러그인입니다.
- API 커넥터는 의도하지 않은 취약성을 방지하기 위해 다양한 보안 측면을 자동으로 관리하고 엄격한 보안 설정을 기본으로 지정하도록 설계되었습니다.
- 그러나 앱 개발의 다른 영역과 마찬가지로, 앱 개발자는 API 커넥터가 안전하게 구성되었는지 확인하고 보안측면의 모범 사례들을 숙지하고 있는 것이 중요합니다.
(1) API Key 보안처리
이 섹션에서 "API Key"란 인증에 사용하기 위해 생성된 모든 토큰을 이야기하는 것입니다.
- 여기에는 기존 API 키뿐만 아니라 OAuth 토큰, JWT(JSON 웹 토큰), 비밀 액세스 코드 및 기타 인증 자격 증명도 포함됩니다.
- API 커넥터로 연결되는 서비스들은 Request를 인증하기 위해 하나 이상의 API 키를 생성합니다.
Authentication(인증)은 클라이언트가 누구 인지 식별하고 Authorization(승인)은 클라이언트가 액세스 할 수 있는 대상을 결정합니다.
API Key는 비밀번호 또는 앱 간의 디지털 악수역할을 하는 고유한 문자 및 숫자 문자열입니다. API 서비스 내의 특정 기능과 데이터에 대한 액세스 권한을 부여하여 앱이 해당 시스템과 원활하게 통신할 수 있도록 합니다.
- 누군가가 쉽게 찾을 수 있도록 집 열쇠를 현관 매트 아래에 두고 싶지 않은 것처럼, API Key를 숨겨서 안전하게 유지하는 것이 중요합니다.
- 노출되면 악의적인 행위자가 이를 오용하여 잠재적으로 무단 접속, 데이터 침해 또는 API 관련 비용이 발생할 경우 처럼 예상치 못한 비용이 발생할 수 있습니다.
- API 키를 비공개로 유지함으로써 관련 API 연결을 보호할 수 있습니다.
Bubble에서 API 키를 처리하기 위한 몇 가지 기본 규칙은 다음과 같습니다.
1) API Key는 다음과 같이 앱의 소스 코드에서 공개될 수 있는 장소에 저장되어서는 안 됩니다.
❌ Option set(옵션 세트) ❌ 페이지 워크플로에서 요소 및 동적 표현 ❌ App Text(번역 문자열) ❌ Custom state(사용자 정의 상태) ❌ URL Parameter ❌ 워크플로, 요소, 페이지, 데이터 유형/필드 및 옵션 세트의 이름 및/또는 라벨 ❌ 데이터 Type 필드의 기본값
2) API Key는 팀 외부의 누구와도 공유해서는 안 됩니다. 다음과 같은 장소에서 공유하지 마세요.
❌ 채팅 채널 ❌ 포럼 게시물 ❌ 소셜 미디어 게시물 ❌ 스크린샷
*API Key는 가장 중요한 로그인의 비밀번호를 처리하는 것처럼 안전하게 보관해야 합니다.
(2) Parameter 보안
1. Parameter (매개변수)란?
API Call의 매개변수는 본질적으로 특정 데이터를 요청하거나 일부 콘텍스트를 제공하기 위해 Call과 함께 보내는 정보 조각입니다.
수신자가 매개변수에 대한 인식이 있다면 요구 사항에 맞게 응답(Response)을 맞춤화할 수 있습니다.
- 예를 들어 날씨 정보를 얻기 위해 API를 Call 하는 경우 매개변수는 도시 또는 우편번호일 수 있습니다.
- 외부 앱에서 새 사용자를 생성하기 위해 API를 호출하는 경우 매개변수는 해당 사용자의 이메일 주소와 이름일 수 있습니다.
2. Parameter (매개변수)는 어디에 포함되나요?
매개변수는 API 호출의 다양한 부분에 배치될 수 있습니다.
1) URL Parameter
- URL 자체에서 "?" 뒤에 자주 표시됩니다. 예를 들어, api.website.com/data?city=NewYork
2) Header Parameter
- Call Header에 포함되며 인증이나 콘텐츠 유형 지정에 자주 사용됩니다.
3) Body Parameter
- 데이터가 Body로 전송되는 POST 요청에 사용됩니다.
- JSON 개체와 같은 더 복잡한 데이터를 보내는 데 유용합니다.
3. API 커넥터에서 비공개로 설정하는 이유는 무엇입니까?
API 커넥터에서 매개변수를 '비공개'로 설정하면 앱의 코드 파일에서 해당 Parameter(매개변수)가 제거되어 최종 사용자가 접근할 수 없게 됩니다. 이는 기본적으로 API Call이 Bubble 서버를 통해 라우팅 되기 때문에 가능합니다. 이를 통해 Parameter(매개변수)를 서버에만 저장하고 Call 시 필요에 따라 포함할 수 있습니다.
Private 상자를 선택하면 Parameter(매개변수)가 최종 사용자에게 보이지 않고 서버에 숨겨져 있는지 확인합니다. Call이 이루어지면 Parameter(매개변수)가 Bubble 서버에서 API 서비스로 전송됩니다.
이는 민감한 정보에 특히 중요합니다.
- 예를 들어 API key나 기밀 데이터가 실수로 노출되는 것을 원하지 않을 것입니다.
- Parameter(매개변수)를 비공개로 유지하면 해당 매개변수가 앱과 API 사이에 비밀로 유지됩니다.
4. API URL Parameter (URL매개변수)를 비공개로 설정
위 예시에서는 Header의 Parameter(매개변수)가 Private인지 확인했습니다.
그러면 URL에 포함하는 Parameter는 어떻습니까? Header 및 Body Parameter(매개변수)와 마찬가지로 비공개로 설정할 수 있습니다. 하지만 그전에 매개변수화를 해야 합니다.
1) 먼저불안정한 URL에 포함된 Parameter
위의 정보는 사용자 기기의 앱 코드에 표시됩니다. 대부분의 경우 아무런 문제가 없지만 위의 예시에는 몇 가지 중요한 정보인 API key가 포함되어 있습니다. 그러면 이를 어떻게 숨길 수 있을까요?
- URL 입력 양식 오른쪽에 (params에는 [] 사용)이라는 텍스트를 보세요
- 이는 대괄호([ ])를 사용하여 URL의 텍스트 문자열을 Parameter(매개변수)로 변환한 다음 이를 Private(비공개)로 설정할 수 있음을 알려줍니다. 즉, 안전한 Parameter를 보내는 방법은 다음과 같습니다.
- 위의 예시에서는 URL Parameter(매개변수)를 대괄호로 묶었고 Bubble은 key(키), value(값) 모두에 대한 입력 필드가 있는 Parameter(매개변수)를 아래에 자동으로 생성합니다.
- 이를 통해 Parameter(매개변수)를 Private(비공개)로 설정하여 앱 사용자에게 숨길 수 있습니다.
- 각 URL에 괄호([ ])를 하나 이상 설정할 수 있으며, 전체 URL를 숨긴 상태로 유지하려면 전체 URL을 비공개 매개변수로 설정할 수도 있습니다.
(3) API Call 구조 및 보안
이 섹션에서는 API Call이 작동하는 방식에 대해 간략하게 소개합니다.
- API Call과 Request의 구조는 물론 HTTP 프로토콜에 대해 자세히 알아보려면 API 작동 방식에 대한 다음의 글들을 읽어보세요.
API (초급) : 버블의 API 시스템 기본 개념, incoming, outgoing 연결 > 바로가기
Bubble API 소개 (중급) : 버블 Data API, 버블 Workflow API, 버블 Swagger 설정, FAQ > 바로가기
Restful API 란? (중급) : 일반적인 Restful API에 대한 설명 > 바로가기
1. API Call은 Request(요청)과 Response(응답)의 두 단계로 구성됩니다.
API Connector(커넥터: 아웃바운드 호출 수행)의 경우 Bubble 앱(클라이언트) 은 항상 Request(요청)을 수행하고 통신 중인 서버는 Response(응답)을 보냅니다.
- 전체 프로세스는 웹페이지를 로드할 때와 마찬가지로 HTTP 프로토콜 (대부분의 경우 SSL/TLS로 암호화됨)을 통해 전송됩니다.
- Request(요청)의 다양한 부분에 대해 자세히 알아보려면 위에 나열된 문서를 참조하는 것이 좋습니다.
아래 표에는 일반적인 보안 권장 사항과 함께 각 항목에 대한 간략한 설명이 나열되어 있습니다.
부분 | 목적 | 보안 고려 사항 | 권장 사항 |
Header | API 호출에 대한 메타데이터를 포함합니다. | 요청에 대한 정보(예: 콘텐츠 유형) 를 공개할 수 있습니다. | 맞춤 헤더에 민감한 정보 방지 |
Body | 요청/응답의 주요 내용을 포함합니다. | 민감할 수 있는 실제 데이터를 전송합니다. | API 서버에 필요하지 않은 정보는 포함하지 마세요 |
HTTP Method | 요청 유형 (예: GET, POST)을 나타냅니다. | 특정 방법(예: POST, PUT)은 서버의 데이터를 변경할 수 있습니다. | 작업에 적합한 방법을 사용하십시오. 필요한 경우가 아니면 데이터를 변경하는 방법을 사용하지 마세요 |
URL | endpoint와 매개변수를 지정합니다. | 매개변수를 비공개로 설정하지 않으면 민감한 정보가 노출될 수 있습니다. | 매개변수를 비공개로 표시하려면 비공개 설정을 사용하세요. 민감한 정보를 URL에 직접 입력하지 마세요. |
Parameter | 특정 쿼리 또는 작업에 대한 세부정보 | 데이터 작업에 중요할 수 있음 | 매개변수가 민감한 데이터를 유출하지 않는지 확인하세요.필요한 경우 비공개를 사용하세요 . |
2. 필요한 것보다 더 많은 데이터를 서버에 보내지 마세요
call의 정보는 전송 중에 TLS로 암호화될 수 있고 요청 수신자(서버)는 포함된 모든 데이터를 해독할 수 있습니다.
- 즉, 대부분의 API 서비스는 해당 정보를 안전하게 처리한다고 신뢰할 수 있지만 필요한 것보다 더 많은 정보를 포함하지 않는 것이 모범 사례 중 하나입니다.
- 이것이 바로 위의 권장 사항이 개발자에게 해당 관행을 따르도록 권장하는 이유입니다.
이는 *최소 권한의 원칙에 부합한다고 말할 수 있습니다.
*최소 권한 원칙은 작업에 필요한 만큼만 액세스 권한을 부여하는 것을 의미하며, 그 이상은 부여하지 않는 것을 원칙으로 합니다.
(4) default Parameter 값 보안
특정 API Call을 활성화하려면 초기화(Initialize)를 해야 합니다. Call(호출)에 Parameter(매개변수)가 포함된 경우 초기화가 완료될 때 Bubble이 사용할 수 있는 Parameter(매개변수)에 기본값을 할당해야 합니다. 기본 매개변수는 앱 코드 베이스의 일부가 되며 사용자의 기기에서 볼 수 있습니다.
- 이 필드에 민감한 정보를 저장하지 마세요
- 값이 어디에도 표시되지 않도록 하려면 초기화가 완료된 후 해당 내용을 삭제할 수 있습니다.
- 호출을 초기화할 때 하나 이상의 매개변수를 포함해야 하는 경우가 있습니다.
- 앱 코드 어디에도 값이 표시되지 않도록 초기화된 후에 이러한 값을 제거할 수 있습니다.
(5) 외부 API 대시보드 보안
API 커넥터를 사용할 때 해당 API와 함께 사용하게 될 많은 설정은 Bubble 측에서 설정되지 않고 API 제공자의 대시보드에서 설정됩니다. 보안 연결을 유지하려면 이러한 설정을 검토하고 올바르게 설정되었는지 확인하는 것이 중요합니다.
- 설정은 때때로 하나의 특정 API 키에 연결됩니다. 즉, 유연한 보안을 유지하기 위해 다양한 설정으로 다양한 키를 사용할 수 있습니다.
각 API 서비스에서 사용할 수 있는 다양한 설정과 기능은 다를 수 있습니다.
1. 권한 제한
- 많은 API 서비스는 key를 사용할 수 있는 애플리케이션이나 key가 호출할 수 있는 API 서비스 등 호출 권한을 제한하기 위한 설정을 제공합니다.
- 필요한 call을 성공적으로 실행할 수 있도록 권한을 최대한 엄격하게 설정하는 것이 좋습니다.
2. 비율 제한
- 많은 서비스 제공업체에는 요금 제한이 있거나 예상 접속량을 유지하거나 예산 내에서 유지하기 위해 자체 요금 제한을 설정할 수 있습니다.
- 연결 중인 API에서 설정한 속도 제한을 설정하는 방법을 알아보세요. 이렇게 하면 서버에 과부하가 걸리고 예산이 과도하게 지출되며 잠재적인 IP 블랙리스트가 발생하는 것을 방지할 수 있습니다.
3. Audit 로그 및 분석 알아보기
- 많은 API 서비스는 인증을 사용하여 플랫폼을 통과하는 모든 request 및 response에 대한 자세한 로그를 유지합니다.
- Audit 로그 사용 방법을 배우면 교환되는 모든 데이터를 파악하고 오류를 디버깅하는 데 도움이 됩니다.
- 로그 및 분석은 악의적인 활동이나 잠재적인 취약점을 나타낼 수 있는 비정상적인 패턴을 식별하는 데도 도움이 될 수 있습니다.
(6) API 토큰 분실
API 토큰(key)을 분실한 경우 어떻게 해야 합니까?
- API 토큰이 잘못된 위치에 있는 경우, 즉시 관련 API 서비스에 로그인하여 비활성화하는 것이 좋습니다.
- 대부분의 서비스에서는 새 서비스를 생성하여 이전 API 키를 쓸모없게 만들 수 있습니다.