Cloud Functions 보안

이 페이지에서는 Cloud Functions 리소스를 사용하여 상호작용을 제어하는 방법에 대한 간략한 개요를 제공합니다.

액세스 제어

Cloud Functions에 대한 액세스를 제어하는 방법에는 두 가지가 있습니다.

ID로 액세스 보안

함수에 대한 액세스를 제어하는 한 가지 방법은 요청 항목이 사용자 인증 정보를 사용하여 자신을 식별하게 하는 것입니다. 사용자 인증 정보는 비밀번호 또는 하드웨어 동글과 같이 항목이 확인하거나 액세스할 수 있는 보안 비밀로 보호되는 일종의 '이름'입니다. 기본적으로 함수는 비공개로 배포되며 이러한 사용자 인증 정보가 필요합니다. 단, 함수를 공개로 배포할 수 있으며, 이 경우 사용자 인증 정보가 필요하지 않습니다.

프로세스의 첫 번째 단계는 요청자가 정당한 요청자인지, 올바른 이름과 보안 비밀 조합을 제공하는지 확인하기 위해 사용자 인증 정보의 유효성을 검사하는 것입니다. 이 단계를 (Authentication)이라고 합니다.

요청자의 ID가 인증되면 해당 액세스 수준과 ID가 부여된 권한을 평가할 수 있습니다. 이 단계를 (Authorization)이라고 합니다.

인증

Cloud Functions는 주 구성원이라고도 하는 두 가지 종류의 ID를 지원합니다.

  • 서비스 계정: 함수, 애플리케이션, VM과 같이 사람이 아닌 사용자의 ID로 사용되는 특수 계정입니다. 사람이 아닌 사용자를 인증하는 방법을 제공합니다.
  • 사용자 계정: 이 계정은 개인 Google 계정 소유자 또는 Google 그룹과 같은 Google이 관리하는 항목에 속하는 사용자와 같은 사람을 나타냅니다.

서비스 계정과 사용자 계정 모두 사용자 인증 정보의 이름 부분은 일반적으로 계정과 연결된 이메일 주소입니다. 사용자 계정의 보안 비밀은 일반적으로 비밀번호이고, 서비스 계정의 경우 일반적으로 계정과 함께 생성되는 키 쌍의 비공개 키입니다.

하지만 사용자 비밀번호와 서비스 계정 키 자체는 매우 강력합니다. 데이터와 기능에 대한 광범위한 액세스를 제공할 수 있으며 적극적으로 취소하거나 변경할 때까지 유효합니다. 따라서 사용자 인증 정보 유출 시 발생할 수 있는 잠재적 손상을 제한하기 위해 Google Cloud에서 이 핵심 사용자 인증 정보가 이를 기반으로 하는 단기 사용자 인증 정보인 토큰으로 대체됩니다. 토큰은 기간이 제한되어 있으며 요청 시퀀스의 일부로 즉시 생성됩니다. 토큰은 요청과 함께 전달되며 계정을 안전하게 인증하는 데 사용됩니다.

Cloud Functions에서 사용되는 토큰에는 액세스 토큰과 ID 토큰의 두 가지 종류가 있습니다. 액세스 토큰은 일반적으로 API 호출을 인증하는 데 사용되고, ID 토큰은 개발자 생성 코드(예: 함수가 다른 함수를 호출하는 경우)에 대한 호출을 인증하는 데 사용됩니다. 토큰 자체는 OAuth 2 프레임워크와 확장 프로그램인 Open Identity Connect를 사용하여 생성되지만, 시퀀스는 복잡하고 오류가 발생하기 쉬우므로 Cloud 클라이언트 라이브러리를 사용하여 해당 프로세스를 관리하는 것이 좋습니다.

승인

요청 항목의 ID가 확인되면 요청자가 수행할 수 있는 항목을 평가해야 합니다. 이 평가는 설정 시 인증된 계정에 부여된 권한을 기반으로 합니다. Cloud Functions는 이를 위해 Identity and Access Management(IAM)를 사용합니다. 편의상 그룹화된 개별 권한 집합인 역할은 직접 계정에 할당되거나 정책이라는 구성을 통해 계정에 할당됩니다. 역할 집합의 각 개별 권한은 일반적으로 요청된 서비스에 의해 노출되는 단일 REST API 호출에 해당합니다. 이 프로세스에 대한 상세 설명은 IAM을 통해 액세스 승인을 참조하세요.

네트워크 기반 액세스 제어

개별 함수의 네트워크 설정을 지정하여 액세스를 제한할 수도 있습니다. 이를 통해 함수에서의 네트워크 인그레스 및 이그레스를 세밀하게 제어할 수 있습니다.

격리 및 샌드박스

내부적으로 함수 인스턴스는 gVisor 샌드박스 플랫폼을 사용하여 상호 격리됩니다. 기본적으로 함수는 다른 함수의 운영 환경에 액세스할 수 없습니다.