※ 本記事は、Paul Toalによる”Quick tip 10: MFA user enrollment status within OCI IAM“を翻訳したものです。
2024年1月9日
顧客のセキュリティを向上させるための継続的な取り組みの一環として、Oracleは最近、Oracle Cloudコンソールにログインするときに多要素認証(MFA)を適用するポリシーを有効にしました。ポリシーを有効にすると、すべてのコンソール・ユーザーがMFAファクタを登録し、そのユーザーがコンソールにログインするたびに必要になります。詳細は、ドキュメントおよびブログ投稿「Oracleはクラウド・サインイン時に多要素認証を要求することで、攻撃対象領域をさらに削減」を参照してください。
どのユーザーがMFAに登録している、していないのかを把握すると役に立ちます。ただし、Oracle Cloud Infrastructure(OCI)管理画面には、ユーザーが登録したかどうかを簡単に判断できる方法がありません。そのため、このクイック・ヒントでは、テナンシ内のMFAに登録したユーザーをレポートする方法に関する様々なオプションについて説明します。
テナンシには、次のタイプのユーザーが混在している場合があります:
- 非フェデレーテッド・ユーザー: OCI内で保存および管理されたユーザー名とパスワードを使用して、コンソールに直接認証します(以前は「ダイレクト・サインイン・ユーザー」と呼ばれていました)
- フェデレーテッド・ユーザー: Azureなどの外部アイデンティティ・プロバイダを介して認証され、OCI内でパスワードが格納および管理されない
どちらのタイプのユーザーも考慮することが重要です。外部アイデンティティ・プロバイダが構成されている場合、コンソールの新しいMFAポリシーは自動的に有効になりませんが、認証フローの一部としてフェデレーテッド・ユーザーにMFAチャレンジを要求できる他のサインオン・ポリシーを設定できます。そのため、両方のタイプのユーザーがMFAに登録しているかどうかを知ることは、役立つレポートになります。
どのアプローチを使用しますか?
この記事は、ユーザーのMFAステータスを問い合せるための多数のオプションがあることを示しています。使用する最も適切な方法は、Identity Cloud Service (IDCS)を使用しているか、OCI Identity and Access Management (IAM)アイデンティティ・ドメインに移行されているか、ネイティブ・アイデンティティ・ドメイン・テナンシであるかなど、テナンシによって異なります。次のフローチャートを使用して、推奨されるアプローチを決定します:

フローチャートを使用すると、ユーザーとそのMFAステータスを問い合せるための推奨アプローチを取得できます。これらの異なるアプローチをどのように使用できるかを見てみましょう。
これらの例では、6人のサンプル・ユーザーが存在しますが、3人に焦点を当てています。

- William Date (wdate): アカウントが作成されてからOCIにログインしたことがなく、MFAに登録されていないローカル・ユーザー。
- Albert Jones (ajones): MFAに登録したフェデレーテッド・ユーザー。
- Phil Smith (psmith): MFAに登録したローカル・ユーザー。
様々な手法を使用して、これらのユーザーのステータスをどのように調べることができるかを見てみましょう。
IDCS REST API
最初のアプローチは、OCI IAMドメインREST APIを使用することです。このAPIは、多くのエンドポイントのうち、ユーザーを表示および管理するためのものです。非常に使いやすいAPIです。まだ使用していない場合は、このチュートリアルでREST APIの使用方法を説明し、このチュートリアルではPostmanを使用します。
これらのリンクはIDCSを参照している場合があります。IDCSからOCI IAMへの移行の一環として、現在もOCI IAMアイデンティティ・ドメインとの対話時にIDCS APIが使用されています。そのため、このアプローチは、IDCSアイデンティティ・ドメインとOCI IAMアイデンティティ・ドメインの両方に関連しています。
次の例は、APIを使用してユーザー・ステータスを確認する方法を示しています。ドメインURLの値は、アイデンティティ・ドメインのドメイン情報を参照することで、コンソールから取得できます。

{{DOMAIN URL}}/admin/v1/Users?count=1000&startIndex=0& attributes=userName,ocid,urn:ietf:params:scim:schemas:oracle:idcs:extension:mfa:User:mfaStatus,urn:ietf:params:scim:schemas:oracle:idcs:extension:mfa:User:preferredAuthenticationFactor,urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User:isFederatedUser
最初は面倒に見えるかもしれませんが、ここでは、最初の1,000人のユーザーの完全なリストを返すようにAPIに依頼していますが、各レコードには4つの属性(username、MFA登録ステータス、優先登録ファクタ、フェデレーテッド・ユーザーかどうか)のみが返されます。APIのデフォルトの結果セット・サイズは50です。countパラメータを使用して、最大結果(1,000)まで増やすことができます。startIndexを使用して、結果を超えてページ区切りすることもできます。
次のコード・ブロックは、Williamのレコード(wdate)を示しています。彼はフェデレーテッド・ユーザーではなく、まだログインしていないため、MFA登録またはファクタの値がありません。

Albertのレコード(ajones)は、彼がMFAに登録したフェデレーテッド・ユーザーであり、彼の優先MFAファクタはプッシュ通知であることを示しています。

Philのレコード(psmith)は、MFAに登録したローカル・ユーザー(isFederatedUser = false)であり、MFAの優先ファクタはプッシュ通知であることを示しています。

