보안 및 컴플라이언스


OpenShift Dedicated 4

OpenShift Dedicated에서 보안 컨텍스트 제약 조건 구성

Red Hat OpenShift Documentation Team

초록

이 문서에서는 OpenShift Dedicated에서 보안 컨텍스트 제약 조건을 구성하는 방법을 설명합니다.

1장. 감사 로그 보기

OpenShift Dedicated 감사는 시스템의 개별 사용자, 관리자 또는 기타 구성 요소에 의해 시스템에 영향을 준 활동 순서를 설명하는 보안 관련 레코드 집합을 제공합니다.

1.1. API 감사 로그 정보

감사는 API 서버 수준에서 작동하며 서버로 들어오는 모든 요청을 기록합니다. 각 감사 로그에는 다음 정보가 포함됩니다.

Expand
표 1.1. 감사 로그 필드
필드설명

level

이벤트가 생성된 감사 수준입니다.

auditID

각 요청에 생성되는 고유 감사 ID입니다.

stage

이 이벤트 인스턴스가 생성되었을 때의 요청 처리 단계입니다.

requestURI

클라이언트에서 서버로 보낸 요청 URI입니다.

verb

요청과 관련된 Kubernetes 동사입니다. 리소스가 아닌 요청의 경우 소문자 HTTP 메서드입니다.

user

인증된 사용자 정보입니다.

impersonatedUser

선택 사항: 요청에서 다른 사용자를 가장하는 경우 가장된 사용자 정보입니다.

sourceIPs

선택 사항: 요청이 발생한 소스 IP 및 중간 프록시입니다.

userAgent

선택 사항: 클라이언트에서 보고한 사용자 에이전트 문자열입니다. 사용자 에이전트는 클라이언트에서 제공하며 신뢰할 수 없습니다.

objectRef

선택 사항: 이 요청의 대상이 되는 오브젝트 참조입니다. 이는 List 유형의 요청 또는 리소스가 아닌 요청에는 적용되지 않습니다.

responseStatus

선택 사항: ResponseObjectStatus 유형이 아닌 경우에도 채워지는 응답 상태입니다. 성공적인 응답을 위해 여기에는 코드만 포함됩니다. 상태 유형이 아닌 오류 응답의 경우 오류 메시지가 자동으로 채워집니다.

requestObject

선택 사항: 요청의 API 오브젝트로, JSON 형식으로 되어 있습니다. RequestObject는 버전 변환, 기본값 설정, 승인 또는 병합 전에 요청에 있는 그대로(JSON으로 다시 인코딩될 수 있음) 기록됩니다. 외부 버전이 지정된 오브젝트 유형이며 그 자체로는 유효한 오브젝트가 아닐 수 있습니다. 리소스가 아닌 요청의 경우 생략되며 요청 수준 이상에서만 기록됩니다.

responseObject

선택 사항: 응답에서 반환된 API 오브젝트로, JSON 형식으로 되어 있습니다. ResponseObject는 외부 유형으로 변환된 후 기록되고 JSON으로 직렬화됩니다. 리소스가 아닌 요청의 경우 생략되며 응답 수준에서만 기록됩니다.

requestReceivedTimestamp

요청이 API 서버에 도달한 시간입니다.

stageTimestamp

요청이 현재 감사 단계에 도달한 시간입니다.

annotations

선택 사항: 인증, 권한 부여 및 승인 플러그인을 포함하여 요청 서비스 체인에서 호출한 플러그인에 의해 설정될 수 있는 감사 이벤트와 함께 저장되는 구조화되지 않은 키 값 맵입니다. 이러한 주석은 감사 이벤트용이며 제출된 오브젝트의 metadata.annotations와 일치하지 않습니다. 키는 이름 충돌을 방지하기 위해 알림 구성 요소를 고유하게 식별해야 합니다(예: podsecuritypolicy.admission.k8s.io/policy). 값은 짧아야 합니다. 주석은 메타데이터 수준에 포함됩니다.

