로깅 및 감사 로깅 (LOG 및 AL)

Google Distributed Cloud (GDC) 에어 갭 어플라이언스의 로깅 및 감사 로깅 (LOG 및 AL) 감사 로그를 사용하면 루트 및 조직 워크로드의 로깅 및 모니터링 파이프라인에 대한 관리 및 데이터 액세스 작업을 추적할 수 있습니다. Kubernetes 감사 로그와 모니터링 가능성 감사 로거는 LoggingTarget, AuditLoggingTarget, LoggingRule, ObservabilityPipeline 커스텀 리소스와 Loki 및 Prometheus 쿼리의 사용자 또는 서비스 ID, 대상 리소스, JSON 페이로드 필드를 기록합니다.

감사 로그 소스

감사 대상 작업

모니터링 인스턴스의 사용자 인터페이스를 사용하여 LogQL 쿼리를 실행하거나 로그를 내보냅니다.

감사 로그 소스

프록시 서버

로그 유형

데이터 영역

감사 정보가 포함된 로그 항목의 필드
감사 메타데이터 감사 필드 이름 값
사용자 또는 서비스 ID user

예를 들면 다음과 같습니다.

"user": {
  "issuer": "https://ais-core.org-1.zone1.google.gdch.test",
  "identity": "fop-infrastructure-operator@example.com"
  }

대상

(API를 호출하는 필드 및 값)

resource

예를 들면 다음과 같습니다.

"resource": "/infra-obs/grafana/api/ds/query"

작업

(수행된 작업이 포함된 필드)

action

가능한 값은 다음과 같습니다.

  • "action": "QUERY"
  • "action": "CREATE"
  • "action": "READ"
  • "action": "UPDATE"
  • "action": "DELETE"
  • "action": "CREATE/UPDATE"

이벤트 타임스탬프 time

예를 들면 다음과 같습니다.

"time": "2022-12-02T21:37:03.657277582Z"

조치 소스
  • sourceIPs
  • _gdch_service_name

예를 들면 다음과 같습니다.

"sourceIPs": [
  [
  "10.253.165.26",
  "127.0.0.6"
],
"_gdch_service_name": "grafana"

결과 response

예를 들면 다음과 같습니다.

"response": "Successful: 200 OK"

기타 필드 description description 값에는 전체 쿼리가 포함됩니다. 자세한 내용은 로그 예시를 참조하세요.

예시 로그

{
  "sourceIPs": [
    "10.253.165.26",
    "127.0.0.6"
  ],
  "description": "{
    \"queries\":
      [{
        \"refId\":\"A\",
        \"datasource\":
          {
            \"uid\":\"P762A5DD6F13C8B7A\",
            \"type\":\"loki\"
          },
        \"editorMode\":\"builder\",
        \"expr\":\"{service_name=\\\"grafana\\\"} |= ``\",
        \"queryType\":\"range\",
        \"key\":\"Q-fd978c0c-86fd-4c70-bb38-07737a3be3ad-0\",
        \"maxLines\":1000,
        \"legendFormat\":\"\",
        \"datasourceId\":3,
        \"intervalMs\":500,
        \"maxDataPoints\":1688
      }],
    \"range\":
      {
        \"from\":\"2022-12-02T21:22:03.496Z\",
        \"to\":\"2022-12-02T21:37:03.496Z\",
        \"raw\":{\"from\":\"now-15m\",\"to\":\"now\"}
      },
    \"from\":\"1670016123496\",
    \"to\":\"1670017023496\"
  }",
  "response": "Successful: 200 OK",
  "_gdch_namespace": "infra-obs-obs-system",
  "numBytesSent": 190079,
  "time": "2022-12-02T21:37:03.657277582Z",
  "user": {
    "issuer": "https://ais-core.org-1.zone1.google.gdch.test",
    "identity": "fop-infrastructure-operator@example.com"
  },
  "_gdch_service_name": "grafana",
  "_gdch_service_tenant": "infra-obs",
  "numBytesReceived": 3172,
  "resource": "/infra-obs/grafana/api/ds/query",
  "auditID": "b519ec65-d906-4a79-bcfe-a4e1984045fe",
  "action": "QUERY",
  "_gdch_cluster": "org-1-admin",
  "_gdch_fluentbit_pod": "anthos-audit-logs-forwarder-9x9pd"
}

