컨텍스트 기반 제한사항으로 클러스터 리소스 보호

컨텍스트 기반 제한을 통해 계정 소유자와 관리자는 액세스 요청의 컨텍스트에 따라 IBM Cloud® 리소스에 대한 액세스 제한을 정의하고 적용할 수 있습니다. Red Hat OpenShift on IBM Cloud 리소스에 대한 액세스는 컨텍스트 기반 제한과 ID 및 액세스 관리 정책으로 제어할 수 있습니다.

이 제한사항은 ID를 기반으로 하는 일반적인 IAM 정책에 대한 작업을 수행하여 추가 보호 계층이 제공됩니다. IAM 정책과는 달리, 컨텍스트 기반 제한사항으로 액세스 권한이 부여되지 않습니다. 컨텍스트 기반 제한사항은 사용자가 구성하는 허용된 컨텍스트에서 액세스 요청이 발생하는지 확인합니다. IAM 액세스 및 컨텍스트 기반 제한사항이 모두 액세스를 허용하므로, 컨텍스트 기반 제한사항은 손상되거나 관리되지 않은 인증 정보의 경우에도 보호를 제공합니다. 자세한 정보는 컨텍스트 기반 제한사항은 무엇입니까?를 참조하십시오.

규칙을 만들거나 업데이트 또는 삭제하려면 Red Hat OpenShift on IBM Cloud 서비스에서 관리자 역할이 있어야 합니다. 또한 사용자는 네트워크 구역을 작성, 업데이트 또는 삭제하기 위해 컨텍스트 기반 제한사항 서비스에 대한 편집자 또는 관리자 역할을 가지고 있어야 합니다.

생성된 모든 Activity Tracker 또는 감사 로그 이벤트는 Red Hat OpenShift on IBM Cloud이 아닌 컨텍스트 기반 제한사항 서비스에서 발생합니다. 자세한 정보는 컨텍스트 기반 제한사항 모니터링 을 참조하십시오.

Cluster API 유형을 사용하여 제한할 수 있는 클러스터 제어 영역에 액세스하려는 시도는 Activity Tracker 또는 감사 로그 이벤트를 생성하지 않습니다.

Red Hat OpenShift on IBM Cloud 이 컨텍스트 기반 제한사항과 통합되는 방법

클러스터 제어 플레인 API 또는 IBM Cloud 클러스터 관리 API에 대한 컨텍스트 기반 제한(CBR)을 만들 수 있습니다. 컨텍스트 기반 제한사항을 사용하여 다음 자원을 보호할 수 있습니다.

클러스터 컨트롤 플레인 API
클러스터 또는 클러스터의 특정 네임스페이스에 대한 Red Hat OpenShift on IBM Cloud API에 대한 액세스를 보호합니다. 예를 들어 API를 보호하여 Kubernetes 네임스페이스를 만들 수 있습니다.
관리 API
특정 클러스터의 Red Hat OpenShift on IBM Cloud API에 대한 액세스를 보호합니다. 예를 들어 API를 보호하여 클러스터를 만들 수 있습니다.

Red Hat OpenShift on IBM Cloud 클러스터에서 실행되는 애플리케이션(예: Kubernetes LoadBalancer 에 의해 노출된 웹 서버)은 CBR 규칙의 제한을 받지 않습니다.

클러스터 리소스 보호

특정 지역 및 클러스터를 보호하기 위해 CBR 규칙을 작성할 수 있습니다.

클러스터
특정 Red Hat OpenShift on IBM Cloud 클러스터를 보호합니다. CBR 규칙에서 클러스터를 선택하는 경우 규칙과 연관시키는 네트워크 구역의 리소스에서만 해당 클러스터와 상호작용할 수 있습니다.
CLI를 사용하는 경우 --service-instance CLUSTER-ID 옵션을 지정하여 특정 클러스터를 보호할 수 있습니다.
API를 사용하는 경우 리소스 속성에서 "name": "serviceInstance","value": "CLUSTER-ID" 을 지정할 수 있습니다.
지역
특정 지역에서 Red Hat OpenShift on IBM Cloud 자원을 보호합니다. CBR 규칙에서 지역을 선택하는 경우, 규칙과 연관시키는 네트워크 구역의 리소스에서만 해당 지역의 리소스와 상호작용할 수 있습니다.
CLI를 사용하는 경우 --region REGION 옵션을 지정하여 특정 지역의 리소스를 보호할 수 있습니다.
API를 사용하는 경우 리소스 속성에서 "name": "region","value": "REGION" 필드를 지정할 수 있습니다.
리소스 그룹
특정 리소스 그룹에서 Red Hat OpenShift on IBM Cloud 리소스를 보호합니다.
CLI를 사용하는 경우 --resource-group-id RESOURCE-GROUP-ID 옵션을 지정하여 특정 리소스 그룹에 있는 리소스를 보호할 수 있습니다.
API를 사용하는 경우 리소스 속성에서 "name": "resourceGroupId","value": "RESOURCE-GROUP-ID" 필드를 지정할 수 있습니다.

