日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用csi-secrets-store-provider-alibabacloud導入阿里云KMS服務憑據

csi-secrets-store-provider-alibabacloud支持以Kubernetes Secret實例的形式向集群導入或同步KMS憑據信息,確保您集群內的應用能夠安全地訪問敏感信息;還支持通過CSI Inline的形式將憑據密鑰作為文件系統直接掛載到應用程序中,適用于通過文件系統接口(例如讀取文件)來獲取敏感信息的應用。通過該組件,您可以實現密鑰數據的自動更新,從而降低憑據密文在Secrets實例中暴露的可能,同時幫助您解決負載應用和阿里云憑據管家交互的兼容性問題。

image

安全說明

默認情況下,您直接從文件系統讀取密鑰和阿里云KMS憑據管家之間的直接交互可能存在兼容性問題,csi-secrets-store-provider-alibabacloud可以用于解決此類兼容性問題,同時支持將密鑰同步創建為集群中的Kubernetes原生Secrets實例,以供環境變量掛載使用。使用前請您評估如下的安全風險。

  • 當密鑰在文件系統中可以被訪問時,如果應用中存在某些有缺陷的軟件,該軟件的漏洞可能會造成目錄遍歷的風險,導致敏感信息泄露。

  • 由于一些Debug端點或Logs權限的誤配置都可能導致密鑰泄露,所以通過環境變量掛載引用的方式消費密鑰是一個不安全且不推薦的方式。

  • 當開啟Secret實例同步特性時,需要基于權限最小化原則嚴格控制訪問權限。

鑒于上述原因,如果應用中并不需要密文的持久化存儲,推薦使用通過RRSA配置ServiceAccount的RAM權限實現Pod權限隔離為應用配置Pod維度的最小化權限,并通過憑據管理直接在應用中獲取密鑰憑據,以減少密鑰內容在Pod文件系統或Kubernetes集群Secrets中的暴露風險。

前提條件

步驟一:配置組件認證信息

您需要配置csi-secrets-store-provider-alibabacloud的認證信息,以確保該組件有權限獲取KMS服務中的憑據信息,否則csi-secrets-store-provider-alibabacloud將無法向集群中導入或同步憑據信息。您可以根據集群類型選擇如下三種授權方式進行配置。

通過RRSA授權

RRSA適用于1.22及以上版本的ACK托管集群。相比其他授權方式,RRSA授權方式可以實現Pod維度的權限隔離,還可以避免直接使用AK、SK引起的憑據泄露風險。

  1. 容器服務管理控制臺開啟集群的RRSA功能。具體操作,請參見啟用RRSA功能

  2. 創建可信實體為身份提供商的RAM角色,以供csi-secrets-store-provider-alibabacloud使用。

    1. 使用阿里云賬號(主賬號)登錄RAM控制臺

      說明

      阿里云賬號(主賬號)對賬號中的資源具有完全管理權限,您也可以在RAM中創建一個RAM用戶,授予AdministratorAccess權限,充當賬號管理員,該管理員可以對賬號下所有云資源進行管控操作。更多信息,請參見創建賬號管理員

    2. 在左側導航欄,選擇身份管理 > 角色

    3. 角色頁面,單擊創建角色

    4. 創建角色頁面,選擇可信實體類型為身份提供商,然后單擊下一步

    5. 在配置角色頁面,配置如下角色信息后,單擊完成

      配置項

      描述

      角色名稱

      自定義角色名稱。

      備注

      選填有關該角色的備注信息。

      身份提供商類型

      OIDC

      選擇身份提供商

      ack-rrsa-<cluster_id>。其中,<cluster_id>為您的集群ID。

      限制條件

      • oidc:iss:保持默認。

      • oidc:aud:選擇sts.aliyuncs.com

      • oidc:sub:條件判定方式選擇StringEquals,值的格式為system:serviceaccount:<namespace>:<serviceAccountName>

        • <namespace>:應用所在的命名空間。

        • <serviceAccountName>:服務賬戶名稱。

        根據測試應用的信息,此處需要填入system:serviceaccount:kube-system:csi-secrets-store-provider-alibabacloud

        說明

        建議您將組件安裝在默認的kube-system命名空間下。如果您將csi-secrets-store-provider-alibabacloud安裝在其他的命名空間,請將kube-system替換為對應命名空間的名稱。

  3. 創建自定義授權策略并為上一步創建的RAM角色授權。

    1. 創建csi-secrets-store-provider-alibabacloud導入KMS憑據時所需的權限策略。

      策略內容如下。具體操作,請參見創建自定義權限策略

      {
          "Action": [
             "kms:GetSecretValue",
             "kms:Decrypt"
          ],
          "Resource": [
              "*"
          ],
          "Effect": "Allow"
      }
    2. 為上一步創建的RAM角色授權。具體操作,請參見為RAM角色授權

  4. 在集群中創建名為alibaba-credentials的Secret,配置模板如下,需要替換部分字段。

    1. 使用以下內容,替換相關字段后,創建secretstore-rrsa.yaml文件。

      • {rolearn}:替換為步驟2創建的RAM角色的ARN(需要Base64編碼)。

      • {sessionname}:替換為角色會話名稱(需要Base64編碼)。

      • {oidcproviderarn}:替換為集群開啟RRSA后生成的提供商ARN(需要Base64編碼)。

      apiVersion: v1
      data:
        rolearn: {rolearn}
        rolesessionname: {sessionname}
        oidcproviderarn: {oidcproviderarn}
      kind: Secret
      metadata:
        name: alibaba-credentials
        namespace: kube-system
      type: Opaque
      	                     
    2. 執行以下命令,部署Secret。

      kubectl apply -f secretstore-rrsa.yaml

