밤늦게 릴리즈를 밀어내고 알림을 훑어보면, 개인 레포에 절대 나가지 shouldn't never한 자격증을 발견할 수 있습니다. 그럴 수 있는 이유는 데이터베이스 패스워드였거나, 더 넓은 권한을 가진 클라우드 접근 키였습니다. 그쪽으로 문제는 단지 누군가가 로그인할 수 있는 문제가 아니라, 데이터베이스 보안이 여전히 로그인 문제로 다루어지고 있기 때문입니다. 실제 시스템에서 나타나는 문제입니다. 팀은 암호화를 한번만 활성화하고, 그들이 끝났다고 가정합니다. 백업을 유지하지만 복원 테스트를 하지 않습니다. 편의를 위해 관리자 서비스 계정을 만들고, 그것이 존재하는 것을 잊습니다. 프로덕션을 잠그고, 스테이징에 복사된 고객 데이터가 가득 찬 채로 남겨둡니다. 모바일 또는 웹 앱을 구축하고 있다면, 보안 데이터베이스 저장소는 모든 것을 다 커버해야 합니다: 주 데이터베이스, 복제본, 수출물, 로그, 백업, 및 모든 것을 제어하는 키.
__CAPGO_KEEP_0__
If you’re also working through auth for your next app, remember that authentication and storage security solve different failure modes. Auth decides who should get in. Storage security limits damage when someone does, or when data leaks through a path you didn’t expect. For teams shipping customer-facing apps, it’s also worth aligning storage decisions with adjacent controls like API security standards for app store compliance.
Data production scale is rapidly increasing. Global data production reached 64.2 zettabytes in 2020 and was projected to climb to 180 zettabytes by 2025 according to Edge Delta’s data storage summary . At that scale, secure storage stops being a hardening task and becomes architecture.Table of Contents
데이터베이스 보안은 단순히 비밀번호만으로는 충분하지 않다
- 보안이 실패하는 조용한 경로들
- 데이터베이스 위협 모델을 이해하라
- 안전한 데이터베이스 저장의 핵심 원리
- 실제 암호화 구현 패턴
- __CAPGO_KEEP_2__ 키와 비밀 관리
- 복원 가능한 백업 및 복구 전략 설계
- 데이터베이스 보안 저장에 대한 개발자 체크리스트
- 자주 묻는 질문
데이터베이스 보안은 단순한 비밀번호만으로 충분하지 않아요
비밀번호는 입구를 보호하지만 데이터가 인증 정보가 유출되거나 스냅샷이 복사되거나 내부 서비스가 표준이 아닌 테이블을 읽을 때 데이터를 보호하지 않아요. 따라서 안전한 데이터베이스 저장은 층을 쌓아야 해요.
기존의 정신 모델은 단순했습니다: 데이터베이스를 방화벽 뒤에 두고 강력한 비밀번호를 요구하고 외부로부터 멀리 떨어뜨렸습니다. 그러나 클라우드 시스템, 모바일 백엔드 및 현대적인 CI/CD PIPELINE에서 이 모델은 깨집니다. 데이터는 서비스 간에 이동합니다. 엔지니어는 임시 수출을 생성합니다. 분석 작업은 복제본을 생성합니다. 백업 시스템은 다른 인프라에서 복사본을 저장합니다. 공격자는 데이터베이스 엔진을 깨트리기만 하면 됩니다. 만약 키를 훔치거나 API 토큰을 남용하거나 더 약한 제어를 가진 복제본을 찾을 수 있다면.
보안은 조용한 경로에서 실패합니다
가장 손상이 되는 저장소 실패는 처음에는 드라마틱하지 않습니다. 보통 보입니다.
- 개발자 편의성이 프로덕션 위험으로 변합니다: 공유된 관리자 인증 정보가 스크립트에 의해 재사용되는데, 이는 회전하면 배포가 깨질 것을 고려하여,
- A 복사된 데이터가 통제를 벗어난다: 생산 기록이 스테이징으로 복제되어 QA가 버그를 재현할 수 있다.
- 백업이 약점이 된다: 생산에는 강력한 제어가 있지만 복원 버킷 또는 스냅샷 정책이 없다.
실용적인 규칙: 만약 공격자가 읽을 수 있는 데이터와 하나의 자격증만이 사이에 있다면, 보안 저장소가 아니라 단일 실패 지점을 가지고 있다.
공격자가 자격증을 남용할 때 방어가 살아남아야 한다.
마이크로소프트의 클라우드 지침은 전송 중인 암호화, 휴지기 권한 제어 및 비인가 활동에 대한 모니터링을 포함하는 클라우드 데이터 보안 최적화 방안을 권장한다. 실제 사고는 종종 유효한 접근 권한을 잘못 사용한 경우에 시작된다.실제로 작동하는 것은 단조롭고 일관적이다. 데이터베이스 파일을 암호화하라. 연결을 암호화하라. 서비스 역할을 분리하라. 관리자 접근 권한을 제거하라. sensitive한 연산을 로그하라. 비정상적인 사용 패턴에 대한 경고를 설정하라. 그 중 하나도 이쁘지 않지만 실제 침해를 막는다.
실용적인 방법으로 생각하는 것은 물리적 금고와 같다. 금고 문이 중요하다. 같은 경우에 격리 장치, 카메라 footage, 방문자 로그, box를 열 수 있는 사람에 대한 정책도 중요하다. 보안 데이터 저장소도 마찬가지다. 패스워드는 단지 앞문이다.
__CAPGO_KEEP_0__
__CAPGO_KEEP_0__
__CAPGO_KEEP_1__

