Container Compute Service (ACS) の権限付与システムには、基盤となる計算リソースに対する Resource Access Management (RAM) 権限付与と、ACS クラスターに対するロールベースのアクセス制御 (RBAC) 権限付与が含まれます。ロールが異なれば、これら 2 つのレイヤーで必要となる権限も異なります。このトピックでは、エンタープライズリソース管理者、Kubernetes クラスター管理者、クラスターおよびアプリケーションの O&M エンジニア、アプリケーション開発者、権限管理者という 5 種類のロールに対する権限付与のベストプラクティスについて説明します。
ACS 権限付与システム
ACS の権限付与システムは、計算リソースに対する RAM 権限付与と、ACS クラスターに対する RBAC 権限付与で構成されます。次の図は、ACS 権限付与システムを示しています。
RAM 権限付与には、クラスターの O&M 操作が含まれます。ACS クラスターは Container Service for Kubernetes (ACK) Serverless クラスターの一種であり、ACS クラスターで O&M 操作を実行するには ACK API を呼び出す必要があります。したがって、ACK およびその他の Alibaba Cloud サービスの API 操作を呼び出す権限を取得する必要があります。これらの API 操作を呼び出して、次の O&M 操作を実行できます。
クラスターの作成、表示、削除。
RBAC 権限付与の管理。
クラスターの監視、ログとイベントの管理。
RBAC 権限付与は、ACS クラスター内の Kubernetes リソースに対する名前空間レベルまたはクラスター全体の権限を付与するために使用されます。これにより、次の種類の Kubernetes リソースを作成、削除、変更、表示する権限を付与できます。
ワークロードリソース: Deployment、StatefulSet、Job、CronJob、Pod、ReplicaSet、HorizontalPodAutoscaler (HPA) など。
ネットワークリソース: Service、Ingress、NetworkPolicy など。
ストレージリソース: 永続ボリューム (PV)、永続ボリューム要求 (PVC)、StorageClass など。
Namespace、ConfigMap、Secret。
システムデフォルト権限付与ポリシー
Container Compute Service (ACS) は、次のシステム権限付与ポリシーを提供します。これらのポリシーを RAM ユーザーまたは RAM ロールに付与して、迅速に権限を付与できます。
システムデフォルトポリシーの権限付与範囲は広いです。これらのポリシーは、ACK および ACS のすべての OpenAPI 操作に対する読み取りまたは書き込み権限を付与する場合があります。これらの権限は慎重に付与してください。
システムデフォルト権限付与ポリシー | 権限付与ポリシーの概要 |
AliyunAccFullAccess | Container Compute Service (ACS) を管理する権限。 |
AliyunAccReadOnlyAccess | Container Compute Service (ACS) に対する読み取り専用権限。 |
AliyunCSFullAccess | Container Service for Kubernetes (ACK) を管理する権限。 重要 ACS クラスターを含むすべての ACK クラスターに対する読み取りおよび書き込み権限を付与します。これらの権限は慎重に付与してください。 |
AliyunCSReadOnlyAccess | Container Service for Kubernetes (ACK) に対する読み取り専用権限。 重要 ACS クラスターを含むすべての ACK クラスターに対する読み取り権限を付与します。これらの権限は慎重に付与してください。 |
AliyunAccFullAccess 権限付与ポリシー
{
"Statement": [
{
"Effect": "Allow",
"Action": "acc:*",
"Resource": "*"
}
],
"Version": "1"
}AliyunAccReadOnlyAccess 権限付与ポリシー
{
"Version": "1",
"Statement": [
{
"Action": [
"acc:Describe*",
"acc:CheckServiceRole"
],
"Resource": "*",
"Effect": "Allow"
}
]
}AliyunCSFullAccess 権限付与ポリシー
{
"Version": "1",
"Statement": [
{
"Action": "cs:*",
"Resource": "*",
"Effect": "Allow"
},
{
"Action": "ram:PassRole",
"Resource": "*",
"Effect": "Allow",
"Condition": {
"StringEquals": {
"acs:Service": "cs.aliyuncs.com"
}
}
}
]
}AliyunCSReadOnlyAccess 権限付与ポリシー
{
"Version": "1",
"Statement": [
{
"Action": [
"cs:CheckServiceRole",
"cs:Get*",
"cs:List*",
"cs:Describe*"
],
"Resource": "*",
"Effect": "Allow"
}
]
}権限付与のベストプラクティス
RAM ユーザーまたは RAM ロールがクラスターおよびアプリケーションの O&M を実行する必要がある場合、RAM 権限と RBAC 権限を RAM ユーザーまたは RAM ロールに順番に付与する必要があります。RBAC 権限を付与する前に RAM 権限を付与する必要があります。3 つの典型的なシナリオの権限付与操作は次のとおりです。
権限付与オブジェクトがクラスターおよびクラスター内アプリケーションの O&M エンジニアである場合は、「シナリオ 1: クラスターおよびクラスター内アプリケーションの O&M エンジニアに権限を付与する」をご参照ください。
権限付与オブジェクトがクラスター内アプリケーションの開発者である場合は、「シナリオ 2: クラスター内アプリケーションの開発者に権限を付与する」をご参照ください。
権限付与オブジェクトがクラスター内アプリケーションの権限管理者である場合は、「シナリオ 3: クラスター内アプリケーションの権限管理者に権限を付与する」をご参照ください。
シナリオ 1: クラスターおよびクラスター内アプリケーションの O&M エンジニアに権限を付与する
権限付与オブジェクトには、ACS クラスターを管理および維持し、ACS クラスター内のアプリケーションリソースオブジェクトに対して O&M を実行するために必要な権限が必要です。したがって、権限付与プロセスには RAM 権限付与と RBAC 権限付与の両方が含まれます。
[RAM 権限付与]
Container Service for Kubernetes (ACK) は、RAM 用に AliyunCSFullAccess と AliyunCSReadOnlyAccess の 2 つのシステムポリシーを提供します。
AliyunCSFullAccess は、ACK のすべての OpenAPI 操作に対する読み取りおよび書き込みアクセス権限を付与します。
AliyunCSReadOnlyAccess は、ACK のすべての OpenAPI 操作に対する読み取り専用アクセス権限を付与します。
重要これら 2 つのシステムポリシーは、ACS クラスターを含むすべての ACK クラスターに対する権限を付与します。これらの権限は慎重に付与してください。
RAM コンソールにログインし、必要に応じてシステムポリシーのいずれかをアタッチします。詳細については、「RAM ユーザーへの権限付与」および「RAM ロールへの権限付与」をご参照ください。
詳細なアクセスの制御が必要な場合は、カスタムポリシーを作成できます。詳細については、「RAM ユーザーまたは RAM ロールに RAM 権限を付与する」をご参照ください。
このシナリオでは、RAM 権限付与ポリシーの例は次のとおりです。
{ "Statement": [ { "Effect": "Allow", "Action": [ "acc:DescribeCommodityStatus", "acc:CheckServiceRole", "acc:DescribeCloudProducts", "acc:DescribeRegions", "acc:DescribeZones", "acc:GetInstancePrice", "acc:RecommendZones" ], "Resource": "*" }, { "Effect": "Allow", "Action": "bssapi:GetPayAsYouGoPrice", "Resource": "*" }, { "Action": "ecs:DescribePrice", "Effect": "Allow", "Resource": "*" }, { "Action": "ram:GetRole", "Effect": "Allow", "Resource": "*" }, { "Action": [ "cs:CreateCluster", "cs:DescribeAddons", "cs:DescribeUserQuota", "cs:DescribeTasks", "cs:ListClusterAddonInstances" ], "Effect": "Allow", "Resource": "*" }, { "Action": [ "cs:GetClusters", "cs:DescribeClustersV1", "cs:DescribeClusterUserKubeconfig", "cs:DescribeClusterResources", "cs:DescribeUserQuota", "cs:DescribeClusterLogs", "cs:ModifyCluster", "cs:UpgradeCluster", "cs:GetUpgradeStatus", "cs:ResumeUpgradeCluster", "cs:PauseClusterUpgrade", "cs:CancelClusterUpgrade", "cs:InstallClusterAddons", "cs:UpgradeClusterAddons", "cs:DescribeClusterAddonsUpgradeStatus", "cs:UnInstallClusterAddons", "cs:DeleteCluster", "cs:DescribeClusterDetail", "cs:GetClusterAuditProject", "cs:DescribeClusterAddonsVersion", "cs:DescribeClusterTasks", "cs:DescribeClusterEvents", "cs:DescribeEvents", "cs:ListClusterReportSummary", "cs:GetClusterBasicInfo", "cs:ListReportTaskRule", "cs:CreateReportTaskRule", "cs:CheckControlPlaneLogEnable", "cs:CreateClusterCheck" ], "Effect": "Allow", "Resource": "acs:cs:*:*:cluster/<yourclusterID>" }, { "Action": [ "cs:CheckServiceRole", "cs:DescribeKubernetesVersionMetadata" ], "Effect": "Allow", "Resource": "acs:cs:*:*:cluster/*" }, { "Action": [ "log:ListProject" ], "Effect": "Allow", "Resource": "*" }, { "Action": [ "vpc:ListEnhanhcedNatGatewayAvailableZones", "vpc:DescribeEipAddresses", "vpc:DescribeVSwitches" ], "Effect": "Allow", "Resource": "*" } ], "Version": "1" }上記の例では、
<yourclusterID>をお使いの ACS クラスターの ID に置き換えてください。ACK の OpenAPI の詳細については、「[プロダクト変更] Container Service の OpenAPI 認証の最適化に関するお知らせ」および「API 概要」をご参照ください。
[RBAC 権限付与]
RAM 権限を付与した後、対応するクラスターの RBAC 権限も RAM ユーザーまたは RAM ロールに付与する必要があります。ACK は、クラスターレベルで 4 つの事前定義されたロールを提供します。
ロール
クラスター内 RBAC 権限
管理者
すべての名前空間のすべてのリソースに対する読み取りおよび書き込み権限。
O&M エンジニア
すべての名前空間のコンソールで表示可能な Kubernetes リソースに対する読み取りおよび書き込み権限、およびクラスターノード、PV、名前空間、クォータに対する読み取り専用権限。
開発者
すべてまたは選択した名前空間のコンソールで表示可能な Kubernetes リソースに対する読み取りおよび書き込み権限。
制限付きユーザー
すべてまたは選択した名前空間のコンソールで表示可能な Kubernetes リソースに対する読み取り専用権限。
Container Compute Service コンソールで、左側のナビゲーションウィンドウにある [権限管理] をクリックします。[RAM ユーザー] または [RAM ロール] タブで、権限付与オブジェクトを見つけて [権限の管理] をクリックします。
表示されるダイアログボックスで、[+権限の追加] をクリックし、ターゲットクラスターと対応する名前空間の権限管理を [O&M エンジニア] に設定してから、[権限付与の送信] をクリックして構成を完了します。

