당신은 밤늦게 릴리즈를 푸시하고, 알림을 훑어보고, 개인 레포지토리에 절대 나가지 shouldn't never의 자격증을 발견한다. 그럴 수 있는 이유는 데이터베이스 패스워드였거나, 더 넓은 권한을 가진 클라우드 접근 키였을 수 있다. 그 문제는 단지 누군가가 로그인할 수 있는 문제가 아니라, 데이터베이스 보안이 로그인 문제로만 다루어지고 있기 때문이다. 실제 시스템에서 이것은 어디서나 나타난다. 팀은 암호화를 한번만 활성화하고, 그들이 끝났다고 가정한다. 백업을 유지하지만, 복원 테스트를 하지 않는다. 편의를 위해 관리자 서비스 계정을 만들고, 그것이 존재하는 것을 잊는다. 프로덕션을 잠근 다음, 스테이징에 고객 데이터를 복사한 채로 남겨둔다. 웹 앱이나 모바일 앱을 개발하고 있다면, 데이터베이스 보안은 모든 것을 다 커버해야 한다: 주 데이터베이스, 복제본, 수출물, 로그, 백업, 키.
마틴 도나디우
다음 앱에 대한 인증을 해결하는 중이시면 인증과 저장소 보안은 다른 실패 모드를 해결한다는 것을 기억하세요.인증은 누구에게 들어가야 하는지 결정합니다. API security standards for app store compliance.
고객을 대면하는 앱을 배포하는 팀에게는 저장소 결정과 인접한 제어를 일치시키는 것도 중요합니다. __CAPGO_KEEP_0__ 앱 스토어 준수에 대한 보안 표준 급박함은 이론적인 것이 아닙니다. 2020년 64.2조 기가바이트의 데이터가 생성되었고, 2025년까지 180조 기가바이트로 증가할 것으로 예상되었습니다.Edge Delta의 데이터 저장소 요약에 따르면.
그 규모에서 보안 저장소는 보안 강화 작업에서 벗어나 아키텍처가 됩니다.
- 목차
- 데이터베이스 위협 모델 이해
- 데이터베이스 보안의 핵심 원칙
- 실제 암호화 구현 패턴
- __CAPGO_KEEP_2__
- __CAPGO_KEEP_5__
- __CAPGO_KEEP_8__
- 자주 묻는 질문
데이터베이스 보안은 단순한 비밀번호만으로 충분합니까
비밀번호는 입구를 보호하지만 데이터를 보호하지 못합니다. 인증 정보가 유출되거나 스냅샷이 복사되거나 내부 서비스가 테이블을 읽는 권한이 없는데도 읽을 수 있게 된다면. 데이터베이스 보안은 층층이 되어야 합니다.
기존의 생각 방식은 단순했습니다. 데이터베이스를 방화벽 뒤에 두고 강력한 비밀번호를 요구하고 외부로부터 멀리 떨어뜨리면 됩니다. 그러나 클라우드 시스템, 모바일 백엔드, 현대적인 CI/CD PIPELINE에서 이 모델은 깨집니다. 데이터는 서비스 간에 이동합니다. 엔지니어는 임시 수출을 생성합니다. 분석 작업은 복제본을 생성합니다. 백업 시스템은 다른 인프라에서 복사본을 저장합니다. 공격자는 데이터베이스 엔진을 직접 공격하지 않아도 키를 훔치거나 API 토큰을 악용하거나 복제본에 약한 제어를 가진 복제본을 찾으면 됩니다.
보안은 조용한 경로에서 실패합니다
가장 손상된 저장소 실패는 처음에는 드라마틱하지 않습니다. 보통입니다.
- 개발자 편의성이 프로덕션 위험으로 변합니다: 관리자 자격 증명이 공유되어 스크립트에 재사용되는데, 회전하면 배포가 깨지기 때문입니다.
- A 복사된 데이터는 통제를 벗어난다: 운영 환경의 기록이 스테이징 환경으로 복제되어 버그를 재현하기 위해 QA 팀이 사용할 수 있도록 한다.
- 백업이 약점이 된다: 운영 환경은 강력한 제어를 가지고 있지만 복원 버킷이나 스냅샷 정책이 그렇지 않다.
실용적인 규칙: 만약 공격자가 데이터를 읽을 수 있는 유일한 장애물이 하나의 자격증명이라면, 보안 저장소가 아니라 단일 실패 지점을 가지고 있다고 말할 수 있다.
인증 정보를 악용하는 공격을 막아야 한다.
마이크로소프트의 클라우드 지침은 전송 중인 데이터 암호화, 데이터 저장 시 암호화, 최소 권한의 접근 제어, 비인가 활동에 대한 모니터링을 포함하는 클라우드 데이터 보안 최적화 방안을 권장한다. 그것은 올바른 기준이다. 실제 사고는 종종 유효한 접근 권한을 잘못 사용한 경우에 시작된다.실제로 작동하는 것은 단조롭고 일관적이다. 데이터베이스 파일을 암호화하라. 연결을 암호화하라. 서비스 역할을 분리하라. 관리자 권한을 제거하라. sensitive한 연산을 로그하라. 비정상적인 사용 패턴에 대한 경고를 설정하라. 그 중 하나도 이쁘지 않지만 실제로 발생하는 침해를 막는다.
실용적인 방법으로 생각할 수 있는 것은 물건을 보관하는 물리적 금고이다. 금고의 문이 중요하다. 또한 격리 장치, 카메라 footage, 방문자 로그, box를 열 수 있는 사람의 정책도 중요하다. 보안 데이터베이스 저장소도 마찬가지다. 암호는 단지 문 앞에 있는 것이다.
A copied dataset escapes governance:
데이터베이스 위협 모델 이해하기
데이터베이스 보안을 위한 위협 모델을 만들기 전에, 시스템이 실패하는 방식에 대해 먼저 생각해 보세요. 데이터베이스 보안을 위한 위협 모델은 학술적인 필요성만을 위한 것이 아닙니다. 데이터베이스에 저장된敏感데이터에 접근할 수 있는 사람, 그들이 어떻게 접근할 수 있는지, 그리고 그들이 성공할 경우에 어떤 일이 일어날지에 대한 정보를 제공해야 합니다.

