0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CP4DaasのWMLにアクセス可能なIPアドレスを制限する

Last updated at Posted at 2024-10-28

0. はじめに

CP4DaaSのWatson Machine Learning(WML)でスコアリングするアプリケーションに、誰からでもアクセスさせないようにIPアドレスの制限をかける方法を解説します。

2024年10月時点では、WMLのサービス自体にはIPアドレスを制限する機能はありませんので、IAMのIPアドレスの制限機能をつかって実現します。

具体的には

  1. WMLのサービスをもつAccoutのオーナーであるユーザーAでデプロイメントを準備
  2. 別のユーザーBをアカウントに招待し、
  3. ユーザーBのAPIキーを作り、
  4. そのユーザーBにIAMでIPアドレス制限をかけることで実現します。

ユーザーBのAPIキーはユーザーBと同じ権限を持つ(つまりIPアドレスを制限される)ことを利用しています。

{0C2A22C8-FC17-4FD1-BF0D-E47926ABF6B4}.png

  • テスト環境
    • CP4DaaS
    • jp-tok

1. 事前準備

以下の記事を参考にユーザーA(この例ではkawa's Account)のアカウントでWMLのオンライン・デプロイメントを作成しておきます。

参考: Watson Machine LearningにPython関数をデプロイする #watsonx.ai - Qiita

ユーザーA(この例ではkawa's Account)で「Deployment of function」を作成しました。
image.png

2. ユーザーBをユーザーAのアカウントに招待する

IBM CloudのIAMのユーザーで、ユーザーB(この例では2017 testuser)をユーザーAのアカウント(この例ではkawa's Account)に招待をして追加します。

image.png

参考:アカウントへのユーザーの招待

3. ユーザーBでAPIキーを作成

WMLのオンライン・デプロイメント(Function)の実行をibm_watsonx_aiのAPIで行うのでAPIキーが必要です。

ユーザーBでIBM Cloudにログインします。
image.png

IBM CloudのIAMのAPIキーで、ユーザーB(この例では2017 testuser)のAPIキーを作成します。

image.png

適当な名前をつけて作成します。
image.png

コピーやダウンロードして保存しておきます。
image.png

3-1. ユーザーBのAPIキーでユーザーAのAccountのWMLのオンライン・デプロイメントを実行する。

1で準備したユーザーA(この例ではkawa's Account)の「Deployment of function」をユーザーBのAPIキーで実行します。

以下のようなpythonスクリプトで実行します。ポイントはapi_keyに#3で作ったユーザーB(ここでは2017 testuser)のAPIキーdcxxxxxxxxxxxxxxを用いていることです。

DeployableFunctionTest_onlyscore.py
import pprint
from ibm_watsonx_ai import Credentials
from ibm_watsonx_ai import APIClient

# 環境設定
api_key = 'dcxxxxxxxxxxxxxx'  # 2017 testuser
url = 'https://jp-tok.ml.cloud.ibm.com'
space_id = '1bee1486-8dc0-462a-a85d-456133d33ca7'  # 240814dp_kawa
deployment_id = '3fc75bbf-3ebf-4a6f-a267-c55e1f4e8ef4'  # Deployment of function


# WMLへの接続
credentials = Credentials(
    api_key=api_key,
    url=url
)

client_space = APIClient(credentials, space_id=space_id)

# テストスコアリング
scoring_payload = {
    "input_data": [{
        'values': 'test'
    }]
}


response = client_space.deployments.score(deployment_id, scoring_payload)
pprint.pprint(response["predictions"])

ちゃんと実行できることがわかります。

実行結果
C:\Functiontest\Functiontest>py -3.10 DeployableFunctionTest_onlyscore.py
[{'values': [['Just a test']]}]

4. ユーザーBでIPアドレスのアクセスの制限を行う

ユーザーBのアカウント(ここではtestuser2017's Account)でIBM CloudのIAMのユーザーで、ユーザーB(ここでは2017 testuser)を選びます。

image.png

「IPアドレスのアクセス」で「許可されたIPの追加」をします。
image.png

現在のIPアドレスを設定しておきます。
image.png

4-1. 許可されたIPからのアクセス

CMANのサイトなどで現在のGlobalIPを確認します。
image.png

許可されたIPからのアクセスなので、ちゃんと実行できることがわかります。

実行結果
C:\Functiontest\Functiontest>py -3.10 DeployableFunctionTest_onlyscore.py
[{'values': [['Just a test']]}]

4-2. 許可されたIP外からのアクセス

IPアドレスの違う環境からアクセスしてみます。

image.png

IPアドレスが許可されたリストに入っていないため、「Error getting IAM Token」のエラーになり実行できません。ちゃんとIPアドレスの制限できたことが確認できました。

実行結果
C:\Functiontest>py -3.10 DeployableFunctionTest_onlyscore.py
Error getting IAM Token.
Reason: <Response [401]>
Traceback (most recent call last):
  File "C:\Functiontest\DeployableFunctionTest_onlyscore.py", line 23, in <module>
    client_space = APIClient(credentials, space_id=space_id)
  File "C:\Users\dsuser\AppData\Local\Programs\Python\Python310\lib\site-packages\ibm_watsonx_ai\client.py", line 365, in __init__
    self.service_instance: ServiceInstance = ServiceInstance(self)
  File "C:\Users\dsuser\AppData\Local\Programs\Python\Python310\lib\site-packages\ibm_watsonx_ai\service_instance.py", line 56, in __init__
    self._client.token = self._get_token()
  File "C:\Users\dsuser\AppData\Local\Programs\Python\Python310\lib\site-packages\ibm_watsonx_ai\service_instance.py", line 237, in _get_token
    return self._create_token()
  File "C:\Users\dsuser\AppData\Local\Programs\Python\Python310\lib\site-packages\ibm_watsonx_ai\service_instance.py", line 273, in _create_token
    return self._get_IAM_token()
  File "C:\Users\dsuser\AppData\Local\Programs\Python\Python310\lib\site-packages\ibm_watsonx_ai\service_instance.py", line 345, in _get_IAM_token
    raise WMLClientError("Error getting IAM Token.", response)
ibm_watsonx_ai.wml_client_error.WMLClientError: Error getting IAM Token.
Reason: <Response [401]>

注意

注意1:IPアドレスの設定は慎重に

IPの許可リストには必ず接続できるIPアドレスを記載してください。間違ったアドレスをいれるとIBM Cloudのコンソールにもログインできなくなるため、IPの許可リストは修正もできませんし、Caseも起票できなくなります。

どうしても接続できなくなってしまった場合には以下から解除をリクエストしてください。
https://watson.service-now.com/x_ibmwc_open_case_app.do#!/create

注意2:制限できるのはIPアドレスを制限したユーザーのAPIキーのみ

制限できるのはIPアドレスを制限したユーザーのAPIキーのみです。例えば、このテストケースで、ユーザーAやまた別のユーザーCでAPIキーを作っていた場合はそのAPIキーでアクセスした場合にはIP制限はかかりません。できるかぎりIP制限をかけていないユーザーでは、APIキーはつくらないような運用を考えることを推奨します。

参考

Cloud Pak for Data as a Service へログイン可能なIPアドレスを制御する #ibmcloud - Qiita

Watson Studioにアクセス可能なIPアドレスを制限する方法です。

Watson Studio(CP4DaaS)へのログイン可能なIPアドレスを制限する場合の注意点 #IPv6 - Qiita

注意点があります。

IBM Cloud: IAMにおけるIBM Cloud ConsoleへのIPアドレスによるアクセス制限方法 #ibmcloud - Qiita

特定の IP アドレスの許可

Watson Machine LearningにPython関数をデプロイする #watsonx.ai - Qiita

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?