我正在尝试创建一个能够使用 来创建和更新特定配置映射的 Pod Role.rules.resourceNames。我能够从 Pod 内向 API 执行资源获取请求,但我无法创建资源,而是获取
$ kubectl logs rbac-test
Error from server (Forbidden): error when creating "/config/aaa.yaml": configmaps is forbidden: User "system:serviceaccount:default:rbac-test" cannot create resource "configmaps" in API group "" in the namespace "default"
Run Code Online (Sandbox Code Playgroud)
如果我删除resourceNames属性,我就能够创建配置映射,但我不一定希望这个 pod 能够随意创建和更新配置映射。如何限制 serviceAccount 的角色,以便该 pod 只能操作指定的 configmap aaa?
我在 kubernetes slack 中得到了一些帮助(谢谢你,艾伦)。RBAC 发生在 URL 级别,因此创建 URL 时无法进行资源名称限制授权,因为 URL 中没有资源名称!
$ kubectl logs rbac-test
Error from server (Forbidden): error when creating "/config/aaa.yaml": configmaps is forbidden: User "system:serviceaccount:default:rbac-test" cannot …Run Code Online (Sandbox Code Playgroud) 我试图了解如何为在 AWS 中创建 EKS 集群的第一个用户管理 RBAC 授权。
或者换句话说:集群创建者如何映射到 RBAC 中的“system:masters”组?
我知道该文档指出:“当您创建 Amazon EKS 集群时,IAM 实体用户或角色(例如创建集群的联合用户)将自动在集群的 RBAC 配置中被授予 system:masters 权限。”
我了解 clusterrole cluster-admin和 clusterrolebinding cluster-admin如何向“system:masters”组的任何成员授予完全管理权限。
我无法弄清楚集群创建者用户如何/在哪里映射到该组?(文档的“自动授予”部分)
PS:我知道要添加额外的用户/角色,我应该使用 aws-auth configmap,但是第一个用户未在此处定义,并且仍然可以访问集群。
如果有人可以启发我吗?
提前致谢!
作为记录,我使用的是 kubernetes 1.18 EKS 集群,该集群是通过此处的社区模块使用 terraform 构建的:
module "cluster" {
source = "terraform-aws-modules/eks/aws"
version = "13.2.1"
cluster_version = "1.18"
cluster_name = "memorandom-${local.id}"
vpc_id = module.vpc.vpc_id
subnets = module.vpc.private_subnets
write_kubeconfig = false
manage_aws_auth = true
worker_groups = [
{
instance_type = "t3.medium"
asg_max_size = …Run Code Online (Sandbox Code Playgroud) 我试图了解这些用户名字段映射到 Kubernetes 集群中的位置。
这是一个示例配置映射:
apiVersion: v1
data:
mapRoles: |
- rolearn: arn:aws:iam::111122223333:role/eksctl-my-cluster-nodegroup
username: system:node:{{EC2PrivateDNSName}}
groups:
- system:bootstrappers
- system:nodes
mapUsers: |
- userarn: arn:aws:iam::111122223333:user/admin
username: admin
groups:
- system:masters
- userarn: arn:aws:iam::444455556666:user/ops-user
username: ops-user
groups:
- eks-console-dashboard-full-access-group
Run Code Online (Sandbox Code Playgroud)
如果我将用户名更改为system:node:{{EC2PrivateDNSName}}类似的名称mynode:{{EC2PrivateDNSName}},这真的有什么区别吗?添加前缀对 k8 集群有意义吗system:?
我在 k8 中哪里可以看到这些用户。我可以使用kubectllike k get pods, as 来查询它吗kubectl get usernames?它是我们提供用于映射的虚拟用户名还是拥有任何特殊权限。
这些名字从何{{EC2PrivateDNSName}}而来。还有其他可用的变量吗?我从文档中看不到与此相关的任何信息。
提前致谢!
我怎么也找不到所有 Kubernetes RBAC 动词的作用的详细表格。我看到人们推荐的唯一资源就是这个,但它严重不足。
所以我一直在通过实验来解决这个问题。
到目前为止,大多数都相当简单,除了UPDATE. 这似乎无法完成我期望的任何事情。
我在命名空间中的[ ]上授予了我的别名:
[ GET, ]权限。UPDATEdeploymentsdefault
我尝试过的事情:
kubectl set image deployment/hello-node echoserver=digitalocean/flask-helloworld --as userkubectl edit deploy hello-node --as userkubectl apply -f hello-node.yaml --as eks-user这些都失败并出现错误:deployments.apps "hello-node" is forbidden: User "user" cannot patch resource "deployments" in API group "apps" in the namespace "default"
然后我尝试了一些推出命令,例如:
k rollout undo deploy hello-node --as user但他们失败了,因为我没有副本集访问权限。
TLDR: Kubernetes RBAC 动词的意义是什么update?
就此而言,有人有所有 …
在观看了 kubernetes 上的 RBAC(基于角色的访问控制)视频(其中这个对我来说是最透明的)后,我遵循了这些步骤,但是在 k3s 上,而不是所有来源暗示的 k8s 上。据我收集的信息(不起作用),问题不在于实际的角色绑定过程,而在于 API 服务未确认的 x509 用户证书
$ kubectl get pods --kubeconfig userkubeconfig
错误:您必须登录到服务器(未经授权)
Rancher 的 wiki上也没有记录K3s 的安全性(虽然记录了他们的 k8s 实现)?虽然对rancher 2.x本身进行了描述,但不确定这是否是我的实现的问题,或者是 k3s <-> k8s 的问题。
$ kubectl version --short
Client Version: v1.20.5+k3s1
Server Version: v1.20.5+k3s1
Run Code Online (Sandbox Code Playgroud)
通过重复该过程,我的步骤如下:
这被描述为位于/etc/kubernetes/pki (k8s) 下,但是基于此似乎位于/var/lib/rancher/k3s/server/tls/ (server-ca.crt 和 server-ca.key)。
#generate user key
$ openssl genrsa -out user.key 2048
#generate signing request from ca
openssl req …Run Code Online (Sandbox Code Playgroud) 我创建了一个新的 AWS SSO(使用内部 IDP 作为身份源,因此不使用 Active Directory)。
我能够登录 AWS CLI、AWS GUI,但无法执行任何 kubectl 操作。
error: You must be logged in to the server (Unauthorized)
Run Code Online (Sandbox Code Playgroud)
我认为这与 RBAC 有关,因为我可以通过
aws eks get-token.
? cat ~/.aws/config
[profile team-sso-admin]
sso_start_url=https://team.awsapps.com/start
sso_region=us-west-2
sso_account_id=1111111111
sso_role_name=AdministratorAccess
region=us-west-2
credential_process = aws-vault exec team-sso-admin --json
? aws-vault exec team-sso-admin --debug -- zsh --login
? env | grep AWS
AWS_VAULT_PROMPT=pass
AWS_VAULT_BACKEND=pass
AWS_VAULT=team-sso-admin
AWS_DEFAULT_REGION=us-west-2
AWS_REGION=us-west-2
AWS_ACCESS_KEY_ID=xxx
AWS_SECRET_ACCESS_KEY=xxx
AWS_SESSION_TOKEN=xxx
AWS_SECURITY_TOKEN=yyy
AWS_SESSION_EXPIRATION=2021-01-11T05:55:51Z
AWS_SDK_LOAD_CONFIG=1
? aws sts get-caller-identity --output yaml
Account: '111111111111' …Run Code Online (Sandbox Code Playgroud) kubernetes ×6
amazon-eks ×3
amazon-iam ×1
aws-sso ×1
configmap ×1
k3s ×1
rancher ×1
rbac ×1
updates ×1