참고:
- 이 자습서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 인증서, 테넌시 및 구획에 대한 예제 값을 사용합니다. 실습을 완료하려면 이 값을 클라우드 환경에 해당하는 값으로 대체하십시오.
Python을 사용하여 OCI IAM ID 도메인에서 사용자 그룹 멤버쉽 보고서 생성
소개
OCI(Oracle Cloud Infrastructure)는 스토리지, 네트워킹 및 인프라를 포함한 다양한 클라우드 서비스를 제공할 수 있는 클라우드 플랫폼입니다. OCI IAM(Oracle Cloud Infrastructure Identity and Access Management)은 OCI 리소스에 대한 액세스를 관리할 수 있는 서비스입니다. 사용자 및 그룹에 대한 인증 및 권한 부여를 제공합니다.
OCI IAM의 주요 기능 중 하나는 액세스 관리를 간소화하기 위해 그룹에 사용자를 할당하는 기능입니다. OCI IAM의 고객 중 한 가지 일반적인 시나리오는 OCI IAM ID 도메인에서 보고서를 생성하는 것입니다. OCI IAM ID 도메인 콘솔에서 쉽게 생성될 수 있는 여러 IAM 보고서가 있습니다. 그러나 사용자 그룹 멤버십 보고서를 얻는 것은 현재 OCI IAM에서 미리 정의된 기능이 아니지만 REST API 호출을 사용하여 쉽게 생성할 수 있습니다.
대상
이 자습서는 IAM 전문가 및 관리자를 대상으로 합니다.
목표
이 사용지침서에서는 Python에서 REST API를 사용하여 OCI IAM ID 도메인에서 사용자 그룹 멤버십 보고서를 생성하는 방법을 살펴봅니다.
필요 조건
- 활성 OCI 구독입니다.
- OCI IAM 및 Python에 대한 기본적인 이해
- OCI IAM ID 도메인 REST API 사용에 대한 지식이 필요합니다.
- 애플리케이션 관리 권한 부여가 있는 IAM 사용자(ID 도메인 관리자, 보안 관리자 또는 애플리케이션 관리자)입니다.
- 시스템에 설치된 Python 3.x입니다.
- 'urllib3', 'requests' 및 'pandas' Python 패키지가 설치되었습니다.
작업 1: OCI IAM ID 도메인에서 기밀 애플리케이션 생성
사용지침서에 따라 기밀 애플리케이션을 생성하고 클라이언트 ID 및 클라이언트 암호를 검색합니다. 그런 다음 액세스 토큰 및 후속 API 엔드포인트를 검색하기 위해 OCI IAM에 대한 REST API 호출을 수행하는 데 사용할 수 있습니다.
작업 2: config.json
파일 설정
로컬 시스템에서 구성 파일을 설정합니다. config.json
파일에는 액세스 토큰 생성에 사용되는 ID 도메인 URL, 클라이언트 ID 및 클라이언트 암호에 대한 정보가 있습니다.
{
"iamurl" : "https://idcs-###########.identity.oraclecloud.com",
"client_id" : "#######################",
"client_secret" : "#######################"
}
작업 3: 액세스 토큰 가져오기
config.json
파일이 준비되면 먼저 액세스 토큰을 생성하여 OCI IAM 끝점에 대한 추가 REST API 호출을 수행하는 데 사용할 수 있습니다.
아래 코드 조각에서 get_encoded 함수는 클라이언트 ID와 클라이언트 암호를 인수로 사용하여 base64-encoded 문자열을 반환합니다.
이 인코딩된 문자열은 POST 요청을 수행하여 액세스 토큰을 얻기 위해 권한 부여 헤더로 함수 get_access_token
에 인수로 추가로 전달됩니다.
#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
작업 4: 사용자 정보(사용자 이름 및 그룹 멤버쉽) 검색
이제 다양한 OCI IAM ID 도메인 REST 엔드포인트를 추가로 REST API 호출할 수 있는 액세스 토큰이 있습니다. The code snippet below shows how we are making a GET request with necessary headers and parameters to the /admin/v1/Users
endpoint, in order to retrieve the total number of results and then calculate the number of iterations (loop) needed based on the total number of results and the count per request.
-
함수는 빈 목록을 초기화하여 모든 사용자 정보를 저장합니다. 뱃치에서 사용자 정보를 검색하는 루프가 있습니다.
-
각 반복에서 적절한 매개변수와 함께 GET 요청을 전송하여 사용자 정보 일괄 처리(사용자 이름 및 그룹 멤버쉽)를 검색한 다음 빈 딕셔너리에 추가합니다.
-
유저가 하나 이상의 그룹에 속하면 다른 루프를 입력하여 각 그룹 이름을 검색합니다. 사용자가 그룹에 속하지 않는 경우 값을 없음으로 설정한 다음 딕셔너리 복사본을 목록에 추가합니다.
-
모든 반복 후 함수는 필요한 모든 사용자 정보와 함께 기본 목록을 반환합니다.
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
작업 5: 목록을 CSV 보고서로 변환
사용자 정보가 있으면 아래 코드 조각을 통해 기본 목록 데이터에서 DataFrame을 만든 다음 DataFrame을 현재 작업 디렉토리의 mainlist.csv
이라는 CSV 파일에 저장할 수 있습니다.
df_mainlist = pd.DataFrame(mainlist)
print(df_mainlist)
df_mainlist.to_csv('mainlist.csv')
작업 6: Cloud Shell에서 스크립트 사용
스크립트가 준비되면 로컬 시스템(Python 설치 사용) 또는 Python 개발을 지원하는 IDE에서 스크립트를 쉽게 실행할 수 있습니다. 여기서는 OCI Cloud Shell을 사용하여 스크립트를 실행하고 원하는 보고서를 가져옵니다.
-
OCI 콘솔에 로그인하고 화면 오른쪽 상단 모서리에서 Cloud Shell을 연 다음 Python 스크립트 및
config.json
파일을 업로드합니다. -
pip3 install pandas --user
명령을 실행하여 모듈을 설치합니다.주: 모듈 오류에 대해 명령을 실행합니다. 모듈을 사용하기 전에 설치해야 합니다.
-
이제
python GroupMembership_Pagination.py
를 실행합니다. -
mainlist.csv
를 다운로드합니다.주:
mainlist.csv
파일에는 모든 사용자 그룹 멤버쉽 세부정보가 포함됩니다. 사용자가 그룹에 속하지 않는 경우 값은 없음으로 설정됩니다.
관련 링크
수락
작성자 - Gautam Mishra(수석 클라우드 엔지니어)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스할 수 있습니다. 또한 education.oracle.com/learning-explorer을 방문하여 Oracle Learning Explorer가 됩니다.
제품 설명서는 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.