為集群對應的Worker RAM角色添加權限

適用于ACK托管集群ACK專有集群ACK注冊集群

  1. 創建如下自定義權限策略。具體操作,請參見創建自定義權限策略

    {
      "Action": [
        "kms:GetSecretValue",
        "kms:Decrypt"
      ],
      "Resource": [
        "*"
      ],
      "Effect": "Allow"
    }
    
  2. 為集群的WorkerRole添加上一步創建的自定義權限。具體操作,請參見為集群的Worker RAM角色授權

通過設置AK扮演指定RAM角色

適用于所有容器服務Kubernetes集群。

  1. 創建可信實體為阿里云賬號的RAM角色,以供csi-secrets-store-provider-alibabacloud組件使用。具體操作,請參見創建可信實體為阿里云賬號的RAM角色

  2. 創建自定義授權策略并為上一步已創建的RAM角色授權。

    1. 創建訪問KMS服務憑據所需的權限策略。

      策略內容如下。具體操作,請參見創建自定義權限策略

      {
        "Action": [
          "kms:GetSecretValue",
          "kms:Decrypt"
        ],
        "Resource": [
          "*"
        ],
        "Effect": "Allow"
      }
      
    2. 為上一步已創建的RAM角色授權。具體操作,請參見為RAM角色授權

  3. 創建扮演上述角色的自定義授權策略,并為指定的RAM用戶授權。

    1. 創建扮演上述角色的自定義授權策略。

      策略內容如下。具體操作,請參見創建自定義權限策略

      {
          "Statement": [
              {
                  "Action": "sts:AssumeRole",
                  "Effect": "Allow",
                  "Resource": "acs:ram::***:role/****"  # 方式三的步驟1創建的RAM角色ARN。
              }
          ],
          "Version": "1"
      }
    2. 為指定的RAM用戶授權。具體操作,請參見為RAM用戶授權

  4. 在集群中創建名為alibaba-credentials的Secret,配置模板如下,需要替換部分字段。

    1. 使用以下內容,替換相關字段后,創建alibaba-credentials.yaml文件。

      • {rolearn} :替換為步驟1已創建的RAM角色的ARN(需要Base64編碼)。

      • {sessionname} :替換為角色會話名稱 (需要Base64編碼)。

      • {ak}:替換為RAM用戶的AK(需要Base64編碼)。

      • {sk} :替換為RAM用戶的SK(需要Base64編碼)。

        apiVersion: v1
        data:
          id: {ak}
          rolesessionname: {sessioname}
          secret: {sk}
          rolearn: {rolearn}
        kind: Secret
        metadata:
          name: alibaba-credentials
          namespace: kube-system
        type: Opaque
        
        
    2. 執行以下命令,部署Secret。

      kubectl apply -f alibaba-credentials.yaml