특정 API 보호

Red Hat OpenShift on IBM Cloud에 대해 다음 API 유형을 보호하기 위해 CBR 규칙을 작성할 수 있습니다.

클러스터 제어 플레인 API
네임스페이스, 팟 (Pod) 등을 작성하기 위한 API와 같은 클러스터 내의 API에 대한 액세스를 보호하십시오. 클러스터 API 유형에 적용되는 CBR 규칙은 해당 클러스터에 대한 모든 oc 명령을 포함하는 클러스터 API 서버에 대한 액세스를 제어합니다. CBR 규칙에서 클러스터 제어 플레인 API를 선택하는 경우 해당 규칙과 연관된 네트워크 구역의 리소스로부터의 트래픽만 클러스터 제어 플레인 API와 상호작용할 수 있습니다. 다른 모든 요청은 차단됩니다.
CLI를 사용하는 경우 --api-types 옵션과 crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster 유형을 지정할 수 있습니다.
API를 사용하는 경우 "operations" 사양에 "api_type_id": "crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster" 을 지정할 수 있습니다.
관리 API
클러스터, 작업자 풀 등을 프로비저닝하고 관리하기 위한 API에 대한 액세스를 보호합니다. 관리 API 유형 제어에 적용되는 CBR 규칙은 ibmcloud oc clusters, ibmcloud oc cluster create 등과 같은 모든 ibmcloud oc 명령 호출을 포함하는 Red Hat OpenShift on IBM Cloud API에 액세스합니다. CBR 규칙에서 관리 API를 선택하면 규칙과 연관된 네트워크 구역의 자원이 관리 API와 상호작용할 수 있습니다.
CLI를 사용하는 경우 --api-types 옵션과 crn:v1:bluemix:public:containers-kubernetes::::api-type:management 유형을 지정할 수 있습니다.
API를 사용하는 경우 "operations" 사양에 "api_type_id": "crn:v1:bluemix:public:containers-kubernetes::::api-type:management" 을 지정할 수 있습니다.

예제 CBR 시나리오를 따르려면 컨텍스트 기반 제한사항 설정 을 참조하십시오.

CLI에서 서비스 참조 대상 목록을 가져오려면 ibmcloud cbr service-ref-targets 명령을 실행합니다.

다른 IBM Cloud 리소스에 대해 CBR이 활성화된 경우 Red Hat OpenShift on IBM Cloud 이 계속 액세스할 수 있는지 확인합니다

다음 서비스에 대해 작성된 규칙에 대해 네트워크 구역에 containers-kubernetes 를 추가해야 합니다.

IAM ID 서비스
Red Hat OpenShift on IBM Cloud 이 클러스터 API키 및 IBM Cloud Container Registry 토큰 및 API키와 같은 토큰 및 API키를 작성하도록 허용합니다.
IAM 액세스 관리 서비스
Red Hat OpenShift on IBM Cloud 이 IBM Cloud Container Registry에 대한 독자 서비스 액세스 역할에 대한 IAM 액세스 정책을 작성하도록 허용합니다.
IAM Access Groups Service
클러스터에서 RBAC와 IAM 액세스 정책을 동기화할 때 Red Hat OpenShift on IBM Cloud 이 액세스 그룹을 검색하도록 허용합니다.
User Management
클러스터에서 RBAC와 IAM 액세스 정책을 동기화할 때 Red Hat OpenShift on IBM Cloud 이 사용자 정보에 액세스할 수 있도록 허용합니다.
IBM Cloud Object Storage
Red Hat OpenShift on IBM Cloud 이 VPC 클러스터에서 내부 레지스트리 이미지를 백업할 수 있도록 허용합니다.
키 보호:
Red Hat OpenShift on IBM Cloud 이 클러스터에서 암호화를 사용하도록 허용하십시오.
Block Storage for VPC (서버 보호)
Red Hat OpenShift on IBM Cloud 볼륨에 액세스하고 Block Storage for VPC 볼륨을 암호화하도록 허용합니다.
VPC
Red Hat OpenShift on IBM Cloud 에 VPC의 리소스에 대한 액세스를 허용합니다.