Kubernetes API 서버의 출력 예:

{"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Metadata","auditID":"ad209ce1-fec7-4130-8192-c4cc63f1d8cd","stage":"ResponseComplete","requestURI":"/api/v1/namespaces/openshift-kube-controller-manager/configmaps/cert-recovery-controller-lock?timeout=35s","verb":"update","user":{"username":"system:serviceaccount:openshift-kube-controller-manager:localhost-recovery-client","uid":"dd4997e3-d565-4e37-80f8-7fc122ccd785","groups":["system:serviceaccounts","system:serviceaccounts:openshift-kube-controller-manager","system:authenticated"]},"sourceIPs":["::1"],"userAgent":"cluster-kube-controller-manager-operator/v0.0.0 (linux/amd64) kubernetes/$Format","objectRef":{"resource":"configmaps","namespace":"openshift-kube-controller-manager","name":"cert-recovery-controller-lock","uid":"5c57190b-6993-425d-8101-8337e48c7548","apiVersion":"v1","resourceVersion":"574307"},"responseStatus":{"metadata":{},"code":200},"requestReceivedTimestamp":"2020-04-02T08:27:20.200962Z","stageTimestamp":"2020-04-02T08:27:20.206710Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":"RBAC: allowed by ClusterRoleBinding \"system:openshift:operator:kube-controller-manager-recovery\" of ClusterRole \"cluster-admin\" to ServiceAccount \"localhost-recovery-client/openshift-kube-controller-manager\""}}
Copy to Clipboard Toggle word wrap

1.2. 감사 로그 보기

각 컨트롤 플레인 노드에 대한 OpenShift API 서버, Kubernetes API 서버, OpenShift OAuth API 서버 및 OpenShift OAuth 서버의 로그를 볼 수 있습니다.

참고

OpenShift Dedicated 배포에서 CCO(Customer Cloud Subscription) 모델을 사용하지 않는 고객은 Red Hat 지원에 문의하여 클러스터의 감사 로그 사본을 요청해야 합니다. API 서버 감사 로그를 보려면 cluster-admin 권한이 필요하기 때문입니다.

프로세스