__CAPGO_KEEP_3__ __CAPGO_KEEP_4____CAPGO_KEEP_5__ __CAPGO_KEEP_6____CAPGO_KEEP_7__
__CAPGO_KEEP_8__
__CAPGO_KEEP_9__
__CAPGO_KEEP_10__
- __CAPGO_KEEP_11__ 예를 들어 프로필, 주문 내역, 결제 관련 메타데이터, 또는 건강 관련 콘텐츠와 같은 것.
- 인증 자료 예를 들어 비밀번호 해시, 세션 기록, 갱신 토큰, 또는 API 비밀 정보.
- 운영 데이터 예를 들어 감사 로그, 작업 큐, 관리자 노트, 지원 수출과 같은 것.
- 복구 자산 예를 들어 스냅샷, 논리적 덤프, 특정 시점 로그, 암호화 키와 같은 것.
그 마지막 항목은 팀이 생각하는 것보다 더 중요합니다. 공격자가 백업을 삭제하거나 복호화 키에 접근할 수 있다면, 복구 스토리가 붕괴됩니다.
가장 중요한 위협 그룹 세 가지
개발자와 함께 사용하는 간단한 모델을 사용하여 세 그룹을 정의합니다.
외부 공격자
이것은 사람들이 가장 먼저 생각하는 그룹입니다. SQL 인젝션, API 토큰의 도난, 누출된 클라우드 자격 증명, 노출된 관리자 패널, 취약한 의존성. 공통된 주제는 데이터에 접근할 수 있는 외부자입니다.
질문할 것들:
- 어플리케이션을 통해 데이터베이스를 간접적으로 조회할 수 있나요?
- 스톨린 서버 인증 정보가 여러 서비스가 필요로 하는 것보다 더 많은 서비스를 읽을 수 있나요?
- 복사한 스냅샷이 독립적으로 읽을 수 있나요?
내부 위협
이것은 악의적인 내부자와 권한이 너무 많은 잘못된 의도 없는 직원도 포함합니다. 지원 엔지니어는 티켓을 해결하기 위해 데이터를 내보냅니다. 컨트랙터는 로컬 복사본을 유지합니다. 플랫폼 관리자는 생산 라인에 접근할 수 있지만 그들의 직무에는 필요하지 않습니다.
이것을 도와주는 것은 직무 분리, 역할 기반 접근, 감사 트레일이敏감도 읽기를 가시화하는 것입니다.
만약 고객 기록에 접근한 사람, 언제 접근했는지, 그 접근이 허용된 이유를 알 수 없다면, 데이터베이스 제어는 더 강력하게 보이지만 실제로는 약합니다.
부주의 노출
이것은 빠르게 움직이는 팀에서 가장 일반적인 범주입니다. 미설정된 저장소 버킷. 스테이징 환경에 라이브 데이터를 시드합니다. 토큰이나 개인 정보가 포함된 디버그 로그. 복원된 백업을 낮은 보안 환경에서 디버깅을 위해 배치합니다.
부주의 노출이为什么 강력한 저장소 보안이 운영에 있어야 하는 이유입니다. 단일 설정으로 해결하지 않습니다. 데이터 분류, 가드레일, 검토, 정기적인 청소로 해결합니다.
데이터베이스 저장소의 핵심 보안 기둥
A breach rarely comes from one dramatic failure. It usually comes from a chain of ordinary mistakes. A backup is copied to the wrong account. A service gets broader permissions than it needs. An old key stays active for months because rotation kept getting postponed. Secure database storage has to interrupt that chain at several points, and keep doing it as the system changes.
나는 작업을 네 개의 기둥으로 분류합니다: 암호화, 접근 제어, 감사, 최소화. 백업과 복원도 중요하지만, 복원된 데이터가 새로운 취약점이 될 수 있기 때문에 운영 처리에 별도의 처리가 필요합니다.

