ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を完了するときは、これらの値をクラウド環境に固有の値に置き換えます。
API署名キーを使用したOCI Identity and Access Managementアイデンティティ・ドメインREST APIの活用
イントロダクション
Oracle Cloud Infrastructure Identity and Access Management (OCI IAM)アイデンティティ・ドメインAPIと統合する場合、APIリクエストを保護するためにOAuth 2.0が最も一般的に推奨される方法です。ただし、特定のユース・ケースでは、特にシンプルさと直感が最重要である場合、API署名キーは実行可能な代替手段を提供します。
このチュートリアルでは、API署名キーを使用してOCI IAMアイデンティティ・ドメインAPIを呼び出す方法を確認し、開発者や管理者により簡単でアクセス可能なオプションを提供します。
API署名鍵を使用する理由
API署名キーを使用すると、APIリクエストを簡単に認証できます。簡単に生成して使用できるため、OAuthトークン交換プロセスの複雑さがなくても、プログラムによる簡単なアクセスを必要とするアプリケーションに最適です。APIキーは、次のようなシナリオで特に役立ちます。
- 
    Automated Scripts and cron Jobs:トークンを管理する必要なく、認証のシンプルさ。 
- 
    内部アプリケーション:信頼できるネットワーク内で実行されるサービスの複雑さを軽減します。 
- 
    プロトタイピングと開発:テストとデバッグのためのクイック設定。 
対象読者
OCI IAMのプロフェッショナル、開発者、管理者。
目標
API署名キーを使用してOCI IAMアイデンティティ・ドメインREST APIを活用します。これを効果的に実証するために、Pythonスニペットを使用してスクリプトを開発できます。このスクリプトは、認証にAPI署名キーを使用してOCI IAMアイデンティティ・ドメインAPIと対話する方法を示しています。また、グループの作成、ユーザーの作成、およびグループへのユーザーの割当ての基本操作についても説明し、セキュアなAPIリクエストを使用してこれらのアクションをプログラムで実行する方法を示します。APIキーを使用するとプロセスが簡略化され、これらの操作を自動化されたワークフローまたはスクリプトに簡単に統合できます。
前提条件
- 
    OCIアカウント: Oracle Cloud Infrastructureアカウントにアクセスします。 
- 
    API署名キー: PEM形式のリクエストに署名するための公開キーと秘密キーのペア。詳細は、API署名キーの生成方法を参照してください。 
- 
    OCI IAMおよびPythonに精通しています。 
- 
    OCI IAMアイデンティティ・ドメインREST APIの知識が必要です。 
- 
    アプリケーションを管理する権限を持つOCI IAMユーザー(Identity Domain Administrator、セキュリティ管理者またはアプリケーション管理者)。 
- 
    Python 3.xがインストールされている。 
- 
    requestsおよびjsonPythonパッケージがインストールされています。
タスク1: Pythonパッケージのインポートおよび初期設定
スクリプトの初期部分では、APIキーを使用してOCI IAMアイデンティティ・ドメインAPIと対話するために必要なインポートおよび構成を設定します。
import requests
import json
from oci.config import from_file
from oci.signer import Signer
- requests: HTTPリクエストを行うためのPythonの単純なHTTPライブラリ。
- JSON: JSONデータを解析するためのライブラリ。
- from_file:ファイルからOCI構成を読み取るファンクション。
- Signer: APIキーを使用してHTTPリクエストに署名するためのクラス。
タスク2: クラスの定義および初期化
スニペットは、APIキーを使用してOCI IAMアイデンティティ・ドメインAPIとの相互作用を管理するためのクラスAPISignedRequestを定義します。
class APISignedRequest():
    def __init__(self):
        global auth
        global identity_domain
        global config
        config = from_file()
        auth = Signer(
            tenancy=config['tenancy'],
            user=config['user'],
            fingerprint=config['fingerprint'],
            private_key_file_location=config['key_file']
        )
        identity_domain = 'https://idcs-############################.identity.oraclecloud.com'
- APISignedRequestクラス:このクラスは、OCI IAMアイデンティティ・ドメインへのAPIリクエストを実行するメソッドをカプセル化します。
- initメソッド:グローバル変数- auth、- identity_domainおよび- configを設定してクラスを初期化します。- config:デフォルトのOCI構成ファイルからロードされます。
- auth: APIキーによるAPIリクエストの署名に使用される署名者のインスタンス。
- identity_domain:アイデンティティ・ドメイン・インスタンスのベースURL。
 
タスク3: グループ・メソッドの作成
APISignedRequestクラスのcreategroupメソッドは、OCI IAMアイデンティティ・ドメインに新しいグループを作成するように設計されています。
def creategroup(self):
    extra = "/admin/v1/Groups"
    body = {
        "displayName": "Example Group",
        "externalId": "123456",
        "urn:ietf:params:scim:schemas:oracle:idcs:extension:group:Group": {
            "creationMechanism": "api",
            "description": "Example Description"
        },
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:Group",
            "urn:ietf:params:scim:schemas:oracle:idcs:extension:group:Group",
            "urn:ietf:params:scim:schemas:extension:custom:2.0:Group"
        ]
    }
    response = requests.post(identity_domain + extra, auth=auth, json=body)
    jsonresp = json.loads(response.content)
    grpid = jsonresp.get("id")
    print("Group has been created")
    return grpid