步驟二:安裝csi-secrets-store-provider-alibabacloud組件

  1. 登錄容器服務管理控制臺,在左側導航欄選擇集群

  2. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇應用 > Helm

  3. Helm頁面,單擊創建,在Chart區域搜索并選中csi-secrets-store-provider-alibabacloud,其它設置保持默認,然后單擊下一步

    根據彈出的頁面提示確認,組件將被安裝在默認的kube-system命名空間中,并以組件名稱發布應用。如果您需要自定義應用名和命名空間,請根據頁面提示設置。

  4. 選擇Chart版本為最新版本,在參數區域根據步驟一選擇的認證方式,設置相關參數,然后單擊確定

    • 如果選擇通過RRSA授權,您需要將參數rrsa.enable設置為true,以開啟RRSA認證功能。image

      其他相關參數配置如下。

      envVarsFromSecret:
      #  ACCESS_KEY_ID:
      #    secretKeyRef: alibaba-credentials
      #    key: id
      #  SECRET_ACCESS_KEY:
      #    secretKeyRef: alibaba-credentials
      #    key: secret
        ALICLOUD_ROLE_ARN:
          secretKeyRef: alibaba-credentials
          key: rolearn
        ALICLOUD_ROLE_SESSION_NAME:
          secretKeyRef: alibaba-credentials
          key: rolesessionname
      #  ALICLOUD_ROLE_SESSION_EXPIRATION:
      #    secretKeyRef: alibaba-credentials
      #    key: rolesessionexpiration
        ALICLOUD_OIDC_PROVIDER_ARN:
          secretKeyRef: alibaba-credentials
          key: oidcproviderarn
    • 如果選擇為集群對應的Worker RAM角色添加權限,您可以采用默認參數配置直接安裝。

    • 如果選擇通過設置AK扮演指定RAM角色,您需要配置如下相關參數。

      envVarsFromSecret:
        ACCESS_KEY_ID:
          secretKeyRef: alibaba-credentials
          key: id
        SECRET_ACCESS_KEY:
          secretKeyRef: alibaba-credentials
          key: secret
        ALICLOUD_ROLE_ARN:
          secretKeyRef: alibaba-credentials
          key: rolearn
        ALICLOUD_ROLE_SESSION_NAME:
          secretKeyRef: alibaba-credentials
          key: rolesessionname
      #  ALICLOUD_ROLE_SESSION_EXPIRATION:
      #    secretKeyRef: alibaba-credentials
      #    key: rolesessionexpiration
      #  ALICLOUD_OIDC_PROVIDER_ARN:
      #    secretKeyRef: alibaba-credentials
      #    key: oidcproviderarn
    • 如需開啟定時同步憑據的功能,需要配置如下相關參數。image

      • secrets-store-csi-driver.enableSecretRotation:是否開啟憑據的自動輪詢功能,設置為true,開啟憑據自動輪詢功能。

      • secrets-store-csi-driver.rotationPollInterval:憑據同步的頻率,設置為120s,此處以兩分鐘同步一次憑據為例,您可以根據實際需求調整。

    創建成功后,會自動跳轉到目標集群的csi-secrets-store-provider-alibabacloud頁面,檢查安裝結果。若下圖中所有資源創建成功,則表明組件安裝成功。image.png

步驟三:配置數據同步信息

認證信息配置完成后,您需要通過SecretProviderClass來進行KMS憑據信息的配置。

配置模板說明

SecretProviderClass模板格式定義如下所示。

apiVersion: secrets-store.csi.x-k8s.io/v1alpha1
kind: SecretProviderClass
metadata:
  name: <NAME>
spec:
  provider: alibabacloud   # 此處配置固定為'alibabacloud'。
  parameters:

其中parameters通常包含掛載請求的三個字段:

參數

類型

說明

objects

必選

掛載Secrets憑據的YAML配置聲明。例如

parameters:
    objects: |
        - objectName: "MySecret"

objects可包含以下子字段:

  • objectName:必選,對應為指定憑據管家中的密鑰名稱。更多信息,請參見SecretName

  • objectAlias:可選,可用于指定憑據在Pod中掛載的文件名稱,如果不指定將默認使用objectName的值。

  • objectVersion:可選,對應憑據管家中的參數VersionId

  • objectVersionLabel:可選,對應憑據管家中的參數VersionStage

  • jmesPath:可選,用于解析JSON格式的憑據中的指定鍵值對字段,例如,以下test憑據示例包含了一段JSON:

    {
        "username": "testuser",
        "password": "testpassword"
    }

    如需將usernamepassword分別掛載為一個獨立的密鑰文件,可以使用如下的JMESPath字段配置。使用JMESPath字段時,必須指定以下兩個子字段:

    • path:必選項,基于JMESPath定義路徑檢索指定配置項。

    • objectAlias:必選項,指定的鍵值對將會以此參數配置作為文件路徑掛載。

region

可選

用于請求指定Region下的阿里云憑據管家后端。如果不指定該參數,則默認使用節點對應的阿里云Region。但在大規模應用Pod部署時,可能會帶來額外的性能開銷,所以推薦配置該參數指定Region。

pathTranslation

可選

  • 如果在憑據管家的密鑰憑據包含了文件分隔符,掛載到Pod中的密鑰文件會使用該配置指定的字符作為路徑之間的分隔符。例如,憑據管家中的My/Path/Secret會被掛載為名稱是My_Path_Secret的密鑰文件。

  • 如果不指定該參數,則默認即使用下劃線作為分隔符。

  • 如果該參數指定為“False”,則路徑分割符在掛載時對應的文件名將不會使用任何字符。

配置使用示例

本示例以ACK托管集群同一地域下的KMS服務憑據test為例,介紹如何通過SecretProviderClass將其導入到集群應用中。

  1. 使用以下簡單的SecretProviderClass示例,創建secretstore.yaml文件。

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: test-secrets
    spec:
      provider: alibabacloud   # 此處固定配置為alibabacloud。
      parameters:
        objects: |
          - objectName: "test"
  2. 執行以下命令,部署SecretProviderClass。

    kubectl apply -f secretstore.yaml
  3. 使用以下內容,創建deploy.yaml。

    包含一個Nginx Deployment實例,通過CSI Inline文件系統的形式聲明使用了上面示例中已經創建的SecretProviderClass,并在Pod中的/mnt/secrets-store目錄下掛載憑據密鑰。關于Deployment實例更多信息,請參見Deployment示例

    apiVersion: apps/v1  # 1.8.0之前版本請使用apps/v1beta1。
    kind: Deployment
    metadata:
      name: nginx-deployment-basic
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          volumes:
            - name: secrets-store-inline
              csi:
                driver: secrets-store.csi.k8s.io
                readOnly: true
                volumeAttributes:
                  secretProviderClass: "test-secrets"
          containers:
            - name: nginx
              image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 # 替換為您的實際鏡像。
              ports:
                - containerPort: 80
              resources:
                limits:
                  cpu: "500m"
              volumeMounts:
                - name: secrets-store-inline
                  mountPath: "/mnt/secrets-store"
                  readOnly: true
  4. 執行以下命令,部署Deploy應用。

    kubectl apply -f deploy.yaml
  5. 驗證密鑰是否被正常掛載。

    登錄Pod查看Secret的目標掛載路徑/mnt/secrets-store下是否已經創建了SecretProviderClass實例中指定密鑰名稱為文件名的密鑰文件,同時查看文件內容是否為KMS憑據中指定的密文。

相關文檔