LoggingTarget 커스텀 리소스에서 작업 수행

감사 로그 소스

Kubernetes 감사 로그

로그 유형

컨트롤 플레인

감사 정보가 포함된 로그 항목의 필드
감사 메타데이터 감사 필드 이름 값
사용자 또는 서비스 ID user

예를 들면 다음과 같습니다.

"user": {
    "extra": {
        "authentication.kubernetes.io/pod-name": [
            "fleet-admin-controller-875778d98-99l6n"
        ],
        "authentication.kubernetes.io/pod-uid": [
            "4800e06c-c96d-4e17-ae1a-b5a74eedf6ee"
        ]
    },
    "uid": "b18e586e-db0e-417e-9dff-1a722ab36bf4",
    "username": "system:serviceaccount:gpc-system:fleet-admin-controller",
    "groups": [
        "system:serviceaccounts",
        "system:serviceaccounts:gpc-system",
        "system:authenticated"
    ]
}

대상

(API를 호출하는 필드 및 값)

  • requestURI
  • objectRef

예를 들면 다음과 같습니다.

"requestURI": "/apis/logging.gdc.goog/v1/namespaces/obs-system/loggingtargets/lt-cfg1",
"objectRef": {
    "uid": "2e540720-ed23-4665-8c40-c399cb6be624",
    "namespace": "obs-system",
    "name": "lt-cfg1",
    "resource": "loggingtargets",
    "apiVersion": "v1",
    "apiGroup": "logging.gdc.goog",
    "resourceVersion": "5326570"
}

작업

(수행된 작업이 포함된 필드)

verb

가능한 값은 다음과 같습니다.

  • "verb": "create"
  • "verb": "delete"
  • "verb": "get"
  • "verb": "list"
  • "verb": "patch"
  • "verb": "update"
  • "verb": "watch"

이벤트 타임스탬프 requestReceivedTimestamp

예를 들면 다음과 같습니다.

"requestReceivedTimestamp": "2022-12-06T14:37:41.035715Z"

조치 소스
  • sourceIPs
  • _gdch_service_name

예를 들면 다음과 같습니다.

"sourceIPs": [
    "10.253.164.209"
],
"_gdch_service_name": "apiserver"

결과 responseStatus

예를 들면 다음과 같습니다.

"responseStatus": {
    "metadata": {},
    "code": 200
}

기타 필드 해당 없음 해당 없음

예시 로그

{
  "level": "Metadata",
  "auditID": "94c2106f-1fd1-428b-adbc-80ac48ef479e",
  "_gdch_cluster": "org-1-admin",
  "requestURI": "/apis/logging.gdc.goog/v1/namespaces/obs-system/loggingtargets/lt-cfg1",
  "_gdch_fluentbit_pod": "anthos-audit-logs-forwarder-4gwpn",
  "verb": "update",
  "userAgent": "fleet-admin-cm/v0.0.0 (linux/amd64) kubernetes/$Format",
  "responseStatus": {
    "metadata": {},
    "code": 200
  },
  "user": {
    "extra": {
      "authentication.kubernetes.io/pod-name": [
        "fleet-admin-controller-875778d98-99l6n"
      ],
      "authentication.kubernetes.io/pod-uid": [
        "4800e06c-c96d-4e17-ae1a-b5a74eedf6ee"
      ]
    },
    "uid": "b18e586e-db0e-417e-9dff-1a722ab36bf4",
    "username": "system:serviceaccount:gpc-system:fleet-admin-controller",
    "groups": [
      "system:serviceaccounts",
      "system:serviceaccounts:gpc-system",
      "system:authenticated"
    ]
  },
  "annotations": {
    "authorization.k8s.io/decision": "allow",
    "authorization.k8s.io/reason": "RBAC: allowed by ClusterRoleBinding \"fleet-admin-common-controller\" of ClusterRole \"fleet-admin-common-controllers-role\" to ServiceAccount \"fleet-admin-controller/gpc-system\""
  },
  "sourceIPs": [
    "10.253.164.209"
  ],
  "stage": "ResponseComplete",
  "kind": "Event",
  "apiVersion": "audit.k8s.io/v1",
  "stageTimestamp": "2022-12-06T14:37:41.035715Z",
  "objectRef": {
    "uid": "2e540720-ed23-4665-8c40-c399cb6be624",
    "namespace": "obs-system",
    "name": "lt-cfg1",
    "resource": "loggingtargets",
    "apiVersion": "v1",
    "apiGroup": "logging.gdc.goog",
    "resourceVersion": "5326570"
  },
  "requestReceivedTimestamp": "2022-12-06T14:37:40.942762Z",
  "_gdch_service_name": "apiserver"
}