事前定義されたロールをアタッチすると、ACS はクラスター内に権限付与オブジェクトの ID に対応する ClusterRoleBinding インスタンスを自動的に作成します。事前定義された O&M エンジニアロールの RBAC 権限は次のとおりです。
詳細な RBAC アクセスの制御が必要な場合は、カスタム ClusterRole インスタンスを作成できます。詳細については、「RBAC」をご参照ください。次に、Container Compute Service コンソールの権限管理ページで、[カスタムロール] を選択し、ドロップダウンリストからカスタム ClusterRole の名前を選択します。詳細については、「カスタム RBAC 権限付与ポリシーの作成」をご参照ください。
シナリオ 2: クラスター内アプリケーションの開発者に権限を付与する
権限付与オブジェクトは、ACS クラスター内の Kubernetes リソースオブジェクトを操作する権限 (RBAC 権限付与) のみを必要とし、クラウドリソースへのアクセス権限は必要ありません。
RBAC 権限を付与する前に、権限付与オブジェクトは、ターゲットクラスターのコンテナーサービスに対する少なくとも読み取り専用権限 (RAM 権限付与) を持っている必要があります。Resource を "*" に設定すると、ACS クラスターを含むすべての ACK クラスターに対して指定された Action 権限を RAM ユーザーまたは RAM ロールに付与することになります。権限付与の範囲と影響を完全に理解し、完全なアクセスを付与する意図がない限り、Resource を "*" に設定しないでください。
[RAM 権限付与]
RAM コンソールで、カスタムポリシーを作成し、そのポリシーをターゲットの RAM ユーザーまたは RAM ロールに付与します。詳細については、「RAM ユーザーまたは RAM ロールに RAM 権限を付与する」をご参照ください。カスタムポリシーの内容は次のとおりです。
{ "Statement": [ { "Effect": "Allow", "Action": [ "acc:DescribeCommodityStatus", "acc:CheckServiceRole", "acc:DescribeCloudProducts", "acc:DescribeRegions", "acc:DescribeZones", "acc:GetInstancePrice", "acc:RecommendZones" ], "Resource": "*" }, { "Effect": "Allow", "Action": "bssapi:GetPayAsYouGoPrice", "Resource": "*" }, { "Action": [ "cs:Get*", "cs:List*", "cs:Check*", "cs:Describe*" ], "Effect": "Allow", "Resource": [ "acs:cs:*:*:cluster/<yourclusterID>" ] }, { "Action": [ "vpc:ListEnhanhcedNatGatewayAvailableZones", "vpc:DescribeEipAddresses" ], "Effect": "Allow", "Resource": "*" } ], "Version": "1" }上記の例では、
<yourclusterID>をお使いの ACS クラスターの ID に置き換えてください。説明権限付与オブジェクトに ACS クラスターに対する読み取り専用権限のみを付与するには、この例を使用して ACS クラスターの ARN を指定する必要があります。ACK が提供する
AliyunCSReadOnlyAccessRAM システムポリシーを付与しないでください。そのポリシーはすべての ACK クラスターに対する読み取り専用権限を付与するため、このシナリオには広すぎます。[RBAC 権限付与]
Container Compute Service コンソールで、左側のナビゲーションウィンドウにある [権限管理] をクリックします。[RAM ユーザー] または [RAM ロール] タブで、権限付与オブジェクトを見つけて [権限の管理] をクリックします。
表示されるダイアログボックスで、[+権限の追加] をクリックし、ターゲットクラスターと対応する名前空間の権限管理を [開発者] に設定してから、[権限付与の送信] をクリックして構成を完了します。

