Предоставление разрешения на просмотр событий в terraform

#kubernetes #terraform #rbac #rancher

#kubernetes #terraform #rbac #владелец ранчо

Вопрос:

У нас есть локальные кластеры Kubernetes, управляемые Rancher, и мы используем Terraform для создания нашей конфигурации в коде. Однако, похоже, я не могу предоставить моей группе devops разрешение на просмотр событий в кластерах.

Это роль и привязка к роли:

 resource "rancher2_role_template" "events-view" {
  name = "Cluster Events View"
  description = "Terraform role template to see cluster events"
  rules {
    api_groups     = ["*"]
    resources      = ["events"]
    verbs          = ["get", "watch"]
  }
}

resource "rancher2_cluster_role_template_binding" "events-view" {
  name = "events-view"
  cluster_id = rancher2_cluster.rancher_cluster.id
  role_template_id = rancher2_role_template.events-view.id
  group_principal_id = lookup(var.projects["devops"] , "ldap_cn")
  depends_on = [
    rancher2_role_template.events-view
  ]
}
  

Это devops определение:

 projects = {
    devops = {
        ldap_cn = "activedirectory_group://CN=devops,OU=Distribution Groups,OU=My,DC=Company",
        name = "devops",
        # ...more attributes
    },
    # ...more projects
}
  

Когда я запускаю terraform apply , я вижу, что роль и привязка к роли созданы:

 rancher2_role_template.events-view: Creating...
rancher2_role_template.events-view: Creation complete after 0s [id=rt-h7xt4]
rancher2_cluster_role_template_binding.events-view: Creating...
rancher2_cluster_role_template_binding.events-view: Creation complete after 2s [id=c-6bdtb:events-view]
  

kubectl показывает роль кластера и привязку ролей (отображается для пространства имен по умолчанию, но также дублируется во всех пространствах имен):

 $ kubectl describe clusterrole rt-h7xt4
Name:         rt-h7xt4
Labels:       cattle.io/creator=norman
Annotations:  authz.cluster.cattle.io/clusterrole-owner: rt-h7xt4
PolicyRule:
  Resources  Non-Resource URLs  Resource Names  Verbs
  ---------  -----------------  --------------  -----
  events.*   []                 []              [get watch]

$ kubectl describe clusterrolebinding clusterrolebinding-hkc9b
Name:         clusterrolebinding-hkc9b
Labels:       authz.cluster.cattle.io/rtb-owner=6f990492-8f60-4950-bb8e-cfa4a9760c01
              cattle.io/creator=norman
Annotations:  <none>
Role:
  Kind:  ClusterRole
  Name:  rt-h7xt4
Subjects:
  Kind   Name                                                                                         Namespace
  ----   ----                                                                                         ---------
  Group  activedirectory_group://CN=devops,OU=Distribution Groups,OU=My,DC=Company
  

Мой пользователь является членом devops группы AD, и в terraform apply журнале я вижу, что созданы шаблоны роли и привязки, однако, когда я захожу в Rancher и нажимаю на Launch kubectl , я не вижу событий ни в одном пространстве имен:

 > kubectl get events 
Error from server (Forbidden): events is forbidden: User "u-w8rp43jtbn" cannot list resource "events" in API group "" in the namespace "default"
> kubectl get events -n devops
Error from server (Forbidden): events is forbidden: User "u-w8rp44jtbn" cannot list resource "events" in API group "" in the namespace "devops"
  

Я пробовал вводить и пустую строку в api_groups , а также в группы API Kubernetes и Rancher, но, похоже, ничего не работает.

Комментарии:

1. Отредактируйте вопрос, чтобы добавить соответствующую роль и привязку к роли пользователя

2. @ArghyaSadhu У меня нет роли для моего пользователя — соответствующая роль и привязка к ней принадлежат группе devops. Мое намерение состоит в том, чтобы каждый член группы devops мог наследовать роли группы.

3. Хорошо .. можете ли вы поделиться ролью и привязкой к ролям группы, к которой принадлежит пользователь?

4. Мне кажется, я вас не понимаю… Роль и привязка к ролям, которые я здесь указываю, принадлежат devops. Пользователь, которого я регистрирую в Rancher, является участником devops — почему роль и привязка к ролям devops не имеют значения?

5. Ваша terraform создает 2 ресурса, rancher2_role_template и rancher2_cluster_role_template_binding , пожалуйста, предоставьте выходные данные сгенерированного шаблона для clusterrole . Трудно что-либо сказать, только увидев вашу конфигурацию terraform, не увидев, как clusterrole она была создана в k8s.

Ответ №1:

Проблема заключалась в том, что я создал шаблон роли кластера вместо шаблона роли проекта. В rancher2_role_template ресурсе я добавил context = "project" и изменил rancher2_cluster_role_template_binding на rancher2_project_role_template_binding .