보안 데이터는 일반적으로 하나의 정리된 데이터베이스에 저장되지 않습니다. 현대적인 지침은 보안 데이터가 복사본, 백업, 로그, 개발 환경 등 다양한 곳에 저장될 수 있기 때문에, 데이터베이스의 주요한 부분 외에 실패가 발생할 수 있음을 강조합니다. Sentra의 클라우드 데이터 보안과 포지처 관리 개요에서 이러한 점을 언급한 바 있습니다.. 따라서, 인시던트 계획에는 제3자 노출 및 복사된 데이터 세트와 같은 시나리오를 포함해야 합니다. 이러한 시나리오에서는 더 광범위한 대응 플레이북, 예를 들어 제3자 침해 대응 최선의 방법이러한 플레이북이 관련이 있습니다.
자산부터 시작하세요
자산을 먼저 생각해 보세요. 제품을 먼저 생각하는 것보다.
대부분의 앱 팀의 경우, 중요한 자산은 다음과 같습니다:
- 고객 기록 예를 들어 프로필, 주문 내역, 결제 관련 메타데이터, 또는 건강 관련 콘텐츠와 같은 것들.
- 인증 자료 예를 들어 비밀번호 해시, 세션 기록, 갱신 토큰, 또는 API 비밀 정보와 같은 것들.
- 운영 데이터 예를 들어 감사 로그, 작업 큐, 관리자 노트, 지원 내보내기와 같은 것들.
- 복구 자산 예를 들어 스냅샷, 논리적 덤프, 특정 시점 로그, 암호화 키와 같은 것들.
마지막 항목이 팀이 생각하는 것보다 더 중요합니다. 공격자가 백업을 삭제하거나 복호화 키에 접근할 수 있다면, 복구 스토리가 붕괴됩니다.
가장 중요한 3가지 위협 그룹
개발자와 함께 사용하는 간단한 모델은 3개의 그룹이 있습니다.
외부 공격자
이것은 사람들이 가장 먼저 생각하는 그룹입니다. SQL 인젝션, 훔친 API 토큰, 누출된 클라우드 자격 증명, 노출된 관리자 패널, 취약한 의존성. 공통된 주제는 데이터에 접근할 수 있는 외부 공격자입니다.
질문하기:
- 앱을 통해 데이터베이스를 간접적으로 조회할 수 있나요?
- 스톨린 서버 인증 정보가 여러 서비스가 필요로 하는 것보다 더 많은 서비스를 읽을 수 있나요?
- 복사한 스냅샷이 독립적으로 읽을 수 있나요?
내부 위협
이것은 악의적인 내부자와 권한이 너무 많은 잘못된 의도 없는 직원도 포함합니다. 지원 엔지니어가 티켓을 해결하기 위해 데이터를 내보내고, 계약자도 로컬 복사본을 유지합니다. 플랫폼 관리자는 생산 데이터를 읽을 수 있지만 그들의 직무에는 필요하지 않습니다.
이것을 도와주는 것은 직무 분리, 역할 기반 접근, 그리고敏感한 읽기 작업을 감시하는 감사 기록입니다.
만약 고객 기록에 접근한 사람, 접근한 시간, 접근이 허용된 이유를 알 수 없다면, 데이터베이스 제어는 더 약하다고 보입니다.
실수로 노출
이것은 빠르게 움직이는 팀에서 가장 일반적인 범주입니다. 미설정된 저장소 버킷. 스테이징 환경에 라이브 데이터를 넣어두기. 토큰이나 개인 정보가 포함된 디버그 로그. 복원된 백업을 낮은 보안 환경에서 디버깅을 위해 넣어두기.
실수로 노출이 왜 강력한 저장소 보안이 운영에 필요한 이유입니다. 단 하나의 설정으로 해결할 수 없습니다. 데이터 분류, 경계선, 검토, 정기적인 청소로 해결할 수 있습니다.
데이터베이스 보안의 핵심 원리
침입은 한 번의 극적인 실패에서 거의 오지 않는다. 보통은 일상적인 실수들의 연쇄에서 오는 것이다. 백업은 잘못된 계정에 복사된다. 서비스는 더 이상 필요하지 않은 권한을 더 많이 갖게 된다. 오래된 키는 몇 달 동안 활성화된 채로 남아 있는다. 왜냐하면 키 회전이 연기되었기 때문이다. 안전한 데이터베이스 저장은 여러 지점에서 이 연쇄를 끊고, 시스템이 변할 때도 계속해서 끊어야 한다.
나는 작업을 네 가지 기둥으로 분류한다: 암호화, 접근 제어, 감사, 최소화. 백업과 복구도 중요하지만, 그들은 독립적인 운영 처리를 deserve한다. 복원된 데이터는 종종 새로운 노출 경로가 되기 때문이다. 만약 nobody가 데이터가 어디로 이동되었는지, 누구든지 데이터를 읽을 수 있는지, 어떤 키가 데이터를 해독할 수 있는지 테스트하지 않는다면.

