以最低權限操作已啟用 Azure Arc 的資料服務
以最低權限操作已啟用 Arc 的資料服務是最安全的做法。 僅將執行必要工作所需的特定權限授與使用者和服務帳戶。 Azure 和 Kubernetes 都提供角色型存取控制模型,可用來授與這些特定權限。 本文說明應套用最低權限安全性的某些常見案例。
注意
本文中使用的命名空間名稱為 arc
。 如果您選擇使用不同的名稱,請自始至終使用相同的名稱。
本文中使用 kubectl
CLI 公用程式作為例子。 不過,任何使用 Kubernetes API 的工具或系統都可使用。
部署 Azure Arc 資料控制器
部署 Azure Arc 資料控制器需要一些權限,可視為高權限,例如建立 Kubernetes 命名空間或建立叢集角色。 您可以遵循下列步驟,將資料控制器的部署分成多個步驟,各由具有必要權限的使用者或服務帳戶執行。 此職責區分可確保過程中的每個使用者或服務帳戶只具有必要權限而已。
部署將建立資料控制器的命名空間
此步驟會建立新的專用 Kubernetes 命名空間,其中將部署 Arc 資料控制器。 請務必先執行此步驟,因為接來的步驟會使用這個新的命名空間,作為要授與權限的範圍。
執行此動作所需的權限:
- 命名空間
- 建立
- 編輯 (如果 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 識別碼/範圍。
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
建立 Arc 資料控制器
現在可以開始建立資料控制器本身。
首先,在電腦本機上建立範本檔案的複本,以修改部分設定。
建立計量和記錄儀表板使用者名稱和密碼
在檔案頂端,您可以指定使用者名稱和密碼,以便以管理員身分向計量和記錄儀表板進行驗證。 選擇安全密碼,並只分享給需要有這些權限的人。
Kubernetes 祕密會儲存為 base64 編碼字串 - 一個用於使用者名稱,另一個用於密碼。
echo -n '<your string to encode here>' | base64
# echo -n 'example' | base64
您可以選擇為記錄和計量儀表板建立 SSL/TLS 憑證。 請遵循在 Kubernetes 原生工具部署期間指定 SSL/TLS 憑證的指示。
編輯資料控制器設定
視需要編輯資料控制器設定:
REQUIRED
location
:變更為將儲存資料控制器相關中繼資料的 Azure 位置。 檢閱可用區域清單。logsui-certificate-secret
:在 Kubernetes 叢集上為記錄 UI 憑證建立的秘密名稱。metricsui-certificate-secret
:在 Kubernetes 叢集上為計量 UI 憑證建立的秘密名稱。
建議:檢閱並可能變更預設值
檢閱這些值,並更新您的部署:
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
:設定為與檔案頂端的 name 屬性相同的值。registry
:預設為 Microsoft Container Registry。 如果您從 Microsoft Container Registry 提取映像,並推送至私人容器登錄,請在這裡輸入登錄的 IP 位址或 DNS 名稱。dockerRegistry
:用來從私人容器登錄提取映像的秘密 (如有需要)。repository
:Microsoft Container Registry 上的預設存放庫是 arcdata。 如果您使用私人容器登錄,請輸入資料夾/存放庫的路徑,其中包含已啟用 Azure Arc 的資料服務容器映像。imageTag
:範本中已預設目前最新的版本標籤,但如果要使用較舊的版本,您可以變更此值。logsui-certificate-secret
:在 Kubernetes 叢集上為記錄 UI 憑證建立的秘密名稱。metricsui-certificate-secret
:在 Kubernetes 叢集上為計量 UI 憑證建立的秘密名稱。
下列範例顯示已完成的資料控制器 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 快速開始。