REST APIを使用して、必要に応じて検索結果を絞り込むためにフィルタを問合せに適用することもできます。複数のアイデンティティ・ドメインがある場合は、各アイデンティティ・ドメインに対してこのAPIコールを実行する必要があります。
OCIセキュリティ・ヘルス・チェック – Standard Edition
アイデンティティ・ドメインを持つOCIテナンシの場合、MFAに登録されていないユーザーのリストを取得する最も簡単な方法は、OCIセキュリティ・ヘルス・チェック – Standard Editionを実行することです。このスクリプトは、OCIテナンシ構成をCenter for Internet Security (CIS) OCI Foundationベンチマークと照合してチェックします。この構成チェックの一環として、スクリプトはOCIテナンシを問い合せて、いくつかの出力ファイルを生成します。
Python 3およびOCI CLIがインストールおよび構成されている場合、またはクラウド・シェルを使用して、スクリプトをローカルで実行できます。MFA対応のユーザーのチェックを含むレポートが生成されます。


CSVへのリンクに続いて、MFA登録のないユーザーの詳細なリストが表示されます。この例ではwdateのみが含まれています。

ヘルス・チェックは、テナンシに対してチェックを実行し、読みやすいレポートを生成するため役立ちます。対象となる顧客の場合、EMEAセキュリティ・スペシャリスト・チームは、セキュリティ・ヘルス・チェックの高度なバージョンも提供します。詳細は、ローカルのOCIアカウント・マネージャにお問い合せください。
セキュリティ・ヘルス・チェック – Standard Editionは、Oracleが教育参照用に提供するユーティリティであり、サポートされていません。そのため、このユーティリティに対してサポート・チケットを上げることはできません。
OCIコマンドライン・インタフェース
次のアプローチでは、OCI CLIを使用します。OCI CLIは、ローカルまたはOCI Cloud Shell内でインストールして実行できます。この例では、簡単にするためにOCI Cloud Shellを使用しています。これは、CLIがCloud Shell内にプリインストールおよび構成されているため、セットアップは不要で、コンピュータのローカル・フットプリントも必要ないためです。
テナンシに複数のアイデンティティ・ドメインが存在する可能性があるため、使用可能なアイデンティティ・ドメインとそのドメインURLの完全なリストを取得することが重要です。そのため、最初のコマンドはアイデンティティ・ドメインのリストを返します:
oci iam domain list -c $OCI_TENANCY | jq ".data[].url"
「jq」を使用して、各アイデンティティ・ドメインのドメインURLのみを含めるように結果をフィルタしました。この例のテナンシには、アイデンティティ・ドメインが1つのみあります。
![]()
これで、ドメインURLを取得したので、コマンドを実行してドメインからすべてのアイデンティティ情報を取得できます。次の例では、OCI CLIを使用して、読みやすいように表形式で必要な情報を返します:
oci iam user list --query 'data[].{"1. OCID":"id","2. Name":"name","3. MFA enabled":"is-mfa-activated","4. Has local password":"capabilities"."can-use-console-password"}' --output table
このコマンドは、ユーザーごとに4つの属性を返すように CLIに要求します。次の点に注意してください:
- CLIは属性をアルファベット順に返します。したがって、列の順序を変更したい場合は、各列見出しの前に番号を付けることができます (以下の例を参照)。
- 前述の例のAPIと同様に、isFederatedUserの値を返すかわりに、CLIはユーザーがローカル・パスワードを持っているかどうかを示す値を返します。フェデレーテッド・ユーザーにはローカル・パスワードがないため、has-local-passwordはfalseに設定されます。このメソッドは、フェデレーテッド・ユーザーのisFederatedUserフラグがtrueに設定されているAPIとは反対です。したがって、次の出力例を使用すると、ajonesにはローカル・パスワードがないため、フェデレーテッド・ユーザーになります。

形式は若干異なりますが、表示される情報はAPI出力と同じです。CLIを使用して、より高度なユーザー問合せを行うこともできます。
次の例では、CLIを使用してユーザーの詳細の完全なリストを取得し、出力をJSONファイルに取得して操作を容易にします:
oci identity-domains users list --endpoint https://idcs-xxxxxxxxx.identity.oraclecloud.com:443 > showoci-output.json
次の関連スニペットは、JSONファイルのユーザーの1つです。次の2つのスクリーンショットは、MFAに登録されているフェデレーテッド・ユーザーであるAlbertのレコードからのものです。

AlbertはMFAに登録されており、プッシュ通知の優先MFA方法があります。

「is-federated-user」フラグは、Albertがフェデレーテッド・ユーザーであることも示しています。
IDCS REST API、ヘルス・チェックおよびOCI CLIは、フローチャート内の3つの推奨アプローチをカバーしています。ただし、別のオプションを使用できますが、これは拡張オプションとみなされます。
Advanced: Python SDK showociスクリプト
この最後のオプションは、OCI Python SDKサンプルの一部であるshowociスクリプトを使用することです。このスクリプトは、入力オプションとして複数のスイッチを使用し、ID情報を含む豊富な情報を生成します。
前述の例と同様に、GitHubの簡単な手順を使用して、クラウド・シェルからこのコマンドを実行します。コマンドを実行すると、テナンシ内のすべてのドメインからすべてのアイデンティティ情報が返されます:
python3 showoci.py -dt -i -csv showoci-output.csv
このコマンドはいくつかのCSVファイルを生成しますが、他の出力形式も使用できます。この例では、サンプル・ユーザーのMFA登録ステータスを示します。わかりやすくするために、ドメイン内の他のユーザーをCSVから手動で削除しました。

テナンシのアイデンティティ情報以外の情報が必要な場合は、showociコマンドが非常に強力で詳細です。
まとめ
MFAはユビキタスな要件となっているため、ユーザーの登録ステータスの理解が重要になる可能性があります。この投稿では、テナンシの様々な構成に推奨されるアプローチを使用して、この目標を達成するための複数の方法を示しています。この記事が役に立つことを願っています。
Oracle Cloud Infrastructure IAMの詳細を知りたい場合は、ドキュメントおよびMFAの登録を示すこのビデオを参照してください。
