[aws] vpc 内部にある lambda から SageMaker を触る

vpc 内部にある lambda の function から、SageMaker のオブジェクトを触る機会があったのですが、
設定に四苦八苦して、うまく疎通が出来なかったので方法を記載しておきます。

SageMaker 以外のサービスでもSageMakerの部分を読み替えれば同様にいけると思います。

ソースは、python でソースの書き方は、sagemaker boto3 とかで適当に検索すれば辿り着くと思います!

  1. role に permissions を追加する
    1. Configuration から、 Permissions を選択し、Role の リンクを押下(赤い部分)
      lambda の role リンク
    2. Permissions で、Add permissions で 権限を追加。すでに権限がある場合は Attach policies でもいいです。
      今回は新規に作成することにします。 Create inline policy をクリック(赤い部分)
      role の persmissions
    3. JSON タブを選択して、以下のJSONを指定します。

      Review policy を押下します。名前は適当にわかりやすい名前をつけて下さい
      permission sage maker all

      SageMaker に関する権限を大幅に付与しましたが、制限する場合は適宜ActionなりResourceなりを絞って下さい。
  2. vpc が 所属している Security groups を確認
    lambda vpc link

    赤い所を覚えておく
    そして、vpc のリンクを押下
  3. Endpoints を押下
    vpc endpoint link
  4. Create endpoint を押下
    create endpoint
  5. Service category で、 AWS services を選択
    Services から、 com.amazonaws.us-east-1.sagemaker.api を選択。
    今回は、モデル一覧の取得という処理だったのでこのサービスを選択したが、
    Notebook や、Studioをいじる場合はサービスが分かれているので適宜選択する。
    choose service
  6. vpc では、lambdaと同じvpcを選択
    vpc select

  7. 接続に使うサブネットを選択する
    choose subnet

    こちらは、labmbdaが利用しているsubnetを同様にします。

  8. セキュリティーグループを設定
    lambdaのvpcの設定で利用しているのと同じセキュリティーグループにします。
    choose security group

とりあえず、lambda から SageMaker を触るための設定です。

[IPFire] IPFireで、IPS 構築時のメモ

在宅勤務はセキュリティーも考慮しないとダメだと思いますね。

特に怖いなと感じてるのは、家庭内のネットワーク内に汚染された端末があったらゾッとします。

サポートの切れたOS、怪しいメールやサイトを開いてないか家族全員の行動を確認するのは不可能なので、家庭内のネットワークにIPSを入れることにしました。

IPFire を入れた端末を、プロバイダからレンタルされたルータ/モデムと自分で用意したルータとの間に入れて、ISPのルータからは接続せずに、用意したルータ経由でネットワークを利用することにしました。

インターネット <--> プロバイダルータ <--> IPFire <--> 用意したルータ <--> PC / スマホ

これにより、IPFire が Firewall と IPS でネットワークの監視ができます。

しかし、問題が発生。なぜかIPFrei の IPSが動かない。その時の対処方法を記載します。

Enable Intrusion Prevention System が表示されない

WEB の管理画面のメニュー Firewall -> Intrusion Prevention と進むと以下の画面が表示される。

IPFire IPS Enable Intrusion Prevention System が表示されない

本来は、

Enable Intrusion Prevention System が表示される

このような画面が表示される。

Ruleset Settings を一度 Save して、Rule の設定をDownload してこないといけないとの記事を見て、Save を押すがError が返ってくる。

仕方なく、SSH で /var/log/messages を確認してみると、Rule を取得するホストに接続できてない見たい。
しかし、そのホストはIPFireを経由したPCからは普通に見れる。

どうやら問題は、IPFire の DNS の設定が悪かった。

DNS の設定を直す

WEB の管理画面の Network -> Domain Name System を開くと、Status が Broken となっていた。

Use ISP-assigned DNS server のチェックを外したら、Status が、Working に変わった。

Status:WorkingとなりDNSが動いてる

再び、
WEB の管理画面のメニュー Firewall -> Intrusion Prevention に進み、Ruleset を選択して、Save を押下したら、

IPFire IPS Enable Intrusion Prevention System が表示された

他のサイトでよく出てくる説明の画面に切り替わった。

IPS の Daemon が STOP のまま

他のサイトなどを見たなら、Ruleset を Daily -> Weekly にしてSave したり、Enable Intrusion Prevetion System のOn / Off を繰り替えてしても RUNNING に変わらない。

仕方なく、再び console にログイン。色々と試すが結果を先に言うと
/var/ipfire/ids-functions.pl
に問題があった。

ソースをgithubで見てみると最新版では問題が解決されていた。
変更履歴
今のバージョンは、IPFire 2.25 Core Update 144 で、これより上の物はもう解決されていると思う。
手動で修復するならば、
/var/ipfire/ids-functions.pl の L680あたりの

の部分を、消して

に変更すれば良い。

そして、無事にIPFireのIPSは動きました。