암호화는 훼손된 데이터의 가치를 줄인다.
암호화는 시간을 벌고 영향을 줄인다. 만약 누군가 디스크 스냅샷, 원본 백업 파일, 또는 내부 네트워크에서 트래픽을 가져왔다면, 암호화된 데이터는 고객 기록으로 변환하기가 훨씬 더 어렵다.
암호화는 데이터베이스 파일, 스냅샷, 백업 아티팩트를 안전하게 보호한다. 전송 중에는 TLS가 애플리케이션 서버, 프록시, 데이터베이스 엔진 간의 연결을 보호한다. NIST는 SP 800-111과 관련된 데이터-at-rest 권장 사항에서 암호화 및 전송 보호를 다루고 있다. SP 800-111과 관련된 데이터-at-rest 권장 사항에서.
운영상의 트레이드 오프는 이론적인 것과 다릅니다. 암호화는 키 관리가 데이터 경로와 분리되어 유지되는 경우에만 도움이 됩니다.velope 암호화는 건물의 주 키와 잠긴 사무실 키와 같이 작동합니다. 키 관리 서비스는 주 키를 보호하고 그 주 키는 실제 레코드 또는 파일에 사용되는 임시 데이터 키를 암호화합니다. 이 설계는 회전 중 노출을 제한하고 키 재생산을 위해 모든 것을 다시 작성하지 않고 키 재발급 또는 대체를 쉽게 만듭니다.
팀이 암호화를 활성화하고 그만둔 경우 문제가 생깁니다. 키가 어디에 있는지, 누구가 키를 사용할 수 있는지, 키 회전이 예약되어 있는지, 그리고 잊어버린 키 버전이 여전히 이전 백업에 의존하는지 확인해야 합니다.
접근 제어는 폭파 반경을 제한합니다.
권한은 조직 차트와 다르게 애플리케이션 경계를 따라야 합니다.
체크아웃 API에 대한 데이터베이스 역할은 급여 데이터를 읽을 수 없습니다. 배경 작업자는 초기 마이그레이션 시 편리했기 때문에 스키마 변경 권한이 없습니다. 지원 도구는 필터링된 뷰 또는 승인된 절차를 사용하여 넓은 테이블 접근 대신 사용해야 합니다.
실용적인 모델은 다음과 같습니다.
- 웹 애플리케이션 역할: 사용자 요청에 대한 테이블 뒤의 읽기 및 쓰기 권한이 제한됩니다.
- 작업자 역할: 작업자가 실행하는 작업을 위한 레코드에 대한 접근 권한이 있습니다.
- 분석 역할: 수집된 데이터 세트에 직접 식별자가 제거된 경우 읽기 전용 접근 권한이 있습니다.
- 비상 관리자 역할: 단기 승인된 접근 권한과 강력한 로깅 및 검토와 함께.
이 기둥은 데이터 변형과 pair 될 때 더 강해집니다. 팀이 작업을 수행할 수 있는 마스크드 또는 데이터가 줄어든 버전을 제공하는 대신, 전체 생산 값을 제공하는 대신에. 의료 정보(Health Information)의 PHI(개인 건강 정보)를 비식별화하는 경우 유용한 접근과 불필요한 노출의 차이입니다.
데이터베이스에 대한 비밀은 동일한 discipline을 deserve합니다. CI 로그, 모바일 빌드, 또는 지원 스크립트에 머신 자격 증명을 퍼뜨리는 팀이 저장소 제어를 강화하지만 여전히 공격 경로를 넓게 남긴다면, 여전히 공격 경로를 남깁니다. 모바일 앱과 백엔드 서비스가 신뢰 경계를 공유할 때, 특히 __CAPGO_KEEP_0__ 키 보안을 위한 앱 스토어 준수에 대한 앱 스토어 준수. API key security for app store compliance검증할 수 없는 정책은 단순히 희망입니다.
사고 시에 중요 한 질문에 대한 답을 제공하는 감사 기록입니다. 어떤 식별자가 레코드를 읽었는지. 어떤 역할이 권한을 변경했는지. 어떤 수출 작업이 데이터를 내보냈는지. 어떤 키가 암호화 된 아카이브를 해독했는지. 또한 느린 드리프트를 드러냅니다. 예를 들어, 서비스 계정은 이전에 필요하지 않았던 테이블에 접근하기 시작했습니다.
사용 가능한 감사 범위는 일반적으로 다음과 같습니다.
__CAPGO_KEEP_0__
__CAPGO_KEEP_0__
- 인증 활동: 성공 로그인, 실패 로그인, 토큰 사용, 관리 세션.
- 권한 변경: 권한 부여, 권한 취소, 역할 생성, 정책 편집, 스키마 변경.
- Sensitive 접근 패턴: 대량 읽기, 큰 데이터 내보내기, 비정상적인 쿼리 경로, 예상 시간이나 네트워크 외부 접근.
- 키 관리 이벤트: 키 생성, 키 회전, 암호화 실패 시도, 비활성화된 버전, KMS 또는 비밀 저장소의 정책 변경.
로그 보관은 중요합니다. 또한 검토도 중요합니다. 만약 로그가 만료되기 전에誰도 조사하지 못한다면, 또는誰도 권한 변경을 조사하지 않는다면, 감사 시스템은 이론적으로만 존재합니다.
implementation 세부 사항이 너무 추상해지기 전에 좋은 설명서입니다:
Sensitive 데이터를 잘 수호할 수 없는 곳에 데이터를 최소화합니다.
데이터를 최소화하는 것은 많은 팀이 최소한의 엔지니어링 노력으로 가장 큰 보안 이익을 얻는 곳입니다.
더 적게 저장하고, 더 적게 보관하고, 더 적게 복사하세요. 만약 특정 기능이 연령대만 필요하다면, 생년월일을 전부 저장하지 마세요. 만약 지원이 마지막 네 자리만 필요한 식별자라면, 전부 노출하지 마세요. 만약 테스트 환경이 실제 개인 데이터가 필요하지 않다면, 생산 백업을 복원하지 마세요.
이것도 운영 방식입니다. 보관 기간이 필요한 경우, 강제로 지키세요. 오래된 데이터를 삭제하세요. 다운스트림 시스템을 검토하세요. sensitive field가 검색 인덱스, 캐시, 데이터 레이크, 모바일 저장소, ad hoc CSV 파일에 복제될 때마다 위험성이 증가합니다. Capacitor 앱의 경우 capgo/capacitor-data-storage-sqlite 그리고 capgo/capacitor-fast-sql 암호화된 앱 내부 저장소를 제공할 수 있지만, 여전히 저장하지 말아야 할 데이터를 결정해야 합니다.
이러한 기둥의 목적은 첫 번째 날에 완벽함이 아닌, 키 회전, 직원 변경, 사고 대응, 백업 복원, 제품 성장과 같은 상황에서도 저장 시스템이 방어할 수 있는지 여부입니다. 보안 데이터베이스 저장이 성공하거나 실패하는 지점입니다.
암호화 구현 방법
모든 시스템에 적합한 암호화 패턴은 없습니다. 올바른 선택은 무엇을 보호하고, 누구에게 쿼리할 수 있는지, 팀이 지원할 수 있는 복잡도에 따라 달라집니다. 실수는 가장 강력한 sounding 패턴을 선택하고 나서 나쁜 방식으로 구현하는 것입니다.