네트워크 구역 작성

네트워크 구역은 CBR 규칙을 작성할 때 정의하는 대상 자원에 대한 허용 목록 역할을 합니다. 네트워크 구역 또는 허용 목록을 작성한 후에는 네트워크 구역이 액세스할 수 있는 자원을 정의하는 규칙을 작성할 수 있습니다.

IBM Cloud Object Storage 또는 일부 클러스터 작업이 실패할 수 있는 규칙과 같이 다른 IBM Cloud 리소스에 적용되는 규칙을 위해 네트워크 영역에 containers-kubernetes 서비스를 추가해야 합니다. 자세한 내용은 CBR을 사용하여 다른 IBM Cloud 리소스에 액세스할 수 있도록 Red Hat OpenShift on IBM Cloud 허용하기를 참조하세요.

네트워크 구역을 작성하기 전에 제한사항 을 검토하십시오.

API에서 네트워크 구역 작성

/v1/zones API를 사용하여 네트워크 구역을 작성할 수 있습니다. 자세한 정보는 API 문서를 참조하십시오. containers-kubernetes 서비스를 네트워크 구역에 추가하여 Red Hat OpenShift on IBM Cloud 이 계정의 리소스 및 서비스에 액세스할 수 있도록 허용할 수 있습니다.

네트워크 구역 페이로드에 여러 주소 유형을 포함할 수 있습니다. 자세한 정보는 API 문서 의 예제 페이로드를 참조하십시오.

네트워크 구역에 Red Hat OpenShift on IBM Cloud 을 추가하는 예제 페이로드입니다. Red Hat OpenShift on IBM Cloud 의 serviceRef 속성은 containers-kubernetes 입니다.

{
  "name": "Example zone 1",
  "description": "",
  "addresses": [
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "containers-kubernetes",
        "account_id": "ACCOUNT-ID"
      }
    }
  ]
}

네트워크 구역에 여러 서비스, IP 주소 및 VPC를 추가하는 예제 페이로드입니다.

{
  "name": "zone",
  "description": "",
  "addresses": [
    {
      "type": "ipAddress",
      "value": "192.168.0.0"
    },
    {
      "type": "vpc",
      "value": "crn:v1:bluemix:public:is:us-east:a/CRN"
    },
    {
      "type": "vpc",
      "value": "crn:v1:bluemix:public:is:us-south:a/CRN"
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "cloud-object-storage",
        "account_id": "ACCOUNT-ID"
      }
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "codeengine",
        "account_id": "ACCOUNT-ID"
      }
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "containers-kubernetes",
        "account_id": "ACCOUNT-ID"
      }
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_type": "platform_service",
        "account_id": "ACCOUNT-ID"
      }
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "iam-groups",
        "account_id": "ACCOUNT-ID"
      }
    }
  ],
  "excluded": []
}

CLI에서 네트워크 구역 작성

  1. CLI에서 네트워크 구역을 작성하려면 CBR CLI 플러그인을 설치 하십시오.

  2. cbr-zone-create 명령을 사용하여 네트워크 구역에 자원을 추가할 수 있습니다. 자세한 정보는 CBR CLI 참조 를 참조하십시오. Red Hat OpenShift on IBM Cloud 용 service_namecontainers-kubernetes 입니다.

    사용 가능한 서비스 참조 목록을 찾으려면 ibmcloud cbr service-ref-targets 명령 을 실행하십시오.

    containers-kubernetes 서비스를 네트워크 구역에 추가하는 예제 명령입니다.

    ibmcloud cbr zone-create --name example-zone-1 --description "Example zone 1" --service-ref service_name=containers-kubernetes
    

    다음 예제는 단일 공인 IP 주소가 액세스할 수 있도록 네트워크 구역을 작성합니다. 또한 하나의 IP 예제 규칙 과 함께 이 예제를 사용할 수도 있습니다. 이 시나리오에 대한 자세한 정보는 컨텍스트 기반 제한사항 설정 을 참조하십시오.

    ibmcloud cbr zone-create --addresses 129.41.86.7 --description "Allow only client IP" --name allow-client-ip
    