AuditLoggingTarget 커스텀 리소스에서 작업 수행

감사 로그 소스

Kubernetes 감사 로그

로그 유형

컨트롤 플레인

감사 정보가 포함된 로그 항목의 필드
감사 메타데이터 감사 필드 이름 값
사용자 또는 서비스 ID user

예를 들면 다음과 같습니다.

"user": {
    "groups": [
        "system:masters",
        "system:authenticated"
    ],
    "username": "kubernetes-admin"
}

대상

(API를 호출하는 필드 및 값)

  • requestURI
  • objectRef

예를 들면 다음과 같습니다.

"requestURI": "/apis/logging.private.gdc.goog/v1/namespaces/obs-system/auditloggingtargets/audit-logging-config-qwerty",
"objectRef": {
    "name": "audit-logging-config-qwerty",
    "namespace": "obs-system",
    "resource": "auditloggingtargets",
    "apiGroup": "logging.private.gdc.goog",
    "apiVersion": "v1"
}

작업

(수행된 작업이 포함된 필드)

verb

가능한 값은 다음과 같습니다.

  • "verb": "create"
  • "verb": "delete"
  • "verb": "get"
  • "verb": "list"
  • "verb": "patch"
  • "verb": "update"
  • "verb": "watch"

이벤트 타임스탬프 requestReceivedTimestamp

예를 들면 다음과 같습니다.

"requestReceivedTimestamp": "2022-12-05T19:09:56.861278Z"

조치 소스
  • sourceIPs
  • _gdch_service_name

예를 들면 다음과 같습니다.

"sourceIPs": [
    "10.200.0.7"
],
"_gdch_service_name": "apiserver"

결과 responseStatus

예를 들면 다음과 같습니다.

"responseStatus": {
    "metadata": {},
    "code": 200
}

기타 필드 해당 없음 해당 없음

예시 로그

{
    "level": "Metadata",
    "auditID": "1fd8d531-c488-4478-8341-47346b1b6eda",
    "stageTimestamp": "2022-12-05T19:09:56.861278Z",
    "stage": "RequestReceived",
    "_gdch_cluster": "org-1-admin",
    "verb": "delete",
    "_gdch_fluentbit_pod": "anthos-audit-logs-forwarder-56tbb",
    "requestReceivedTimestamp": "2022-12-05T19:09:56.861278Z",
    "objectRef": {
        "name": "audit-logging-config-qwerty",
        "namespace": "obs-system",
        "resource": "auditloggingtargets",
        "apiGroup": "logging.private.gdc.goog",
        "apiVersion": "v1"
    },
    "user": {
        "groups": [
            "system:masters",
            "system:authenticated"
        ],
        "username": "kubernetes-admin"
    },
    "sourceIPs": [
        "10.200.0.7"
    ],
    "kind": "Event",
    "userAgent": "k9s/v0.0.0 (linux/amd64) kubernetes/$Format",
    "apiVersion": "audit.k8s.io/v1",
    "requestURI": "/apis/logging.private.gdc.goog/v1/namespaces/obs-system/auditloggingtargets/audit-logging-config-qwerty",
    "_gdch_service_name": "apiserver"
}