TDE은 가장 빠른 기본선입니다.
Transparent Data Encryption, 또는 TDE은 일반적으로 가장 쉬운 곳에서 시작합니다. 데이터베이스 엔진은 디스크에 파일을 암호화하고 엔진이 메모리에 읽어 들이면 암호화된 파일을 해독합니다. 애플리케이션은 일반적으로 code 변경이 필요하지 않습니다.
다음과 같은 강력한 기본선입니다:
- 전체 데이터베이스 보호
- 저장소 수준의 준수 요구 사항
- 스냅샷, 디스크, 또는 원시 파일 접근으로부터의 위험을 줄입니다.
TDE은 모든 것을 보호하지 않습니다. 공격자가 유효한 데이터베이스 접근 권한을 얻으면 엔진은 여전히 해독된 데이터를 제공합니다. 따라서 TDE은 저장소 위반이 아닌 유효한 자격증명을 남용하는 것을 방지합니다.
애플리케이션 수준 암호화는 가장 중요한 field를 보호합니다.
애플리케이션 수준 암호화는 데이터가 데이터베이스에 도달하기 전에 발생합니다. code가 선택한 field를 암호화한 후, ciphertext를 저장소에 기록합니다. 특히 sensitive한 열(예: 정부 ID, 은행 정보, 복구 비밀, 개인 노트)과 같은 경우 잘 작동합니다.
그것은 추가 제어와 함께 무역을합니다:
- __CAPGO_KEEP_0__ __CAPGO_KEEP_1__
- __CAPGO_KEEP_2__ __CAPGO_KEEP_3__
- __CAPGO_KEEP_4__ __CAPGO_KEEP_5__
__CAPGO_KEEP_6__
| __CAPGO_KEEP_7__ | __CAPGO_KEEP_8__ |
|---|---|
| 1 | __CAPGO_KEEP_9__ |
| 2 | __CAPGO_KEEP_10__ |
| 3 | __CAPGO_KEEP_11__ |
| 4 | 데이터베이스에 암호문과 메타데이터를 저장하십시오. |
| 5 | 만약 읽기 경로가 승인된 경우에만 암호문을 해독하십시오. |
지역 앱의 지속성을 위해, 동일한 설계 문제가 적용됩니다. 만약 장치에 오프라인 토큰이나 sensitive 동기화 상태를 저장한다면, 기본적으로 모바일 저장소가 안전하다고 가정하지 마십시오. 플랫폼에 대한 지식이 있는 패턴을 사용하십시오. 예를 들어 __CAPGO_KEEP_0__에서 offline 토큰에 대한 안전한 저장소에 대해 논의된 것과 같은 것들. secure storage for offline tokens in Capacitor.
Envelope 암호화는 두려운 것처럼 들리지만, 아이디어는 간단합니다. 데이터를 하나의 키로 암호화한 다음, 그 키를 다른 키로 암호화합니다. 그 키는 더 안전한 키로 보호됩니다.
문서를 작은 안전한 곳에 잠그고, 그 작은 안전한 곳의 키를 은행 금고에 잠그는 것과 같습니다. 만약 someone이 문서 저장층을 훔친다면, 그들은 여전히 더 높은 보호 수준의 금고 키에 접근해야 합니다. 그 금고 키를 열 수 있는 것은 아니기 때문입니다.
일반적인 흐름:
데이터 키를 생성하십시오.
- 해당 레코드, 파일, 또는 batch에 대한 데이터 키를 생성하십시오. 데이터를 암호화하십시오.
- 그 데이터 키로 데이터를 암호화하십시오. __CAPGO_KEEP_0__
- 데이터 키를 Wrap KMS 또는 HSM에서 Master Key를 사용하여
- 기록 또는 객체와 함께 ciphertext plus wrapped key metadata를 저장 인증된 읽기 중에만 unwrap
- Field 조언:.
장기적으로 Master Key를 모든 애플리케이션 서버에 노출하지 않고 강력한 격리화를 필요로 할 때 Envelope Encryption을 사용하세요. 이 패턴은 성능과 제어를 균형있게 유지하는 것이 일반적입니다. 애플리케이션은 실제 암호화 작업에 짧은 수명 데이터 키를 사용하며, KMS 또는 HSM은 Wrap 및 Unwrap을 위해 사용하는 Master Key를 보호합니다.
암호화 패턴 비교
패턴
| implementation 복잡도 | 성능 영향 | Performance Impact | 최고 추천 |
|---|---|---|---|
| 디스크 또는 볼륨 암호화 | 낮음 | 낮음 | 서버 및 연결된 스토리지에 대한 인프라 수준 보호 |
| 투명한 데이터 암호화 | 낮음에서 중간 | 낮음에서 중간 | 최소한의 앱 변경으로 전체 데이터베이스 보호 |
| 애플리케이션 수준 암호화 | 중간에서 높음 | 필드 사용 및 쿼리 디자인에 따라 다름 | 높은 민감도 컬럼과 엄격한 분리 필요성 |
| 봉투 암호화 | 중간에서 높은 | 중간 | 강한 키 분리 및 확장 가능한 키 관리가 필요한 시스템 |
실용적인 규칙은 간단합니다. 강력한 기본선인 TDE 또는 관리 중인 암호화에서 시작하고, 데이터 민감도 및 위협 모델이 추가 엔지니어링을 정당화하는 경우에만 field-level 또는 envelope encryption을 추가하세요.
키 및 비밀 관리
침입은 일반적인 비밀 처리 실수로 시작합니다. 프로덕션 데이터베이스가 암호화되어 있고 백업이 존재하고, 접근 권한이 종이 상에서 제어되는 것처럼 보입니다. 그런 다음 CI 작업이 로그에 토큰을 출력하거나 엔지니어가 지원 스크립트를 위해 관리자 자격 증명을 재사용하거나 오래된 키가 팀이 생성한 팀이 떠난 후에도 활성화된 채로 남아 있습니다.
이는 키 및 비밀 관리가 운영 실천이 아닌 설정 작업이 아니라는 것을 의미합니다.
잘못 관리된 키로 암호화된 데이터베이스는 서버 룸에 열쇠가 달린 문과 같습니다. 정부 지침도 같은 점을 강조합니다. 암호화만으로는 KMS 또는 HSM 기반 키 관리, 최소 권한 접근, 복구 계획을 생략하는 팀이 존재하는 경우 gap을 닫을 수 없습니다. NSA와 파트너의 클라우드 데이터 보안 지침.
팀이 이것을 잘못하는 곳
사고 리뷰에서 익숙한 패턴은 다음과 같습니다:
- code 소스코드 내의 비밀: 직접 입력한 인증 정보, 임베디드 인증서 또는 시간이 지남에 따라 프로덕션 의존성으로 변하는 유틸리티 스크립트.
- 복사한 설정 파일 내의 비밀: 노트북 간에 파일을 전달하거나 공유 폴더에 저장하거나 급히 고쳐야 하는 경우에 파일을 커밋하는 경우.
- 강제 권한 제어가 약한 환경 변수: 편리하지만, 빌드 로그, 셸 히스토리, 크래시 리포트 또는 광범위한 런타임 권한을 통해 노출되는 경우.
- 회전에 대한 소유권이 없습니다: 키가 몇 년 동안 존재하는 이유는 팀이 재발급, 배포, 롤백 계획을 소유하지 않기 때문입니다.
- 고급 권한의 공유 비밀: 응용 프로그램, 엔지니어, 자동화에 의해 사용되는 하나의 인증 정보로, 감사 및 제한이 훨씬 더 어려워집니다.
앱 및 인프라 비밀을 저장하는 방법에 대한 실용적인 참고 자료를 표준화하는 경우 보안 환경 변수 팀이 임의의 비밀 정보 분산에서 벗어나도록 도울 수 있습니다.
좋은 키 관리 방법
중앙 집중식 정책, 접근 제어, 감사 로그, 예약된 회전이 사용자 정의 하드웨어 제어보다 더 중요할 때 사용하는 KMS 중앙 집중식 정책, 접근 제어, 감사 로그, 예약된 회전이 사용자 정의 하드웨어 제어보다 더 중요할 때 사용하는 KMS 위험, 규정 준수 요구 사항, 서명 및 키 보호 규칙이 전용 하드웨어 경계를 정당화할 때 사용하는
HSM
위험, 규정 준수 요구 사항, 서명 및 키 보호 규칙이 전용 하드웨어 경계를 정당화할 때 사용하는
- HSM 대다수의 팀은 HSM을 어디서나 사용할 필요가 없습니다. 그들은 시스템이 암호 해독 작업을 요청할 수 있는 규칙, 인간이 정책을 변경할 수 있는 규칙, 그리고 이러한 작업이 검토되는 방법에 대한 명확한 규칙이 필요합니다.
- 업무 분리: 고객 데이터를 읽는 서비스는 키 정책 변경이나 로깅을 비활성화할 수 없어야 합니다.
- _sensitive key event_ 로깅: 키 생성, 회전, 암호화 요청, 접근 실패, 정책 변경 등 모든 이벤트가 표시되어야 합니다.
- 재 암호화 경로 테스트: wrapping key 회전은 일반적으로 애플리케이션 데이터 재 암호화보다 쉽지만, 둘 다 롤백 단계와 재 암호화 경로가 필요합니다.
- 기존 비밀번호를 의도적으로 비활성화하고 폐기: 이전 인증서를 제거하여 quiet backdoor가 될 수 있도록 하지 마십시오. 시간을 두고 이전 인증서를 제거하여 quiet backdoor가 될 수 있도록 하지 마십시오.
CI/CD는 프로덕션 런타임과 동일한 discipline을 deserves합니다. 빌드 시스템은 넓은 접근 권한과 약한 가시성을 가지고 있기 때문에 비밀누출의 일반적인 장소입니다. 이에 대해 진지하게 생각하는 팀은 CI/CD pipeline에서 비밀을 formalize합니다. CI/CD pipeline에서 비밀 관리 대신 pipeline 인증서를 임시 예외로 처리하지 마십시오. 하나의 규칙은 간단합니다. 애플리케이션은 __CAPGO_KEEP_0__에 의존하여 신뢰할 수 있는 시스템에서 암호화 연산을 요청해야 하며, 환경 내에서 raw master key를 가지고 다니지 않아야 합니다.
One rule is simple. Application code should request cryptographic operations from trusted systems, not carry raw master keys around the environment.
__CAPGO_KEEP_0__
__CAPGO_KEEP_0__
__CAPGO_KEEP_0__
__CAPGO_KEEP_0__ __CAPGO_KEEP_0__.
__CAPGO_KEEP_0__
__CAPGO_KEEP_0__
- __CAPGO_KEEP_0__
- __CAPGO_KEEP_0__
- __CAPGO_KEEP_0__
- __CAPGO_KEEP_0__
__CAPGO_KEEP_0__
실제 제어는 테스트 복원입니다.
테스트되지 않은 백업은 단순히 희망적인 저장소입니다.
복원에 잘 대처하는 팀은 단순히 백업 작업이 완료되었는지 확인하는 것만으로는 충분하지 않습니다. 그들은 복원 작업이 작동하는지, 복원된 데이터가 사용할 수 있는지, 필요할 때 암호화 키, 연결 설정 및 종속 서비스가 모두 일치하는지 증명합니다.
실용적인 복원 프로그램에는 다음과 같은 요소가 포함됩니다.
- 정기적인 복원 연습 분리된 환경으로.
- 데이터베이스 복원 후 애플리케이션 기능 확인 파일 복원만 확인하는 것이 아니라.
- 암호화된 백업이 복원될 수 있는지 확인하는 키 확인 복원된 시스템에 대한 접근 검토
- 사고 시敏감데이터가 널리 공개되지 않도록 방지합니다. to prevent sensitive data from becoming broadly visible during an incident.
백업은 당신을 구하지 않습니다. 성공적인 복원은 당신을 구합니다.
만약 백업 생성만 테스트하고 실제로 복원 테스트를 하지 않는다면, 당신은 회복 전략을 검증하지 않았습니다. 파일이 누군가의 장소에 쌓일 수 있다는 것을 검증했습니다.
보안 데이터베이스 저장소에 대한 개발자 체크리스트
이 체크리스트는 디자인 리뷰, 릴리즈 리뷰, 그리고 사후 인시던트 클린업 중에 팀이 사용하고 싶은 체크리스트입니다.