감사 로그를 보려면 다음을 수행합니다.

  • OpenShift API 서버 감사 로그를 확인합니다.

    1. 각 컨트롤 플레인 노드에 사용할 수 있는 OpenShift API 서버 감사 로그를 나열합니다.

      $ oc adm node-logs --role=master --path=openshift-apiserver/
      Copy to Clipboard Toggle word wrap

      출력 예

      ci-ln-m0wpfjb-f76d1-vnb5x-master-0 audit-2021-03-09T00-12-19.834.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-0 audit.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-1 audit-2021-03-09T00-11-49.835.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-1 audit.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-2 audit-2021-03-09T00-13-00.128.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-2 audit.log
      Copy to Clipboard Toggle word wrap

    2. 노드 이름과 로그 이름을 제공하여 특정 OpenShift API 서버 감사 로그를 확인합니다.

      $ oc adm node-logs <node_name> --path=openshift-apiserver/<log_name>
      Copy to Clipboard Toggle word wrap

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

      $ oc adm node-logs ci-ln-m0wpfjb-f76d1-vnb5x-master-0 --path=openshift-apiserver/audit-2021-03-09T00-12-19.834.log
      Copy to Clipboard Toggle word wrap

      출력 예

      {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Metadata","auditID":"381acf6d-5f30-4c7d-8175-c9c317ae5893","stage":"ResponseComplete","requestURI":"/metrics","verb":"get","user":{"username":"system:serviceaccount:openshift-monitoring:prometheus-k8s","uid":"825b60a0-3976-4861-a342-3b2b561e8f82","groups":["system:serviceaccounts","system:serviceaccounts:openshift-monitoring","system:authenticated"]},"sourceIPs":["10.129.2.6"],"userAgent":"Prometheus/2.23.0","responseStatus":{"metadata":{},"code":200},"requestReceivedTimestamp":"2021-03-08T18:02:04.086545Z","stageTimestamp":"2021-03-08T18:02:04.107102Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":"RBAC: allowed by ClusterRoleBinding \"prometheus-k8s\" of ClusterRole \"prometheus-k8s\" to ServiceAccount \"prometheus-k8s/openshift-monitoring\""}}
      Copy to Clipboard Toggle word wrap

  • Kubernetes API 서버 감사 로그를 확인합니다.

    1. 각 컨트롤 플레인 노드에 사용할 수 있는 Kubernetes API 서버 감사 로그를 나열합니다.

      $ oc adm node-logs --role=master --path=kube-apiserver/
      Copy to Clipboard Toggle word wrap

      출력 예

      ci-ln-m0wpfjb-f76d1-vnb5x-master-0 audit-2021-03-09T14-07-27.129.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-0 audit.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-1 audit-2021-03-09T19-24-22.620.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-1 audit.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-2 audit-2021-03-09T18-37-07.511.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-2 audit.log
      Copy to Clipboard Toggle word wrap

    2. 노드 이름과 로그 이름을 제공하여 특정 Kubernetes API 서버 감사 로그를 확인합니다.

      $ oc adm node-logs <node_name> --path=kube-apiserver/<log_name>
      Copy to Clipboard Toggle word wrap

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

      $ oc adm node-logs ci-ln-m0wpfjb-f76d1-vnb5x-master-0 --path=kube-apiserver/audit-2021-03-09T14-07-27.129.log
      Copy to Clipboard Toggle word wrap

      출력 예

      {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Metadata","auditID":"cfce8a0b-b5f5-4365-8c9f-79c1227d10f9","stage":"ResponseComplete","requestURI":"/api/v1/namespaces/openshift-kube-scheduler/serviceaccounts/openshift-kube-scheduler-sa","verb":"get","user":{"username":"system:serviceaccount:openshift-kube-scheduler-operator:openshift-kube-scheduler-operator","uid":"2574b041-f3c8-44e6-a057-baef7aa81516","groups":["system:serviceaccounts","system:serviceaccounts:openshift-kube-scheduler-operator","system:authenticated"]},"sourceIPs":["10.128.0.8"],"userAgent":"cluster-kube-scheduler-operator/v0.0.0 (linux/amd64) kubernetes/$Format","objectRef":{"resource":"serviceaccounts","namespace":"openshift-kube-scheduler","name":"openshift-kube-scheduler-sa","apiVersion":"v1"},"responseStatus":{"metadata":{},"code":200},"requestReceivedTimestamp":"2021-03-08T18:06:42.512619Z","stageTimestamp":"2021-03-08T18:06:42.516145Z","annotations":{"authentication.k8s.io/legacy-token":"system:serviceaccount:openshift-kube-scheduler-operator:openshift-kube-scheduler-operator","authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":"RBAC: allowed by ClusterRoleBinding \"system:openshift:operator:cluster-kube-scheduler-operator\" of ClusterRole \"cluster-admin\" to ServiceAccount \"openshift-kube-scheduler-operator/openshift-kube-scheduler-operator\""}}
      Copy to Clipboard Toggle word wrap

  • OpenShift OAuth API 서버 감사 로그를 확인합니다.

    1. 각 컨트롤 플레인 노드에 사용할 수 있는 OpenShift OAuth API 서버 감사 로그를 나열합니다.

      $ oc adm node-logs --role=master --path=oauth-apiserver/
      Copy to Clipboard Toggle word wrap

      출력 예

      ci-ln-m0wpfjb-f76d1-vnb5x-master-0 audit-2021-03-09T13-06-26.128.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-0 audit.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-1 audit-2021-03-09T18-23-21.619.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-1 audit.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-2 audit-2021-03-09T17-36-06.510.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-2 audit.log
      Copy to Clipboard Toggle word wrap

    2. 노드 이름과 로그 이름을 제공하여 특정 OpenShift OAuth API 서버 감사 로그를 확인합니다.

      $ oc adm node-logs <node_name> --path=oauth-apiserver/<log_name>
      Copy to Clipboard Toggle word wrap

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

      $ oc adm node-logs ci-ln-m0wpfjb-f76d1-vnb5x-master-0 --path=oauth-apiserver/audit-2021-03-09T13-06-26.128.log
      Copy to Clipboard Toggle word wrap

      출력 예

      {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Metadata","auditID":"dd4c44e2-3ea1-4830-9ab7-c91a5f1388d6","stage":"ResponseComplete","requestURI":"/apis/user.openshift.io/v1/users/~","verb":"get","user":{"username":"system:serviceaccount:openshift-monitoring:prometheus-k8s","groups":["system:serviceaccounts","system:serviceaccounts:openshift-monitoring","system:authenticated"]},"sourceIPs":["10.0.32.4","10.128.0.1"],"userAgent":"dockerregistry/v0.0.0 (linux/amd64) kubernetes/$Format","objectRef":{"resource":"users","name":"~","apiGroup":"user.openshift.io","apiVersion":"v1"},"responseStatus":{"metadata":{},"code":200},"requestReceivedTimestamp":"2021-03-08T17:47:43.653187Z","stageTimestamp":"2021-03-08T17:47:43.660187Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":"RBAC: allowed by ClusterRoleBinding \"basic-users\" of ClusterRole \"basic-user\" to Group \"system:authenticated\""}}
      Copy to Clipboard Toggle word wrap

  • OpenShift OAuth 서버 감사 로그를 확인합니다.

    1. 각 컨트롤 플레인 노드에 사용할 수 있는 OpenShift OAuth 서버 감사 로그를 나열합니다.

      $ oc adm node-logs --role=master --path=oauth-server/
      Copy to Clipboard Toggle word wrap

      출력 예

      ci-ln-m0wpfjb-f76d1-vnb5x-master-0 audit-2022-05-11T18-57-32.395.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-0 audit.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-1 audit-2022-05-11T19-07-07.021.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-1 audit.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-2 audit-2022-05-11T19-06-51.844.log
      ci-ln-m0wpfjb-f76d1-vnb5x-master-2 audit.log
      Copy to Clipboard Toggle word wrap

    2. 노드 이름과 로그 이름을 지정하여 특정 OpenShift OAuth 서버 감사 로그를 확인합니다.

      $ oc adm node-logs <node_name> --path=oauth-server/<log_name>
      Copy to Clipboard Toggle word wrap

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

      $ oc adm node-logs ci-ln-m0wpfjb-f76d1-vnb5x-master-0 --path=oauth-server/audit-2022-05-11T18-57-32.395.log
      Copy to Clipboard Toggle word wrap

      출력 예

      {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Metadata","auditID":"13c20345-f33b-4b7d-b3b6-e7793f805621","stage":"ResponseComplete","requestURI":"/login","verb":"post","user":{"username":"system:anonymous","groups":["system:unauthenticated"]},"sourceIPs":["10.128.2.6"],"userAgent":"Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0","responseStatus":{"metadata":{},"code":302},"requestReceivedTimestamp":"2022-05-11T17:31:16.280155Z","stageTimestamp":"2022-05-11T17:31:16.297083Z","annotations":{"authentication.openshift.io/decision":"error","authentication.openshift.io/username":"kubeadmin","authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":""}}
      Copy to Clipboard Toggle word wrap

      authentication.openshift.io/decision 주석에 사용 가능한 값은 allow,deny 또는 error 입니다.

1.3. 감사 로그 필터링

jq 또는 다른 JSON 구문 분석 툴을 사용하여 API 서버 감사 로그를 필터링할 수 있습니다.

참고

설정된 감사 로그 정책에 의해 API 서버 감사 로그에 기록되는 정보의 양을 제어할 수 있습니다.

다음 절차에서는 jq를 사용하여 컨트롤 플레인 노드node-1.example.com에서 감사 로그를 필터링하는 예를 제공합니다. jq를 사용하는 방법에 대한 자세한 내요ㅇ은 jq 설명서를 참조하십시오.

사전 요구 사항

  • dedicated-admin 역할의 사용자로 클러스터에 액세스할 수 있습니다.
  • jq를 설치했습니다.

프로세스

  • 사용자가 OpenShift API 서버 감사 로그를 필터링합니다.

    $ oc adm node-logs node-1.example.com  \
      --path=openshift-apiserver/audit.log \
      | jq 'select(.user.username == "myusername")'
    Copy to Clipboard Toggle word wrap
  • 사용자 에이전트가 OpenShift API 서버 감사 로그를 필터링합니다.

    $ oc adm node-logs node-1.example.com  \
      --path=openshift-apiserver/audit.log \
      | jq 'select(.userAgent == "cluster-version-operator/v0.0.0 (linux/amd64) kubernetes/$Format")'
    Copy to Clipboard Toggle word wrap
  • 특정 API 버전 별로 Kubernetes API 서버 감사 로그를 필터링하고 사용자 에이전트만 출력합니다.

    $ oc adm node-logs node-1.example.com  \
      --path=kube-apiserver/audit.log \
      | jq 'select(.requestURI | startswith("/apis/apiextensions.k8s.io/v1beta1")) | .userAgent'
    Copy to Clipboard Toggle word wrap
  • 동사 제외하여 OpenShift OAuth API 서버 감사 로그를 필터링합니다.

    $ oc adm node-logs node-1.example.com  \
      --path=oauth-apiserver/audit.log \
      | jq 'select(.verb != "get")'
    Copy to Clipboard Toggle word wrap
  • 사용자 이름을 식별하고 오류와 함께 실패한 이벤트로 OpenShift OAuth 서버 감사 로그를 필터링합니다.

    $ oc adm node-logs node-1.example.com  \
      --path=oauth-server/audit.log \
      | jq 'select(.annotations["authentication.openshift.io/username"] != null and .annotations["authentication.openshift.io/decision"] == "error")'
    Copy to Clipboard Toggle word wrap

1.4. 감사 로그 수집

must-gather 툴을 사용하여 Red Hat Support를 검토하거나 보낼 수 있는 클러스터 디버깅을 위한 감사 로그를 수집할 수 있습니다.

참고

OpenShift Dedicated 배포에서 CCO(Customer Cloud Subscription) 모델을 사용하지 않는 고객은 Red Hat 지원에 문의하여 클러스터의 감사 로그 사본을 요청해야 합니다. must-gather 툴을 사용하려면 cluster-admin 권한이 필요하기 때문입니다.

프로세스

  1. -- /usr/bin/gather_audit_logs:를 사용하여 oc adm must-gather 명령을 실행합니다.

    $ oc adm must-gather -- /usr/bin/gather_audit_logs
    Copy to Clipboard Toggle word wrap
  2. 작업 디렉토리에서 생성된 must-gather 디렉토리에서 압축 파일을 만듭니다. 예를 들어 Linux 운영 체제를 사용하는 컴퓨터에서 다음 명령을 실행합니다.

    $ tar cvaf must-gather.tar.gz must-gather.local.472290403699006248 
    1
    Copy to Clipboard Toggle word wrap
    1
    must-gather-local.472290403699006248 을 실제 디렉터리 이름으로 교체합니다.
  3. 압축 파일을 Red Hat 고객 포털 고객 지원 페이지의 지원 케이스에 첨부합니다.

Legal Notice

Copyright © 2025 Red Hat

OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).

Modified versions must remove all Red Hat trademarks.

Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.

Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.

Linux® is the registered trademark of Linus Torvalds in the United States and other countries.

Java® is a registered trademark of Oracle and/or its affiliates.

XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.

MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.

The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.

All other trademarks are the property of their respective owners.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat