全部產品
Search
文件中心

Container Service for Kubernetes:通過標籤實現精微調權限管理

更新時間:Jun 08, 2024

標籤可用於標識雲資源,實現資源的分類管理;存取控制RAM可基於權限原則,系統管理使用者身份,控制雲資源的訪問和操作許可權。標籤和RAM結合,將標籤作為權限原則的匹配條件,可以實現雲資源的精微調權限管理。您可以使用標籤對叢集資源做分類,並匹配對應的權限原則,實現叢集資源的精微調權限管理,使不同的使用者可以擁有不同的ACK叢集的存取權限。

基於標籤控制RAM使用者權限(即標籤鑒權)的邏輯如下:

前提條件

已建立RAM使用者,具體操作,請參見建立RAM使用者

應用情境樣本

本文操作步驟以下面情境為樣本,說明如何使用標籤鑒權。

操作步驟

本步驟將使用阿里雲帳號(主帳號)建立一個自訂權限原則UseTagAccessRes(規定了RAM使用者需要指定標籤test:foo後方可訪問和操作ACK叢集),並將自訂權限原則UseTagAccessRes授權給RAM使用者userTest。

  1. 使用阿里雲帳號(主帳號)登入RAM控制台

    說明

    阿里雲帳號(主帳號)對帳號中的資源具有完全系統管理權限,您也可以在RAM中建立一個RAM使用者,授予AdministratorAccess許可權,充當帳號管理員,該管理員可以對帳號下所有雲資源進行管控操作。更多資訊,請參見建立帳號管理員

  2. 建立自訂權限原則UseTagAccessRes。

    具體操作,請參見建立自訂權限原則。如下樣本中,您可以在策略(Condition)中為雲資源設定多個標籤條件來限制操作許可權。支援的標籤鑒權條件如下:

    標籤鑒權條件

    說明

    acs:RequestTag

    限制在請求中必須傳入特定的標籤。

    如果API請求中沒有標籤參數,則不能使用acs:RequestTag,否則會導致鑒權失敗。

    acs:ResourceTag

    限制指定的資源必須包含特定的標籤。

    如果API請求中沒有資源ID參數,則不能使用acs:ResourceTag,否則會導致鑒權失敗。

    以下為不同應用情境下對應的自訂權限原則內容。

    重要

    以下列舉的自訂權限原則內容僅作為樣本原則範本提供,請您根據實際需求遵循許可權最小化原則配置權限原則。

    • 不允許建立未綁定標籤test:foo的叢集,僅允許在建立叢集操作時,帶上請求標籤test:foo

      {
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": "cs:CreateCluster",
                  "Resource": "*",
                  "Condition": {
                      "StringEquals": {
                          "acs:RequestTag/test": "foo"
                      }
                  }
              },
              {
                  "Action": [
                      "cs:DescribeAddons",
                      "cs:DescribeKubernetesVersionMetadata"
                  ],
                  "Effect": "Allow",
                  "Resource": "*"
              },
              {
                  "Action": [
                      "vpc:Describe*",
                      "vpc:List*",
                      "log:List*",
                      "log:Describe*",
                      "cs:Get*",
                      "cs:Describe*"
                  ],
                  "Effect": "Allow",
                  "Resource": "*"
              }
          ],
          "Version": "1"
      }
    • 不允許操作其他使用者建立的叢集(未綁定標籤test:foo的資源)。

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*",
            "Condition": {
              "StringEquals": {
                "acs:ResourceTag/test": "foo"
              }
            }
          }
        ]
      }
    • 支援某些查詢介面,同時可以查看您已綁定標籤test:foo的叢集。

      {
      	"Version": "1",
      	"Statement": [{
      			"Effect": "Allow",
      			"Action": [
      				"cs:DescribeClustersV1",
      				"cs:GetClusters"
      			],
      			"Resource": "*",
      			"Condition": {
      				"StringEquals": {
      					"acs:ResourceTag/test": "foo"
      				}
      			}
      		},
      		{
      			"Action": [
      				"cs:DescribeClusterAddonsVersion",
                      "cs:DescribeClusterUserKubeconfig",
                      "cs:DescribeClusterNodePools",
      				"cs:DescribeClusterNodes",
                      "cs:DescribeClusterLogs",
                      "cs:DescribeClusterNodePoolDetail",
      				"cs:DescribeEvents",
                      "cs:DescribeClusterDetail",
                      "cs:DescribeClusterAddonsUpgradeStatus",
                      "cs:DescribeClusterNamespaces",
                      "cs:DescribeAddons",
      				"log:List*",
      				"log:Describe*"
      			],
      			"Effect": "Allow",
      			"Resource": "*"
      		}
      	]
      }
    • 不允許修改標籤,防止標籤被修改。

      {
      	"Version": "1",
      	"Statement": [{
      		"Effect": "Deny",
      		"Action": [
      			"cs:UntagResources",
      			"cs:ListTagResources",
      			"cs:TagResources",
      			"cs:ModifyClusterTags"
      		],
      		"Resource": "*"
      	}]
      }
    • 不允許對未綁定標籤test:foo的叢集進行RBAC授權。

      {
      	"Statement": [{
      			"Effect": "Allow",
      			"Action": "cs:Get*",
      			"Resource": "*",
      			"Condition": {
      				"StringEquals": {
      					"acs:ResourceTag/test": "foo"
      				}
      			}
      		},
      		{
      			"Action": [
      				"ram:Get*",
      				"ram:List*",
      				"cs:DescribeAddons",
      				"cs:DescribeKubernetesVersionMetadata",
      				"cs:DescribeUserPermission",
      				"cs:GrantPermission"
      			],
      			"Effect": "Allow",
      			"Resource": "*"
      		},
      		{
      			"Action": [
      				"ram:AttachPolicyToUser",
      				"ram:AttachPolicyToRole"
      			],
      			"Effect": "Allow",
      			"Resource": [
      				"acs:ram:*:*:policy/xxxxxx",
      				"acs:*:*:*:user/*"
      			]
      		}
      	],
      	"Version": "1"
      }
  3. 將自訂權限原則授權給目標RAM使用者或組。

    具體操作,請參見為RAM使用者授權。本步驟將自訂權限原則UseTagAccessRes授權給RAM使用者userTest。

    說明

    如果您將自訂權限原則UseTagAccessRes授權已存在的RAM使用者,請注意RAM使用者多個權限原則產生的許可權問題。

執行結果

授權RAM使用者只能訪問和操作已綁定標籤test:foo的資源後,該RAM使用者訪問及操作各資源的結果如下:

建立ACK叢集

  • 建立ACK叢集時,在建立流程中叢集配置頁簽的進階選項配置標籤test:foo,會建立成功。

  • 建立ACK叢集時,不指定標籤test:foo,會有以下錯誤提示。ack

查看ACK叢集

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 查看叢集列表中的叢集。

    • 如果叢集中都沒有test:foo標籤,則叢集列表為空白,無法查看任何叢集。

    • 若對指定叢集添加test:foo標籤後,則在叢集列表中可以看到該叢集。

修改標籤

不允許修改標籤,若強制修改標籤時會有以下錯誤提示。

tag

授權管理

  1. 登入Container Service管理主控台,在左側導覽列選擇授權管理

  2. 授權管理頁面,單擊RAM使用者頁簽,在需要授權的RAM使用者右側單擊系統管理權限,進入許可權管理頁面。

  3. 許可權管理頁面選擇叢集時,在下拉式清單中僅顯示具有test:foo標籤的叢集。