데이터가 훼손되더라도 암호화는 데이터의 가치를 줄입니다.
암호화는 시간을 벌고 영향을 줄입니다. someone이 disk snapshot, raw backup file, 또는 internal network에서 traffic을 가져오더라도 암호화된 데이터는 고객 기록으로 변환하기가 훨씬 더 어렵습니다.
암호화된 데이터는 디스크에 저장되었을 때 데이터베이스 파일, 스냅샷, 백업 아티팩트를 보호하고, 애플리케이션 서버, 프록시, 데이터베이스 엔진 간의 연결을 보호하는 TLS는 데이터가 전송 중일 때 보호합니다. NIST는 스토리지 암호화 및 전송 보호에 대한 지침을 SP 800-111 및 관련 데이터-아트-레스트 권장 사항에서 다룹니다. SP 800-111과 관련된 데이터-아트-레스트 권장 사항에서 다룹니다..
실질적인 운영과 이론적인 운영의 차이입니다. 암호화는 데이터 경로와 시간이 지남에 따라 유지되는 키 관리가 분리되어야만 도움이 됩니다.velope 암호화는 건물 주인 키와 잠금된 사무실 키와 같이 작동합니다. 키 관리 서비스는 주 키를 보호하고, 그 주 키는 실제 레코드 또는 파일을 위한 짧은 수명 데이터 키를 암호화합니다. 그 설계는 회전 중 노출을 제한하고, 키 자료를 취소하거나 대체하는 것을 쉽게 만듭니다.
__CAPGO_KEEP_0__ 체크아웃을 위한 데이터베이스 역할은 급여 데이터를 읽을 수 없어야 합니다. 배경 작업자는 초기 마이그레이션 시 편리했기 때문에 스키마 변경 권한이 있어서는 안 됩니다. 지원 도구는 필터링된 뷰 또는 승인된 절차를 사용하여 넓은 테이블 접근 대신 사용해야 합니다.
접근 제어는 폭발 반경을 제한합니다.
권한은 조직 차트에 따라서야하지요. 애플리케이션 경계를 따라야 합니다.
체크아웃 API을 위한 데이터베이스 역할은 급여 데이터를 읽을 수 없어야 합니다. 배경 작업자는 초기 마이그레이션 시 편리했기 때문에 스키마 변경 권한이 있어서는 안 됩니다. 지원 도구는 필터링된 뷰 또는 승인된 절차를 사용하여 넓은 테이블 접근 대신 사용해야 합니다.
실질적인 모델은 다음과 같습니다.
- 웹 앱 역할: 사용자 요청을 뒤에 있는 테이블에 대한 제한된 읽기 및 쓰기 접근 권한.
- 작업자 역할: 작업자가 실행하는 작업을 위한 레코드에 대한 접근 권한.
- 분석 역할: 편집된 데이터 세트에 대한 읽기 전용 접근 권한. 가능한 경우 직접 식별자를 제거합니다.
- 관리자 권한: 단기 승인된 접근 권한과 강력한 로깅 및 검토.
데이터 변환과 함께 pair하면 이 기둥이 더 강해집니다. 팀이 마스크된 데이터 또는 축소된 데이터로 작업할 수 있다면, 그 버전을 사용하는 것이 전체 프로덕션 값 대신에 더 좋습니다. 규제된 건강 데이터의 경우 PHI의 비식별화 유용한 접근과 불필요한 노출의 차이입니다.
데이터베이스 주변의 비밀은 동일한 discipline을 deserve합니다. 저장소 제어를 강화하는 팀이 CI 로그, 모바일 빌드, 또는 지원 스크립트에 머신 자격 증명을 퍼뜨리면 여전히 공격 경로가 넓습니다. 동일한 운영 습관이 모바일 앱과 백엔드 서비스의 신뢰 경계를 공유할 때도 적용됩니다. API 키 보안을 위한 앱 스토어 준수, 특히 모바일 앱과 백엔드 서비스가 신뢰 경계를 공유할 때.
감사 결과가 제어의 실제 여부를 보여줍니다.
검증할 수 없는 정책은 단순히 희망입니다.
감사 기록은 사건 중 발생하는 질문에 답합니다. 어떤 식별자가 레코드를 읽었는지. 어떤 역할이 권한을 변경했는지. 어떤 수출 작업이 데이터를 이동했는지. 어떤 키가 암호화된 아카이브를 해독했는지. 또한 느린 드리프트를 드러냅니다. 예를 들어, 서비스 계정은 이전에 필요하지 않았던 테이블에 접근하기 시작했습니다.
유용한 감사 범위는 일반적으로 다음을 포함합니다.
- __CAPGO_KEEP_0__: 로그인 성공, 로그인 실패, 토큰 사용 및 관리 세션.
- __CAPGO_KEEP_1__: 권한 부여 변경, 권한 취소, 역할 생성, 정책 편집 및 스키마 변경.
- __CAPGO_KEEP_2__: 敏감한 접근 패턴: bulk reads, large exports, unusual query paths, and access outside expected hours or source networks.
- __CAPGO_KEEP_3__: 키 관리 이벤트: 키 생성, 회전, 암호화 실패 시도, 비활성화된 버전 및 KMS 또는 비밀 저장소의 정책 변경.
__CAPGO_KEEP_4__:
로그가 만료되기 전에 anybody가 조사하지 못하거나, somebody가 권한 변경을 조사하지 않으면서 이미 침해가 발생한 경우, 감사 시스템은 이론적으로만 존재한다.
__CAPGO_KEEP_5__:
감사 시스템의 구현 세부 사항이 너무 추상적이 되기 전에 좋은 설명서가 필요하다: 민감한 데이터를 잘 수호할 수 없는 곳에서 제거하는 것이 중요하다. 민감한 데이터를 잘 수호할 수 없는 곳에서 제거하는 것이 중요하다. 이는 많은 팀이 최소한의 엔지니어링 노력으로 가장 큰 보안 승리를 얻는 곳이다.
더 적게 저장하고, 더 적게 보관하고, 더 적게 복사하세요. 만약 특정 기능이 연령대만 필요하다면, 생년월일을 모두 저장하지 마세요. 만약 지원이 마지막 네 자리만 필요한 식별자에만 관심이 있다면, 전체 field를 노출하지 마세요. 만약 테스트 환경이 실제 개인 데이터가 필요하지 않다면, 생산 백업을 복원하지 마세요. 그리고 임시라고 부르세요.
이것도 운영 방식입니다. 보존 일정은 강제되어야 합니다. 오래된 내보내기 작업은 삭제되어야 합니다. 다운스트림 시스템은 검토되어야 합니다. 왜냐하면_sensitive field가 검색 색인, 캐시, 데이터 호수, 모바일 저장소, ad hoc CSV 파일에 복제될 때마다 위험성이 증가하기 때문입니다. 예를 들어, Capgo의 SQLite 기반 저장소 플러그인인 Capacitor와 같은 도구는 앱 사이드 퍼시스턴스를 제공할 수 있지만, 여전히 결정해야 할 것은 무엇이 절대 로컬에 저장되지 않아야 하는지입니다.
이러한 기둥의 목적은 첫 번째 날에 완벽함이 아닌, 키 회전, 직원 변경, 사고 대응, 백업 복원, 제품 성장과 같은 상황에서도 보안 데이터베이스 저장이 성공하거나 실패하는지 여부를 확인하는 것입니다.
실제 암호화 패턴
모든 시스템에 적합한 암호화 패턴은 없습니다. 올바른 선택은 무엇을 보호하고, 누구에게 쿼리할 수 있고, 팀이 지원할 수 있는 복잡도에 따라 달라집니다. 실수는 가장 강력한 sounding 패턴을 선택하고 나서 나쁘게 구현하는 것입니다.

