Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever e obter uma conta gratuita, consulte Conceitos Básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
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
- Uma assinatura do OCI ativa.
- Familiaridade com OCI IAM e Python.
- O conhecimento de usar a API REST de Domínios de Identidade do OCI IAM é necessário.
- Um usuário do IAM com autorização para gerenciar Aplicativos (Administrador de Domínio de Identidades, Administrador de Segurança ou Administrador de Aplicativos).
- Python 3.x instalado no sistema.
- Pacotes Python 'urllib3', 'requests' e 'pandas' instalados.
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.
-
A função inicializa uma lista vazia para armazenar todas as informações do usuário. Ele tem um loop para recuperar informações do usuário em lotes.
-
Em cada iteração, ela envia uma solicitação GET com os parâmetros apropriados para recuperar um batch de informações do usuário (nome de usuário e associação de grupo) e, em seguida, adicioná-las em um dicionário vazio.
-
Se o usuário pertencer a um ou mais grupos, ele informará outro loop para recuperar o nome de cada grupo. E se o usuário não pertencer a nenhum grupo, ele definirá o valor como Nenhum e, em seguida, anexará a cópia do dicionário à lista.
-
Após todas as iterações, a função retorna a lista principal com todas as informações necessárias do usuário.
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.
-
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
. -
Execute o comando
pip3 install pandas --user
para instalar o módulo.Observação: execute o comando para qualquer erro de módulo. Os módulos devem ser instalados antes de serem usados.
-
Agora execute
python GroupMembership_Pagination.py
. -
Faça download do
mainlist.csv
.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.
Links Relacionados
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.
Generate User Group membership report from OCI IAM Identity Domains using Python
F82226-01
May 2023
Copyright © 2023, Oracle and/or its affiliates.