事前定義されたロールをアタッチすると、ACS はクラスター内に権限付与オブジェクトの ID に対応する ClusterRoleBinding インスタンスを自動的に作成します。事前定義された開発者ロールの RBAC 権限は次のとおりです。
シナリオ 3: クラスター内アプリケーションの権限管理者に権限を付与する
権限付与オブジェクトは、他の RAM ユーザーまたは RAM ロールの RBAC 権限を管理する必要があります。デフォルトでは、RAM ユーザーまたは RAM ロールは、他の RAM ユーザーまたは RAM ロールに RBAC 権限を付与する権限を持っていません。権限付与オブジェクトが Container Compute Service コンソールの権限管理ページに移動したときに、インターフェイスに [現在の RAM ユーザーには権限管理の権限がありません。Alibaba Cloud アカウントまたは権限管理者に連絡して権限を付与してください] というメッセージが表示された場合、これは権限付与オブジェクトに必要な RAM 権限またはクラスターの RBAC 管理者権限がないことを示します。
RAM 権限付与
権限付与オブジェクトに必要な RAM 権限が付与されていることを確認します。ポリシーには、次の権限が含まれている必要があります。
他の RAM ユーザーまたは RAM ロールをリスト表示する。
指定された RAM ユーザーまたは RAM ロールに RAM 権限付与ポリシーを付与する。
指定された RAM ユーザーまたは RAM ロールの Kubernetes RBAC 権限構成を表示する。
Kubernetes RBAC 権限付与を実行する。
RAM コンソールにログインして、指定された RAM ユーザーまたは RAM ロールに対応する RAM 権限を付与します。詳細については、「RAM ユーザーまたは RAM ロールに RAM 権限を付与する」をご参照ください。カスタム RAM ポリシーの例は次のとおりです。
{ "Statement": [ { "Effect": "Allow", "Action": [ "acc:DescribeCommodityStatus", "acc:CheckServiceRole", "acc:DescribeCloudProducts", "acc:DescribeRegions", "acc:DescribeZones", "acc:GetInstancePrice", "acc:RecommendZones" ], "Resource": "*" }, { "Effect": "Allow", "Action": "bssapi:GetPayAsYouGoPrice", "Resource": "*" }, { "Action": [ "ram:Get*", "ram:List*", "cs:GetUserPermissions", "cs:GetSubUsers", "cs:GrantPermission", "cs:CheckServiceRole" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "ram:AttachPolicyToUser", "ram:AttachPolicyToRole" ], "Effect": "Allow", "Resource": [ "acs:ram:*:*:policy/xxxx", # xxxx をアタッチする必要がある RAM ポリシーの名前に置き換えます。* に置き換えると、権限付与オブジェクトがすべての RAM ポリシーをアタッチできることを示します。 "acs:*:*:*:user/*" ] }, { "Action": [ "vpc:ListEnhanhcedNatGatewayAvailableZones", "vpc:DescribeEipAddresses" ], "Effect": "Allow", "Resource": "*" } ], "Version": "1" }RBAC 認可
Container Compute Service コンソールで、左側のナビゲーションウィンドウにある [権限管理] をクリックします。[RAM ユーザー] または [RAM ロール] タブで、権限付与オブジェクトを見つけて [権限の管理] をクリックします。
表示されるダイアログボックスで、[+権限の追加] をクリックし、ターゲットクラスターと対応する名前空間の権限管理を [管理者] または [cluster-admin] カスタムロールに設定してから、[権限付与の送信] をクリックして構成を完了します。
説明Alibaba Cloud アカウント (ルートアカウント) とクラスター作成者は、デフォルトで [cluster-admin] ロールにバインドされており、クラスター内のすべての Kubernetes リソースオブジェクトにアクセスできます。

上記の RAM および RBAC 権限を権限付与オブジェクトに付与すると、オブジェクトは指定された権限範囲内で他の RAM ユーザーまたは RAM ロールの RBAC 権限付与を管理できます。詳細については、「RAM ユーザーまたは RAM ロールに RAM 権限を付与する」をご参照ください。
権限付与アクションの説明
権限名 (アクション) | 説明 |
acc:CheckServiceRole | アカウントが、他のアカウントのクラウドリソースにアクセスするためにプロダクトが ServiceRole を偽装することを承認したかどうかを確認します。 |
acc:DescribeCommodityStatus | アカウントで ACS プロダクトが有効化されているかどうかを確認します。 |
権限名 (アクション) | 説明 |
bssapi:GetPayAsYouGoPrice | 従量課金プロダクトの価格設定サービスを照会します。 |
ram:ListUserBasicInfos | すべての RAM ユーザーの基本情報を照会します。 |
ram:ListRoles | すべての RAM ロールの基本情報を照会します。 |