개발자 워크스테이션을 보호하고 사용자 인증 정보의 도난 및 오용을 방지하기 위한 권장사항을 알아보세요. 여기에는 Google Cloud CLI OAuth 전달자 토큰, 애플리케이션 기본 사용자 인증 정보 Google Cloud , 로컬 키가 포함됩니다.
이 문서는 불법적인 액세스로부터 클라우드 리소스를 보호해야 하는 보안팀 또는 클라우드 설계자를 대상으로 합니다. 보안 침해된 개발자 사용자 인증 정보의 영향을 사전에 줄이고 엔드포인트가 보안 침해된 후 환경을 수정하는 데 사용할 수 있는 사용 가능한 제어에 대해 알아보세요.
보안 침해된 사용자 인증 정보의 위험
공격자는 합법적인 사용자 계정 또는 서비스 계정이 이미 또는 gcloud CLI로 인증된 엔드포인트에 액세스할 수 있는 경우 Google Cloud 사용자 인증 정보를 손상시킬 수 있습니다. 그런 다음 공격자는 이러한 토큰을 자신이 제어하는 다른 엔드포인트에 복사하여 합법적인 토큰을 가장하는 요청을 수행할 수 있습니다. 보안 침해된 엔드포인트에 대한 공격자의 액세스 권한을 삭제한 후에도 공격자가 복사된 토큰을 사용하여 인증된 API 요청을 계속 수행할 수 있습니다. 이 위험을 완화하기 위해 단기 컨텍스트 인식 사용자 인증 정보를 사용하여 시스템에 대한 액세스를 제어할 수 있습니다.
개발자 사용자 인증 정보 개요
일반적으로 개발자 워크스테이션에서 발견되는 사용자 인증 정보는 Google Cloud 다음과 같습니다.
다음 섹션에서는 각 사용자 인증 정보 유형이 저장되고 사용되는 방법을 설명합니다.
gcloud CLI OAuth 토큰
gcloud CLI는 OAuth 2.0 액세스 토큰을 사용하여 Google Cloud API 요청을 인증합니다. OAuth 흐름은 사용된 사용자 인증 정보 유형에 따라 다르지만 일반적으로 액세스 토큰 및 기타 사용자 인증 정보는 로컬에서 액세스할 수 있습니다. 두 경우 모두 액세스 토큰은 기본적으로 60분 후에 만료되지만 확장된 수명 제약조건에 따라 최대 12시간까지 지속될 수 있습니다. 하지만 다른 사용자 인증 정보 유형은 영구적일 수 있습니다.
사용자 계정으로 gcloud CLI를 승인하면 gcloud CLI가 사용자 대신 Google Cloud API에 액세스하는 3-legged OAuth 동의 흐름을 시작합니다. 사용자가 동의 흐름을 완료하면 gcloud CLI가 새로운 액세스 토큰을 요청할 수 있게 해주는 액세스 토큰과 갱신 토큰을 수신합니다. 장기 갱신 토큰 은 만료 조건이 충족될 때까지 유지됩니다.
서비스 계정으로 gcloud CLI를 승인하면, gcloud CLI가 2-legged OAuth 흐름을 시작하여 Google Cloud API를 서비스 계정 ID로 액세스합니다. 비공개 키 파일에서 서비스 계정을 활성화하면 gcloud CLI가 이 키를 사용하여 주기적으로 액세스 토큰을 요청합니다. 장기 비공개 키는 gcloud CLI 구성에 저장되며 서비스 계정 키를 사용 중지하거나 삭제할 때까지 유효합니다.
Compute Engine 또는 Cloud Shell과 같은 Google Cloud 환경에서 gcloud CLI를 실행하면 애플리케이션이 자동으로 사용자 인증 정보를 찾고 서비스 계정으로 인증할 수 있습니다. 예를 들어 Compute Engine에서 gcloud CLI와 같은 애플리케이션은 메타데이터 서버에 액세스 토큰을 쿼리할 수 있습니다. Google에서는 액세스 토큰을 만드는 데 사용되는 비공개 서명 키를 관리 및 순환하고, 장기 사용자 인증 정보는 애플리케이션에 노출되지 않습니다.
애플리케이션 기본 사용자 인증 정보
애플리케이션 기본 사용자 인증 정보는 애플리케이션에서
Google Cloud API를 인증하는 데 사용됩니다. 개발자는 gcloud auth application-default login을 실행하여 애플리케이션 기본 사용자 인증 정보를 생성할 수 있습니다. 이 명령어는 OAuth 2.0 갱신 토큰과 클라이언트 라이브러리의 클라이언트 사용자 인증 정보가 포함된 일반 텍스트 JSON 파일 ($HOME/.config/gcloud/application_default_credentials.json 또는 %APPDATA%\gcloud\application_default_credentials.json)을 작성합니다.
모든 클라이언트 라이브러리 또는 커스텀 스크립트는 이러한 사용자 인증 정보를 사용하여 Google Cloud API를 호출할 수 있습니다.
애플리케이션 기본 사용자 인증 정보는 일반 텍스트로 저장되므로 사용자 컨텍스트에서 실행되는 신뢰할 수 없는 프로세스 또는 스크립트는 파일에 직접 액세스하거나 gcloud auth application-default print-access-token과 같은 명령어를 사용하여 활성 액세스 토큰을 검색할 수 있습니다.
일반적인 멀웨어는 application_default_credentials.json을 수집하기 위해 ~/.config/gcloud/ 디렉터리를 대상으로 삼는 경우가 많습니다.
자세한 내용은 애플리케이션 기본 사용자 인증 정보를 참고하세요.
서비스 계정 키
서비스 계정 키는 Google Cloud 콘솔에서 다운로드되는 비공개 JSON 키 파일입니다. 이러한 키는 애플리케이션에서 Google Cloud API를 인증하는 데 사용됩니다. 서비스 계정 키는 다음 위치에 저장할 수 있습니다.
gcloud auth activate-service-account를 실행한 후 gcloud CLI 구성 디렉터리- 로컬 파일 시스템
- 내부 코드 저장소
개발자 엔드포인트의 서비스 계정 키는 2단계 인증에 의해 바인딩되지 않으며 세션 제한이 없고 자동으로 만료되지 않습니다.
서비스 계정 키를 도용하는 공격자는 서비스 계정 액세스 토큰을 만들어 지속적인 액세스를 유지할 수 있습니다.
자세한 내용은 서비스 계정 키 관리 권장사항을 참고하세요.
SSH 키
SSH 키는 Compute Engine 인스턴스를 인증하는 데 사용됩니다.
개발자는 gcloud compute ssh를 사용하여 SSH 키를 생성할 수 있습니다. 이 명령어는 ~/.ssh/google_compute_engine에 로컬 비공개 키를 생성합니다. SSH 키는 장기 키입니다.
공격자는 도용된 SSH 키를 사용하여 VM에 액세스한 후 메타데이터 서버를 쿼리하여 연결된 서비스 계정 토큰을 추출할 수 있습니다. 이 공격은 외부 경계 방화벽을 우회합니다.
SSH 키를 사용하는 대신 2단계 인증으로 OS 로그인을 사용하는 것이 좋습니다. 자세한 내용은 원격 서버 액세스를 위한 2단계 인증 시행을 참고하세요.
브라우저 쿠키
브라우저 쿠키는 Google Cloud 콘솔 및 Cloud Shell에 대한 웹 HTTP 요청을 인증합니다. 브라우저 쿠키는 사용자가 Google Cloud 콘솔에 로그인할 때 자동으로 생성됩니다.
쿠키는 로컬 워크스테이션의 브라우저 프로필 디렉터리에 저장됩니다. 예를 들어 Google Chrome은 Linux의 ~/.config/google-chrome/ 또는 Windows의 %LOCALAPPDATA%\Google\Chrome\User Data에 쿠키를 저장합니다.
브라우저 쿠키는 사용자가 로그아웃하거나 세션 만료 시간이 발생하거나 관리자가 관리 콘솔에서 사용자 세션을 재설정할 때만 무효화되는 장기 사용자 인증 정보입니다.
이러한 쿠키를 도용하는 공격자는 이를 다른 브라우저로 가져와 인증을 우회하여 활성 콘솔 세션을 가로챌 수 있습니다. Google Cloud
도용된 세션 쿠키의 위험을 줄이려면 세션 길이를 Google Cloud 서비스에 대해 설정하세요.
직원 ID 제휴 액세스 토큰
개발자는 직원 ID 제휴를 사용하여 외부 ID 공급업체를 통해 인증하여 Google Cloud 리소스에 액세스할 수 있습니다.
제휴 ID로 로그인하려면 개발자는 로그인 구성 파일
(gcloud iam workforce-pools create-login-config
명령어로 생성됨)을 사용하고 gcloud CLI에 로그인합니다. 외부 ID 공급업체로 인증한 후 보안 토큰 서비스는 승인 코드를 단기 제휴 액세스 토큰 및 OAuth 갱신 토큰으로 교환합니다.
gcloud CLI는 사용자 인증 정보 메타데이터와 갱신 토큰을 로컬 사용자 인증 정보 데이터베이스에 저장하고 활성 액세스 토큰을 gcloud CLI 구성 디렉터리에 캐시합니다. 제휴 액세스 토큰은 설정된 시간 (기본적으로 60분) 후에 만료되는 단기 사용자 인증 정보입니다.
엔드포인트의 보안을 침해하는 공격자는 활성 제휴 액세스 토큰을 추출하거나 gcloud auth print-access-token을 사용하여 직원 주 구성원을 가장할 수 있습니다. 직원 ID에 가장 권한이 있는 경우 공격자는 서비스 계정 액세스 토큰을 요청하여 권한을 에스컬레이션할 수도 있습니다.
위험을 줄이려면 직원 ID 풀의 세션 기간을 필요한 최소 기간으로 구성하고 기간을 외부 ID 공급업체의 재인증 및 세션 제한 시간 정책과 일치시키세요. 사용자 인증 정보를 저장하고 관리하는 방법에 대한 자세한 내용은 워크로드 아이덴티티 제휴 사용 권장사항을 참고하세요.
보안 침해된 사용자 인증 정보의 영향
공격자가 엔드포인트의 보안을 침해할 경우 OAuth 토큰과 같은 사용자 인증 정보는 공격자가 액세스를 유지하거나 에스컬레이션할 수 있으므로 중요한 대상입니다.
개발자는 코드를 작성하고 디버깅할 때 자신의 사용자 인증 정보를 확인해야 하는 적법한 필요가 있을 수 있습니다. 예를 들어 개발자는 지원되지 않는 클라이언트 라이브러리를 사용할 때 REST 요청을 인증 해야 Google Cloud 할 수 있습니다. 개발자는 다음을 포함한 다양한 방법으로 사용자 인증 정보를 볼 수 있습니다.
- 로컬 파일 시스템에서 gcloud CLI 구성 파일 보기
- Compute Engine 메타데이터 서버 쿼리
gcloud auth print-access-token또는gcloud auth list등의 명령어 사용
하지만 공격자가 엔드포인트의 보안을 침해한 후에도 이와 동일한 기법을 사용할 수 있습니다.
공격자가 엔드포인트의 보안을 침해하는 경우 주된 위협은 공격자가 인증된 ID의 적법한 사용자 인증 정보로 gcloud CLI 명령어 또는 기타 코드를 실행할 수 있다는 것입니다. 또한 공격자는 사용자 인증 정보를 자신이 제어하는 다른 엔드포인트에 복사하여 액세스 권한을 유지할 수 있습니다. 이 사용자 인증 정보 도난이 발생하면 보조 위협이 발생합니다. 보안 침해된 엔드포인트에 대한 액세스 권한을 삭제한 후에도 공격자가 장기 사용자 인증 정보를 계속 사용할 수 있는 보조 위협이 있습니다.
공격자가 개발자 사용자 인증 정보의 보안을 침해할 경우 다음과 같은 상황이 일어날 수 있습니다.
- 보안 침해된 사용자 또는 서비스 계정을 가장합니다. 보안 침해된 토큰을 사용하는 API 트래픽은 도용된 사용자 또는 서비스 계정에서 온 것처럼 로깅되므로 로그에서 일반 활동 및 악의적인 활동을 구별하기가 어렵습니다.
- 영구 OAuth 갱신 토큰(gcloud CLI 또는 애플리케이션 기본 사용자 인증 정보에서) 또는 서비스 계정과 연결된 비공개 키를 사용하여 액세스 토큰을 무기한 요청합니다.
- 토큰은 로그인 과정 후에 부여되므로 공격자는 사용자의 비밀번호 또는 2단계 인증을 통한 인증을 우회할 수 있습니다.
- 도용된 SSH 키를 사용하여 Compute Engine 인스턴스에 액세스하고 메타데이터 서버를 쿼리하여 연결된 서비스 계정 토큰을 도용합니다.
- 도용된 브라우저 쿠키를 사용하여 사용자 비밀번호 또는 2단계 인증 없이 활성 Google Cloud 콘솔 세션 을 가로챕니다.
- 도용된 제휴 액세스 토큰을 사용하여 직원 ID 풀에 부여된 리소스에 액세스하거나 서비스 계정을 가장하여 권한을 에스컬레이션합니다.
위험 완화를 위한 권장사항
다음 섹션에 설명된 제어를 구현하면 보안 침해된 개발자 사용자 인증 정보의 위험을 완화할 수 있습니다. 엔터프라이즈 기반 청사진 또는 의 시작 영역 설계 Google Cloud에서 설명하는 보안 권장사항을 따르고 있다면, 이미 이러한 보안 제어를 적용했을 수도 있습니다.
서비스의 세션 길이 설정 Google Cloud
공격자가 보안 침해된 토큰을 악용할 수 있는 기간을 줄이려면 세션 길이를 Google Cloud 서비스에 대해 설정하세요. 신규 고객의 경우 a 기본 세션 길이는 16 시간 으로 자동 설정됩니다. 2023년 이전에 Google Cloud조직을 생성한 고객의 경우, 재인증이 필요하지 않도록 기본 설정되어 있을 수 있습니다. 세션 길이가 1~24시간 사이인 재인증 정책이 적용되어 있는지 확인하기 위해 이 설정을 검토하세요. 재인증 정책은 사용자가 비밀번호나 보안 키를 사용해 gcloud CLI에 정기적으로 다시 인증하도록 강제합니다.
서비스 Google Cloud 의 세션 길이 설정은 Google 서비스의 세션 길이 설정과는 별개이며, 후자는 Google Workspace 전반의 웹 세션 로그인 기간을 제어하지만, 재인증 Google Cloud에는 영향을 미치지 않습니다. Google Workspace 서비스를 사용하는 경우 두 설정 모두에 대해 세션 길이를 지정하세요.
VPC 서비스 제어 구성
정의한 경계 내에서 발생한 Google Cloud API 트래픽만 지원되는 리소스에 액세스할 수 있도록 환경 전반에 VPC 서비스 제어를 구성하세요. 경계는 환경 외부에 있는 공격자 제어 엔드포인트에서 시작된 제한된 서비스에 대한 요청을 차단하므로 서비스 경계는 보안 침해된 사용자 인증 정보의 유용성을 제한합니다.
Chrome Enterprise Premium 구성
콘솔 및 API를 보호하기 위해 Chrome Enterprise Premium 정책을 구성합니다. Google Cloud Google CloudIP 기반 액세스 또는 상호 TLS용 인증서 기반 액세스를 포함하여 모든 API 요청에서 평가되는 속성을 선택적으로 허용하도록 Chrome Enterprise Premium 액세스 수준 및 바인딩을 구성합니다. 손상된 승인 사용자 인증 정보를 사용하지만 Chrome Enterprise Premium 정책에 정의된 조건을 충족하지 않는 요청은 거부됩니다.
Chrome Enterprise Premium은 정의된 조건을 충족하지 않는 사용자 API 트래픽을 거부하는 사용자 중심 제어입니다. VPC 서비스 제어는 리소스가 통신할 수 있는 경계를 정의하는 리소스 중심 제어입니다. VPC 서비스 제어는 모든 사용자 ID와 서비스 계정 ID에 적용되지만 Chrome Enterprise Premium은 조직 내의 사용자 ID에만 적용됩니다. Chrome Enterprise Premium과 VPC 서비스 제어를 함께 사용하면 환경 외부에 있는 공격자가 제어하는 컴퓨터에서 유출된 사용자 인증 정보의 효과를 낮출 수 있습니다.
원격 서버 액세스를 위한 2단계 인증 시행
개발자가 SSH를 통해 Compute Engine 리소스에 액세스하도록 허용하려면 2단계 인증으로 OS 로그인을 구성합니다. 이렇게 하면 사용자가 비밀번호 또는 보안 키로 다시 인증해야 하는 추가 체크포인트가 시행됩니다. 보안 침해된 OAuth 토큰을 가졌지만 비밀번호 또는 보안 키가 없는 공격자는 이 기능으로 차단됩니다.
Compute Engine의 Windows 인스턴스에 대한 원격 데스크톱 프로토콜 (RDP) 액세스는 OS 로그인 서비스를 지원하지 않으므로 RDP 세션에 2단계 인증을 세밀하게 적용할 수 없습니다. IAP (Identity-Aware Proxy) 데스크톱 또는 Google Chrome 기반 RDP 플러그인을 사용할 때는 다음을 완료하세요.
Google 서비스의 세션 길이와 같은 대략적인 제어와 사용자의 웹 세션에 2단계 인증 설정을 사용합니다.
2단계 인증에서 사용자가 기기를 신뢰하도록 허용 설정을 사용 중지합니다.
서비스 계정 키 사용 제한
서비스 계정 키를 사용하여 인증하면 다운로드한 키 파일과 별도로 gcloud CLI 구성 파일에 키 값이 저장됩니다. 환경에 액세스할 수 있는 공격자는 gcloud CLI 구성에서 키를 복사하거나 로컬 파일 시스템 또는 내부 코드 저장소에서 키 파일을 복사할 수 있습니다. 따라서 보안 침해된 액세스 토큰을 완화하는 계획 외에도 다운로드한 서비스 계정 키 파일을 관리하는 방법을 고려하세요.
보다 안전한 인증 대안을 검토하여 서비스 계정 키를 사용하는 사용 사례를 줄이거나 없애세요. 또한
constraints/iam.disableServiceAccountKeyCreation
및
constraints/iam.disableServiceAccountKeyUpload
조직 정책 제약조건을 적용하여 서비스 계정 키 생성을 사용 중지합니다.
최소 권한의 원칙 적용
ID 및 액세스 관리 (IAM) 정책을 설계할 때는 최소 권한을 고려하세요. 가장 작은 범위에서 작업을 수행하는 데 필요한 역할만 사용자에게 부여합니다. 역할 권장사항을 검토하고 적용하여 환경에서 사용되지 않는 과도한 역할이 포함된 IAM 정책을 방지합니다.
엔드포인트 보호
공격자가 개발자 워크스테이션 또는 Compute Engine 인스턴스와 같은 엔드포인트에 물리적으로 액세스하거나 원격으로 액세스할 수 있는 방법을 고려합니다. 보안 침해된 사용자 인증 정보의 위협을 해결하기 위한 계획도 중요하지만 공격자가 신뢰할 수 있는 엔드포인트의 보안을 침해할 수 있는 위험도 고려하세요. 공격자가 신뢰할 수 있는 엔드포인트에 액세스할 수 있는 경우 엔드포인트 자체에서 직접 gcloud CLI 명령어 또는 기타 코드를 실행할 수 있습니다.
개발자 워크스테이션에 대한 포괄적인 보호는 이 문서에서 다루지 않지만 보안 도구와 작업이 보안 침해로부터 엔드포인트 보호를 보장하고 모니터링하는 데 어떤 도움이 되는지 평가하세요. 다음 질문을 고려하세요.
- 개발자 워크스테이션의 물리적 보안은 어떻게 보호되나요?
- 네트워크 침해를 어떻게 식별하고 대응하나요?
- 사용자가 SSH 또는 RDP 세션에 원격으로 액세스하도록 하려면 어떻게 해야 하나요?
- SSH 키 또는 서비스 계정 키와 같은 영구 사용자 인증 정보는 어떻게 보안 침해될 수 있나요?
- 단기 사용자 인증 정보로 바꿀 수 있는 영구 사용자 인증 정보를 사용하는 워크플로가 있나요?
- 누군가 다른 사용자의 캐시된 gcloud CLI 사용자 인증 정보를 읽을 수 있는 공유 기기가 있나요?
- 사용자가 신뢰할 수 없는 기기에서 gcloud CLI로 인증할 수 있나요?
- 승인된 트래픽이 VPC 서비스 제어 경계 내부의 리소스에 어떻게 연결되나요?
보안 운영에서 이러한 각 질문을 처리하는지 확인합니다.
대응팀 정비
사고 대응을 담당하는 보안팀이 콘솔 및 관리 콘솔 Google Cloud 전체에 적절한 액세스 권한을 가지는지 미리 확인합니다. 별도의 팀이 Google Cloud 콘솔과 관리 콘솔을 관리하는 경우 이슈 중에 응답이 지연될 수 있습니다.
보안 침해를 평가하고 대응하려면 보안 침해된 Google Cloud 사용자 인증 정보에 대응하기를 참고하세요.
사용자 인증 정보 손상 모니터링
잠재적 손상을 모니터링하려면 다음을 수행하는 것이 좋습니다.
Cloud 감사 로그에서 다음의 알림을 구성합니다.
서비스 계정 토큰 생성을 감사하는
iamcredentials.googleapis.com메서드 (GenerateAccessToken,GenerateIdToken,SignJwt등)이러한 로그를 사용하려면 데이터 액세스 로그를 사용 설정해야 합니다.
사용자 및 서비스 계정 가장을 감사하는
protoPayload.authenticationInfo.serviceAccountDelegationInfo.firstPartyPrincipal.principalEmail비정상적인 ID 어설션에 대한
sts.googleapis.com교환 요청
Security Command Center에서 Event Threat Detection의 다음 위협 발견 항목 을 모니터링합니다.
- 지속성: 새로운 지역
- 지속성: 새로운 사용자 에이전트
- 지속성: 새로운 API 메서드
- 삭제: 익명처리 프록시에서 액세스
- 권한 에스컬레이션: 관리자 활동을 위한 비정상적인 서비스 계정 가장
- 권한 에스컬레이션: 관리자 활동을 위한 비정상적인 서비스 계정 가장
- 초기 액세스: 유출된 서비스 계정 키 사용됨
- 지속성: 서비스 계정 키 생성됨
- 초기 액세스: 의심스러운 로그인이 차단됨
- 초기 액세스: 계정 사용 중지됨 계정 도용
각 위협에 대해 권장 조사 단계가 대응에 도움이 되도록 제공됩니다.
Google Workspace 및 Cloud ID에서 사용자 로그인을 모니터링합니다. 문제를 더욱 효과적으로 추적하려면 로그를 Cloud Logging으로 내보내는 것이 좋습니다.
도용된 토큰으로 경계 외부 액세스를 시도하는지 Chrome Enterprise Premium 및 VPC 서비스 제어의 로그를 모니터링합니다.
Cloud Monitoring을 사용하여 서비스 계정 키 사용 이상을 모니터링합니다.
보안 운영 센터 (SOC)에 즉시 알림이 전송되고 의심스러운 사용자 인증 정보 손상에 신속하게 대응하는 데 필요한 플레이북, 도구, 액세스 권한이 있는지 확인합니다. Security Command Center를 기존 SIEM과 통합하거나 Google Security Operations 으로 로그를 가져와 추가 분석을 수행할 수도 있습니다.