terraform-provider-kubernetes icon indicating copy to clipboard operation
terraform-provider-kubernetes copied to clipboard

kubernetes_cluster_role_binding & kubernetes_role_binding adding namespace when subject kind is Group

Open antonosmond opened this issue 5 years ago • 19 comments

Hi

When applying a clusterrolebinding or rolebinding where the subject kind is Group, there should not be a namespace as a group is not a namespaced resource. There's documentation here: https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-examples

Terraform Version

Terraform v0.12.16

  • provider.aws v2.42.0
  • provider.kubernetes v1.10.0

Affected Resource(s)

Please list the resources as a list, for example:

  • kubernetes_cluster_role_binding
  • kubernetes_role_binding

Terraform Configuration Files

resource "kubernetes_cluster_role_binding" "developer_cluster" {
  metadata {
    name = "company-developer"
  }
  role_ref {
    api_group = "rbac.authorization.k8s.io"
    kind      = "ClusterRole"
    name      = kubernetes_cluster_role.developer_cluster.metadata.0.name
  }
  subject {
    api_group = "rbac.authorization.k8s.io"
    kind      = "Group"
    name      = "company:developer"
  }
}

resource "kubernetes_role_binding" "developer_namespace" {
  metadata {
    name      = "company-developer"
    namespace = kubernetes_namespace.app.metadata.0.name
  }
  role_ref {
    api_group = "rbac.authorization.k8s.io"
    kind      = "ClusterRole"
    name      = kubernetes_cluster_role.developer_namespace.metadata.0.name
  }
  subject {
    api_group = "rbac.authorization.k8s.io"
    kind      = "Group"
    name      = "company:developer"
  }
}

Expected Behavior

The subject blocks of the role bindings should be created as per the config without a namespace.

Actual Behavior

The role bindings were created and the namespace field was added with a value of default.

Steps to Reproduce

Please list the steps required to reproduce the issue, for example:

  1. terraform apply

antonosmond avatar Dec 17 '19 11:12 antonosmond

If it helps I ran with log level set to TRACE and noticed this in the logs:

2019/12/17 12:46:44 [WARN] Provider "kubernetes" produced an invalid plan for kubernetes_cluster_role_binding.developer_cluster, but we are tolerating it because it is using the legacy plugin SDK.
    The following problems may be the cause of any confusing errors from downstream operations:
      - .subject[0].namespace: planned value cty.StringVal("default") does not match config value cty.NullVal(cty.String)
2019/12/17 12:46:44 [WARN] Provider "kubernetes" produced an invalid plan for kubernetes_role_binding.developer_namespace, but we are tolerating it because it is using the legacy plugin SDK.
    The following problems may be the cause of any confusing errors from downstream operations:
      - .subject[0].namespace: planned value cty.StringVal("default") does not match config value cty.NullVal(cty.String)

antonosmond avatar Dec 17 '19 12:12 antonosmond

Same issue. Looks related with #713. Terraform v0.12.21

  • provider.kubernetes v1.11.1

Ranger-X avatar Mar 06 '20 15:03 Ranger-X

Same issue, same log as above when run with TF_LOG=TRACE.

  • Terraform v0.12.6
  • provider.kubernetes v1.11.3

jharshman avatar Jun 25 '20 21:06 jharshman

Same issue, unwanted namespace attribute is present for Group kind. Terraform v0.13.4 provider.kubernetes v1.13.2

alex-karpenko avatar Oct 02 '20 09:10 alex-karpenko

Hi. I discovered a work-around. Even though the documentation says that for kind: Group, namespace is a property that is not available. If you set namespace="" for kind: Group, then the resultant clusterrolebinding for kind: Group doesn't have namespace as a property, as it should.

I'm using terraform v 0.12.28

Example:

resource "kubernetes_cluster_role_binding" "cluster-superusers" { metadata { name = "cluster-superusers" } role_ref { api_group = "rbac.authorization.k8s.io" kind = "ClusterRole" name = "cluster-superusers" } subject { kind = "User" name = "admin" api_group = "rbac.authorization.k8s.io" } subject { kind = "ServiceAccount" name = "default" namespace = "kube-system" } subject { kind = "Group" name = "system:masters" namespace = "" api_group = "rbac.authorization.k8s.io" } }

jeffreylutz avatar Oct 02 '20 12:10 jeffreylutz

I confirm this also happens for

terraform v0.13.5 hashicorp/kubernetes v1.13.3

flmmartins avatar Dec 04 '20 16:12 flmmartins

The same happens when kind User is specified. Terraform tries to add an undesired namespace.

 subject {
    kind      = "User"
    name      = "myuser"
    api_group = "rbac.authorization.k8s.io"
  }

output from the plan

  ~ subject {
            api_group = "rbac.authorization.k8s.io"
            kind      = "User"
            name      = "myuser"
          + namespace = "default"
        }

my terraform informaiton. Terraform v0.12.29 provider.kubernetes v1.13.3

mozz-lx avatar Dec 18 '20 23:12 mozz-lx

Still happening with the latest Kubernetes provider 2.0.2. Also confirming that the workaround works with specifying:

namespace = ""

spikewang avatar Mar 23 '21 03:03 spikewang

still happening with Kubernetes provider version = "2.5.1"


      + subject {
          + api_group = "rbac.authorization.k8s.io"
          + kind      = "Group"
          + name      = "opsadmin"
          + namespace = "default"
        }
    }

and namespace = "" still works

ismailyenigul avatar Oct 18 '21 10:10 ismailyenigul

Still happening here for provider version 2.8.0, and namespace = "" still works.

timblaktu avatar Mar 31 '22 22:03 timblaktu

+1

roeera avatar Aug 22 '22 13:08 roeera

@roeera Thanks for pitching in, but it's better to vote with 👍on the post since that gets tracked by GitHub and can be sorted on. so it's easier to prioritize :)

lindhe avatar Aug 23 '22 07:08 lindhe

I can't believe this still hasn't been fixed as it was reported almost 3 years ago. For the record the official docs have the following to say about setting the namespace incorrectly which should make this a high priority bug.

Namespace of the referenced object. If the object kind is non-namespace, such as "User" or "Group", and this value is not empty the Authorizer should report an error.

stevehipwell avatar Sep 14 '22 08:09 stevehipwell

Issue still exists in provider v2.13.1

richie-tt avatar Sep 14 '22 20:09 richie-tt

Still exists... 2023... v2.16.1

ddmunhoz avatar Jan 19 '23 22:01 ddmunhoz

Still found this issue in provider 2.17.0.

sergialonsaco avatar Feb 07 '23 16:02 sergialonsaco

Still exists in v2.22.0

manuelnucci avatar Aug 14 '23 15:08 manuelnucci

Still exists in v.2.26.0

sshawaxpo avatar Mar 06 '24 17:03 sshawaxpo