__CAPGO_KEEP_0__
Transparent Data Encryptioncode
__CAPGO_KEEP_0__
- __CAPGO_KEEP_0__
- __CAPGO_KEEP_0__
- __CAPGO_KEEP_0__
__CAPGO_KEEP_0__
__CAPGO_KEEP_0__
code
__CAPGO_KEEP_0__
- 복잡성이 더 많습니다: 키 선택, 암호화 라이브러리, 회전 동작 및 오류 처리.
- 쿼리하기가 어려워집니다: 정확한 매치, 부분 검색 및 색인화가 디자인 문제가 됩니다.
- 개발자는 discipline이 필요합니다: 이동 스크립트에서 단 하나의 단축키가 모델 전체를 무효화할 수 있습니다.
간단한 가짜 코드 패턴은 다음과 같습니다:
| 단계 | 작업 |
|---|---|
| 1 | 요청에서 플레인 텍스트 필드를 읽습니다. |
| 2 | 키 서비스에서 데이터 암호화 키를 요청하거나 wrapped local key를 사용합니다. |
| 3 | 응용 프로그램에서 필드를 암호화합니다. |
| 4 | __CAPGO_KEEP_0__에서 offline 토큰과 sensitive sync 상태를 저장하는 경우, mobile 저장소가 기본적으로 안전하다고 가정하지 마십시오. 플랫폼에 대한 패턴을 사용하십시오. 예를 들어, __CAPGO_KEEP_0__에서 discussed된 offline 토큰의 secure storage를 사용하십시오. |
| 5 | __CAPGO_KEEP_0__에서 discussed된 offline 토큰의 secure storage를 사용하십시오. |
__CAPGO_KEEP_0__에서 discussed된 offline 토큰의 secure storage를 사용하십시오. Capacitor에서 discussed된 offline 토큰의 secure storage를 사용하십시오..
__CAPGO_KEEP_0__에서 discussed된 offline 토큰의 secure storage를 사용하십시오.
__CAPGO_KEEP_0__에서 discussed된 offline 토큰의 secure storage를 사용하십시오.
__CAPGO_KEEP_0__에서 discussed된 offline 토큰의 secure storage를 사용하십시오.
__CAPGO_KEEP_0__에서 discussed된 offline 토큰의 secure storage를 사용하십시오.
- __CAPGO_KEEP_0__에서 discussed된 offline 토큰의 secure storage를 사용하십시오. __CAPGO_KEEP_0__에서 discussed된 offline 토큰의 secure storage를 사용하십시오.
- __CAPGO_KEEP_0__에서 discussed된 offline 토큰의 secure storage를 사용하십시오. __CAPGO_KEEP_0__에서 discussed된 offline 토큰의 secure storage를 사용하십시오.
- 데이터 키를 __CAPGO_KEEP_0__에 있는 마스터 키를 사용하여 wrapping합니다. KMS 또는 HSM에서 마스터 키를 사용하여 키를 wrapping합니다.
- 기록 또는 객체와 함께 wrapped 키 메타데이터를 포함한 암호문을 저장합니다. 권한이 있는 읽기 동안에만 unwrap합니다.
- Field advice:.
강력한 장기 유지 마스터 키를 모든 애플리케이션 서버에 노출하지 않고 강력한 격리화를 필요로 할 때 envelope encryption을 사용하세요. 이 패턴은 성능과 제어가 균형을 이루는 것이 일반적입니다. 애플리케이션은 실제 암호화 작업을 위해 단기 유지 데이터 키를 사용하며, KMS 또는 HSM은 wrapping 및 unwrapping을 위해 사용하는 마스터 키를 보호합니다.
암호화 패턴 비교
패턴
| implementation 복잡도 | 성능 영향 | Capacitor | Best For |
|---|---|---|---|
| 디스크 또는 볼륨 암호화 | Low | Low | 서버 및 연결된 스토리지에 대한 인프라 수준 보호 |
| 투명 데이터 암호화 | Low to moderate | Low to moderate | 데이터베이스 전체 보호에 대한 최소 앱 변경 |
| 애플리케이션 수준 암호화 | Moderate to high | 변수 필드 사용 및 쿼리 디자인에 따라 | __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__
The patterns are familiar in incident reviews:
- 소스코드 내 code: 직접 입력한 인증 정보, 임베디드 인증서, 또는 점차적으로 프로덕션 의존성으로 변하는 유틸리티 스크립트.
- 복사한 설정 파일 내 비밀: 컴퓨터 간 파일 전송, 공유 폴더에 저장, 또는 급히 수정하는 과정에서 커밋하는 파일.
- 권한이 약한 환경 변수: 편리하지만, 빌드 로그, 셸 히스토리, 크래시 리포트, 또는 광범위한 런타임 권한을 통해 노출되는 경우.
- 회전 책임이 없는 키: 키가 년이 지남에 따라 팀이 재발급, 배포, 롤백 계획을 갖지 않아 오랜 기간 존재하는 경우.
- 고등 권한의 공유 비밀: 응용 프로그램, 엔지니어, 및 자동화가 사용하는 단일 인증 정보로 감사 및 격리가 훨씬 더 어려워지는 경우.
애플리케이션 및 인프라 비밀을 저장하는 방법을 표준화하는 경우, 실제 참조 자료로 사용할 수 있는 __CAPGO_KEEP_0__ 환경 변수를 안전하게 관리하는 방법 __CAPGO_KEEP_0__ 환경 변수를 안전하게 관리하는 방법은 팀이 임의의 비밀 정보 분산을 피할 수 있도록 도와줍니다.
__CAPGO_KEEP_0__ 키 관리의 좋은 예는 무엇인가요
__CAPGO_KEEP_0__를 사용하면 중앙 집중식 정책, 접근 제어, 감사 로그, 예약된 회전이 더 중요한 경우에 사용하세요. __CAPGO_KEEP_1__를 사용하면 위험, 규정 준수 요구 사항, 서명 및 키 보호 규칙이 전용 하드웨어 경계를 정당화하는 경우에 사용하세요. 많은 팀은 __CAPGO_KEEP_1__을 어디서나 사용할 필요가 없습니다. 그들은 시스템이 암호 해독 작업을 요청할 수 있는 시스템, 정책을 변경할 수 있는 인간, 그리고 이러한 작업이 검토되는 방법에 대한 명확한 규칙이 필요합니다. __CAPGO_KEEP_0__ 암호화 작업을 위해 데이터 키를 관리하는 애플리케이션은 단기적인 키를 사용합니다. __CAPGO_KEEP_1__ 또는 __CAPGO_KEEP_0__에 있는 보관함 키에 대한 접근은 엄격하게 제한됩니다. __CAPGO_KEEP_0__를 사용하여 실제 사고를 방지하는 제어가 작동합니다. __CAPGO_KEEP_0__를 정기적으로 회전하세요. 회전은 해킹된 키의 유용한 수명을 줄이지만, 애플리케이션, 작업, 복원 작업이 이후에도 작동할 수 있도록 안전하게 실행할 수 있어야 합니다. __CAPGO_KEEP_0__는 애플리케이션, 작업, 복원 작업이 이후에도 작동할 수 있도록 안전하게 실행할 수 있어야 합니다.
__CAPGO_KEEP_0__를 사용하여 애플리케이션, 작업, 복원 작업이 이후에도 작동할 수 있도록 안전하게 실행할 수 있어야 합니다.
__CAPGO_KEEP_0__를 사용하여 애플리케이션, 작업, 복원 작업이 이후에도 작동할 수 있도록 안전하게 실행할 수 있어야 합니다.
- __CAPGO_KEEP_0__를 사용하여 애플리케이션, 작업, 복원 작업이 이후에도 작동할 수 있도록 안전하게 실행할 수 있어야 합니다. __CAPGO_KEEP_0__를 사용하여 애플리케이션, 작업, 복원 작업이 이후에도 작동할 수 있도록 안전하게 실행할 수 있어야 합니다.
- 담당 업무를 분리하십시오: 고객 데이터를 읽는 서비스는 키 정책을 변경하거나 로깅을 비활성화할 수 없어야 합니다.
- _sensitive한 키 이벤트를 로깅하십시오: 키 생성, 회전, 암호화 요청, 접근 실패 시도 및 정책 변경이 모두 표시되어야 합니다.
- 재 암호화 경로를 테스트하십시오: wrapping key를 회전하는 것은 일반적으로 애플리케이션 데이터를 재 암호화하는 것보다 더 쉬우나, 두 가지 모두 롤백 단계와 runbook이 필요합니다.
- 오래된 비밀을 의도적으로 비활성화하고 폐기하십시오: cutover 시간을 남겨두고 오래된 자격 증명을 제거하여 quiet backdoor가 될 수 있도록 하지 마십시오.
CI/CD는 프로덕션 런타임과 동일한 discipline을 deserves합니다. 빌드 시스템은 넓은 접근 권한과 약한 가시성을 가지고 있기 때문에, 비밀 누출의 일반적인 장소입니다. 이에 대해 진지하게 다루는 팀은 CI/CD pipeline에서 비밀 관리를 formalize합니다. pipeline 자격 증명을 임시 예외로 다루지 마십시오. 단 하나의 규칙이 있습니다. 애플리케이션 __CAPGO_KEEP_0__은 신뢰할 수 있는 시스템에서 암호화 연산을 요청해야 하며, raw master 키를 환경 내에서 전달하지 않아야 합니다.
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_1__
__CAPGO_KEEP_2__
__CAPGO_KEEP_3__ __CAPGO_KEEP_4__.
__CAPGO_KEEP_5__
__CAPGO_KEEP_6__
- __CAPGO_KEEP_7__
- __CAPGO_KEEP_8__
- __CAPGO_KEEP_9__
- __CAPGO_KEEP_10__
__CAPGO_KEEP_11__
__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__ __CAPGO_KEEP_9__
- __CAPGO_KEEP_10__ __CAPGO_KEEP_11__
백업만으로는 당신을 구하지 못합니다. 성공적인 복원만이 당신을 구합니다.
만약 백업 생성만 테스트하고 실제로 복원 테스트를 하지 않으면, 회복 전략을 검증하지 못했습니다. 파일이 누군가의 저장소에 쌓일 수 있다는 것을 검증했습니다.
안전한 데이터베이스 저장을 위한 개발자 체크리스트
디자인 리뷰, 릴리즈 리뷰, 그리고 사후 청소 시 팀이 사용하는 체크리스트입니다.

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