Sobre o Controle de Acesso e o Serviço Container Engine for Kubernetes

Descubra sobre as permissões necessárias para acessar clusters que você criou usando o Container Engine for Kubernetes (OKE).

Para executar operações em um cluster do Kubernetes, você deve ter permissões apropriadas para acessar o cluster.

Para a maioria das operações em clusters do Kubernetes criados e gerenciados pelo Serviço Container Engine for Kubernetes, o Oracle Cloud Infrastructure Identity and Access Management (IAM) fornece controle de acesso. As permissões de um usuário para acessar clusters são provenientes dos grupos do IAM (incluindo grupos dinâmicos) aos quais eles pertencem. As permissões para um grupo são definidas por políticas. As políticas definem quais ações os membros de um grupo podem executar e em quais compartimentos. Os usuários podem acessar clusters e executar operações com base nas políticas definidas para os grupos dos quais são membros.

O serviço IAM oferece controle sobre:

  • se um usuário pode criar ou excluir clusters
  • se um usuário pode adicionar, remover ou modificar pools de nós
  • quais operações de criação/exclusão/exibição de objetos do Kubernetes um usuário pode executar em todos os clusters em um compartimento ou tenancy

Consulte Configuração de Política para Criação e Implantação de Cluster.

Além do serviço IAM, o Autorizador do Kubernetes RBAC pode impor um controle de acesso detalhado adicional para usuários em clusters específicos por meio de atribuições e clusterroles do Kubernetes RBAC. Uma função do Kubernetes RBAC é um conjunto de permissões. Por exemplo, uma atribuição pode incluir permissão de leitura em pods e permissão de lista para pods. Uma clusterrole do Kubernetes RBAC é exatamente como uma atribuição, mas pode ser usada em qualquer lugar no cluster. Um rolebinding do Kubernetes RBAC mapeia uma atribuição para um usuário ou grupo, concedendo permissões dessa atribuição ao usuário ou grupo para recursos nesse namespace. Da mesma forma, um clusterrolebinding do Kubernetes RBAC mapeia um clusterrole para um usuário ou grupo, concedendo permissões desse clusterrole ao usuário ou grupo em todo o cluster.

O serviço IAM e o Autorizador do Kubernetes RBAC trabalham juntos para permitir que os usuários que foram autorizados com sucesso por pelo menos um deles concluam a operação solicitada do Kubernetes. Você pode usar OCIDs para mapear rolebindings de Kubernetes RBAC e clusterrolebindings para usuários e grupos do IAM (incluindo grupos dinâmicos).

Quando um usuário tenta executar qualquer operação em um cluster (exceto as operações criar atribuição e criar clusterrole), o serviço IAM primeiro determina se um grupo (ou grupo dinâmico) ao qual o usuário pertence tem as permissões adequadas e suficientes. Em caso afirmativo, a operação será bem-sucedida. Se a tentativa de operação também exigir permissões adicionais concedidas por meio de uma atribuição ou clusterrole do Kubernetes RBAC, o Autorizador do Kubernetes RBAC determinará se o usuário ou grupo recebeu a atribuição ou o clusterrole apropriados do Kubernetes.

Normalmente, você desejará definir suas próprias atribuições e clusterroles do Kubernetes RBAC ao implantar um cluster do Kubernetes para fornecer controle detalhado adicional. Quando você tenta executar a operação criar atribuição ou criar clusterrole, primeiro o Autorizador do Kubernetes RBAC determina se você tem privilégios suficientes do Kubernetes. Para criar uma atribuição ou um clusterrole, você deve ter recebido uma atribuição (ou um clusterrole) do Kubernetes RBAC existente que tenha pelo menos os mesmos privilégios ou mais altos que a nova atribuição (ou clusterrole) que você está tentando criar.

Por padrão, os usuários não recebem nenhuma atribuição (ou clusterrole) do Kubernetes RBAC. Portanto, antes de tentar criar uma nova atribuição (ou clusterrole), você deve ter recebido uma atribuição (ou clusterrole) privilegiada apropriada. Várias dessas atribuições e clusterroles são sempre criados por padrão, incluindo o cluster-admin clusterrole (para obter uma lista completa, consulte Atribuições Padrão e Bindings de Atribuição na documentação do Kubernetes). O cluster-admin clusterrole fornece essencialmente privilégios de superusuário. Um usuário que recebeu o cluster-admin clusterrole pode executar qualquer operação em todos os namespaces de um cluster específico.

Observe que os administradores de tenancy do Oracle Cloud Infrastructure já têm privilégios suficientes e não requerem o cluster-admin clusterrole.