설계
- _sensitive field_을 명확하게 식별했습니까?: 개인 데이터, 인증 자료, 금융 기록, 그리고 보존 규칙에 따라야 하는 모든 것
- 저장하지 말아야 하는 field를 결정했습니까?: 기능이 필요하지 않은 field, 그리고 다운스트림 팀이 피할 수 있는 복사본
- 데이터가 어디에 살 것인지 매핑했습니까?: 생산, 스테이징, 로그, 수출, 분석 시스템, 백업, 그리고 클라이언트 장치
구현
- 데이터는 저장 중 및 전송 중 암호화되어 있는가: 데이터베이스, 복제본 및 백업 경로에 대해
- 응용 프로그램 및 서비스 역할은 엄격하게 범위가 지정되어 있는가: 일반 앱 트래픽에 대한 공유 슈퍼 사용자 없음.
- 비밀 키 및 암호화 키는 code와 느슨한 구성 외부에서 처리되는가: 통제된 접근 및 감사 가능성.
- 敏감적 접근 및 특권 변경을 로깅하는가: 중앙 위치에서 수사할 수 있는 곳.
운영
- 키 회전 및 비밀 검토는 정상적인 운영의 일부인가: 연간 대란이 아닌.
- DB 저장소 보안을 위한 테스트는 정기적으로 진행되나요? 복구 시스템에서 암호화, 애플리케이션 시작, 접근 검토를 포함하여
- 데이터 스푸로우를 지속적으로 감사합니다. 개발 데이터 세트, 지원 수출, 스테이징 복사본, 잊혀진 백업 위치
좋은 보안 DB 저장소는 프로젝트 단계가 아닙니다. 그것은 반복적인 실천입니다.
자주 묻는 질문
클라우드 제공업체의 기본 암호화가 충분하나요?
그것은 강력한 기본선이지만 완전한 전략이 아닙니다. 기본 암호화는 저장 매체와 관리 서비스를 보호하지만, 권한이 과도한 접근, 복사된 데이터 세트, 약한 백업 제어, 나쁜 키 관리와 같은 문제를 해결하지 않습니다.
암호화가 DB 성능에 영향을 미치나요?
일부 경우에 yes. 패턴에 따라 영향이 달라집니다. 인프라스트럭처 및 DB 레벨 암호화는 일반적으로 애플리케이션 복잡성을 줄입니다. field-level 암호화는 선택된 데이터에 대한 강력한 제어를 제공하지만, 인덱싱, 필터링, 검색을 복잡하게 할 수 있습니다. 작업 부하에 대한 측정치를 취한 후 광범위한 배포를 진행하세요.
이것은 SQL 및 NoSQL 시스템에 대해 다릅니다.
원칙은 동일합니다. 암호화, 최소 권한, 감사, 키 관리, 테스트된 복구가 필요합니다. 구현 세부 사항은 문서 저장소, 키-값 저장소, 관계형 시스템이 다른 접근 모델 및 쿼리 동작을 노출하기 때문에 다릅니다.
토큰화와 암호화의 차이점은 무엇인가요?
암호화는 권한이 있는 시스템이 올바른 키로 암호를 해독할 수 있도록 데이터를 변환합니다. 토큰화는敏感한 값을 대체값으로 대체하고 원본 데이터를 분리합니다. 토큰화는 앱 워크플로우에서 노출을 줄일 수 있지만 시스템 설계 복잡성을 추가하고 강력한 저장 제어가 필요하지 않습니다.
Capgo은 Capacitor 및 Electron 앱에 빠르게 수정을 배포하는 데 도움이 됩니다. signed web bundle delivery, rollout controls, rollback protection, 및 release observability가 포함됩니다. Storage, auth, 또는 API 오류로 인한 사고 대응 계획이 클라이언트 측 수정을 빠르게 배포하는 데 의존한다면 Capgo을 평가하는 것이 가치가 있습니다. Capgo __CAPGO_KEEP_0__