From a9003a6f0dcef1e09790eef436e86b05d485ec52 Mon Sep 17 00:00:00 2001 From: Jose Almaraz Date: Thu, 29 Jun 2023 12:19:39 +1000 Subject: [PATCH 1/6] Translate abac authorization page to pt-br --- .../docs/reference/access-authn-authz/abac.md | 137 ++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 content/pt-br/docs/reference/access-authn-authz/abac.md diff --git a/content/pt-br/docs/reference/access-authn-authz/abac.md b/content/pt-br/docs/reference/access-authn-authz/abac.md new file mode 100644 index 0000000000..fb68fc108d --- /dev/null +++ b/content/pt-br/docs/reference/access-authn-authz/abac.md @@ -0,0 +1,137 @@ +--- +title: Utilizando Autorização ABAC +content_type: concept +weight: 80 +--- + + +O controle de acesso baseado em atributos (ABAC) define um paradigma de controle de acesso onde os direitos de acesso são concedidos aos usuários por meio do use de políticas que combinam atributos. + + +## Formato do arquivo de política + +Especifique os parametros de inicializacao `--authorization-policy-file=SOME_FILENAME` e `--authorization-mode=ABAC` para habilitar o modo `ABAC`. + +O formato do arquivo é de [um objeto JSON por linha](https://jsonlines.org/). Nele não deve haver lista ou mapa envolvente, apenas um mapa por linha. + +Cada linha é um "objeto de política", onde cada objeto é um mapa com as seguintes propriedades: + + - Propriedades de versionamento: + - `apiVersion`, tipo string; os valores válidos são "abac.authorization.kubernetes.io/v1beta1". Permite controle de versão e conversão do formato da política. + +- `kind`, tipo string: os valores válidos são "Policy". Permite controle de versão e conversão do formato da política. + - `spec` definida para um mapa com as seguintes propriedades: + - Propriedades de correspondência de assunto: + - `user`, tipo string; a string de usuário de `--token-auth-file`. Se você especificar `user`, ele deve corresponder ao nome do usuário autenticado. + - `group`, tipo string; se você especificar `group`, ele deve corresponder a um dos grupos do usuário autenticado. `system:authenticated` corresponde a todas as requi autenticadas. `system:unauthenticated` corresponde a todas as requisições não autenticadas. + - Propriedades de correspondência de recursos: + - `apiGroup`, tipo string; um grupo de API. + - Ex: `apps`, `networking.k8s.io` + - Curinga: `*` corresponde a todos os grupos de API. + - `namespace`, tipo string; um namespace. + - Ex: `kube-system` + - Curinga: `*` corresponde a todas as requisições de recursos. + - `resource`, tipo string; um tipo de recurso + - Ex: `pods`, `deployments` + - Curinga: `*` corresponde a todas as requisições de recursos. + - Propriedades sem correspondência de recursos: + - `nonResourcePath`, tipo string; caminhos de solicitação sem recurso. + - Ex: `/version` ou `/apis` + - Curinga: + - `*` corresponde a todas as requisições que não são de recursos. + - `/foo/*` corresponde a todos os subcaminhos de `/foo/`. + - `readonly`, tipo boolean, quando verdadeiro, significa que a política de correspondência de recursos se aplica apenas às operações `get`, `list` e `watch`, a política de não correspondência de recursos se aplica apenas à operação `get`. + +{{< note >}} +Uma propriedade não definida é igual a uma propriedade definida com o valor zero para seu tipo +(por exemplo, string vazia, 0, falso). No entanto, `unset` deve ser preferido para legibilidade. + +No futuro, as políticas poderão ser expressas no formato JSON e gerenciadas por meio de uma interface REST. +{{< /note >}} + +## Algoritmo de Autorização + +Uma requisição possui atributos que correspondem às propriedades de um objeto de política. + +Quando uma requisição é recebida, os atributos são determinados. Atributos desconhecidos são definidos com o valor zero de seu tipo (por exemplo, string vazia, 0, falso). + +Uma propriedade definida como `"*"` corresponderá a qualquer valor do atributo correspondente. + +A tupla de atributos é verificada em relação a cada política do +arquivo de política. Se pelo menos uma linha corresponder aos atributos da solicitação, a requisição é autorizada (mas pode falhar em validação posterior). + +Para permitir que qualquer usuário autenticado faça algo, escreva uma política com a propriedade do grupo definida como `"system:authenticated"`. + +Para permitir que qualquer usuário não autenticado faça algo, escreva uma política com a propriedade do grupo definida como `"system:unauthenticated"`. + +Para permitir que um usuário faça qualquer coisa, escreva uma política com as propriedades `apiGroup`, `namespace`, `resource` e `nonResourcePath` definidas como `"*"`. + +## Kubectl + +O Kubectl usa os endpoints `/api` e `/apis` do servidor de API para descobrir os tipos de recursos servidos e valida objetos enviados para a API pelas operações criar/atualizar usando informações de esquema localizadas em `/openapi/v2`. + +Ao utilizar a autorização ABAC, esses recursos especiais devem ser explicitamente expostos por meio da propriedade `nonResourcePath` em uma política (consulte [exemplos](#exemplos) abaixo): + +* `/api`, `/api/*`, `/apis` e `/apis/*` para negociação de versão da API. +* `/version` para recuperar a versão do servidor via `kubectl version`. +* `/swaggerapi/*` para operações de criação/atualização. + +Para inspecionar as chamadas HTTP envolvidas em uma operação kubectl específica, você pode ativar aumentar a verbosidade: + + kubectl --v=8 versão + +## Exemplos + + 1. Alice pode fazer qualquer coisa em todos os recursos: + + ```json + {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "alice", "namespace": "*", "resource": "*", "apiGroup": "*"}} + ``` + 2. O Kubelet pode ler qualquer pod: + + ```json + {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "kubelet", "namespace": "*", "resource": "pods", "readonly": true}} + ``` + 3. O Kubelet pode ler e escrever eventos: + + ```json + {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "kubelet", "namespace": "*", "resource": "events"}} + ``` + 4. Bob pode ler pods somente pertencentes ao namespace "projectCaribou": + + ```json + {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "bob", "namespace": "projectCaribou", "resource": "pods", "readonly": true}} + ``` + 5. Qualquer pessoa pode realizar requisições de somente-leitura em todos os caminhos que não são de recursos: + + ```json + {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"group": "system:authenticated", "readonly": true, "nonResourcePath": "*"}} + {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"group": "system:unauthenticated", "readonly": true, "nonResourcePath": "*"}} + ``` + +[Exemplo de arquivo completo](https://releases.k8s.io/v{{< skew currentPatchVersion >}}/pkg/auth/authorizer/abac/example_policy_file.jsonl) + +## Uma rápida observação sobre contas de serviço + +Cada conta de serviço tem um nome de usuário ABAC correspondente, e o nome de usuário dessa conta de serviço é gerado de acordo com a convenção de nomenclatura: + +```shell +system:serviceaccount:: +``` + +A criação de um novo namespace leva à criação de uma nova conta de serviço no seguinte formato: + +```shell +system:serviceaccount::default +``` + +For example, if you wanted to grant the default service account (in the `kube-system` namespace) full +privilege to the API using ABAC, you would add this line to your policy file: + +Por exemplo, se você quiser conceder à conta de serviço padrão (no namespace `kube-system`) privilégio total à API usando ABAC, adicione esta linha ao seu arquivo de política: + +```json +{"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"system:serviceaccount:kube-system:default","namespace":"*","resource":"*","apiGroup":"*"}} +``` + +O servidor de API precisará ser reiniciado para selecionar as novas linhas da política. From ea28c3d21956c9fcae6fdb706922eff2760101ea Mon Sep 17 00:00:00 2001 From: Jose Almaraz Date: Thu, 29 Jun 2023 13:55:21 +1000 Subject: [PATCH 2/6] translate filename option in parameter --- content/pt-br/docs/reference/access-authn-authz/abac.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/pt-br/docs/reference/access-authn-authz/abac.md b/content/pt-br/docs/reference/access-authn-authz/abac.md index fb68fc108d..9750f00517 100644 --- a/content/pt-br/docs/reference/access-authn-authz/abac.md +++ b/content/pt-br/docs/reference/access-authn-authz/abac.md @@ -10,7 +10,7 @@ O controle de acesso baseado em atributos (ABAC) define um paradigma de controle ## Formato do arquivo de política -Especifique os parametros de inicializacao `--authorization-policy-file=SOME_FILENAME` e `--authorization-mode=ABAC` para habilitar o modo `ABAC`. +Especifique os parametros de inicializacao `--authorization-policy-file=NOME_DE_ALGUM_ARQUIVO` e `--authorization-mode=ABAC` para habilitar o modo `ABAC`. O formato do arquivo é de [um objeto JSON por linha](https://jsonlines.org/). Nele não deve haver lista ou mapa envolvente, apenas um mapa por linha. From 67d7aa958e81eb16477fcae024a3b4c9acf3e170 Mon Sep 17 00:00:00 2001 From: Jose Almaraz Date: Thu, 29 Jun 2023 13:56:09 +1000 Subject: [PATCH 3/6] missing accent in word inicializacao --- content/pt-br/docs/reference/access-authn-authz/abac.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/pt-br/docs/reference/access-authn-authz/abac.md b/content/pt-br/docs/reference/access-authn-authz/abac.md index 9750f00517..b1fc95acaf 100644 --- a/content/pt-br/docs/reference/access-authn-authz/abac.md +++ b/content/pt-br/docs/reference/access-authn-authz/abac.md @@ -10,7 +10,7 @@ O controle de acesso baseado em atributos (ABAC) define um paradigma de controle ## Formato do arquivo de política -Especifique os parametros de inicializacao `--authorization-policy-file=NOME_DE_ALGUM_ARQUIVO` e `--authorization-mode=ABAC` para habilitar o modo `ABAC`. +Especifique os parametros de inicialização `--authorization-policy-file=NOME_DE_ALGUM_ARQUIVO` e `--authorization-mode=ABAC` para habilitar o modo `ABAC`. O formato do arquivo é de [um objeto JSON por linha](https://jsonlines.org/). Nele não deve haver lista ou mapa envolvente, apenas um mapa por linha. From 929685eb8a05d2319710c87419e0da1829aef706 Mon Sep 17 00:00:00 2001 From: Jose Almaraz Date: Tue, 4 Jul 2023 11:20:46 +1000 Subject: [PATCH 4/6] addressing first review items --- .../docs/reference/access-authn-authz/abac.md | 58 +++++++++---------- 1 file changed, 27 insertions(+), 31 deletions(-) diff --git a/content/pt-br/docs/reference/access-authn-authz/abac.md b/content/pt-br/docs/reference/access-authn-authz/abac.md index b1fc95acaf..1cdf37a69d 100644 --- a/content/pt-br/docs/reference/access-authn-authz/abac.md +++ b/content/pt-br/docs/reference/access-authn-authz/abac.md @@ -5,7 +5,7 @@ weight: 80 --- -O controle de acesso baseado em atributos (ABAC) define um paradigma de controle de acesso onde os direitos de acesso são concedidos aos usuários por meio do use de políticas que combinam atributos. +O controle de acesso baseado em atributos (ABAC) define um paradigma de controle de acesso onde os direitos de acesso são concedidos aos usuários por meio do uso de políticas que combinam atributos. ## Formato do arquivo de política @@ -18,33 +18,32 @@ Cada linha é um "objeto de política", onde cada objeto é um mapa com as segui - Propriedades de versionamento: - `apiVersion`, tipo string; os valores válidos são "abac.authorization.kubernetes.io/v1beta1". Permite controle de versão e conversão do formato da política. - -- `kind`, tipo string: os valores válidos são "Policy". Permite controle de versão e conversão do formato da política. - - `spec` definida para um mapa com as seguintes propriedades: - - Propriedades de correspondência de assunto: - - `user`, tipo string; a string de usuário de `--token-auth-file`. Se você especificar `user`, ele deve corresponder ao nome do usuário autenticado. - - `group`, tipo string; se você especificar `group`, ele deve corresponder a um dos grupos do usuário autenticado. `system:authenticated` corresponde a todas as requi autenticadas. `system:unauthenticated` corresponde a todas as requisições não autenticadas. - - Propriedades de correspondência de recursos: - - `apiGroup`, tipo string; um grupo de API. - - Ex: `apps`, `networking.k8s.io` - - Curinga: `*` corresponde a todos os grupos de API. - - `namespace`, tipo string; um namespace. - - Ex: `kube-system` - - Curinga: `*` corresponde a todas as requisições de recursos. - - `resource`, tipo string; um tipo de recurso - - Ex: `pods`, `deployments` - - Curinga: `*` corresponde a todas as requisições de recursos. - - Propriedades sem correspondência de recursos: - - `nonResourcePath`, tipo string; caminhos de solicitação sem recurso. - - Ex: `/version` ou `/apis` - - Curinga: - - `*` corresponde a todas as requisições que não são de recursos. - - `/foo/*` corresponde a todos os subcaminhos de `/foo/`. - - `readonly`, tipo boolean, quando verdadeiro, significa que a política de correspondência de recursos se aplica apenas às operações `get`, `list` e `watch`, a política de não correspondência de recursos se aplica apenas à operação `get`. + - `kind`, tipo string: os valores válidos são "Policy". Permite controle de versão e conversão do formato da política. + - `spec` definida para um mapa com as seguintes propriedades: + - Propriedades de correspondência de sujeito: + - `user`, tipo string; a string de usuário de `--token-auth-file`. Se você especificar `user`, ele deve corresponder ao nome do usuário autenticado. + - `group`, tipo string; se você especificar `group`, ele deve corresponder a um dos grupos do usuário autenticado `system:authenticated` corresponde a todas as requisições autenticadas. `system:unauthenticated` corresponde a todas as requisições não autenticadas. + - Propriedades de correspondência de recursos: + - `apiGroup`, tipo string; um grupo de API. + - Ex: `apps`, `networking.k8s.io` + - Curinga: `*` corresponde a todos os grupos de API. + - `namespace`, tipo string; um namespace. + - Ex: `kube-system` + - Curinga: `*` corresponde a todas as requisições de recursos. + - `resource`, tipo string; um tipo de recurso + - Ex: `pods`, `deployments` + - Curinga: `*` corresponde a todas as requisições de recursos. + - Propriedades sem correspondência de recursos: + - `nonResourcePath`, tipo string; caminhos de solicitação sem recurso. + - Ex: `/version` ou `/apis` + - Curinga: + - `*` corresponde a todas as requisições que não são de recursos. + - `/foo/*` corresponde a todos os subcaminhos de `/foo/`. + - `readonly`, tipo booleano. Quando verdadeiro, significa que a política de correspondência de recursos se aplica apenas às operações `get`, `list` e `watch`. Em caso de políticas sem correspondência de recursos se aplica apenas à operação `get`. {{< note >}} Uma propriedade não definida é igual a uma propriedade definida com o valor zero para seu tipo -(por exemplo, string vazia, 0, falso). No entanto, `unset` deve ser preferido para legibilidade. +(por exemplo, string vazia, 0, falso). No entanto, indefinido deve ser preferido para legibilidade. No futuro, as políticas poderão ser expressas no formato JSON e gerenciadas por meio de uma interface REST. {{< /note >}} @@ -87,7 +86,7 @@ Para inspecionar as chamadas HTTP envolvidas em uma operação kubectl específi ```json {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "alice", "namespace": "*", "resource": "*", "apiGroup": "*"}} ``` - 2. O Kubelet pode ler qualquer pod: + 2. O Kubelet pode ler qualquer Pod: ```json {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "kubelet", "namespace": "*", "resource": "pods", "readonly": true}} @@ -97,7 +96,7 @@ Para inspecionar as chamadas HTTP envolvidas em uma operação kubectl específi ```json {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "kubelet", "namespace": "*", "resource": "events"}} ``` - 4. Bob pode ler pods somente pertencentes ao namespace "projectCaribou": + 4. Bob pode ler Pods somente pertencentes ao namespace "projectCaribou": ```json {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "bob", "namespace": "projectCaribou", "resource": "pods", "readonly": true}} @@ -125,13 +124,10 @@ A criação de um novo namespace leva à criação de uma nova conta de serviço system:serviceaccount::default ``` -For example, if you wanted to grant the default service account (in the `kube-system` namespace) full -privilege to the API using ABAC, you would add this line to your policy file: - Por exemplo, se você quiser conceder à conta de serviço padrão (no namespace `kube-system`) privilégio total à API usando ABAC, adicione esta linha ao seu arquivo de política: ```json {"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"system:serviceaccount:kube-system:default","namespace":"*","resource":"*","apiGroup":"*"}} ``` -O servidor de API precisará ser reiniciado para selecionar as novas linhas da política. +O servidor de API precisará ser reiniciado para carregar as novas linhas da política. From 90761e8ed1152c641ff1d4a64bcd7ac994914e32 Mon Sep 17 00:00:00 2001 From: Jose Almaraz Date: Thu, 6 Jul 2023 19:28:07 +1000 Subject: [PATCH 5/6] review items missing --- content/pt-br/docs/reference/access-authn-authz/abac.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/content/pt-br/docs/reference/access-authn-authz/abac.md b/content/pt-br/docs/reference/access-authn-authz/abac.md index 1cdf37a69d..241f3102e1 100644 --- a/content/pt-br/docs/reference/access-authn-authz/abac.md +++ b/content/pt-br/docs/reference/access-authn-authz/abac.md @@ -56,8 +56,7 @@ Quando uma requisição é recebida, os atributos são determinados. Atributos d Uma propriedade definida como `"*"` corresponderá a qualquer valor do atributo correspondente. -A tupla de atributos é verificada em relação a cada política do -arquivo de política. Se pelo menos uma linha corresponder aos atributos da solicitação, a requisição é autorizada (mas pode falhar em validação posterior). +A tupla de atributos é verificada em relação a cada política do arquivo de política. Se pelo menos uma linha corresponder aos atributos da requisição, ela é então autorizada (mas pode falhar em validação posterior). Para permitir que qualquer usuário autenticado faça algo, escreva uma política com a propriedade do grupo definida como `"system:authenticated"`. @@ -75,9 +74,11 @@ Ao utilizar a autorização ABAC, esses recursos especiais devem ser explicitame * `/version` para recuperar a versão do servidor via `kubectl version`. * `/swaggerapi/*` para operações de criação/atualização. -Para inspecionar as chamadas HTTP envolvidas em uma operação kubectl específica, você pode ativar aumentar a verbosidade: +Para inspecionar as chamadas HTTP envolvidas em uma operação kubectl específica, você pode aumentar a verbosidade: - kubectl --v=8 versão +```shell +kubectl --v=8 version +``` ## Exemplos From 4483e86e533974bc1d791b78909607e84a806a52 Mon Sep 17 00:00:00 2001 From: Jose Almaraz Date: Fri, 7 Jul 2023 10:53:19 +1000 Subject: [PATCH 6/6] missing review items --- content/pt-br/docs/reference/access-authn-authz/abac.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/pt-br/docs/reference/access-authn-authz/abac.md b/content/pt-br/docs/reference/access-authn-authz/abac.md index 241f3102e1..6b263c0a17 100644 --- a/content/pt-br/docs/reference/access-authn-authz/abac.md +++ b/content/pt-br/docs/reference/access-authn-authz/abac.md @@ -102,8 +102,8 @@ kubectl --v=8 version ```json {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "bob", "namespace": "projectCaribou", "resource": "pods", "readonly": true}} ``` - 5. Qualquer pessoa pode realizar requisições de somente-leitura em todos os caminhos que não são de recursos: - + 5. Qualquer pessoa pode realizar requisições somente-leitura em todos os caminhos que não são de recursos: + ```json {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"group": "system:authenticated", "readonly": true, "nonResourcePath": "*"}} {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"group": "system:unauthenticated", "readonly": true, "nonResourcePath": "*"}}