Exemplo 1: Concedendo o cluster-admin clusterrole do Kubernetes RBAC
Observação

As seguintes instruções presumem que:

  • Você tem o acesso necessário para criar atribuições e clusterroles do Kubernetes RBAC porque você está no grupo Administradores da tenancy ou porque possui o clusterrole de administrador de cluster do Kubernetes RBAC.
  • O usuário ao qual você deseja conceder o clusterrole de admin de cluster RBAC não seja um administrador da tenancy do OCI. Se o usuário for um administrador da tenancy do OCI, ele não precisará do clusterrole de administrador de cluster do Kubernetes RBAC.

Siga estas etapas para conceder a um usuário que não seja um administrador de tenancy o clusterrole de administrador de cluster do Kubernetes RBAC em um cluster implantado no Oracle Cloud Infrastructure:

  1. Se você ainda não tiver feito isso, siga as etapas para configurar o arquivo de configuração kubeconfig do cluster e (se necessário) defina a variável de ambiente KUBECONFIG para apontar para o arquivo. Observe que você deve configurar seu próprio arquivo kubeconfig. Não é possível acessar um cluster usando um arquivo kubeconfig que outro usuário tenha configurado. Consulte Configurando o Acesso ao Cluster.
  2. Em uma janela de terminal, conceda o clusterrole de administrador de cluster do Kubernetes RBAC ao usuário informando:

    
    kubectl create clusterrolebinding <my-cluster-admin-binding> --clusterrole=cluster-admin --user=<user_OCID>

    em que:

    • <my-cluster-admin-binding> é uma string à sua escolha a ser usada como o nome para o binding entre o usuário e o clusterrole de administrador de cluster do Kubernetes RBAC. Por exemplo, jdoe_clst_adm
    • <user_OCID> é o OCID do usuário (obtido na Console). Por exemplo, ocid1.user.oc1..aaaaa...zutq (abreviado para facilitar a leitura).

    Por exemplo:

    
    kubectl create clusterrolebinding jdoe_clst_adm --clusterrole=cluster-admin --user=ocid1.user.oc1..aaaaa...zutq
Exemplo 2: Criando uma atribuição e um rolebinding do Kubernetes para permitir que um usuário não administrador leia pods em um cluster

Siga estas etapas para conceder a um usuário não administrador as permissões necessárias do Oracle Cloud Infrastructure e Kubernetes RBAC para exibir pods executados em um cluster do Kubernetes. Neste exemplo, um usuário não administrador recebe acesso explícito ao cluster (em vez de ser membro de um grupo).

Como administrador da tenancy:

Observação

As instruções a seguir pressupõem que você está no grupo Administradores da tenancy e, portanto, tem as permissões necessárias para criar usuários, grupos e políticas do serviço IAM.
  1. Crie uma nova conta de usuário do Oracle Cloud Infrastructure IAM para o usuário não administrador (por exemplo, jdoe@acme.com). Consulte Para criar um usuário.
  2. Anote o OCID da nova conta de usuário do IAM (por exemplo, ocid1.user.oc1..aa______tx5a, abreviado para facilitar a leitura).
  3. Crie um novo grupo do Oracle Cloud Infrastructure IAM (por exemplo, chamado acme-developer-group) e adicione a nova conta de usuário do IAM ao grupo. Consulte Para criar um grupo.
  4. Crie uma nova política do Oracle Cloud Infrastructure que conceda ao novo grupo a permissão CLUSTER_USE nos clusters, com uma instrução de política como:
    Allow group acme-developer-group to use clusters in <location>

    Na instrução de política acima, substitua <location> por tenancy (se você estiver criando a política no compartimento raiz da tenancy) ou por compartment <compartment-name> (se você estiver criando a política em um compartimento individual). Consulte Para criar uma política.

Como administrador do cluster:

Observação

As instruções a seguir pressupõem que você tenha as permissões necessárias para criar e gerenciar clusters e o acesso necessário para criar atribuições e clusterroles do Kubernetes RBAC.
  1. Em um editor de texto, crie o seguinte manifesto (por exemplo, chamado pod-reader-user.yaml) para definir uma atribuição RBAC do Kubernetes e uma vinculação de atribuição para permitir que a nova conta de usuário do IAM liste os pods no namespace kube-system:
    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: pod-reader-ks
      namespace: kube-system
    rules:
    - apiGroups: [""]
      resources: ["pods"]
      verbs: ["get", "watch", "list"]
    ---
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: pod-reader-ks-role-binding
      namespace: kube-system
    subjects:
    - kind: User
      name: <user-ocid>
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: pod-reader-ks
      apiGroup: rbac.authorization.k8s.io
    

    em que name: <user-ocid> especifica o OCID da nova conta de usuário do IAM criada anteriormente. Por exemplo, name: ocid1.user.oc1..aa______tx5a

  2. Crie a nova atribuição e o vínculo de funções inserindo:
    kubectl apply -f pod-reader-user.yml

