Observação:

Gerar relatório de associação do Grupo de Usuários de Domínios de Identidade do OCI IAM usando Python

Introdução

A Oracle Cloud Infrastructure (OCI) é uma plataforma de nuvem capaz de fornecer uma variedade de serviços de nuvem, incluindo armazenamento, rede e infraestrutura. O Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) é um serviço que permite gerenciar o acesso aos recursos do OCI. Ele fornece autenticação e autorização para usuários e grupos.

Um dos principais recursos do OCI IAM é a capacidade de designar usuários a grupos para simplificar o gerenciamento de acesso. Entre os clientes do OCI IAM, um cenário comum é gerar relatórios de Domínios de Identidade do OCI IAM. Há vários relatórios do serviço IAM que são gerados facilmente pela console de Domínios de Identidades do OCI IAM. No entanto, a obtenção de relatórios de associação de grupos de usuários não é um recurso predefinido no OCI IAM por enquanto, mas pode ser facilmente gerado usando chamadas de API REST.

Público-alvo

Este tutorial se destina a profissionais e administradores de IAM.

Objetivo

Neste tutorial, vamos explorar um método para gerar relatórios de associação de grupos de usuários dos Domínios de Identidade do OCI IAM usando a API REST com Python.

Pré-requisitos

Tarefa 1: Criar um aplicativo confidencial no Domínio de Identidades do OCI IAM

Siga o tutorial para criar um aplicativo confidencial e recuperar o ID do cliente e o segredo do cliente, que podem ser usados para executar uma chamada de API REST no OCI IAM para recuperar o Token de Acesso e pontos finais de API subsequentes.

Tarefa 2: Configurar o arquivo config.json

Configure o arquivo de configuração em sua máquina local. O arquivo config.json tem informações sobre o URL do Domínio de Identidades, o ID do Cliente e o Segredo do Cliente que é usado para gerar o Token de Acesso.

 {
 "iamurl"         : "https://idcs-###########.identity.oraclecloud.com",
"client_id"      : "#######################",
"client_secret"  : "#######################"
 }

Tarefa 3: Obter o Token de Acesso

Quando o arquivo config.json estiver no lugar, a primeira coisa que você precisa fazer é gerar o Token de Acesso, que pode ser usado para fazer mais chamadas de API REST aos pontos finais do OCI IAM.

No trecho de código abaixo, a função get_encoded usa o ID do Cliente e o Segredo do Cliente como argumentos e retorna a string base64-encoded.

Essa string codificada é informada como um argumento para a função get_access_token como cabeçalho de Autorização, para obter o Token de Acesso executando uma solicitação POST.

#get base64 encoded
def get_encoded(self,clid, clsecret):
    encoded = clid + ":" + clsecret
    baseencoded = base64.urlsafe_b64encode(encoded.encode('UTF-8')).decode('ascii')
    return baseencoded

#get access token
def get_access_token(self,url, header):
    para = "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__"
    response = requests.post(url, headers=header, data=para, verify=False)
    jsonresp = json.loads(response.content)
    access_token = jsonresp.get('access_token')
    return access_token

#print access token
def printaccesstoken(self):
    obj = IAM()
    encodedtoken = obj.get_encoded(clientID, clientSecret)
    extra = "/oauth2/v1/token"
    headers = {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
               'Authorization': 'Basic %s' % encodedtoken, 'Accept': '*/*'}
    accesstoken = obj.get_access_token(idcsURL + extra, headers)
    return accesstoken

Tarefa 4: Recuperar informações do usuário - nomes de usuário e associação de grupo

Agora temos o token de acesso, usando o qual podemos fazer mais chamadas de API REST para diferentes pontos finais REST de Domínios de Identidade do OCI IAM. O trecho de código abaixo mostra como estamos fazendo uma solicitação GET com os cabeçalhos e parâmetros necessários para o ponto final /admin/v1/Users, a fim de recuperar o número total de resultados e, em seguida, calcular o número de iterações (loop) necessárias com base no número total de resultados e na contagem por solicitação.

def searchusers(self):
    obj = IAM()
    accesstoken = obj.printaccesstoken()
    startIndex = 0
    count = 50
    extra = "/admin/v1/Users"
    headers = {'Accept': '*/*', 'Authorization': 'Bearer ' + accesstoken}
    param = {'attributes': "userName,groups.display", 'startIndex': startIndex, 'count': count}
    resp = requests.get(idcsURL + extra, headers=headers, verify=False, params=param)
    jsonresp = json.loads(resp.content)
    total = jsonresp.get("totalResults")
    print(total)
    tCount = total
    loop = int(tCount / count)
    print(loop)
    mainlist = []
    for i in range(loop + 1):
        param1 = {'attributes': "userName,groups.display", 'startIndex': startIndex, 'count': count}
        resp1 = requests.get(idcsURL + extra, headers=headers, verify=False, params=param1)
        startIndex += count
        jsonresp1 = json.loads(resp1.content)
        tempjsn = jsonresp1.get("Resources")
        for x in tempjsn:
            trimjsn ={}
            user = trimjsn["Username"] = x.get("userName")
            grp = x.get("groups")
            if grp is None:
                trimjsn["Groups"] = "None"
                mainlist.append(trimjsn.copy())
                continue
            for i in grp:
                grpname = trimjsn["Groups"] = i.get("display")
                print(trimjsn)
                mainlist.append(trimjsn.copy())
            print(mainlist)
    return mainlist

Tarefa 5: Converter a lista em um relatório CSV

Depois que tivermos as informações do usuário, o trecho de código abaixo ajudará a criar um DataFrame com base nos dados da lista principal e, em seguida, salve o DataFrame em um arquivo CSV chamado mainlist.csv no diretório de trabalho atual.

df_mainlist = pd.DataFrame(mainlist)
print(df_mainlist)
df_mainlist.to_csv('mainlist.csv')

Tarefa 6: Usar o script no Cloud Shell

Assim que o script estiver pronto, ele poderá ser facilmente executado na máquina local (com o Python instalado) ou em qualquer IDE que suporte o desenvolvimento Python. Aqui, estamos usando o OCI Cloud Shell para executar o script e obter o relatório desejado.

  1. Faça log-in na Console do OCI, abra o Cloud Shell no canto superior direito da tela e, em seguida, faça upload do script Python e do arquivo config.json.

    Imagem 1

    Imagem 2

    Imagem 3

  2. Execute o comando pip3 install pandas --user para instalar o módulo.

    Imagem 4

    Observação: execute o comando para qualquer erro de módulo. Os módulos devem ser instalados antes de serem usados.

  3. Agora execute python GroupMembership_Pagination.py.

  4. Faça download do mainlist.csv.

    Imagem 5

    Imagem 6

    Observação: O arquivo mainlist.csv contém todos os detalhes de associação dos grupos de usuários. Se o usuário não pertencer a nenhum grupo, o valor será definido como Nenhum.

Aquisições

Autor - Gautam Mishra (Engenheiro de Nuvem Sênior)

Mais Recursos de Aprendizagem

Explore outros laboratórios no site docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal YouTube do Oracle Learning. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.