Sobre o Controle de Acesso e o Kubernetes Engine (OKE)

Saiba mais sobre as permissões necessárias para acessar clusters que você criou usando o Kubernetes Engine (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 Kubernetes Engine, 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 serviço 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 as 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 e clusterrolebindings do Kubernetes RBAC 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 o 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 uma atribuição 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 (e não como membro de um grupo).

Como administrador da tenancy:

Observação

As instruções a seguir pressupõem que você esteja no grupo Administradores da tenancy e, portanto, tenha 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 legibilidade).
  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.

    Observe que, se um grupo não estiver no domínio de identidades padrão, coloque o nome do grupo no formato group '<identity-domain-name>'/'group-name' como prefixo. Você também pode especificar um grupo usando seu OCID, no formato group id <group-ocid>.

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 e um binding de atribuição do Kubernetes RBAC para permitir que a nova conta de usuário do IAM liste 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 serviço IAM criada anteriormente. Por exemplo, name: ocid1.user.oc1..aa______tx5a

  2. Crie a nova atribuição e o novo rolebinding informando:
    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 criada anteriormente. Dessa forma, você tem as permissões necessárias para usar clusters do Kubernetes na tenancy ou no compartimento.
  1. Acesse a Console usando as novas credenciais da 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 uma atribuição do Kubernetes para permitir que um grupo leia pods em um cluster

Siga estas etapas para conceder aos 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 serviço IAM (você pode especificar um grupo dinâmico).

Como administrador da tenancy:

Observação

As instruções a seguir pressupõem que você esteja no grupo Administradores da tenancy e, portanto, tenha 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 legibilidade).
  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.

    Observe que, se um grupo não estiver no domínio de identidades padrão, coloque o nome do grupo no formato group '<identity-domain-name>'/'group-name' como prefixo. Você também pode especificar um grupo usando seu OCID, no formato group id <group-ocid>.

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 e um binding de atribuição do Kubernetes RBAC 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 serviço IAM criado anteriormente. Por exemplo, name: ocid1.group.oc1..aa______m7dt

  2. Crie a nova atribuição e o novo rolebinding informando:
    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 criada anteriormente como membro do novo grupo do IAM. Dessa forma, você tem as permissões necessárias para usar clusters do Kubernetes na tenancy ou no compartimento.
  1. Acesse a Console usando as novas credenciais da 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 um clusterrolebinding do Kubernetes para permitir que usuários e grupos listem segredos em um cluster

Siga estas etapas para conceder aos 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 serviço IAM (você pode especificar um grupo dinâmico).

Como administrador da tenancy:

Observação

As instruções a seguir pressupõem que você esteja no grupo Administradores da tenancy e, portanto, tenha 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 ativar apenas esse usuário para listar segredos, anote o OCID da nova conta de usuário do serviço IAM (por exemplo, ocid1.user.oc1..aa______4gs6, abreviado para legibilidade).
  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 serviço IAM (por exemplo, ocid1.group.oc1..aa______e26f, abreviado para legibilidade).
  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.

    Observe que, se um grupo não estiver no domínio de identidades padrão, coloque o nome do grupo no formato group '<identity-domain-name>'/'group-name' como prefixo. Você também pode especificar um grupo usando seu OCID, no formato group id <group-ocid>.

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, execute um dos procedimentos a seguir, 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 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 serviço 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 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> corresponde ao OCID do novo grupo do serviço IAM criado anteriormente. Por exemplo, ocid1.group.oc1..aa______e26f

  2. Crie o novo clusterrole e clusterrolebinding digitando:
    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 criada anteriormente como membro do novo grupo do IAM. Dessa forma, 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 novas credenciais da 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