LoggingRule 커스텀 리소스에서 작업 수행

감사 로그 소스

Kubernetes 감사 로그

로그 유형

컨트롤 플레인

감사 정보가 포함된 로그 항목의 필드
감사 메타데이터 감사 필드 이름 값
사용자 또는 서비스 ID user

예를 들면 다음과 같습니다.

"user": {
    "extra": {
        "authentication.kubernetes.io/pod-name": [
            "fleet-admin-controller-875778d98-99l6n"
        ],
        "authentication.kubernetes.io/pod-uid": [
            "4800e06c-c96d-4e17-ae1a-b5a74eedf6ee"
        ]
    },
    "uid": "b18e586e-db0e-417e-9dff-1a722ab36bf4",
    "username": "system:serviceaccount:gpc-system:fleet-admin-controller",
    "groups": [
        "system:serviceaccounts",
        "system:serviceaccounts:gpc-system",
        "system:authenticated"
    ]
}

대상

(API를 호출하는 필드 및 값)

  • requestURI
  • objectRef

예를 들면 다음과 같습니다.

"requestURI": "/apis/logging.gdc.goog/v1/namespaces/obs-system/loggingrules/lr-cfg1",
"objectRef": {
    "uid": "2e540720-ed23-4665-8c40-c399cb6be624",
    "namespace": "obs-system",
    "name": "lr-cfg1",
    "resource": "loggingrules",
    "apiVersion": "v1",
    "apiGroup": "logging.gdc.goog",
    "resourceVersion": "5326570"
}

작업

(수행된 작업이 포함된 필드)

verb

가능한 값은 다음과 같습니다.

  • "verb": "create"
  • "verb": "delete"
  • "verb": "get"
  • "verb": "list"
  • "verb": "patch"
  • "verb": "update"
  • "verb": "watch"

이벤트 타임스탬프 requestReceivedTimestamp

예를 들면 다음과 같습니다.

"requestReceivedTimestamp": "2022-12-06T14:37:41.035715Z"

조치 소스
  • sourceIPs
  • _gdch_service_name

예를 들면 다음과 같습니다.

"sourceIPs": [
    "10.253.164.209"
],
"_gdch_service_name": "apiserver"

결과 responseStatus

예를 들면 다음과 같습니다.

"responseStatus": {
    "metadata": {},
    "code": 200
}

기타 필드 해당 없음 해당 없음

예시 로그

{
  "level": "Metadata",
  "auditID": "94c2106f-1fd1-428b-adbc-80ac48ef479e",
  "_gdch_cluster": "org-1-admin",
  "requestURI": "/apis/logging.gdc.goog/v1/namespaces/obs-system/loggingrules/lr-cfg1",
  "_gdch_fluentbit_pod": "anthos-audit-logs-forwarder-4gwpn",
  "verb": "update",
  "userAgent": "fleet-admin-cm/v0.0.0 (linux/amd64) kubernetes/$Format",
  "responseStatus": {
    "metadata": {},
    "code": 200
  },
  "user": {
    "extra": {
      "authentication.kubernetes.io/pod-name": [
        "fleet-admin-controller-875778d98-99l6n"
      ],
      "authentication.kubernetes.io/pod-uid": [
        "4800e06c-c96d-4e17-ae1a-b5a74eedf6ee"
      ]
    },
    "uid": "b18e586e-db0e-417e-9dff-1a722ab36bf4",
    "username": "system:serviceaccount:gpc-system:fleet-admin-controller",
    "groups": [
      "system:serviceaccounts",
      "system:serviceaccounts:gpc-system",
      "system:authenticated"
    ]
  },
  "annotations": {
    "authorization.k8s.io/decision": "allow",
    "authorization.k8s.io/reason": "RBAC: allowed by ClusterRoleBinding \"fleet-admin-common-controller\" of ClusterRole \"fleet-admin-common-controllers-role\" to ServiceAccount \"fleet-admin-controller/gpc-system\""
  },
  "sourceIPs": [
    "10.253.164.209"
  ],
  "stage": "ResponseComplete",
  "kind": "Event",
  "apiVersion": "audit.k8s.io/v1",
  "stageTimestamp": "2022-12-06T14:37:41.035715Z",
  "objectRef": {
    "uid": "2e540720-ed23-4665-8c40-c399cb6be624",
    "namespace": "obs-system",
    "name": "lr-cfg1",
    "resource": "loggingrules",
    "apiVersion": "v1",
    "apiGroup": "logging.gdc.goog",
    "resourceVersion": "5326570"
  },
  "requestReceivedTimestamp": "2022-12-06T14:37:40.942762Z",
  "_gdch_service_name": "apiserver"
}

