ACK クラスターにおける RAM ポリシーと RBAC 権限のエラーに関するトラブルシューティング。
認可の失敗
ForbiddenQueryClusterNamespace: Forbidden query namespaces
RAM ユーザーまたは RAM ロールに、クラスターの名前空間に対する RBAC 権限がありません。ACK コンソールの 承認 に移動し、RAM ユーザーまたは RAM ロールに RBAC ロールを割り当ててください。
APISERVER_403
RAM ユーザーまたは RAM ロールに、必要な RBAC 権限がありません。ACK コンソールの 承認 に移動し、必要な RBAC ロールを付与してください。詳細については、「RBAC 認可の使用」をご参照ください。
The current RAM user does not have management permissions
RAM ユーザーまたは RAM ロールは、他のユーザーに RBAC 権限を付与できません。デフォルトでは、Alibaba Cloud アカウントの所有者または明示的に委任された RAM ユーザーのみがこの操作を実行できます。
RBAC 管理を RAM ユーザーまたは RAM ロール (以下、ユーザー A) に委任するには、次の両方を付与する必要があります:
RBAC 管理者権限:ACK コンソールの 承認 で、対象のクラスターと名前空間に対して、定義済みの管理者ロールまたは cluster-admin ロールをユーザー A に割り当ててください。
RAM 権限:RAM コンソールで、ユーザー A にカスタムポリシーをアタッチしてください。このポリシーでは、ユーザー A が同じアカウント内の他の RAM ユーザーとロールを照会し、指定されたポリシーをアタッチし、RBAC 権限を管理することを許可する必要があります。次のテンプレートを使用してください:
{
"Statement": [{
"Action": [
"ram:Get*",
"ram:List*",
"cs:GetUserPermissions",
"cs:GetSubUsers",
"cs:GrantPermission"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ram:AttachPolicyToUser",
"ram:AttachPolicyToRole"
],
"Effect": "Allow",
"Resource": [
"acs:ram:*:*:policy/xxxxxx",
"acs:*:*:*:user/*"
]
}
],
"Version": "1"
}
xxxxxxを、ユーザー A がアタッチできるポリシー名に置き換えてください。任意のポリシーを許可するには、xxxxxxを*に置き換えてください。
詳細については、「カスタム RAM ポリシーの作成」および「RAM ユーザーまたは RAM ロールへの RBAC 権限の付与」をご参照ください。
エラーの原因が RAM なのか RBAC なのかを判断する方法
エラーメッセージを確認してください:
RAM ポリシーエラーには、RAM policy Forbidden または STSToken policy Forbidden が含まれます:
RAM policy Forbidden for action cs:DescribeEvents
STSToken policy Forbidden for action cs:DescribeClusterNodes
ユーザーまたはロールにアタッチされている RAM ポリシーに、リストされているアクションが含まれていません。不足しているアクションを追加してください。詳細については、「カスタム RAM ポリシーの作成」をご参照ください。
RBAC 権限エラーには、APISERVER_403、User "xxx" cannot xx resource、または ForbiddenQueryClusterNamespace が含まれます:
events is forbidden: User "<uid>" cannot list resource "events" in API group "" at the cluster scope
ForbiddenQueryClusterNamespace, Forbidden query namespaces
これは、RAM ユーザー <uid> に必要な Kubernetes RBAC 権限がないことを意味します。必要な RBAC 権限を付与してください。
RAM ユーザーに AdministratorAccess または AliyunCSFullAccess をアタッチしましたが、クラスターにアクセスできません
ACK では、RAM 認可と RBAC 認可の両方が必要です。RAM コンソールで AdministratorAccess または AliyunCSFullAccess をアタッチするだけでは、RAM レイヤーしかカバーされません。ACK コンソールの [権限管理] に移動し、RAM ユーザーに RBAC ロールも割り当ててください。詳細については、「権限管理の概要」および「RAM ユーザーまたは RAM ロールへの RBAC 権限の付与」をご参照ください。
ForbiddenCheckControlPlaneLog
RAM ユーザーまたは RAM ロールに、定義済みの管理者または運用保守エンジニアの RBAC ロールが割り当てられていません。ACK コンソールの [権限管理] に移動し、管理者または運用保守エンジニアのロールを割り当ててください。
ForbiddenHelmUsage
RAM ユーザーまたは RAM ロールに、定義済みの管理者 RBAC ロールが割り当てられていません。ACK コンソールの [権限管理] に移動し、管理者ロールを割り当ててください。
ForbiddenRotateCert
RAM ユーザーまたは RAM ロールに、定義済みの管理者 RBAC ロールが割り当てられていません。ACK コンソールの [権限管理] に移動し、管理者ロールを割り当ててください。
ForbiddenAttachInstance
RAM ユーザーまたは RAM ロールに、定義済みの管理者または運用保守エンジニアの RBAC ロールが割り当てられていません。ACK コンソールの [権限管理] に移動し、管理者または運用保守エンジニアのロールを割り当ててください。
ForbiddenUpdateKMSState
RAM ユーザーまたは RAM ロールに、定義済みの管理者または運用保守エンジニアの RBAC ロールが割り当てられていません。ACK コンソールの [権限管理] に移動し、管理者または運用保守エンジニアのロールを割り当ててください。
Forbidden get trigger
RAM ユーザーまたは RAM ロールに、定義済みの管理者、運用保守エンジニア、または開発者の RBAC ロールが割り当てられていません。ACK コンソールの [権限管理] に移動し、これらのロールのいずれかを割り当ててください。
RBAC 認可
すべてのリソースではなく、特定のアプリケーションに権限を付与できますか?
はい、できます。resourceNames フィールドを使用して特定のアプリケーションに権限の範囲を限定するカスタム ClusterRole を作成し、それを RAM ユーザーまたは RAM ロールにバインドしてください。
-
ACK コンソールにログインします。
-
左側メニューで、[権限管理] をクリックします。
-
[RAM ユーザー] タブで、対象の RAM ユーザーを見つけ、[権限の変更] をクリックします。
説明この変更を行うアカウントには、クラスターに対する少なくとも読み取り専用権限と、
cluster-adminまたは管理者ロールが割り当てられている必要があります。詳細については、「カスタム RAM ポリシーの作成」をご参照ください。 -
[権限の追加] をクリックし、クラスター、名前空間、認可タイプを選択してから、[送信] をクリックします。次の表に、定義済みの RBAC ロール権限を示します。後続の手順については、「RAM ユーザーまたは RAM ロールへの RBAC 権限の付与」をご参照ください。
説明-
RAM ユーザーに対して、すべてのクラスターにまたがる権限を付与することもできます。
-
RAM ユーザーまたは RAM ロールは、特定のクラスターまたは名前空間に対して、1 つの定義済み RBAC ロールと 1 つ以上のカスタム RBAC ロールを持つことができます。
ロール
クラスターリソースに対する RBAC 権限
管理者
すべての名前空間リソースとクラスターレベルのノード、ボリューム、名前空間、およびクォータへの読み取り/書き込みアクセス。
運用保守エンジニア
すべての名前空間にわたるコンソールで表示可能なリソースへの読み取り/書き込みアクセス。ノード、ボリューム、名前空間、およびクォータへの読み取り専用アクセス。
開発者
すべてまたは指定された名前空間内のコンソールで表示可能なリソースへの読み取り/書き込みアクセス。
閲覧者
すべてまたは指定された名前空間内のコンソールで表示可能なリソースへの読み取り専用アクセス。
カスタムロール
選択された ClusterRole によって決定されます。意図しない権限を防ぐために、割り当てる前にそのルールを確認してください。詳細については、「カスタム RAM ポリシーの作成」をご参照ください。
-
cs:admin ロールを付与された RAM ユーザーが CustomResourceDefinition (CRD) オブジェクトを作成できない
これは、2019 年 5 月より前に作成されたクラスターに影響します。これらのクラスターのデフォルトの cs:admin ClusterRole には、CRD の作成を含む一部の Kubernetes リソースに対する権限がありません。2 つの選択肢があります:
-
RAM ユーザーまたは RAM ロールに
cluster-adminロールを割り当てます。 -
既存の
cs:adminClusterRole を削除し、次の定義で再作成してください:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cs:admin
rules:
- apiGroups:
- '*'
resources:
- '*'
verbs:
- '*'
- nonResourceURLs:
- '*'
verbs:
- '*'
RAM ユーザーまたは RAM ロールを使用して他のユーザーに RBAC ロールを割り当てる方法
必要な RAM 権限と RBAC ロールの割り当てについては、「The current RAM user does not have management permissions」をご参照ください。
ClusterRoleBinding または RoleBinding に関連付けられている RAM ユーザーまたは RAM ロールを見つける方法
subjects フィールドを確認してください。kind が User で、name が数字または数字とハイフンで構成されている場合、それは RAM ユーザーまたは RAM ロールの ID です。
次の例は、RAM ユーザー 1*** の ClusterRoleBinding と、RAM ユーザー 2*** の RoleBinding を示しています:
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: 1***-cluster-admin-clusterrolebinding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: 1***-1673419473
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: 2***-default-rolebinding
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: 'cs:ns:dev'
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: '2***'
クラスター作成者の RBAC 権限を変更または取り消しできない理由
ACK は、クラスター作成者の RBAC 権限を変更または取り消すリクエストをブロックすることで、作成者が常にクラスターへのアクセスを保持できるようにしています。
クラスター作成者の権限を取り消すには、ClusterRoleBinding を直接削除してください:
-
作成者の ClusterRoleBinding を見つけてください。
<uid>を Alibaba Cloud アカウントの UID に置き換えます。kubectl get clusterrolebinding | grep <uid> -
ClusterRoleBinding をバックアップして削除してください。
<name>を前の手順で返された名前に置き換えます。kubectl get clusterrolebinding <name> -o yaml > <name>.yaml kubectl delete clusterrolebinding <name>
ターミナル機能を使用するために必要な権限
RAM ユーザーまたは RAM ロールに、定義済みの管理者、運用保守エンジニア、または開発者の RBAC ロールを割り当ててください。また、cs:DescribeClusterUserKubeconfig を呼び出すための RAM 権限も付与してください。詳細については、「RAM ユーザーまたは RAM ロールへの RBAC 権限の付与」および「カスタム RAM ポリシーの作成」をご参照ください。
CloudSSO を介してログオンするユーザーに RBAC 権限を付与する方法
CloudSSO ユーザーは、個々の RAM ユーザーとしてではなく、RAM ロールとしてログオンします。RBAC 権限を付与するには、個々のユーザーアカウントではなく、RAM ロールに権限を付与してください。
たとえば、ユーザーが AliyunReservedSSO-Policy-foo-bar-admin/foo.bar としてログオンする場合、RAM ロール AliyunReservedSSO-Policy-foo-bar-admin に RBAC 権限を付与します。
RAM 認可
すべてのクラスターに対する読み取り専用権限を持つ RAM ユーザーが一部のクラスターを表示できなくなった
最も一般的な原因は、権限の変更ではなく、アカウントの間違いまたはデフォルト以外のリソースグループフィルターです。以下を確認してください:
-
正しい RAM ユーザーまたは RAM ロールを使用して ACK コンソールにログインします。
-
上部のナビゲーションバーで、リソース範囲をに設定します。
-
右上のアバターにカーソルを合わせ、ログイン ID を確認します。
リソースグループフィルターがアクティブな場合、権限が正しくてもそのグループ外のクラスターは非表示になります。
RAM ユーザーまたは RAM ロールにクラスターを作成する権限を付与する方法
2 つの手順が必要です:
-
ACK にシステムロールを割り当てます。この操作は Alibaba Cloud アカウントを使用します。システムロールの割り当ては 1 回だけ必要です。不明な場合は、Alibaba Cloud アカウントでログインし、クラウドリソースアクセス認可 をクリックして、認可を完了します。詳細については、「ACK のデフォルトロール」をご参照ください。
-
RAM ユーザーまたは RAM ロールに、
cs:CreateCluster権限を含む カスタム RAM ポリシーをアタッチします:説明-
クラスターを作成すると、VPC などのクラウドリソースがクラスターに関連付けられます。RAM ユーザーまたは RAM ロールがこれらのリソースにアクセスできることを確認してください。
-
VPC の一覧表示を許可するには、
AliyunVPCReadOnlyAccessポリシーをアタッチします。 -
他のリソースタイプについては、「RAM 認可」をご参照ください。
{ "Statement": [{ "Action": [ "cs:CreateCluster" ], "Effect": "Allow", "Resource": [ "*" ] }], "Version": "1" }詳細については、「カスタム RAM ポリシーの作成」をご参照ください。
-
Alibaba Cloud アカウントに必要な ACK サービスロールがないことを示すエラーコード
これらのエラーコードは、ACK サービスロールが不足していることを示します。Alibaba Cloud アカウントまたは AdministratorAccess を持つ RAM ユーザーでログインし、エラーメッセージ内のリンクをクリックして割り当てを完了してください。
|
エラーコード |
エラーメッセージの例 |
|
ErrManagedKuberneteRoleNotAttach |
please complete the cluster addon's service ramrole authorization at https://*** |
|
ErrKubernetesAuditRoleNotAttach |
please complete the cluster addon's service ramrole authorization at https://*** |
|
ErrManagedAddonRoleNotAttach |
please complete the cluster addon's service ramrole authorization at https://*** |
|
ErrManagedSecurityRoleNotAttach |
please complete the security ramrole authorization at https://*** |
|
ErrEdgeAddonRoleNotAttach |
please complete the edge cluster addon's service ramrole authorization at https://*** |
|
ErrAutoScalerRoleNotAttach |
please complete the cluster addon's service ramrole authorization at https://*** |
|
ErrAcrHelperRoleNotAttach |
please complete the cluster addon's service ramrole authorization at https://*** |
|
ErrCostExporterRoleNotAttach |
please complete the cluster addon's service ramrole authorization at https://*** |
|
MissingAuth.AliyuncsManagedSecurityRole |
please complete the security ramrole authorization at https://*** |
ACK のシステムロール割り当てページに移動する方法
ACK システムロールが取り消された場合は、「ACK マネージドクラスターのクイック作成」の手順に従って再割り当てしてください。
システムロールを再割り当てできるのは、Alibaba Cloud アカウントのみです (RAM ユーザーは不可)。
ECS インスタンスから RAM ロールが取り消された場合の対処法
ECS インスタンス上のアプリケーションが metadata api 100 を呼び出し、RAM ロールが削除されている場合、リクエストは 404 エラー、または Message:Node condition RAMRoleError is now: True, reason: NodeHasNoRAMRole のようなメッセージを返します。
ECS インスタンスに RAM ロールを再割り当てしてください:
-
マスターノード (ACK 専用クラスターのみ):[クラスター情報] ページの 基本情報 タブに移動し、[マスター RAM ロール] を割り当ててください。
-
ワーカーノード:[クラスター情報] ページの 基本情報 タブに移動し、Worker RAM ロール を割り当ててください。
詳細については、「インスタンス RAM ロールの置換」をご参照ください。
RAM ロールにアタッチされたポリシーを変更した場合は、必要な権限がまだ含まれていることを確認してください。変更がエラーの前にあった場合は、ロールバックを試みてください。
ACK クラスターにカスタム RAM ロールを割り当てる方法
カスタムワーカー RAM ロールを使用してください。
退職した従業員の RAM ユーザーを削除した後、オンラインのワークロードに影響はありますか?
RAM ユーザーを削除しても、他の RAM ユーザーによるクラスター管理には影響しません。ただし、Alibaba Cloud アカウントを使用して、削除された RAM ユーザーに発行された kubeconfig ファイルを取り消す必要があります。
削除された RAM ユーザーに発行された kubeconfig ファイルを取り消す前に、それを使用しているすべてのアプリケーションで新しい kubeconfig ファイルに置き換えてください。そうしないと、これらのアプリケーションはクラスターへのアクセスを失います。