콘솔에서 네트워크 구역 작성

  1. 허용 목록에 추가할 자원을 판별하십시오.
  2. 콘솔에서 컨텍스트 기반 제한사항 작성 단계를 수행하십시오. Kubernetes 서비스를 네트워크 구역에 추가하여 Red Hat OpenShift on IBM Cloud 이 계정의 서비스 및 리소스에 액세스할 수 있도록 하십시오.

규칙 작성

계정의 리소스에 대한 액세스를 보호하기 위한 규칙을 정의하십시오. 규칙에서 정의하는 컨텍스트는 네트워크 구역 (허용 목록) 의 리소스가 규칙에 정의된 리소스와 상호작용할 수 있는 방법을 결정합니다.

규칙을 작성하기 전에 제한사항 을 검토하십시오.

API를 사용하여 규칙 작성

다음 예제 요청을 검토하여 규칙을 작성하십시오. v1/rules API에 대한 자세한 정보는 API 문서 를 참조하십시오.

규칙을 작성한 후에는 IAM TTL 응답 캐싱으로 인해 해당 규칙을 업데이트하는 데 최대 10분이 소요될 수 있습니다.

다음 예제 페이로드는 CLUSTER-ID 클러스터를 보호하는 규칙을 작성합니다. NETWORK-ZONE-ID 구역의 리소스만 클러스터에 액세스할 수 있습니다. operations 가 지정되지 않았으므로 NETWORK-ZONE-ID 구역의 리소스는 clustermanagement API 모두에 액세스할 수 있습니다.

{
  "description": "Example rule 1",
  "resources": [
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "ACCOUNT-ID"
        },
        {
          "name": "serviceName",
          "value": "containers-kubernetes"
        },
        {
          "name": "serviceInstance",
          "value": "CLUSTER-ID"
        }
      ]
    }
  ],
  "contexts": [
    {
      "attributes": [
        {
          "name": "networkZoneId",
          "value": "NETWORK-ZONE-ID"
        },
        {
          "name": "endpointType",
          "value": "private"
        }
      ]
    }
  ]
}

다음 예제 페이로드는 CLUSTER-ID 클러스터를 보호하는 규칙을 작성합니다. NETWORK-ZONE-ID 구역에 정의된 리소스만 클러스터에 액세스할 수 있습니다. cluster API 유형이 지정되었으므로 NETWORK-ZONE-ID 구역의 리소스는 사설 네트워크를 통해 클러스터 API를 통해 클러스터에 액세스할 수 있습니다.

{
  "description": "Example rule 2",
  "resources": [
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "ACCOUNT-ID"
        },
        {
          "name": "serviceName",
          "value": "containers-kubernetes"
        },
        {
          "name": "serviceInstance",
          "value": "CLUSTER-ID"
        }
      ]
    }
  ],
  "operations": {
    "api_types": [
      {
        "api_type_id": "crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster"
      }
    ]
  },
  "contexts": [
    {
      "attributes": [
        {
          "name": "networkZoneId",
          "value": "NETWORK-ZONE-ID"
        },
        {
          "name": "endpointType",
          "value": "private"
        }
      ]
    }
  ]
}

CLI에서 룰 작성

  1. CLI에서 규칙을 작성하려면 CBR CLI 플러그인을 설치 하십시오.
  2. ibmcloud cbr rule-create 명령 를 사용하여 CBR 규칙을 작성할 수 있습니다. 자세한 정보는 CBR CLI 참조 를 참조하십시오. Red Hat OpenShift on IBM Cloud 용 service_namecontainers-kubernetes 입니다. 서비스 이름 목록을 찾으려면 ibmcloud cbr service-ref-targets 명령을 실행하십시오. 서비스에 대한 API 유형 목록을 찾으려면 ibmcloud cbr api-types --service-name SERVICE 명령을 실행하십시오.

