개요
Google Distributed Cloud는 Cloud API 및 Kubernetes 클러스터 수준 모두에서 감사 로깅을 지원합니다. 이 문서에서는 Kubernetes 클러스터 감사 로깅에 대한 정보를 제공합니다. Cloud API 감사 로깅은 Cloud API 감사 로깅 정보를 참조하세요.
Google Distributed Cloud는 클러스터의 Kubernetes API 서버로 전송된 호출을 시간순으로 기록하는 Kubernetes 감사 로깅을 사용합니다. 감사 로그는 의심스러운 API 요청을 조사하고 통계를 수집하는 데 유용합니다.
Google Cloud 프로젝트의 디스크 또는 Cloud 감사 로그에 감사 로그를 기록하도록 클러스터를 구성할 수 있습니다. Cloud 감사 로그에 작성하면 디스크에 작성하거나 온프레미스 로깅 시스템에서 로그를 캡처하는 것보다 다양한 이점이 있습니다.
- 모든 GKE 클러스터의 감사 로그를 중앙화할 수 있습니다.
- Cloud 감사 로그에 기록된 로그 항목은 변경할 수 없습니다.
- Cloud 감사 로그 항목은 400일 동안 보관됩니다.
- Cloud 감사 로그는 Anthos 요금에 포함되어 있습니다.
디스크 기반 감사 로깅
기본적으로 감사 로그는 영구 디스크에 작성되므로 VM이 다시 시작되고 업그레이드되어도 로그가 사라지지 않습니다. VMware용 GKE는 감사 로그 항목을 최대 12GB까지 보관합니다.
Cloud 감사 로그
클러스터에 Cloud 감사 로그를 사용 설정하면 클러스터 구성 파일의 cloudAuditLogging.projectID
필드에 지정하는 Google Cloud 프로젝트를 사용하여 클러스터의 Kubernetes API 서버의 관리자 활동 감사 로그 항목이 Google Cloud로 전송됩니다.
이 Google Cloud 프로젝트를 감사 로깅 프로젝트라고 합니다.
감사 로깅 프로젝트는 Fleet 호스트 프로젝트와 동일해야 합니다.
로그 항목을 버퍼링하고 Cloud 감사 로그에 작성하기 위해 VMware용 GKE가 audit-proxy
포드를 관리자 클러스터에 배포합니다.
이 구성요소는 사용자 클러스터에서 사이드카 컨테이너로 사용할 수도 있습니다.
제한사항
Google Distributed Cloud의 Cloud 감사 로그의 현재 버전에는 몇 가지 제한사항이 있습니다.
데이터 액세스(get, list, watch requests) 로깅은 지원되지 않습니다.
Kubernetes 감사 정책은 수정할 수 없습니다.
Cloud 감사 로그의 복원력은 확장 네트워크 중단에 대해 우수하지 않습니다. 로그 항목을 Google Cloud로 내보낼 수 없으면 10G 디스크 버퍼에 캐시됩니다. 버퍼가 채워지면 후속 항목이 삭제됩니다.
Anthos Audit API 사용 설정
감사 로깅 프로젝트에서 Anthos Audit API를 사용 설정합니다.
Cloud 감사 로그의 서비스 계정 만들기
Google Distributed Cloud에서 사용하도록 만든 서비스 계정이 이미 하나 이상 있습니다. 이 기능을 사용하려면 감사 로깅 서비스 계정이라고 부르는 추가 서비스 계정을 만들어야 합니다.
감사 로깅 서비스 계정을 만듭니다.
gcloud iam service-accounts create audit-logging-service-account
Cloud 감사 로그 서비스 계정의 JSON 키 파일을 만듭니다.
gcloud iam service-accounts keys create audit-logging-key.json \ --iam-account AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL
여기서 AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL은 서비스 계정의 이메일 주소입니다.
다른 서비스 계정 키와 동일한 위치에 있는 관리자 워크스테이션에
audit-logging-key.json
을 저장합니다.
Cloud 감사 로그가 사용 설정된 관리자 클러스터 만들기
관리자 클러스터를 처음 만들 때만 관리자 클러스터에 Cloud 감사 로그를 사용 설정할 수 있습니다. Cloud 감사 로그를 사용 설정하기 위해 기존 관리자 클러스터를 수정할 수 없습니다.
관리자 클러스터 만들기를 참조하세요.
관리자 클러스터 구성 파일에서
cloudAuditLogging
섹션을 입력합니다.cloudAuditLogging.projectID
를 감사 로깅 프로젝트의 ID로 설정합니다.감사 로그를 저장하려는 Google Cloud 리전으로
cloudAuditLogging.clusterLocation
을 설정합니다. 지연 시간을 개선하려면 온프레미스 데이터 센터와 가까운 리전을 선택하세요.cloudAuditLogging.serviceAccountKeyPath
를 감사 로깅 서비스 계정에 대한 JSON 키 파일의 경로로 설정합니다.
예를 들면 다음과 같습니다.
cloudAuditLogging: projectID: "my-project" clusterLocation: "us-west1" serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"
평소와 같이 클러스터를 계속 만듭니다.
Cloud 감사 로그가 사용 설정된 사용자 클러스터 만들기
사용자 클러스터 만들기를 참조하세요.
사용자 클러스터 구성 파일에서
cloudAuditLogging
섹션을 입력합니다.cloudAuditLogging.projectID
를 감사 로깅 프로젝트의 ID로 설정합니다.감사 로그를 저장하려는 Google Cloud 리전으로
cloudAuditLogging.clusterLocation
을 설정합니다. 지연 시간을 개선하려면 온프레미스 데이터 센터와 가까운 리전을 선택하세요.cloudAuditLogging.serviceAccounKeyPath
를 Cloud 감사 로그 서비스 계정의 JSON 키 파일 경로로 설정합니다.gkeConnect
섹션이 입력되어 있고gkeConnect.projectID
가cloudAuditLogging.projectID
와 동일한지 확인합니다.
예를 들면 다음과 같습니다.
gkeConnect: projectID: "my-project" registerServiceAccountKeyPath: "/my-key-fokder/connect-register-key.json" cloudAuditLogging: projectID: "my-project" clusterLocation: "us-west1" serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"
평소와 같이 클러스터를 계속 만듭니다.
기존 사용자 클러스터에 Cloud 감사 로그 사용 설정
Cloud 감사 로그는 사용자 클러스터가 등록된 Google Cloud 프로젝트에서만 사용 설정될 수 있습니다.
기존 사용자 클러스터가 등록되지 않은 경우 Cloud 감사 로그를 사용 설정하기 전에 다음 단계에 따라 클러스터를 등록합니다.
사용자 클러스터 구성 파일에
gkeConnect
섹션을 추가합니다. 예를 들면 다음과 같습니다.gkeConnect: projectID: "my-project" registerServiceAccountKeyPath: "/my-key-fokder/connect-register-key.json"
클러스터를 업데이트합니다.
gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_CLUSTER_KUBECONFIG
사용자 클러스터가 등록된 다음 이 단계에 따라 Cloud 감사 로그를 사용 설정합니다.
사용자 클러스터 구성 파일의
cloudAuditLogging
섹션을 입력합니다. 개별 필드에 대한 자세한 내용은 Cloud 감사 로그가 사용 설정된 사용자 클러스터 만들기를 참조하세요.cloudAuditLogging
섹션의projectID
는gkeConnect
섹션의 것과 같아야 합니다.클러스터를 업데이트합니다.
gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_CLUSTER_KUBECONFIG
기존 사용자 클러스터의 Cloud 감사 로그 사용 중지
사용자 클러스터 구성 파일에서
cloudAuditLogging
섹션을 삭제합니다.사용자 클러스터를 업데이트합니다.
gkectl update cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config [USER_CLUSTER_CONFIG]
감사 로그 액세스
디스크 기반 감사 로깅
/var/log/kube-audit/kube-apiserver-audit.log
의 제어 영역 노드에서 관리 클러스터의 감사 로그를 찾을 수 있습니다. 사용자 클러스터의 감사 로그는 kube-audit-kube-apiserver-0
이라는 PersistentVolumeClaim
에 있습니다. volumes
항목을 통해 자체 포드 내에서 이 데이터에 액세스할 수 있습니다.
관리자 클러스터에 대해 이 항목을 추가합니다.
volumes: - name: kube-audit hostPath: path: /var/log/kube-audit type: ""
사용자 클러스터에 대해 이 항목을 추가합니다.
volumes: - name: kube-audit persistentVolumeClaim: claimName: kube-audit-kube-apiserver-0
적절한 관리자 클러스터 노드(이 노드만)에서 포드를 예약하려면 다음과 같이 nodeSelector
및 tolerations
섹션을 포드 사양에 추가해야 합니다.
spec: nodeSelector: node-role.kubernetes.io/master: '' tolerations: - key: node-role.kubernetes.io/master value: "" effect: NoSchedule
사용자 클러스터에 대해 namespace
를 사용자 클러스터 이름으로 설정한 후 nodeName
을 kube-apiserver-0
과 동일하게 설정합니다.
spec: nodeName: NODE_NAME
kube-apiserver-0
의 nodeName
을 표시하려면 다음 명령어를 실행합니다.
kubectl get pod kube-apiserver-0 -n USER_CLUSTER_NAME --kubeconfig kubeconfig -o jsonpath='{.spec.nodeName}'
각 감사 로그의 파일 이름에는 파일이 순환된 시점을 나타내는 타임스탬프가 있습니다. 파일에는 해당 시간 및 날짜까지의 감사 로그가 포함되어 있습니다.
Cloud 감사 로그
Console
Google Cloud 콘솔의 Logging 메뉴에서 로그 페이지로 이동합니다.
위에서 설명한 드롭다운 메뉴 바로 위의 라벨로 필터링 또는 텍스트 검색창에서 아래쪽 화살표를 클릭하여 드롭다운 메뉴를 엽니다. 메뉴에서 고급 필터로 전환을 클릭합니다.
텍스트 상자에 다음 필터를 입력합니다.
resource.type="k8s_cluster" logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity" protoPayload.serviceName="anthosgke.googleapis.com"
필터 제출을 클릭하여 이 프로젝트에 로그인하도록 구성된 VMware용 GKE 클러스터의 감사 로그를 모두 표시합니다.
gcloud
프로젝트의 관리자 활동 로그에서 k8s_cluster
리소스 유형에 적용되는 처음 두 로그 항목이 나열됩니다.
gcloud logging read \ 'logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity" \ AND resource.type="k8s_cluster" \ AND protoPayload.serviceName="anthosgke.googleapis.com" ' \ --limit 2 \ --freshness 300d
여기서 PROJECT_ID는 프로젝트 ID입니다.
출력에 두 로그 항목이 표시됩니다. 각 로그 항목에서 logName
필드의 값은 projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity
이고 protoPayload.serviceName
은 anthosgke.googleapis.com
과 동일합니다.
감사 정책
Cloud 감사 로그 동작은 정적으로 구성된 Kubernetes 감사 로깅 정책에 따라 결정됩니다. 이 정책 변경은 현재 지원되지 않지만 향후 출시 버전에서 지원될 것입니다.