---
title: Criar API TOKEN
slug: aiops-documentacao-tecnica/criar-api-token
docTags: 
createdAt: 2024-07-24T14:13:20.090Z
---

## Introdução

Esta documentação descreve o processo para criar um token de API não expirável e persistente para uma ServiceAccount no Kubernetes, utilizando um Secret do tipo kubernetes.io/service-account-token. Esse método é útil quando o mecanismo de solicitação de token não é adequado, fornecendo tokens de longa duração.

:::hint{type="info"}
Crie tokens de API de longa duração apenas se o mecanismo de solicitação de token não for adequado. O mecanismo de solicitação de token fornece tokens com tempo limitado; devido à sua expiração, representam um risco menor à segurança da informação.
:::

## Passos para Criar um Token de API Persistente

### 1. Criação de um Secret

Para criar um token de API não expirável para uma ServiceAccount, crie um Secret do tipo kubernetes.io/service-account-token com uma anotação referenciando a ServiceAccount. O plano de controle gerará um token de longa duração e atualizará o Secret com os dados do token gerado.

### 2. Manifesto de Exemplo

*Altere os campos&#x20;****my-serviceaccount****&#x20;e&#x20;****my-namespace&#x20;****para os valores de sua preferência.*

**Service Account:**

:::CodeblockTabs
YAML

```javascript
apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-serviceaccount
  namespace: my-namespace
```
:::

**Secret:**

:::CodeblockTabs
YAML

```javascript
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
  name: my-secretname
  namespace: my-namespace
  annotations:
    kubernetes.io/service-account.name: my-serviceaccount
```
:::

### 3. Crie um ClusterRole e um ClusterRoleBinding com permissões de READ para o Cluster:

**ClusterRole**:

Regra para somente ler o cluster (get)

:::CodeblockTabs
YAML

```javascript
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
  name: read-cluster-admin
rules:
  - apiGroups:
      - "*"
    resources:
      - "*"
    verbs:
      - "*"
  - nonResourceURLs:
      - "*"
    verbs: ["get"]
```
:::

**ClusterRoleBinding:**

O ClusterRoleBinding dá as regras criadas no ClusterRole para a ServiceAccount (my-serviceaccount) criada anteriomente.

:::CodeblockTabs
YAML

```javascript
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: my-clusterrolebinding
subjects:
- kind: ServiceAccount
  name: my-serviceaccount
  namespace: my-namespace
roleRef:
  kind: ClusterRole
  name: read-cluster-admin
  apiGroup: rbac.authorization.k8s.io
```
:::

E então o secret usado por essa ServiceAccount pode ser usado somente para ler o Cluster, como indicado em "**verbs: \["get"]**"

### 4. Verificação dos Detalhes do Secret

Para ver os detalhes do Secret criado, execute:

:::CodeblockTabs
COMMAND

```javascript
kubectl -n my-namespace describe secret my-secretname
```
:::

### 5. Exemplo de Saída

A saída será semelhante a:

```javascript
Namespace:      my-namespace
Labels:         <none>
Annotations:    kubernetes.io/service-account.name=my-serviceaccount
                kubernetes.io/service-account.uid=8a85c4c4-8483-11e9-bc42-526af7764f64

Type:   kubernetes.io/service-account-token

Data
====
ca.crt:         1362 bytes
namespace:      9 bytes
token:          <TOKEN_GERADO>
```

### 6. Rode o seguinte comando mostrar o Token Gerado:

:::CodeblockTabs
EXEMPLO

```javascript
kubectl get secret my-secretname -n my-namespace -o jsonpath='{.data.token}' | base64 --decode
```
:::

### 7. Rode o seguinte comando para validar o Token:

```javascript
curl -H "Authorization: Bearer <TOKEN>" -k https://<kubernetes-api-server>/api/v1/nodes

```

