すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ラベルを使用したきめ細かなアクセス制御の実装

最終更新日:Oct 31, 2024

ラベルは、管理を容易にするためにリソースを識別、分類、または分類するために使用できます。 Resource Access Management (RAM) では、ポリシーに基づいてユーザーIDとリソースアクセスおよび操作権限を管理できます。 RAMポリシーの条件としてラベルを使用して、リソースにきめ細かいアクセス制御を実装できます。 ラベルを使用してクラスターリソースを分類し、RAMポリシーの条件としてラベルを使用して、きめ細かいアクセス制御を実装できます。 これにより、異なるユーザーに異なるContainer Service for Kubernetes (ACK) クラスター権限が付与されます。

次の図は、ラベルを使用してRAMユーザーの権限を管理する方法を示しています。

image

前提条件

RAM ユーザーを作成します。 詳細については、「RAM ユーザーの作成」をご参照ください。

シナリオ

このトピックの手順では、認証にラベルを使用する方法について説明します。 次の要件を満たすシナリオが使用されます。

手順

この手順では、Alibaba Cloudアカウントを使用してUseTagAccessResという名前のカスタムポリシーが作成され、RAMユーザーuserTestにアタッチされます。 UseTagAccessResポリシーは、RAMユーザーがtest:fooラベルを持つACKクラスターにのみアクセスおよび管理できることを指定します。

  1. にログインします。RAMコンソールAlibaba Cloudアカウントを使用します。

    説明

    Alibaba Cloudアカウントには、アカウント内のリソースに対する完全な管理権限があります。 RAMユーザーを作成し、RAMユーザーにAdministratorAccessポリシーをアタッチできます。 その後、RAMユーザーをアカウント管理者として使用して、Alibaba cloudアカウントに属するすべてのクラウドリソースを管理できます。 詳細については、「アカウント管理者としてのRAMユーザーの作成」をご参照ください。

  2. UseTagAccessResという名前のカスタムポリシーを作成します。

    詳細については、「カスタマイズポリシーの作成」をご参照ください。 この例では、アクセス許可を制御するために、カスタムポリシーのCondition要素でクラウドリソースに複数のラベル固有の条件を設定できます。 ラベル固有の条件を次の表に示します。

    ラベルベースの条件

    説明

    acs:RequestTag

    各APIリクエストにラベルを含める必要があることを指定します。

    APIリクエストパラメーターを使用してラベルを指定できない場合、acs:RequestTag条件は使用できません。 そうでない場合、認証は失敗します。

    acs:ResourceTag

    リソースに指定されたラベルが必要であることを指定します。

    APIリクエストパラメーターを使用してリソースIDを指定できない場合、acs:ResourceTag条件は使用できません。 そうでない場合、認証は失敗します。

    次のコードブロックは、さまざまなシナリオに適用されるカスタムポリシーの内容を示しています。

    重要

    次のサンプルポリシーをテンプレートとして使用し、テンプレートを変更するときに最小権限の原則に従うことができます。

    • RAMユーザーがtest:fooラベルを持たないACKクラスターを作成することを禁止します。 RAMユーザーがACKクラスターを作成する場合、RAMユーザーは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"
      }
    • RAMユーザーがtest:fooラベルを持たないACKクラスターを管理することを禁止します。 これらのクラスターは他のユーザーによって作成されます。

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*",
            "Condition": {
              "StringEquals": {
                "acs:ResourceTag/test": "foo"
              }
            }
          }
        ]
      }
    • RAMユーザーが特定のクエリAPIを呼び出し、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": "*"
      		}
      	]
      }
    • RAMユーザーがACKクラスターのラベルを変更することを禁止します。

      {
      	"Version": "1",
      	"Statement": [{
      		"Effect": "Deny",
      		"Action": [
      			"cs:UntagResources",
      			"cs:ListTagResources",
      			"cs:TagResources",
      			"cs:ModifyClusterTags"
      		],
      		"Resource": "*"
      	}]
      }
    • test:fooラベルがないACKクラスターでのロールベースのアクセス制御 (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ユーザーグループにアタッチします。

    詳細については、「RAM ユーザーへの権限の付与」をご参照ください。 このステップでは、UseTagAccessResポリシーをRAMユーザーuserTestにアタッチします。

    説明

    既存のRAMユーザーにUseTagAccessResポリシーをアタッチする場合、同じRAMユーザーにアタッチされた複数のポリシーが権限の問題を引き起こす可能性があることに注意してください。

結果を表示するView the result

カスタムポリシーがRAMユーザーにアタッチされると、RAMユーザーはtest:fooラベルを持つACKクラスターにのみアクセスおよび管理できます。 次のセクションでは、RAMユーザーがリソースにアクセスして管理する権限について説明します。

ACKクラスターの作成

  • RAMユーザーは、[クラスター設定] ウィザードページの [詳細オプション] セクションでtest:fooラベルをクラスターに追加した場合にのみ、ACKクラスターを作成できます。

  • RAMユーザーがACKクラスターを作成するときにRAMユーザーがtest:fooラベルを追加しない場合、次のエラーメッセージが表示されます。ack

ACKクラスターの表示

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. クラスターリストでACKクラスターを表示します。

    • test:fooラベルを持つクラスターがない場合、クラスターリストは空です。 クラスターは表示できません。

    • RAMユーザーがtest:fooラベルをクラスターに追加すると、クラスターがクラスターリストに表示されます。

ラベルの変更

RAMユーザーはラベルを変更できません。 RAMユーザーがラベルを変更すると、次のエラーメッセージが表示されます。

tag

権限付与の管理

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[権限付与] をクリックします。

  2. [権限付与] ページで、[RAMユーザー] タブをクリックします。 権限を付与するRAMユーザーを見つけて、[操作] 列の [権限の管理] をクリックします。

  3. On the権限管理ページを持つクラスターのみテスト: fooラベルが [クラスター] ドロップダウンリストに表示されます。