IAM 데이터베이스 인증을 출시한 MySQL용 Cloud SQL
Akhil Jariwala
Product Manager, Cloud SQL
* 본 아티클의 원문은 2021년 7월 10일 Google Cloud 블로그(영문)에 게재되었습니다.
보안은 기업의 IT 관리자가 데이터 시스템을 설계할 때 고려해야 하는 가장 중요한 사항 중 하나입니다. 데이터가 저장되는 위치와 사용자가 데이터에 액세스하는 방법을 결정하는 핵심 요소가 바로 보안이기 때문입니다. 기존에는 IT 관리자가 SQL 데이터베이스와 같은 시스템에 대한 사용자 액세스를 관리하기 위해 사용자에게 별도의 전용 사용자 아이디와 비밀번호를 발급했습니다. 분산된 액세스 제어 방식은 설정이 간단하지만, 관리자가 각 시스템을 보호하는 데 많은 시간을 할애하고 비밀번호 난이도 및 변경 정책을 도입해야 합니다. SOX나 PCI-DSS 규칙을 적용받는 기업 등 일부 기업은 규정 준수를 위해 각 시스템에 이러한 조치를 취해야 할 수 있습니다. 많은 IT 관리자가 관리 업무 및 실수의 위험을 최소화하기 위해 SQL 데이터베이스 등의 시스템에 대해 단일 허브를 사용해 액세스 권한을 부여하거나 취소할 수 있는 중앙 집중식 액세스 제어를 선호합니다.
Google Cloud는 중앙 집중식 액세스 제어를 구현하기 위해 MySQL용 Cloud SQL을 위한 IAM 데이터베이스 인증을 일반 안정화 버전으로 출시했습니다. IAM 데이터베이스 인증은 관리자가 Google Cloud의 중앙 집중식 액세스 관리 시스템인 Cloud Identity and Access Management(IAM)를 통해 관리 액세스는 물론 MySQL 데이터베이스에 대한 연결 액세스도 제어할 수 있게 해줍니다. Cloud IAM을 사용하면 각 Cloud SQL 데이터베이스의 비밀번호 관리와 관련된 관리자의 업무를 줄일 수 있습니다. 또한 Cloud ID의 강력한 비밀번호 보안 시스템을 통해 관리자는 안전한 통합 보안 체계를 구축하고 Cloud SQL을 포함한 모든 Google Cloud 시스템에서 규정 준수를 유지할 수 있습니다.
IAM 데이터베이스 인증을 사용하면 최종 사용자가 Cloud ID 사용자 인증 정보를 통해 Cloud SQL 데이터베이스에 로그인할 수 있습니다. 먼저 사용자가 Google Cloud에 로그인합니다. 사용자가 데이터베이스에 액세스할 준비가 되면 gcloud 또는 Google Cloud API를 사용해 액세스 토큰을 요청한 다음 데이터베이스 인스턴스에 Google 사용자 이름과 토큰을 제공하여 로그인합니다. 사용자가 데이터베이스에 로그인하기 전에 Cloud IAM이 사용자에게 연결할 권한이 있는지 확인합니다. 기본 제공되는 데이터베이스의 인증 방법과 비교하면 IAM 데이터베이스 인증은 사용자가 관리해야 할 비밀번호가 하나 줄어드는 셈입니다. 개별 최종 사용자와 애플리케이션 모두 IAM 데이터베이스 인증을 통해 데이터베이스에 연결할 수 있습니다.
IAM 데이터베이스 인증을 설정하는 방법
사례를 통해 살펴보겠습니다. BuyLots라는 소매업체의 IT 관리팀에서 데이터 애널리스트팀의 프라샨스가 Cloud SQL에서 실행되는 새 US Reporting MySQL 데이터베이스 인스턴스에 인증할 수 있도록 허용하려고 합니다. 프라샨스에게는 이미 Cloud ID 계정이 있습니다.
먼저 관리자가 Cloud IAM으로 이동해 프라샨스의 Cloud ID 계정에 Cloud SQL 인스턴스 사용자 역할을 부여합니다. 이렇게 하면 로그인 과정에서 Cloud SQL이 프라샨스에게 데이터베이스 액세스를 허용해야 하는지 확인할 때 Cloud IAM이 긍정적인 응답을 보냅니다.


