최소 권한으로 Azure Arc 지원 데이터 서비스 운영
최소 권한으로 Arc 지원 데이터 서비스를 운영하는 것이 보안 모범 사례입니다. 사용자 및 서비스 계정에 필수 작업을 수행하는 데 필요한 특정 권한만 부여합니다. Azure와 Kubernetes는 모두 이러한 특정 권한을 부여하는 데 사용될 수 있는 역할 기반 액세스 제어 모델을 제공합니다. 이 문서에서는 최소 권한의 보안을 적용해야 하는 일반적인 특정 시나리오에 대해 설명합니다.
참고 항목
이 문서에서는 arc
네임스페이스 이름을 사용합니다. 다른 이름을 사용하도록 선택할 경우, 전체에서 같은 이름을 사용합니다.
이 문서에서는 kubectl
CLI 유틸리티가 예제로 사용됩니다. 그러나 Kubernetes API를 사용하는 모든 도구나 시스템을 사용할 수 있습니다.
Azure Arc 데이터 컨트롤러 배포
Azure Arc 데이터 컨트롤러를 배포하려면 Kubernetes 네임스페이스 만들기나 클러스터 역할 만들기 같이 높은 권한으로 간주될 수 있는 권한이 몇 가지 필요합니다. 다음 단계에 따라 데이터 컨트롤러 배포를 여러 단계로 구분할 수 있으며, 각 단계는 필수 권한이 있는 사용자 또는 서비스 계정에서 수행할 수 있습니다. 이 같은 업무 분리를 통해 프로세스의 각 사용자 또는 서비스 계정에 필수 권한만 있고 그 이상의 권한은 없습니다.
데이터 컨트롤러가 만들어지는 네임스페이스 배포
이 단계에서는 Arc 데이터 컨트롤러를 배포할 새로운 전용 Kubernetes 네임스페이스를 만듭니다. 다음 단계에서는 이 새 네임스페이스를 부여되는 권한의 범위로 사용하기 때문에 이 단계를 먼저 수행해야 합니다.
이 작업을 수행하는 데 필요한 권한:
- 네임스페이스
- 만들기
- 편집(OpenShift 클러스터에 필요한 경우)
다음과 유사한 명령을 실행하여 데이터 컨트롤러가 만들어질 새 전용 네임스페이스를 만듭니다.
kubectl create namespace arc
OpenShift를 사용하는 경우 kubectl edit namespace <name of namespace>
를 사용하여 네임스페이스의 openshift.io/sa.scc.supplemental-groups
및 openshift.io/sa.scc.uid-range
주석을 편집해야 합니다. 이러한 기존 주석을 이러한 특정 UID 및 fsGroup ID/범위와 일치하도록 변경합니다.
openshift.io/sa.scc.supplemental-groups: 1000700001/10000
openshift.io/sa.scc.uid-range: 1000700001/10000
배포 서비스 계정 및 사용자/그룹에 권한 할당
이 단계에서는 서비스 계정을 만들고 역할과 클러스터 역할을 서비스 계정에 할당하여 필요한 최소 권한으로 Arc 데이터 컨트롤러를 배포하는 작업에서 서비스 계정을 사용할 수 있습니다.
이 작업을 수행하는 데 필요한 권한:
- 서비스 계정
- 만들기
- 역할
- 만들기
- 역할 바인딩
- 만들기
- 클러스터 역할
- 만들기
- 클러스터 역할 바인딩
- 만들기
- 서비스 계정에 부여되는 모든 권한(자세한 내용은 아래 arcdata-deployer.yaml 참조)
arcdata-deployer.yaml의 복사본을 저장하고 파일의 {{NAMESPACE}}
자리 표시자를 이전 단계에서 만든 네임스페이스(예: arc
)로 바꿉니다. 다음 명령을 실행하여 편집된 파일로 배포자 서비스 계정을 만듭니다.
kubectl apply --namespace arc -f arcdata-deployer.yaml
사용자에게 부트스트래퍼 작업 및 데이터 컨트롤러를 만들 수 있는 권한 부여
이 작업을 수행하는 데 필요한 권한:
- 역할
- 만들기
- 역할 바인딩
- 만들기
arcdata-installer.yaml의 복사본을 저장하고 파일의 {{INSTALLER_USERNAME}}
자리 표시자를 사용자 이름으로 바꿔(예: john@contoso.com
) 권한을 부여합니다. 필요에 따라 다른 사용자 또는 그룹과 같은 역할 바인딩 주체를 추가합니다. 다음 명령을 실행하여 편집된 파일로 설치 관리자 권한을 만듭니다.
kubectl apply --namespace arc -f arcdata-installer.yaml
부트스트래퍼 작업 배포
이 작업을 수행하는 데 필요한 권한:
- 이전 단계에서 arcdata-installer-role 역할에 할당된 사용자
다음 명령을 실행하여 데이터 컨트롤러를 배포하기 위한 준비 단계를 실행할 부트스트래퍼 작업을 만듭니다.
kubectl apply --namespace arc -f https://raw.githubusercontent.com/microsoft/azure_arc/main/arc_data_services/deploy/yaml/bootstrapper.yaml
Azure Arc 데이터 컨트롤러 만들기
이제 데이터 컨트롤러 자체를 만들 준비가 되었습니다.
먼저 일부 설정을 수정할 수 있도록 컴퓨터에 로컬로 템플릿 파일의 사본을 만듭니다.
메트릭 및 로그 대시보드 사용자 이름 및 암호 만들기
파일 맨 위에서 메트릭 및 로그 대시보드에 관리자 권한으로 인증하는 데 사용되는 사용자 이름과 암호를 지정할 수 있습니다. 보안 암호를 선택하고 이러한 권한이 필요한 암호를 사용하여 공유합니다.
Kubernetes 비밀은 Base64로 인코딩한 문자열로, 사용자 이름을 위하여 하나, 암호를 위하여 하나가 저장됩니다.
echo -n '<your string to encode here>' | base64
# echo -n 'example' | base64
선택적으로 로그 및 메트릭 대시보드에 대한 SSL/TLS 인증서를 만들 수 있습니다. Kubernetes 네이티브 도구를 배포하는 동안 SSL/TLS 인증서 지정의 지침을 따르세요.
데이터 컨트롤러 구성 편집
필요에 따라 데이터 컨트롤러 구성을 편집합니다.
필수
location
: 이 항목을, 데이터 컨트롤러 관련 ‘메타데이터’가 저장될 Azure 위치로 변경합니다. 사용 가능한 지역 목록을 검토합니다.logsui-certificate-secret
: 로그 UI 인증서용 Kubernetes 클러스터에서 만든 비밀의 이름입니다.metricsui-certificate-secret
: 메트릭 UI 인증서용 Kubernetes 클러스터에서 만든 비밀의 이름입니다.
권장: 기본값 검토 후 변경 가능
다음 값을 검토하고 배포 시 업데이트합니다.
storage..className
: 데이터 컨트롤러 데이터와 로그 파일에 사용할 스토리지 클래스입니다. Kubernetes 클러스터에서 사용 가능한 스토리지 클래스를 확실히 모르겠으면kubectl get storageclass
명령을 실행합니다. 기본값은 default로, 존재하는 스토리지 클래스가 있고 이름이 default이며 기본값에 해당하는 스토리지 클래스가 없다고 가정합니다. 참고: 원하는 스토리지 클래스에 대해 데이터에 대해 하나, 로그에 대해 하나 등 두 className 설정을 설정합니다.serviceType
: LoadBalancer를 사용하지 않는 경우 서비스 유형을 NodePort로 변경합니다.Azure Red Hat OpenShift 또는 Red Hat OpenShift 컨테이너 플랫폼 보안은 데이터 컨트롤러 yaml 파일에서 security 설정을 다음 값으로 바꿉니다.
security: allowDumps: false allowNodeMetricsCollection: false allowPodMetricsCollection: false
선택 사항
다음 설정은 선택 사항입니다.
name
: 데이터 컨트롤러의 기본 이름은 arc이지만 원하는 경우 변경할 수 있습니다.displayName
: 이 값을 파일 맨 위의 이름 특성과 동일한 값으로 설정합니다.registry
: Microsoft Container Registry가 기본값입니다. Microsoft Container Registry에서 이미지를 끌어오고 프라이빗 컨테이너 레지스트리에 푸시하는 경우 여기에 레지스트리의 IP 주소 또는 DNS 이름을 입력합니다.dockerRegistry
: 필요한 경우 프라이빗 컨테이너 레지스트리에서 이미지를 풀하는 데 사용할 비밀입니다.repository
: Microsoft Container Registry의 기본 리포지토리는 arcdata입니다. 프라이빗 컨테이너 레지스트리를 사용할 경우 Azure Arc 지원 데이터 서비스 컨테이너 이미지를 포함하는 폴더/리포지토리의 경로를 입력합니다.imageTag
: 현재 최신 버전 태그는 템플릿에서 기본값으로 사용되지만, 그 이전 버전을 사용하려는 경우 변경할 수 있습니다.logsui-certificate-secret
: 로그 UI 인증서용 Kubernetes 클러스터에서 만든 비밀의 이름입니다.metricsui-certificate-secret
: 메트릭 UI 인증서용 Kubernetes 클러스터에서 만든 비밀의 이름입니다.
다음 예제는 완료된 데이터 컨트롤러 yaml 파일을 보여 줍니다.
apiVersion: v1
data:
password: <your base64 encoded password>
username: <your base64 encoded username>
kind: Secret
metadata:
name: metricsui-admin-secret
type: Opaque
---
apiVersion: v1
data:
password: <your base64 encoded password>
username: <your base64 encoded username>
kind: Secret
metadata:
name: logsui-admin-secret
type: Opaque
---
apiVersion: arcdata.microsoft.com/v5
kind: DataController
metadata:
name: arc-dc
spec:
credentials:
dockerRegistry: arc-private-registry # Create a registry secret named 'arc-private-registry' if you are going to pull from a private registry instead of MCR.
serviceAccount: sa-arc-controller
docker:
imagePullPolicy: Always
imageTag: v1.34.0_2024-10-08
registry: mcr.microsoft.com
repository: arcdata
infrastructure: other # Must be a value in the array [alibaba, aws, azure, gcp, onpremises, other]
security:
allowDumps: true # Set this to false if deploying on OpenShift
allowNodeMetricsCollection: true # Set this to false if deploying on OpenShift
allowPodMetricsCollection: true # Set this to false if deploying on OpenShift
services:
- name: controller
port: 30080
serviceType: LoadBalancer # Modify serviceType based on your Kubernetes environment
settings:
ElasticSearch:
vm.max_map_count: "-1"
azure:
connectionMode: indirect # Only indirect is supported for Kubernetes-native deployment for now.
location: eastus # Choose a different Azure location if you want
resourceGroup: <your resource group>
subscription: <your subscription GUID>
controller:
displayName: arc-dc
enableBilling: true
logs.rotation.days: "7"
logs.rotation.size: "5000"
storage:
data:
accessMode: ReadWriteOnce
className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
size: 15Gi
logs:
accessMode: ReadWriteOnce
className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
size: 10Gi
편집한 파일을 로컬 컴퓨터에 저장하고 다음 명령을 실행하여 데이터 컨트롤러를 만듭니다.
kubectl create --namespace arc -f <path to your data controller file>
#Example
kubectl create --namespace arc -f data-controller.yaml
만들기 상태 모니터링
컨트롤러 만들기를 완료하려면 몇 분 정도 걸립니다. 다음 명령을 사용하여 다른 터미널 창에서 진행률을 모니터링할 수 있습니다.
kubectl get datacontroller --namespace arc
kubectl get pods --namespace arc
아래와 같은 명령을 실행하여 특정 Pod의 생성 상태 또는 로그를 확인할 수도 있습니다. 이 기능은 문제를 해결하는 데 특히 유용합니다.
kubectl describe pod/<pod name> --namespace arc
kubectl logs <pod name> --namespace arc
#Example:
#kubectl describe pod/control-2g7bl --namespace arc
#kubectl logs control-2g7b1 --namespace arc
관련 콘텐츠
Azure Arc 데이터 컨트롤러를 만들기 위한 추가 옵션이 몇 가지 있습니다.
작업을 시도해보시겠습니까? AKS, Amazon EKS, GKE 또는 Azure VM에서 Azure Arc Jumpstart로 빠르게 시작합니다.