addresses 키와 cluster API 유형 및 ipAddress 유형을 사용하는 규칙을 작성하는 예제 명령입니다.

ibmcloud cbr rule-create my-rule-1 --service-name containers-kubernetes --api-type crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --zone-id ZONE-ID

다음 명령은 CLUSTER-ID 클러스터를 보호하는 규칙을 작성합니다. NETWORK-ZONE-ID 네트워크 구역의 자원만 클러스터에 액세스할 수 있습니다. 이 규칙에는 clustermanagement API 유형이 모두 포함됩니다.

ibmcloud cbr rule-create my-rule-2 --service-name containers-kubernetes --service-instance CLUSTER-ID --zone-id NETWORK-ZONE-ID

다음 예제 명령은 모든 사설 네트워크 연결을 허용하지만 allow-client-ip 네트워크 구역의 자원만 공용 네트워크를 통해 클러스터에 연결할 수 있도록 허용하는 규칙을 작성합니다. 이 시나리오에 대한 자세한 내용은 컨텍스트 기반 제한 설정하기를 참조하세요.

ibmcloud cbr rule-create --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --description "privateAccess=allowAll, publicAccess=oneIP" --service-name containers-kubernetes --service-instance CLUSTER-ID --context-attributes endpointType=private --context-attributes endpointType=public,networkZoneId=allow-client-ip

콘솔에서 규칙 만들기

  1. 사용 가능한 컨텍스트를 검토 하고 작성할 규칙을 판별하십시오.
  2. 콘솔에서 컨텍스트 기반 제한사항 작성 단계를 수행하십시오.

제한사항

  • 규칙을 작성하거나 적용하거나 적용하지 않도록 설정한 후에는 변경사항이 적용되는 데 최대 10분이 걸릴 수 있습니다.
  • 다음 제한 사항은 모든 API 유형 또는 cluster API 유형에 적용되는 Red Hat OpenShift on IBM Cloud CBR 규칙에 적용됩니다:
    • IPv6 주소가 포함된 네트워크 영역을 참조해서는 안 됩니다. cluster 유형에 포함된 API는 IPv6 을 지원하지 않습니다.
    • 적용된 네트워크 영역에서 IBM Cloud Object Storage 또는 Key Protect 같은 다른 서비스를 참조해서는 안 됩니다.
    • 클러스터 API 유형에 대한 Report-only 적용은 지원하지 않습니다.
    • 비공개 규칙의 경우 200개 이하의 IP/서브넷으로, 공개 규칙의 경우 500개 이하의 IP/서브넷으로 제한됩니다.
  • 공용 서비스 엔드포인트가 있는 VPC의 Red Hat OpenShift on IBM Cloud 클러스터의 경우, 공용 CBR 규칙을 클러스터에 추가하면 VPC 서브넷의 공용 게이트웨이 IP 주소도 CBR 규칙에 추가해야 합니다. 퍼블릭 게이트웨이 IP를 포함하지 않는 경우, Red Hat OpenShift 콘솔 팟 (Pod) 이 제대로 작동하지 않습니다. 해당 팟 (Pod) 이 공용 네트워크를 사용하여 클러스터 마스터의 Oauth 포트에 액세스해야 하기 때문입니다.
  • 2022년 10월 8일이전에 작성된 일부 Red Hat OpenShift on IBM Cloud 클러스터는 클러스터의 APIserver에 대해 공용 CBR 규칙을 적용할 수 없습니다. 클러스터가 이러한 공용 클러스터 API 유형 CBR 규칙을 지원하는지 확인하려면 ibmcloud ks cluster get -c <CLUSTER-ID> 명령을 실행하십시오. 서비스 엔드포인트 URL중 하나가 https://cXXX 로 시작하는 경우 (여기서 XXX는 세 자리 숫자) 클러스터는 공용 CBR 규칙을 지원합니다. 서비스 엔드포인트 URL이 https://cX 로 시작하는 경우 (여기서 c 뒤의 숫자는 한 자리 숫자) 클러스터는 클러스터의 APIserver에 대해 공용 CBR 규칙을 적용할 수 없습니다. 공용 CBR 규칙을 사용하려면 새 클러스터를 작성해야 합니다.