Como usuário não administrador:

Observação

As instruções a seguir pressupõem que você tenha as credenciais da nova conta de usuário do IAM criadas anteriormente. Como tal, você tem as permissões necessárias para usar clusters do Kubernetes na tenancy ou no compartimento.
  1. Acesse a Console usando as credenciais da nova conta de usuário do IAM.
  2. Configure o acesso ao cluster seguindo as instruções em Configurando o Acesso ao Cluster.
  3. Liste os pods no namespace kube-system digitando:
    kubectl get pods -n kube-system
Exemplo 3: Criando uma atribuição e um rolebinding do Kubernetes para permitir que um grupo leia pods em um cluster

Siga estas etapas para conceder a usuários não administradores em um grupo as permissões necessárias do Oracle Cloud Infrastructure e Kubernetes RBAC para exibir pods executados em um cluster do Kubernetes. Neste exemplo, os usuários não administradores recebem acesso ao cluster como membros de um grupo do IAM (você pode especificar um grupo dinâmico).

Como administrador da tenancy:

Observação

As instruções a seguir pressupõem que você está no grupo Administradores da tenancy e, portanto, tem as permissões necessárias para criar usuários, grupos e políticas do serviço IAM.
  1. Crie uma nova conta de usuário do Oracle Cloud Infrastructure IAM para um usuário não administrador (por exemplo, jsmith@acme.com). Consulte Para criar um usuário.
  2. Crie um novo grupo do Oracle Cloud Infrastructure IAM (por exemplo, chamado acme-developer-group) e adicione a nova conta de usuário do IAM ao grupo. Consulte Para criar um grupo.
  3. Anote o OCID do novo grupo do IAM (por exemplo, ocid1.group.oc1..aa______m7dt, abreviado para facilitar a leitura).
  4. Crie uma nova política do Oracle Cloud Infrastructure que conceda ao novo grupo a permissão CLUSTER_USE nos clusters, com uma instrução de política como:
    Allow group acme-developer-group to use clusters in <location>

    Na instrução de política acima, substitua <location> por tenancy (se você estiver criando a política no compartimento raiz da tenancy) ou por compartment <compartment-name> (se você estiver criando a política em um compartimento individual). Consulte Para criar uma política.

Como administrador do cluster:

Observação

As instruções a seguir pressupõem que você tenha as permissões necessárias para criar e gerenciar clusters e o acesso necessário para criar atribuições e clusterroles do Kubernetes RBAC.
  1. Em um editor de texto, crie o seguinte manifesto (por exemplo, chamado pod-reader-group.yaml) para definir uma atribuição RBAC do Kubernetes e uma associação de atribuições para permitir que os usuários do novo grupo do IAM listem pods no namespace kube-system:
    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: pod-reader-ks
      namespace: kube-system
    rules:
    - apiGroups: [""]
      resources: ["pods"]
      verbs: ["get", "watch", "list"]
    ---
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: pod-reader-ks-role-binding
      namespace: kube-system
    subjects:
    - kind: Group
      name: <group-ocid>
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: pod-reader-ks
      apiGroup: rbac.authorization.k8s.io
    

    em que name: <group-ocid> especifica o OCID do novo grupo do IAM criado anteriormente. Por exemplo, name: ocid1.group.oc1..aa______m7dt

  2. Crie a nova atribuição e o vínculo de funções inserindo:
    kubectl apply -f pod-reader-group.yml

Como usuário não administrador:

Observação

As instruções a seguir pressupõem que você tenha as credenciais da nova conta de usuário do IAM criadas anteriormente como membro do novo grupo do IAM. Como tal, você tem as permissões necessárias para usar clusters do Kubernetes na tenancy ou no compartimento.
  1. Acesse a Console usando as credenciais da nova conta de usuário do IAM.
  2. Configure o acesso ao cluster seguindo as instruções em Configurando o Acesso ao Cluster.
  3. Liste os pods no namespace kube-system digitando:
    kubectl get pods -n kube-system
Exemplo 4: Criando um clusterrole e clusterrolebinding do Kubernetes para permitir que usuários e grupos listem segredos em um cluster