다음으로 Cloud SQL로 이동해 US Reporting 데이터베이스 인스턴스의 구성을 수정하고 'cloudsql_iam_authentication' 플래그를 사용 설정하여 IAM 데이터베이스 인증을 활성화합니다.


그런 다음, US Reporting 데이터베이스 인스턴스에서 프라샨스를 위한 새 MySQL 사용자 계정을 생성하고 인증 방법으로 Cloud IAM을 선택합니다. 프라샨스의 전체 클라우드 ID 사용자 이름(‘prashanth@buylots.com’)을 제출합니다. 이때 MySQL 글자 수 제한으로 인해 프라샨스의 MySQL 사용자 이름은 도메인을 포함하지 않은 Cloud ID 사용자 이름(‘prashanth’)입니다.


마지막으로 프라샨스가 적정 수준의 권한으로 올바른 테이블에 액세스할 수 있도록 MySQL을 열어 프라샨스에게 적절한 권한을 명시적으로 부여합니다. Cloud IAM이 인증을 담당하더라도 Cloud SQL은 여전히 MySQL의 권한 시스템을 통해 사용자가 수행할 권한이 있는 작업이 무엇인지 판단합니다. 새로 생성된 IAM 데이터베이스 인증 MySQL 사용자는 아무 권한도 부여되어 있지 않습니다. 따라서 관리자가 프라샨스에게 US Reporting 데이터베이스 인스턴스의 판매 데이터베이스에 포함된 모든 테이블에 대해 읽기 액세스 권한을 부여합니다.
이제 프라샨스가 IAM 데이터베이스 인증을 사용해 MySQL용 Cloud SQL 인스턴스에 연결할 수 있도록 하는 설정이 완료되었습니다.
IAM 데이터베이스 인증으로 로그인하는 방법
프라샨스가 US Reporting 데이터베이스 인스턴스에 로그인해 월간 보고서에 사용할 데이터를 가져올 차례입니다. 프라샨스가 노트북에서 Cloud SDK를 사용해 Google Cloud에 액세스합니다. MySQL 쿼리에 대해 MySQL 명령줄 클라이언트를 사용하고, Cloud SQL 인증 프록시를 통해 BuyLots 데이터베이스에 연결합니다. 프라샨스가 Cloud SQL 인증 프록시를 사용하는 이유는 연결이 더 간단하기 때문입니다. 프라샨스의 MySQL 명령줄 클라이언트에서 US Reporting이 로컬로 보이도록 프록시가 연결 요청을 전달하고 Cloud SQL 인증 프록시가 SSL 암호화를 대신 처리하므로, 프라샨스는 자체 관리형 SSL 인증서에 대해 염려하지 않아도 됩니다.
먼저 Cloud SDK를 사용해 Google Cloud에 로그인하고 웹브라우저를 통해 Cloud ID 사용자 인증 정보를 입력합니다.
다음으로 Cloud SQL 인증 프록시를 실행합니다. MySQL 연결 요청에 사용할 포트 번호와 인스턴스 연결 이름을 전달합니다. 프라샨스가 이미 Google Cloud에 로그인했으므로 Cloud SQL 인증 프록시에서 프라샨스의 Cloud SDK 사용자 인증 정보를 사용해 인스턴스에 대한 연결을 승인할 수 있습니다.
마지막으로 프라샨스는 운영체제의 명령줄 인터페이스에서 명령어를 사용해 MySQL에 연결합니다. MySQL 사용자 이름은 BuyLots 도메인 이름을 제외하고 자신의 Cloud ID 사용자 이름만 전달하며, 기존 MySQL 비밀번호 대신 Cloud SDK를 호출하는 명령을 전달해 자신의 Cloud ID 액세스 토큰을 반환합니다. 또한 프라샨스는 연결 요청에서 일반 텍스트 옵션을 지정해야 합니다. 프라샨스가 Cloud SQL 인증 프록시를 사용하고 있으므로 호스트가 로컬임을 나타낼 수 있습니다.
이제 프라샨스는 IAM 데이터베이스 인증을 사용해 MySQL용 Cloud SQL 데이터베이스에 연결되었습니다.