- creategroupメソッド:アイデンティティ・ドメインに新しいグループを作成するPOSTリクエストを送信します。- extra:グループを作成するためのAPIエンドポイント。
- body:グループ詳細を含むJSONペイロード。
- requests.POST:- auth署名者および- bodyを使用してPOSTリクエストを送信します。
- JSON.loads: JSONレスポンスを解析します。
- grpid:レスポンスからグループIDを抽出して返します。
 
タスク4: ユーザー作成メソッド
APISignedRequestクラスのcreateuserメソッドは、OCI IAMアイデンティティ・ドメインに新しいユーザーを作成するように設計されています。
def createuser(self):
extra = "/admin/v1/Users"
body = {
  "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:User"
  ],
  "name": {
    "givenName": "Test",
    "familyName": "User"
  },
  "userName": "testuser@example.com",
  "emails": [
    {
      "value": "testuser@example.com",
      "type": "work",
      "primary": True
    },
    {
      "value": "testuser@example.com",
      "primary": False,
      "type": "recovery"
    }
  ]
}
response = requests.post(identity_domain + extra, auth=auth, json=body)
jsonresp = json.loads(response.content)
userid = jsonresp.get("id")
print("User has been created")
return userid  
- createuserメソッド: POSTリクエストを送信して、Oracle Identity Domainに新しいユーザーを作成します。- extra:ユーザーを作成するためのAPIエンドポイント。
- body:ユーザー詳細を含むJSONペイロード。
- requests.POST:- auth署名者および- bodyを使用してPOSTリクエストを送信します。
- JSON.loads: JSONレスポンスを解析します。
- grpid:レスポンスからユーザーIDを抽出して返します。
 
タスク5: グループへのユーザーの割当て方法
APISignedRequestクラスのassignuserメソッドは、ユーザーをOCI IAMアイデンティティ・ドメインのグループに割り当てるプロセスを処理します。
def assignuser(self):
    extra = "/admin/v1/Groups/"
    obj = APISignedRequest()
    grpid = obj.creategroup()
    gid = str(grpid)
    userid = obj.createuser()
    body = {
      "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:PatchOp"
      ],
      "Operations": [
        {
          "op": "add",
          "path": "members",
          "value": [
            {
              "value": userid,
              "type": "User"
            }
          ]
        }
      ]
    }
    response = requests.patch(identity_domain + extra + gid, auth=auth, json=body)
    print("User has been assigned to the group")
- assignuserメソッド:グループとユーザーの作成を調整し、そのユーザーをグループに割り当てます。- extra:グループ操作のAPIエンドポイント。
- creategroup:グループを作成し、そのIDを取得します。
- createuser:ユーザーを作成し、そのIDを取得します。
- body:ユーザーをメンバーに追加してグループにパッチを適用するJSONペイロード。
- requests.PATCH: PATCHリクエストを送信して、グループを新しいユーザーで更新します。
 
タスク6: フローの実行
インスタンスおよびコール・メソッドの作成: APISignedRequestのインスタンスを作成し、assignuserをコールしてフロー全体を実行します。
obj = APISignedRequest()
obj.assignuser()
タスク7: OCI Cloud Shellでのスクリプトの使用
スクリプトの準備が整ったら、ローカル・マシン(Pythonがインストールされている)またはPython開発をサポートする統合開発環境(IDE)で簡単に実行できます。OCI Cloud Shellを使用してスクリプトを実行し、目的のレポートを取得しています。
- OCIコンソールにログインし、右上隅からOCI Cloud Shellを開き、PythonスクリプトOCIAPISignedRequest.pyをアップロードします。
ノート:
OCIAPISignedRequest.pyは、前述のタスク・コード・スニペットを使用して開発されたPythonスクリプトです。



- python OCIAPISignedRequest.pyコマンドを実行します。
まとめ
APIキーを使用してOCI IAMアイデンティティ・ドメインAPIを呼び出すと、OAuthに代わる簡単な方法が提供されます。シンプルさと使いやすさが重要な特定のユースケースに最適です。このチュートリアルの後、認証用のAPIキーの力を活用して、OCI IAMアイデンティティ・ドメインAPIと安全かつ効率的に統合できます。
管理タスクの自動化、内部ツールの構築、アプリケーションのプロトタイピングのいずれであっても、APIキーはOCIサービスと対話するための柔軟で便利な方法を提供します。
関連リンク
承認
- 著者 - Gautam Mishra (シニア・クラウド・エンジニア)
その他の学習リソース
docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントは、Oracle Help Centerを参照してください。
Leverage OCI Identity and Access Management Identity Domains REST APIs using API Signing Key
F99704-01
May 2024