Siga estas etapas para conceder a usuários não administradores em um grupo as permissões necessárias do Oracle Cloud Infrastructure e Kubernetes RBAC para exibir pods executados em um cluster do Kubernetes. Neste exemplo, um usuário não administrador recebe acesso ao cluster explicitamente ou como membro de um grupo do IAM (você pode especificar um grupo dinâmico).

Como administrador da tenancy:

Observação

As instruções a seguir pressupõem que você está no grupo Administradores da tenancy e, portanto, tem as permissões necessárias para criar usuários, grupos e políticas do serviço IAM.
  1. Crie uma nova conta de usuário do Oracle Cloud Infrastructure IAM para um usuário não administrador (por exemplo, jjones@acme.com). Consulte Para criar um usuário.
  2. Se você pretende permitir que apenas esse usuário liste segredos, anote o OCID da nova conta de usuário do IAM (por exemplo, ocid1.user.oc1..aa______4gs6, abreviado para facilitar a leitura).
  3. Crie um novo grupo do Oracle Cloud Infrastructure IAM (por exemplo, chamado acme-developer-group) e adicione a nova conta de usuário do IAM ao grupo. Consulte Para criar um grupo.
  4. Se você pretende permitir que todos os usuários desse grupo listem segredos, anote o OCID do novo grupo do IAM (por exemplo, ocid1.group.oc1..aa______e26f, abreviado para facilitar a leitura).
  5. Crie uma nova política do Oracle Cloud Infrastructure que conceda ao novo grupo a permissão CLUSTER_USE nos clusters, com uma instrução de política como:
    Allow group acme-developer-group to use clusters in <location>

    Na instrução de política acima, substitua <location> por tenancy (se você estiver criando a política no compartimento raiz da tenancy) ou por compartment <compartment-name> (se você estiver criando a política em um compartimento individual). Consulte Para criar uma política.

Como administrador do cluster:

Observação

As instruções a seguir pressupõem que você tenha as permissões necessárias para criar e gerenciar clusters e o acesso necessário para criar atribuições e clusterroles do Kubernetes RBAC.
  1. Em um editor de texto, faça o seguinte, dependendo se você deseja ativar apenas o novo usuário do IAM ou todos os usuários do novo grupo do IAM para listar segredos em um cluster do Kubernetes:
    • Se você quiser permitir que apenas o novo usuário do IAM liste segredos em um cluster do Kubernetes, crie o seguinte manifesto (por exemplo, chamado de secrets-reader.yaml):
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: secret-reader
      rules:
      - apiGroups: [""]
        resources: ["secrets"]
        verbs: ["get", "watch", "list"]
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: read-secrets-global
      subjects:
      - kind: User
        name: <user-ocid>
        apiGroup: rbac.authorization.k8s.io
      roleRef:
        kind: ClusterRole
        name: secret-reader
        apiGroup: rbac.authorization.k8s.io
      

      em que name: <user-ocid> especifica o OCID do novo usuário do IAM criado anteriormente. Por exemplo, name: ocid1.user.oc1..aa______4gs6

    • Se você quiser permitir que todos os usuários do novo grupo do IAM listem segredos em um cluster do Kubernetes, crie o seguinte manifesto (por exemplo, chamado de secrets-reader.yaml):
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: secret-reader
      rules:
      - apiGroups: [""]
        resources: ["secrets"]
        verbs: ["get", "watch", "list"]
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: read-secrets-global
      subjects:
      - kind: Group
        name: <group-ocid>
        apiGroup: rbac.authorization.k8s.io
      roleRef:
        kind: ClusterRole
        name: secret-reader
        apiGroup: rbac.authorization.k8s.io
      

      em que name: <group-ocid> é o OCID do novo grupo do IAM criado anteriormente. Por exemplo, ocid1.group.oc1..aa______e26f

  2. Crie o novo clusterrole e clusterrolebinding informando:
    kubectl apply -f secret-reader.yml

Como usuário não administrador:

Observação

As instruções a seguir pressupõem que você tenha as credenciais da nova conta de usuário do IAM criadas anteriormente como membro do novo grupo do IAM. Como tal, você tem as permissões necessárias para usar clusters do Kubernetes na tenancy ou no compartimento explicitamente ou como membro de um grupo.
  1. Acesse a Console usando as credenciais da nova conta de usuário do IAM.
  2. Configure o acesso ao cluster seguindo as instruções em Configurando o Acesso ao Cluster.
  3. Liste os segredos em todos os namespaces digitando:
    kubectl get secrets --all-namespaces