컨텍스트 기반 제한사항을 적용하여 클라우드 보안 향상
이 튜토리얼에서는 비용이 발생할 수 있습니다. Cost Estimator를 사용하여 예상 사용량을 기반으로 비용 추정값을 생성하십시오.
이 튜토리얼에서는 IBM Cloud 계정에서 컨텍스트 기반 제한사항 (BRs) 을 구현하는 프로세스를 안내합니다. CBR을 사용하면 클라우드 환경을 추가로 보호하고 제로 신뢰 보안 모델로 이동할 수 있습니다.
학습서에서는 네트워크 구역 및 컨텍스트 규칙을 작성하는 방법과 이들이 작동하는지 확인하는 방법에 대해 설명합니다. 이 튜토리얼에서는 브라우저 콘솔에서 CBR 오브젝트를 작성하는 방법과 Terraform을 사용하여 코드로 인프라를 작성하는 방법을 학습합니다. 또한 클라우드 리소스에 대한 액세스 전략을 정의하는 방법에 대한 기준에 대해서도 학습합니다.
목표
- 클라우드 리소스를 보호하기 위한 컨텍스트 기반 제한사항에 대해 알아보기
- 허용 및 거부된 액세스에 대한 트래픽 소스를 식별하기 위한 네트워크 구역 정의
- 클라우드 리소스에 액세스하기 위한 컨텍스트를 정의하는 규칙 작성
- 컨텍스트 규칙을 테스트하고 모니터하는 방법 알아보기
다음 다이어그램은 엔드 투 엔드 보안을 클라우드 애플리케이션에 적용 학습서에서 사용되는 솔루션 아키텍처를 표시합니다. Kubernetes Service 클러스터, Container Registry, Key Protect및 Object Storage 주위에 파선으로 된 파란색 선이 있는 추가 상자는 경우 컨텍스트 규칙으로 구현된 컨텍스트 기반 제한사항을 나타냅니다. Secrets Manager 도 보호될 수 있지만 선택적 서비스일 뿐이며 이 학습서에서는 사용되지 않습니다.
시작하기 전에
이 튜토리얼에는 다음 항목이 필요합니다.
- IBM Cloud CLI
- 컨테이너 이미지를 푸시하고 가져오기 위한
docker클라이언트.
솔루션 튜토리얼 시작하기 가이드에서 운영 환경에 맞는 도구를 다운로드하고 설치하는 방법을 확인할 수 있습니다.
이러한 도구의 설치를 피하기 위해 Cloud ShellIBM Cloud 의 콘솔에서.
설정
이후 단계인 Terraform을 사용하여 컨텍스트 기반 제한사항 구성 에서는 클라우드 애플리케이션에 엔드 투 엔드 보안 적용 튜토리얼에서 사용된 리소스의 맨 위에 추가 보안 계층으로 CBR 오브젝트를 배치합니다.
-
동반 GitHub 저장소에 설명된 대로 Schematics 에서 관리하는 Terraform을 사용하여 리소스를 배치하십시오.
-
IBM Cloud Activity Tracker Event Routing 감사 이벤트를 IBM Cloud Logs 대상 인스턴스로 라우팅하도록 구성해야 합니다. 현재 계정에 구성되어 있지 않은 경우 IBM 로그 대상 구성에 설명된 대로 감사 이벤트를 라우팅합니다.
개요: 컨텍스트 기반 제한사항
컨텍스트 기반 제한사항(CBR) 은 네트워크 위치 및 액세스 요청 유형에 따라 IBM Cloud 리소스에 대한 액세스 제한사항을 정의하고 적용하는 기능을 제공합니다. IAM 정책과 컨텍스트 기반 제한은 모두 액세스를 강제하기 때문에, 컨텍스트 기반 제한은 자격 증명이 손상되거나 잘못 관리되는 경우에도 보호 기능을 제공합니다.
규칙은 해당 서비스 이름 및 유형과 추가 속성으로 식별되는 자원에 대한 액세스를 제어합니다. 여기에는 지역, 리소스 그룹 및 기타 서비스 특정 특성이 포함될 수 있습니다. 규칙의 속성은 대부분 선택사항이므로 모든 Key Protect 인스턴스를 함께 통제하거나 식별된 Key Protect 인스턴스의 특정 키 링만 대상으로 지정할 수 있습니다.
제한사항에 대한 컨텍스트는 네트워크 구역 및 서비스 엔드포인트로 구성됩니다. 특정 IP 주소 또는 범위를 기반으로 하거나 하나 이상의 VPC 또는 클라우드 서비스에서 시작되는 트래픽을 구성하여 구역을 정의할 수 있습니다. 이를 통해 샘플 Key Protect 인스턴스에 대한 액세스는 특정 Object Storage 인스턴스, 잘 알려진 IP 주소 범위 및 사설 엔드포인트를 통해서만 허용될 수 있습니다.
네트워크 구역은 여러 규칙의 정의에 사용할 수 있습니다. 규칙에는 사용 안함, 보고 전용 또는 사용 중 하나인 적용 모드가 있습니다.
현재 모든 클라우드 서비스가 보고 전용 모드를 지원하는 것은 아닙니다. 또한 이러한 서비스는 사용으로 설정된 경우 CBR 관련 로그 항목을 생성하지 않습니다. 세부사항은 개별 서비스 문서를 확인하십시오.
구역 및 규칙 작성
컨텍스트 기반 제한사항의 영향을 평가하기 위해 Container Registry에서 네임스페이스에 대한 액세스를 제어하는 규칙을 작성합니다. 해당 네임스페이스를 작성한 후 VPC를 트래픽 소스로 식별하는 네트워크 구역을 작성하여 시작합니다.
- Container Registry 네임스페이스로 이동하여 앞서 구성한 네임스페이스의 이름을 기록합니다.
- IBM Cloud 콘솔에서 관리 메뉴를 클릭하고 컨텍스트 기반 제한사항 을 선택하십시오. 개요 페이지에서 네트워크 영역 작성을 클릭하십시오.
- 이름으로 VPCzone을 입력하십시오. 허용된 VPC 아래에서 Kubernetes Service 클러스터가 있는 VPC를 선택하십시오. 다음 을 클릭하여 구역을 검토한 후 작성 하십시오.
- 그런 다음 왼쪽에 있는 탐색에서 규칙 을 클릭하여 구역을 사용하는 규칙을 작성한 후 작성을 클릭하십시오.
- 서비스 섹션에서 Container Registry 을 선택하고 다음을 클릭하십시오.
- API 섹션을 모든 서비스 API로 두고 다음을 클릭하십시오.
- 그런 다음 자원아래에서 특정 자원을 선택하십시오. 자원 유형 을 속성으로 선택하고 namespace 를 값으로 지정하십시오. 다른 조건을 추가하고 리소스 이름을 1단계에서와 동일한 값인 NAMESPACE로 구성합니다. 검토를 클릭한 다음 계속을 클릭합니다.
- 목록에서 이전에 작성한 VPCzone 을 선택하십시오. 그런 다음 추가 및 계속 을 사용하여 대화 상자의 마지막 단계로 이동하십시오. 적용 을 보고서 전용으로 표시하십시오. 그 다음, 규칙을 만듭니다.
CBR 구역 및 규칙은 비동기식으로 배치됩니다. 이들이 활성화되는 데 최대 몇 분이 소요될 수 있습니다 (결과적으로 일관성이 유지됨).
규칙 및 해당 적용 모드 테스트
-
새 브라우저 탭에서 IBM Cloud Logs 서비스를 열고 클라우드 로그 탭을 선택한 다음 감사 이벤트를 수신하는 인스턴스의 이름을 클릭합니다.
-
다른 브라우저 탭에서 IBM Cloud Shell 의 새 세션을 시작하십시오.
-
쉘에서 다음 명령을 수행하십시오. Container Registry에 사용할 클라우드 리젼에 환경 변수를 설정하십시오 (예: us 또는 de).
export REGION=usContainer Registry 네임스페이스에 다른 변수를 설정합니다:
export NAMESPACE=<YOUR_NAMESPACE>이제 Container Registry에 로그인하십시오.
ibmcloud cr login다음으로 컨테이너 이미지를 쉘 환경으로 가져오십시오.
docker pull docker.io/library/hello-world:latest레지스트리 네임스페이스에 업로드하려면 이미지에 다시 태그를 지정하십시오.
docker tag docker.io/library/hello-world $REGION.icr.io/$NAMESPACE/hello-world마지막으로, 컨테이너 이미지를 레지스트리에 푸시합니다.
docker push $REGION.icr.io/$NAMESPACE/hello-world -
감사 로그가 표시된 IBM Cloud Logs 있는 브라우저 탭으로 전환합니다. 보고서 모드에서는 결정 결과에 관계없이 규칙이 일치하면 로그 항목이 IBM Cloud Activity Tracker Event Routing 기록됩니다. 로그 레코드에 요청에 대한 세부사항이 있습니다. 아래 이미지에서는 보고서 모드에서 Container Registry 네임스페이스에 대한 액세스를 허용하는 규칙이 일치합니다.
보고 모드에서 일치하는 컨텍스트 제한사항 설명한 대로 보고서 모드에서 모든 일치하는 요청은 로그 항목을 생성합니다. 이벤트 세부사항에 값이 허용 또는 거부인 decision 속성이 표시됩니다. 위의 스크린샷에서는 거부입니다.
-
쉘이 있는 브라우저 탭으로 돌아가서 네임스페이스에 컨테이너 이미지를 나열하십시오.
ibmcloud cr images --restrict $NAMESPACE -
세 번째 브라우저 탭에서 CBR 규칙 으로 이동하십시오. 이전에 작성한 레지스트리 관련 규칙 옆에 있는 점 메뉴를 클릭하고 편집을 선택하십시오. 규칙 설명 (3단계) 으로 이동하여 규칙을 보고서 전용 에서 사용으로 전환하십시오. 적용 단추를 눌러 변경사항을 활성화하십시오.
-
IBM Cloud Shell을 사용하여 브라우저 탭으로 돌아가십시오. 이전과 동일한 명령을 실행하여 이미지를 나열하십시오.
ibmcloud cr images --restrict $NAMESPACE이번에는 권한이 없다는 오류 메시지가 표시되어야 합니다.
-
로그가 있는 브라우저 탭에서 다음과 유사한 새 레코드를 찾아야 합니다.
컨텍스트 제한사항이 거부를 렌더링했습니다. 규칙이 적용되었으며 레지스트리에 액세스하려고 시도한 방법에 따라 액세스가 거부되었습니다. 이유는 규칙이 특정 VPC에서만 액세스를 허용하기 때문입니다. requestData->environment 필드에 있는 로그에 기록된 대로 Cloud Shell 환경과 해당 IP 주소는 다릅니다. 따라서 요청이 거부됩니다.
IBM Cloud Logs 로그로 작업할 때 다음과 같은 쿼리 문자열을 활용하여 관련 로그 레코드를 쉽게 찾을 수 있습니다:
- 보고서 모드에서
"context restriction" permit OR deny는 허용 또는 거부를 렌더링한 액세스 권한이 있는 로그 행을 리턴합니다. - 보고서 모드에서는
"context restriction" permit를 사용하여 허용된 액세스만 표시할 수 있습니다. 마찬가지로, 거부된 액세스에 대해"context restriction" deny를 사용하십시오. - 마지막으로 강제 실행 모드에 있는 경우 거부된 액세스와 관련된 로그 행에 대해
context restriction rendered와 같은 조회 문자열을 사용하십시오.
새 규칙을 적용하기 전에 30일동안 새 규칙을 모니터링하는 것이 좋습니다. CBR 문서에서 보고 전용 및 사용 모드 둘 다의 모니터링 컨텍스트 기반 제한사항 에 대해 자세히 학습하십시오.
아래 섹션에서 Terraform을 사용하여 CBR 오브젝트의 배치를 준비하려면 CBR 규칙 이 있는 브라우저 탭으로 이동하십시오. 여기서 점 메뉴를 클릭하고 제거 를 선택한 후 삭제를 확인하여 이전에 작성된 규칙을 삭제하십시오. 그런 다음 네트워크 영역 을 클릭하고 이전에 작성된 영역을 삭제하십시오.
클라우드 리소스에 대한 액세스 전략 정의
컨텍스트 기반 제한사항 (BRs) 에 대한 올바른 규칙 세트를 설정하려면 클라우드 자원에 대한 액세스 전략을 정의해야 합니다. 모든 리소스는 ID및 액세스 관리 (IAM) 로 보호되어야 합니다. 즉, 사용자 또는 서비스 ID가 자원에 액세스하기 전에 인증 및 권한 검사를 수행해야 합니다. CBR은 오리진 기준 및 기타 규칙을 기반으로 네트워크 액세스를 차단하여 보호를 추가하지만 적절한 IAM 구성을 대체하지는 않습니다. 또한 많은 서비스가 사설 엔드포인트에 대한 네트워크 트래픽 제한을 지원하여 이미 액세스 옵션을 줄입니다.
예를 들어, 브라우저 콘솔을 통해 일부 규칙이 자원 관리의 편안함에 영향을 미치는 것을 발견할 수 있습니다. 또한 리소스, 관리 대시보드 및 API에 대한 액세스를 거부하지 않도록 해야 합니다. 따라서 배스천 호스트, 회사 네트워크, 게이트웨이 및 Cloud Shell도 고려해야 합니다. 또한 일부 서비스는 CBR 구성에 대한 데이터 플레인 및 제어 위치 액세스의 세분화된 구분을 지원합니다 (예: Kubernetes Service 클러스터 및 관리 API).
요약하면, 다음과 같은 질문을 해야 합니다.
- 모든 리소스가 IAM및 유사한 방식으로 보호됩니까?
- 자원에 액세스하는 방법은 가능한 개인용 엔드포인트로 이미 제한되어 있습니까?
- 데이터 플레인과 제어 플레인 액세스를 분리할 수 있습니까?
- 사용과 관련된 트래픽은 무엇이며, 관리 작업과 관련된 트래픽은 무엇입니까? 응급 상황은 어떻게 처리되나요?
- 위의 트래픽은 어디에서 발생합니까?
컨텍스트 기반 제한사항과 일치하는 활동을 인식하려면 보고서 모드를 사용하십시오. 규칙 기반 결정이 허용 또는 거부를 렌더링합니까? 그것이 당신의 기대와 일치합니까? 활동에 대해 학습하고 CBR 규칙을 사용하여 활동을 올바르게 처리하려면 최소 1개월이상의 보고 모드에서 테스트 단계를 수행하는 것이 좋습니다. 이는 원하는 네트워크 영역 및 컨텍스트 규칙 세트에 대한 반복적 접근을 허용합니다.
이 학습서에서는 다음 네트워크 구역을 정의합니다.
- Kubernetes Service 클러스터의 구역
- Object Storage 의 구역
- homezone 으로 사용할 홈 네트워크 (회사 또는 배스천) 의 주소가 있는 IP 범위의 경우
그 후에는 다음과 같이 컨텍스트 규칙을 정의합니다.
- 구역에서 Key Protect 인스턴스 에 대한 액세스의 경우:
- Kubernetes Service 클러스터
- Object Storage
- 구역에서 Object Storage 인스턴스 및 해당 버킷 에 대한 액세스의 경우:
- Kubernetes Service 클러스터
- 홈 영역
- 구역에서 Container Registry 및 컨테이너 이미지가 있는 네임스페이스 에 대한 액세스의 경우:
- Kubernetes Service 클러스터
- 구역에서 Kubernetes Service 클러스터 및 해당 관리 API 에 대한 액세스의 경우:
- 홈 영역
위의 모든 구역 및 규칙은 단일 Terraform 명령을 사용하여 보고서 전용 또는 강제 실행 모드로 배치할 수 있습니다. 규칙은 프로덕션 사용을 위한 것이 아니라 보고 전용 모드에서 사용 및 트래픽을 조사하기 위한 샘플입니다.
문서에는 서비스 참조로 지원되는 자원 목록 이 있습니다. CLI 명령 service-ref-targets 또는 관련 API 함수 사용 가능한 서비스 참조 대상 나열 을 사용하여 목록을 검색할 수도 있습니다.
Terraform을 사용하여 컨텍스트 기반 제한사항 구성
프로젝트에 대한 네트워크 구역 및 컨텍스트 규칙을 수동으로 작성하는 대신 배치를 자동화하는 것이 좋습니다. 컨텍스트 기반 제한사항은IaC(Infrastructure as Code) (즉, Terraform 코드) 를 이용하여 배치할 수 있습니다. 먼저 테스트를 위해 보고서 전용 모드에서 규칙이 있는 구역 및 규칙을 배치할 수 있습니다. 그런 다음 철저한 테스트 후에 배치된 구성을 업데이트하여 강제 실행 모드로 전환하십시오.
구역 및 규칙에 대한 Terraform 리소스
다음에서는 Terraform 코드를 배치하여 네트워크 구역 및 컨텍스트 규칙의 기본 세트를 작성합니다. 구역의 코드는 ibm_cbr_zone 자원을 사용 중입니다. 다음은 Kubernetes 클러스터를 식별하는 구역 스펙을 표시합니다. 이러한 클러스터는 지원되는 서비스 참조 중 하나입니다.
resource "ibm_cbr_zone" "cbr_zone_k8s" {
account_id = data.ibm_iam_account_settings.team_iam_account_settings.account_id
addresses {
type = "serviceRef"
ref {
account_id = data.ibm_iam_account_settings.team_iam_account_settings.account_id
service_instance = data.ibm_container_vpc_cluster.cluster.id
service_name = "containers-kubernetes"
}
}
description = "Zone with the Kubernetes cluster"
name = "cbr_zone_k8s"
}
규칙의 코드는 ibm_cbr_rule 자원을 사용합니다. 일반 규칙에 대한 Terraform 구성이 아래에 표시되어 있습니다. 브라우저 UI와 유사하게 다음 요소가 있습니다.
- 영역을 지정하기 위한 컨텍스트
- 적용 모드
- 적용되는 자원 (속성으로 식별됨)
resource "ibm_cbr_rule" "cbr_rule_cos_k8s" {
contexts {
attributes {
name = "networkZoneId"
value = ibm_cbr_zone.cbr_zone_k8s.id
}
}
contexts {
attributes {
name = "networkZoneId"
value = ibm_cbr_zone.cbr_zone_homezone.id
}
}
description = "restrict COS access, limit to cluster"
enforcement_mode = var.cbr_enforcement_mode
resources {
attributes {
name = "accountId"
value = data.ibm_iam_account_settings.team_iam_account_settings.account_id
}
attributes {
name = "serviceInstance"
operator = "stringEquals"
value = var.cos.guid
}
attributes {
name = "serviceName"
operator = "stringEquals"
value = "cloud-object-storage"
}
}
}
Terraform 리소스 배치
CBR 관련 Terraform 리소스를 이해하면 기존 리소스의 맨 위에 배치하여 구역 및 규칙을 작성할 수 있습니다.
- 브라우저에서 IBM Cloud Schematics 작업공간 으로 이동하십시오. 이전 설정의 기존 자원이 있는 작업공간을 선택하십시오.
- 설정을 클릭하세요. 변수 목록에서 deploy_cbr 이 있는 행을 찾으십시오. 해당 값은 기본값인 false 여야 합니다.
- 변수의 점 메뉴에서 편집을 선택하십시오. 그런 다음, 팝업 양식에서 기본값 사용 을 선택 취소하여 값을 변경할 수 있습니다. deploy_cbr이라는 변수의 값필드에 true 를 입력하십시오. 그런 다음 저장을 클릭하여 업데이트를 완료하십시오.
- 설정 페이지가 업데이트되면 맨 위의 계획 생성 을 계속하십시오. 계획 출력은 CBR 구역 및 규칙이 작성됨을 표시해야 합니다.
- 계획 적용 단추를 사용하여 CBR 오브젝트를 작성하십시오.
기본적으로 적용 모드는 보고 전용으로 구성됩니다. cbr_enforcement_mode 변수를 enabled 값으로 변경하여 제한사항을 적용할 수 있습니다.
컨텍스트 규칙 테스트
배치된 컨텍스트 기반 제한사항 세트를 사용하여 이를 다시 확인하고 테스트할 수 있습니다. CBR 오브젝트를 확인하려면 컨텍스트 기반 제한사항 개요 로 이동하십시오. 그런 다음 새 구역 및 규칙 을 검사하십시오.
Container Registry, Object Storage 및 Key Protect 에서 테스트를 수행하고 이전에 수행된 대로 로그를 모니터링하여 유효성을 검증해야 합니다. 구역 및 규칙에 Container Registry에 대한 액세스 제한이 포함되어 있으므로 규칙 및 해당 적용 모드 테스트 절에서 수행된 테스트를 반복할 수 있습니다.
Object Storage에 대한 액세스를 위해 새 규칙을 테스트하려면 다음 단계를 수행하십시오.
- 브라우저 탭에서 Object Storage 인스턴스 목록 으로 이동하십시오. 튜토리얼의 서비스 이름 (예: secure-file-storage-cos) 을 클릭하십시오.
- 두 번째 브라우저 탭에서 감사 로그가 있는 이미 사용된 IBM Cloud Logs 대시보드로 이동합니다.
- Object Storage 개요가 있는 탭으로 돌아가서 버킷목록에서 스토리지 버킷을 클릭하십시오.
- 업로드 를 사용하여 파일을 버킷으로 가져오십시오. 설정을 표준 전송 으로 두고 파일 (오브젝트) 업로드 영역을 사용하여 파일을 선택하십시오. 업로드를 클릭하여 완료합니다.
- 감사 로그가 있는 브라우저 탭으로 돌아가면
Context restriction matched while in report mode제목의 CBR 관련 로그 레코드가 있어야 합니다. 이는 규칙이 보고서 모드에서 배치되었기 때문입니다. 일부 레코드를 펼쳐서 보고된 의사결정 및 isEnforced 데이터를 확인하십시오. 홈 구역에 대해 구성된 IP 범위에 따라 의사결정 은 허용 또는 거부일 수 있습니다. 보고 모드로 인해 isEnforced 의 값은 false 여야 합니다.
추가 테스트를 위해 홈 영역의 IP 범위를 변경할 수 있습니다. Schematics 설정의 homezone_iprange 변수입니다.
자원 제거
자원을 제거하려면 브라우저를 사용하여 IBM Cloud Schematics 작업공간 개요 로 이동하십시오. 작업공간을 선택하고 조치 메뉴에서 먼저 자원 영구 삭제를 선택한 후 작업공간 삭제를 사용하십시오.