ノート:

Pythonを使用したUserStatusおよびLastSuccessfulLoginDateに基づくOCI IAMアイデンティティ・ドメインからの非アクティブなユーザーの削除

イントロダクション

Oracle Cloud Infrastructure(OCI)は、ストレージ、ネットワーキング、インフラストラクチャなど、さまざまなクラウドサービスを提供できるクラウド・プラットフォームです。Oracle Cloud Infrastructure Identity and Access Management (OCI IAM)は、OCIリソースへのアクセスを管理できるサービスです。ユーザーおよびグループに対する認証および認可を提供します。

OCI IAMアイデンティティ・ドメインで最後に成功したログイン日に基づいて非アクティブ・ユーザーを削除することは、いくつかの理由でOCIのユーザーごとの価格設定モデルのコンテキストで特に役立ちます:

このプロセスを効果的に実装するために、pythonスニペットの下では、最後の成功したログイン日とアクティブ/非アクティブ・ステータスに基づいて、非アクティブ・ユーザーの識別および削除を自動化できます。このようなスクリプトを定期的に実行することで、OCIのコストを最適化しながら、無駄のないセキュアなIAM環境を維持できます。

対象読者

IAMプロフェッショナルおよび管理者。

目標

Pythonを使用したREST APIを使用して、ユーザー・ステータスおよびlastSuccessfulLoginDateに基づいてユーザーをOCI IAMアイデンティティ・ドメインから削除します。

前提条件

タスク1: OCI IAMアイデンティティ・ドメインでの機密アプリケーションの作成

Oracle Identity Cloud Service: 最初のREST APIコールに従って、機密アプリケーションを作成し、クライアントIDおよびクライアント・シークレットを取得します。これを使用して、アクセス・トークンおよび後続のAPIエンドポイントを取得するためにOCI IAMへのREST APIコールを実行できます。

タスク2: config.jsonファイルの設定

ローカル・マシンで構成ファイルを設定します。config.jsonファイルには、アクセス・トークンの生成に使用されるアイデンティティ・ドメイン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: ユーザー情報のバッチ(lastSuccessfulLoginDate、userStatus)を処理してユーザーをクリーンアップする

アクセス・トークンがあり、これを使用して、様々なOCI IAMアイデンティティ・ドメインRESTエンドポイントに対してさらにREST APIコールを実行できます。次のコード・スニペットは、/admin/v1/Usersエンドポイントに対して必要なヘッダーおよびパラメータを使用してGETリクエストを実行する方法を示しています。これにより、ユーザーの合計数を取得し、必要な反復数を計算し、結果の合計数とリクエスト当たりの件数に基づいて計算します。

タスク5: OCI Cloud Shellでのスクリプトの使用

スクリプトの準備ができたら、ローカル・マシン(Pythonインストール済)またはPython開発をサポートする任意のIDEで簡単に実行できます。OCI Cloud Shellを使用してスクリプトを実行し、目的のレポートを取得しています。

  1. OCIコンソールにログインし、画面の右上隅からクラウド・シェルを開き、Pythonスクリプトおよびconfig.jsonファイルをアップロードします。

    イメージ 1

    イメージ 2

    イメージ 3

  2. python DeleteUser_PriorCheck_InactivePeriod60days_IsAdmin.pyを実行します。

    ノート: DeleteUser_PriorCheck_InactivePeriod60days_IsAdmin.pyは、前述のコード・スニペットを使用して開発されたPythonスクリプトです。

確認

その他の学習リソース

docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントは、Oracle Help Centerを参照してください。