ObservabilityPipeline 커스텀 리소스에서 작업 수행

감사 로그 소스

Kubernetes 감사 로그

로그 유형

컨트롤 플레인

감사 정보가 포함된 로그 항목의 필드
감사 메타데이터 감사 필드 이름 값
사용자 또는 서비스 ID user

예를 들면 다음과 같습니다.

"user": {
    "username": "kubernetes-admin",
    "groups": [
        "system:masters",
        "system:authenticated"
    ]
}

대상

(API를 호출하는 필드 및 값)

  • requestURI
  • objectRef

예를 들면 다음과 같습니다.

"requestURI": "/apis/observability.gdc.goog/v1/namespaces/obs-system/observabilitypipelines/default",
"objectRef": {
    "apiGroup": "observability.gdc.goog",
    "apiVersion": "v1",
    "name": "default",
    "resource": "observabilitypipelines",
    "namespace": "obs-system"
}

작업

(수행된 작업이 포함된 필드)

verb

가능한 값은 다음과 같습니다.

  • "verb": "create"
  • "verb": "delete"
  • "verb": "get"
  • "verb": "list"
  • "verb": "patch"
  • "verb": "update"
  • "verb": "watch"

이벤트 타임스탬프 requestReceivedTimestamp

예를 들면 다음과 같습니다.

"requestReceivedTimestamp": "2022-12-06T14:58:03.742024Z"

조치 소스
  • sourceIPs
  • _gdch_service_name

예를 들면 다음과 같습니다.

"sourceIPs": [
    "10.200.0.7"
],
"_gdch_service_name": "apiserver"

결과 responseStatus

예를 들면 다음과 같습니다.

"responseStatus": {
    "metadata": {},
    "code": 200
}

기타 필드 해당 없음 해당 없음

예시 로그

{
    "_gdch_fluentbit_pod": "anthos-audit-logs-forwarder-sff9t",
    "requestURI": "/apis/observability.gdc.goog/v1/namespaces/obs-system/observabilitypipelines/default",
    "stage": "RequestReceived",
    "verb": "get",
    "user": {
        "username": "kubernetes-admin",
        "groups": [
            "system:masters",
            "system:authenticated"
        ]
    },
    "objectRef": {
        "apiGroup": "observability.gdc.goog",
        "apiVersion": "v1",
        "name": "default",
        "resource": "observabilitypipelines",
        "namespace": "obs-system"
    },
    "requestReceivedTimestamp": "2022-12-06T14:58:03.742024Z",
    "stageTimestamp": "2022-12-06T14:58:03.742024Z",
    "level": "Metadata",
    "auditID": "f5a473cf-65c9-4706-aa0e-e657c9f308f7",
    "_gdch_cluster": "org-1-admin",
    "userAgent": "kubectl/v1.25.4 (linux/amd64) kubernetes/872a965",
    "sourceIPs": [
        "10.200.0.7"
    ],
    "kind": "Event",
    "apiVersion": "audit.k8s.io/v1",
    "_gdch_service_name": "apiserver"
}