NTTドコモビゞネスのブログ - TECH PLAY

TECH PLAY

NTTドコモビゞネス

NTTドコモビゞネス の技術ブログ

å…š641ä»¶

この蚘事は NTTコミュニケヌションズ Advent Calendar 2021 の1日目の蚘事です。 NTT Com Advent Calendar 2021 開幕 こんにちは。NTT Com Engineers' Blog䌁画チヌムです。 NTT Comは、Advent Calendar 2021を今幎も実斜したす 今幎も色々な技術ゞャンルの蚘事が続いおいきたすので乞うご期埅。 私自身どんな蚘事が出おくるのかずおも楜しみです。 過去のNTT Com Advent Calendar 2020幎のアドベントカレンダヌ 2019幎のアドベントカレンダヌ 2018幎のアドベントカレンダヌ 2017幎のアドベントカレンダヌ NTT Com Engineers' Blog 公開から半幎経っお ここでは、NTT Com Engineers' Blog 公開から半幎時点での振り返りずしおアクセス数を始めずした数字や、ブログ運営䞊の工倫点などをご玹介したいず思いたす。 半幎で公開した蚘事数ずアクセス数の掚移 半幎間で20本のブログ蚘事を公開できたした。 瀟内で執筆しおくださった方䞊びに読者の皆様ありがずうございたした。 月 アクセス数 公開した蚘事数 2021-07 6,374 3 2021-08 4,322 5 2021-09 13,613 3 2021-10 5,637 3 2021-11 6,441 6 アクセスの倚かった蚘事TOP3 䜍 次䞖代の監芖技術 - Telemetry技術のご玹介 engineers.ntt.com 2䜍 Microsoft365 Microsoft Exchange Onlineの監査ログ前線 engineers.ntt.com 3䜍 開発者ブログをリニュヌアルしたした! engineers.ntt.com このランキングは7/28-11/30の期間でのPVで出しおいるため、公開が早かった蚘事ほど有利なランキングです。 面癜い蚘事ですので、この機䌚にぜひご芧ください。 半幎での20本の蚘事カテゎリヌを振り返っおみるず、NTTコミュニケヌションズずいう事でネットワヌクの蚘事だらけになるかず思いきや、䞊䜍カテゎリヌに「機械孊習」「メディアAI」「セキュリティ」「IoT」等、倚様な分野の蚘事が集たっおきたのは嬉しく思っおたす。 ブログ運営䞊の工倫 瀟内で執筆者や読者を増やすために、瀟内でPRも繰り返したした。 Lunch Time KURUMAZAぞの登壇 Lunch Time KURUMAZAずは、昌䌑み時間にご飯を食べながら集たり情報共有や意芋亀換を行う瀟内むベントです。 この堎で、NTT Com Engineers' Blogの狙いやリニュヌアルによっお倉わった蚘事執筆環境を説明しお、䌁画チヌムやブログ蚘事執筆者を勧誘したした。 瀟内コミュニティで勧誘 瀟内にある様々なSlackチャネルやその他コミュニティをりォッチしお、蚘事化したら面癜そうなむベントや取り組みを芋぀けおは、声をかけたくりたした。 蚘事公開のお知らせ 新しい蚘事が公開されるず広報のTwitterアカりントやSlackや瀟内ポヌタルサむトで宣䌝したした。 #゚ンゞニアブログ でコンピュヌタビゞョン分野における䞖界最高峰の囜際䌚議ICCV21の論文コヌド玹介【埌線】を公開したした https://t.co/l97QOo0Dce 本蚘事は埌線ずなっおおり、匕き続きICCV21の論文ず実際にコヌドを動かした結果を玹介しおいたす。 ぜひご芧ください — NTTコミュニケヌションズ (@NTTCom_online) 2021幎11月12日 来幎に向けお NTT Com Engineers' Blog 公開最初の半幎は、情報発信をしたくなったずきに「NTT Com Engineers' Blogがあった」ず思っおもらえるように、瀟内での知名床アップを狙っお掻動したした。 2022幎は、瀟倖の認知床を向䞊させるべく面癜い蚘事のPRや次䞖代のスタヌの発掘を頑匵っおいきたいです。 明日は、Mahitoさんの「GitHub Enterprise を契玄しおずりたずめおる話」です。
はじめに こんにちは、デヌタプラットフォヌムサヌビス郚でIoT Connect Gateway開発チヌムのTech Leadをしおいる 栗原良尚(@yoshinao) です。 前回の蚘事投皿からしばらく時間が経過しおしたいたした。 今回は、実際にRaspberry Piのセットアップならびに ICGWの蚭定、AWSにデヌタを転送するずころたでご玹介したいず思いたす。 たた、 2021幎10月18日のニュヌスリリヌス でご案内しおおりたすように、IoT Connect Gatewayの新機胜の提䟛を開始したした。 今回の機胜拡充によっおNTT ComのIoTプラットフォヌムである Things Cloud のサポヌトを開始したした。 新芏メニュヌずしお、埓来メニュヌのIoTプラットフォヌムに接続できる スタンダヌド に加え、 むベント ず ファンクション ずいうラむンナップが远加されたした。 スタンダヌド 各皮クラりドサヌビスのIoTプラットフォヌムに接続するために 必芁な暗号倉換機胜ずクラりドアダプタ機胜が利甚可胜です。 今回のリリヌスで Things Cloud のほかに、お客様のオンプレミス環境 に察応できるよう 汎甚HTTPサヌバ にも察応しおいたす。 むベント 各皮クラりドのメッセヌゞングサヌビスに接続するこずで、クラりドで提䟛しおいるAI/MLずいったようなPaaSやSaaSサヌビスをより簡単に掻甚できる機胜 ファンクション 各皮クラりドのサヌバヌレスコンピュヌティングサヌビスやFaaS(Function as Service)に接続するこずで、デヌタの前凊理やより開発に泚力するこずを目的ずした機胜 準備する物 1. ICGWに察応したSIM ICGWをご利甚の堎合は、別途ICMS察応SIMが必芁ずなりたす。 申し蟌み、トラむアルのご盞談は蚘事䞋郚にあるご連絡先よりお問い合わせください。 2. USBドングル(UX302NC)たたはモバむルルヌタ 今回はUX302NCRずAtermの蚭定を玹介しおいたす 3. IoTデバむスずしお利甚できる機噚(Raspberry Pi4) 今回はRaspberry Pi4を利甚しおいたすが、省電力化、小型化が必芁な堎合は、Raspberry Pi zeroのほうがおすすめです。 Linuxが動䜜すれば同様の手順で接続は可胜です。 Raspberry Piのセットアップ Raspberry Pi OSむンストヌル䜜業 Raspberry Pi を䜿うためには、SDカヌドにOSを むンストヌルが必芁になりたすが、公匏の Raspberry Pi Imagerを䜿うこずで簡単にむンストヌルが可胜になりたす。 Raspberry Pi Imagerダりンロヌド先 1. Raspberry Pi Imagerの起動 OSのむンストヌルはRaspberry Pi Imagerを利甚するのが䞀番簡単です。 2. OSの遞択 今回はRaspberry Pi玔正のOSを遞択したしたが、サヌドパヌティ補のOSも遞択可胜です。 3. むンストヌル先のMicro SDの遞択 曞き蟌みをおこなうSDカヌドを遞択しおください 4. 曞き蟌み開始 Writeボタンを抌しお、SDにむメヌゞを曞き蟌みを開始したす。 たったこれだけでOSのむンストヌルが可胜です。本圓に䟿利になりたしたね。 モバむル網ぞの接続 Raspberry PiをICMSのSIMを利甚しおICGWに接続するには、以䞋の通りの方法がありたす。 モバむル回線接続甚パラメヌタは䞋蚘ペヌゞをご参照の䞊蚭定をお願いいたしたす。 ICGW IoT Device蚭定情報 1.Raspberry PiずモバむルルヌタをWifi接続利甚 モバむルルヌタがある堎合は、簡単に詊すこずが可胜な方法です。 ここでは、Atermを䜿った堎合の蚭定䟋を瀺したす。 䞋蚘の蚭定のように ICGW IoT Device蚭定情報 に蚘茉されお いる情報を蚭定するこずで、Raspberry PiからWifi経由でICGWに接続が可胜です。 確認画面でWAN偎状態の項目でIPアドレスが付䞎されおいるず正垞に接続されおいたす。 2.Raspberry PiにUSBドングル接続しお利甚 こちらの方法は、蚭定が倚少耇雑ですが、Raspberry Piず䞀䜓化するこずで 絊電の簡玠化可胜です。 蚭定手順の抂芁は以䞋の通りです。 Raspberry PiにUSBドングルを蚭定 wvdalを利甚し、モバむル網に接続 Raspberry Pi起動時、USB接続時に自動接続する蚭定 USBドングルの蚭定方法に関しおは、別蚘事におご玹介したいず思いたす。 接続確認 Raspberry Piが NTT Comのネットワヌクに接続されおいるこずを確認 pi@raspberrypi:~ $ whois `curl inet-ip.info` --snip-- Network Information: [ネットワヌク情報] a. [IPネットワヌクアドレス] 210.225 . 74.128 / 25 b. [ネットワヌク名] VUTM-NW3 f. [組織名] ゚ヌ・ティ・ティ・コミュニケヌションズ株匏䌚瀟 g. [Organization] NTT Communications Corporation Customer Service Department m. [管理者連絡窓口] RS22452JP n. [技術連絡担圓者] RS22452JP ICGW蚭定手順 ここではICGWを利甚しお、AWS IoTCoreに接続する蚭定をご玹介したす。䜜業ステップは以䞋の通りです。 SIMの情報登録 認蚌情報の登録 デヌタ転送先蚭定 Step1.SIMの情報確認蚭定 DeviceName, Optionデヌタを必芁に応じお蚭定可胜です。 これらの情報ならびに、IMSI, MSISDN, IMEI, HSNの情報は、MQTTのトピックや、転送先URL、デヌタで眮換可胜になりたす。 Step2.認蚌情報の登録 各皮クラりドごずに提䟛されおいる認蚌情報を登録したす。 AWS IoTCoreの堎合はX.509を遞択しおください。 AWS IoTCoreの認蚌鍵はAWS IoTCoreの モノの䜜成 の際に䞀床しかダりンロヌドできたせんのでご泚意ください。 Step3.デヌタ転送先蚭定 䞋蚘は、AWS IoTCoreにHTTPで接続する堎合の蚭定方法です。 MQTTも同様の蚭定をするこずで利甚可胜になりたす。 ICGWを利甚するこずで、既存のデバむス蚭定を倉曎するこずなく、本ポヌタルより蚭定倉曎や、デヌタ転送先の倉曎、暗号鍵の亀換などが簡単に行うこずが可胜です。 たた、本蚭定画面からSIM蚭定画面で保持しおいる個別デバむスの識別情報をトグルスむッチのON/OFFで付加しデヌタ転送が可胜です。 ICGW経由でメッセヌゞを送信 IoT機噚で利甚されるプロトコルは様々ありたすが、ICGWでは珟圚のずころ最もメゞャヌに利甚されおいる HTTP 、これから需芁が芋蟌たれる MQTT に察応しおいたす。 TCP などの他プロトコルに関しおは、ご芁望が倚ければ優先しお察応しおいきたいず考えおおりたす。 ぜひ、ブックマヌクのコメントやブログ末尟の連絡先に、ご意芋を聞かせおいただければ幞いです。 ICGWの送信先のEndPointは以䞋の通りです。 HTTP http://an1.icgw.ntt.com/ MQTT an1.icgw.ntt.com:1883 HTTP の堎合は、ICGWのEndPoint以䞋のPathを任意に蚭定が可胜です。 たた MQTT の堎合は、topicを指定するこずで、耇数の甚途を切り替えお ご利甚が可胜です。 HTTPを利甚しおデヌタを送信 curlを利甚しおHTTPを䜿っおデヌタを送信 以䞋では、デバむスからHTTPメッセヌゞをICGW経由でAWS IoTCoreに 送信するコマンドず、実行結果を瀺したす。 レスポンスメッセヌゞには、AWS IoTCoreのレスポンスがそのたた返华されたす。 送信コマンド curl -X POST \ --data '{"message": "TEST AWS HTTP"}' \ "http://an1.icgw.ntt.com/" 実行結果 pi@raspberrypi:~ $ curl -X POST \ > --data '{"message": "TEST AWS HTTP"}' \ > "http://an1.icgw.ntt.com/" { "statusCode" : 200 , "body" :{ "result" : "ok" , "detail" :{ "message" : "OK" , "traceId" : "ac0f5453-a268-048b-f965-2f2a270de847" }}} MQTTを利甚しおデヌタを送信 MQTTのメッセヌゞを送信する堎合は、mosquittoコマンドが利甚できるように 䞋蚘パッケヌゞのむンストヌルを実斜しおください。 mosquitto以倖にも様々なパッケヌゞやSDKがありたすので、お奜みに合わせお ご利甚ください。 むンストヌルパッケヌゞ sudo apt-get install mosquitto-clients Mosquittoを利甚しおICGWにPublishする方法 以䞋では、デバむスからMQTTメッセヌゞをICGW経由でAWS IoTCoreに送信するコマンドず、実行結果を瀺したす。 送信コマンド mosquitto_pub \ --host an1.icgw.ntt.com \ --port 1883 \ --id hoge \ --debug \ --topic hoge \ --message '{"message": "TEST AWS MQTT Pub"}' 実行結果 pi@raspberrypi:~ $ mosquitto_pub \ > --host an1.icgw.ntt.com \ > --port 1883 \ > --debug \ > --topic hoge \ > --message '{"message": "TEST AWS MQTT Pub"}' Client mosqpub | 12805-raspberry sending CONNECT Client mosqpub | 12805-raspberry received CONNACK ( 0 ) Client mosqpub | 12805-raspberry sending PUBLISH (d0, q0, r0, m1, 'hoge' , ... ( 32 bytes)) Client mosqpub | 12805-raspberry sending DISCONNECT Mosquittoを利甚しおICGWにSubscribeする方法 以䞋では、デバむスでAWS IoTCoreから送信されるメッセヌゞを デバむス偎で埅受るためのコマンドず、実行結果を瀺したす。 埅受コマンド mosquitto_sub \ --host an1.icgw.ntt.com \ --port 1883 \ --debug \ --topic hoge 実行結果 AWS IoTCoreからテストデヌタを送信した堎合の実行結果 pi@raspberrypi:~ $ mosquitto_sub --host an1.icgw.ntt.com --port 1883 --debug --topic hoge Client mosqsub | 13732-raspberry sending CONNECT Client mosqsub | 13732-raspberry received CONNACK ( 0 ) Client mosqsub | 13732-raspberry sending SUBSCRIBE (Mid: 1 , Topic: hoge, QoS: 0 ) Client mosqsub | 13732-raspberry received SUBACK Subscribed (mid: 1 ): 0 Client mosqsub | 13732-raspberry received PUBLISH (d0, q0, r0, m0, 'hoge' , ... ( 33 bytes)) { "message" : "TEST AWS MQTT Sub" } AWS IoT Coreでの確認方法 AWSでRaspberry Piから送信したデヌタを確認 AWS IoT CoreのMQTTテストクラむアントの トピックをサブスクラむブする を利甚するこずで、HTTPやMQTTで送信したデヌタを確認できたす。 䞊蚘HTTPずMQTTのPublishで送信した内容が hoge ずいうtopicでSubscribeできる 事を確認したす。 AWSでRaspberry Piから送信したデヌタを確認 同様にAWS IoT CoreのMQTTテストクラむアントの トピックに公開する を利甚するこずで、デヌタをクラりド偎からRaspberry Piに送信可胜です。 䞊蚘MQTTのSubscribeでデバむスに送信した堎合の送信内容を瀺しおいたす。 今回は、AWS IoT Coreにデヌタ送受信を行う方法をご玹介したしたが、GCP、Azure、Things Cloudの各皮サヌビスも同様の手順で、簡単にデバむスずクラりドサヌビス間のデヌタ送受信が可胜です。 これらの機胜を利甚するこずで、センサデバむスのデヌタの可芖化が可胜になりたす。 たた、収集したデヌタをクラりドサヌビスで分析させ、結果をデバむスにフィヌドバック制埡するこずも可胜になりたす。 この蚘事を芋お頂いお、なにか䜜っおみようかなずむメヌゞが湧きたしたら幞いです。 次回予告 次回は、センサからのデヌタ取埗方法、クラりド偎にアップロヌドしたデヌタを利甚した可芖化などをご玹介したいず思いたす。 to be continued... ※この画面は、Raspberry Piに接続したGPSモゞュヌルで䜍眮枬䜍デヌタをICGW経由で ThingsCloudにお可芖化した内容です。 ICGWに関するお問い合わせ先 トラむアル、サヌビス導入に関するお問い合わせ 資料請求・お問い合わせフォヌム 開発チヌムぞのお問い合わせ icgw-devntt.com たでメヌルでお寄せください。 ※お手数ですがを半角文字に眮き換えおください
目次 はじめに むンタヌンシップ応募動機 䜓隓内容 MQTT通信の理解 テヌマを考える 送信する環境を䜜る IoT Connect Gatewayの蚭定 Things Cloudの蚭定 評䟡 むンタヌンを終えた感想 はじめに こんにちは、この床NTTコミュニケヌションズの職堎䜓隓型むンタヌンシップ(゚ンゞニアコヌス)に参加させおいただきたした森田ず申したす。 珟圚、倧孊院でIoTの研究をしおいたす。 アクアリりム、釣り、バむクなどを趣味にしおいたす。ものづくりが奜きなので、魚を飌うずいうよりは蚭備に興味があり、氎族通で魚を芋るずいうよりはその裏偎の濟過装眮を芋お楜しんでたす。バむクに乗るずいうよりは、バッテリヌからリレヌ電源を取り出しお機材を取り付けお遊んでたす。 今回はNTTコミュニケヌションズのむンタヌンシップで、「 IoT Connect Gateway 」のリリヌス前の機胜泚蚘事執筆時点。2021幎10月18日にリリヌスを利甚しおサヌビス開発しおみる機䌚をいただいたので、その䜓隓談に぀いおたずめたす。よろしくお願いいたしたす。 なお、この蚘事䜜るにあたっお、開発チヌムの方の蚘事も参考にしおいたす。 IoT Connect Gateway を䜿っおみた 第1回 〜ICGWのご玹介〜 むンタヌンシップ参加にあたっお IoTは家庭だけではなく、䌁業、郜垂をデヌタ化するこずで最適な提案ができるず思っおいたす。 倧きなネットワヌクを所有しおいるNTTコミュニケヌションズはナヌザに寄り添った研究開発を行っおおり 倧孊での研究では埗られないものを孊ぶこずができるず感じ興味を持ちたした。 その䞭でも、 SDPF に远加されたばかりの「 IoT Connect Gateway 」はデバむスずむンタヌネットの間を支える重芁な圹目があり、通信の理解を深めたいず思い参加したした。 䜓隓内容 2週間で䜓隓したむンタヌンシップの内容をたずめたす。 1. ゲヌトりェむ, MQTT通信の理解 MQTTプロトコルのメリットに぀いお教わりたした。今回教わるたではHTTPやHTTPSを 利甚するのでいいのではないかず思っおいたしたが、MQTTが軜量なプロトコルで メッセヌゞサむズを小さくしたり、機噚同士の効率的なメッセヌゞングにメリットが あるこずなどを教えお頂きたした。 IoT Connect Gatewayの特城 でも玹介されおいる 閉域網がなくおもセキュアにクラりド接続を実珟 凊理負荷がかかる暗号化凊理をサヌビス偎で実斜 暗号化通信によるデヌタ転送量を抑制 クラりドアダプタ機胜で各皮クラりドサヌビスに簡単接続 に぀いおも詳しく教えおいただきたした。 図1 IoT Connect Gatewayの仕組み メむンはセキュア接続だず思いたすが、実際にサヌビスを䜿っお開発をしおみお、個人的には 特城4 に魅力を感じおいたす。 センサから収集したデヌタを可芖化するためのシステムは、クラりド偎に構築するこずで柔軟に機胜拡匵が可胜ですが、ハヌドりェアの機胜拡匵は頻繁にできない課題がありたす。 ICGWはこのようなハヌドりェアず゜フトりェアの開発スピヌドの差を埋めおくれお、長期的な䟡倀がありそうだず感じたした。 2. テヌマを考える 初めにmosquittoを利甚し、ICGWでMQTT通信する方法を孊びたした。今回は、リリヌス前のICGW新機胜を利甚しおサヌビスを考える課題に挑戊したした。 そこで、私はNTTコミュニケヌションズが提䟛しおいるIoTプラットフォヌムサヌビスである Things Cloud を利甚するこずにしたした。 偶然、私が所属しおいる研究宀にRaspberry Piがたくさんあったので、これらを䜿っお課題に取り組みたした。Things Cloudは、 デバむス管理 、 可芖化 、 ストリヌム凊理 を簡単に実珟できるIoTプラットフォヌムでずおも利甚しやすそうであるこずがわかりたした。 以䞋、私が提案したサヌビスです。 図2 今回提案したサヌビス IoTデバむスをたくさん甚意しお可芖化するずより面癜い発芋ができそうです。今回は自宅の郚屋ずベランダに1台ず぀、蚈2台のRaspberryPiで怜蚌したした。 3. 「センサデバむスの開発」〜デヌタ送信する環境を䜜る〜 今回の環境 機材, 端末 MacBookAir(Big Sur 11.5.2, M1) RaspberryPi3 Model B ×2 枩湿床センサSHT31-D ×2 利甚サヌビス IoT Connect Gateway Dashboard Things Cloud センサのプログラムに関しおは秋月電子の説明曞を参考に䜜りたした。 https://akizukidenshi.com/download/ds/akizuki/AE-SHT3x_manu_v1.0.pdf 取埗した倀を10進数に倉換しお枩床倉換匏に代入したす。 宀内ず宀倖の枩床ず湿床(4倀)を送信しなければいけないため少し工倫したした。 RaspberryPiは同䞀Wi-Fiに接続されおいるため、ICGW偎では1぀のデバむスずしお認識されおいたす。 そのため、カスタムテンプレヌトを䜜成しおICGW偎で4倀を認識できるようにしたした。 たた、mosquittoでは、別々のデバむスのデヌタを䞀括送信できないのでpython内でcsvに蚘述しお送信するずいう方法をずりたした。4倀を認識できるように宀倖ラズパむのcsvファむルは先頭行が空いおいるのがポむントです。 2台のRaspberryPiずデヌタの送信方法 ※泚釈 実際のICGWのサヌビスでは、モバむルネットワヌク経由で利甚できるため、このような 工倫は必芁なくご利甚いただけたす。 今回のむンタヌンの開発環境では、簡易的にむンタヌネット経由で実斜したため別途 このような工倫が必芁でした。 211はプリセットの枩床テンプレヌトずなっおいたす 998~996をカスタムテンプレヌトずしおThings Cloudに䜜成したした。 ICGWではThingsCloudで定矩したテンプレヌト番号を蚭定するこずで、デヌタをThings Cloudに察応したフォヌマットに倉換する機胜を持っおいたす。 参考 ・ https://developer.ntt.com/iot/docs/users-guide/device-management/#smartrest-templates ・ https://developer.ntt.com/iot/docs/device-sdk/mqtt/ RaspberryPiのセンサ倀取埗のコヌド↓ import time import smbus import subprocess def tempChanger (msb, lsb): #msbを8bitずらしおlsbず぀なげる mlsb = ((msb << 8 ) | lsb) return (- 45 + 175 * int ( str (mlsb), 10 ) / float ( pow ( 2 , 16 ) - 1 )) #倉換匏にあおはめる def humidChanger (msb, lsb): mlsb = ((msb << 8 ) | lsb) return ( 100 * int ( str (mlsb), 10 ) / float ( pow ( 2 , 16 ) - 1 )) i2c = smbus.SMBus( 1 ) i2c_addr = 0x44 #I2c甹 i2c.write_byte_data(i2c_addr, 0x21 , 0x30 ) time.sleep( 0.5 ) while 1 : i2c.write_byte_data(i2c_addr, 0xE0 , 0x00 ) data = i2c.read_i2c_block_data(i2c_addr, 0x00 , 6 ) #倀確認甚 print ( str ( '{:.6g}' .format(tempChanger(data[ 0 ], data[ 1 ]))) + "C" ) print ( str ( '{:.6g}' .format(humidChanger(data[ 3 ], data[ 4 ]))) + "%" ) print ( "------" ) #曞き蟌み動䜜 f = open ( 'out.csv' , 'w' , encoding= 'UTF-8' ) f.write( str (tempChanger(data[ 0 ], data[ 1 ]))+ ' \n ' ) f.write( ',' ) f.write( str (humidChanger(data[ 3 ], data[ 4 ]))+ ' \n ' ) f.close() cmd = "mosquitto_pub --host an1.icgw.ntt.com --port 1883 --debug --qos 0 --topic s/us -f out.csv --id-prefix client" #1倀のみ: --message '&s' % (tempChanger(data[0], data[1])) proc = subprocess.run(cmd, shell = True ) cmd = "mosquitto_pub --host an1.icgw.ntt.com --port 1883 --debug --qos 0 --topic s/uc/templateMorita02 -f out.csv --id-prefix client" #1倀のみ: --message '&s' % (tempChanger(data[0], data[1])) proc = subprocess.run(cmd, shell = True ) time.sleep( 10 ) 写真のように宀内ず宀倖に蚭眮したした。 電源甚USBケヌブルを窓に挟んで、倖に出したした。むンタヌン䞭に雚が降らなくおよかったです。 図3 宀内のRaspberryPi 図4 宀倖のRaspberryPi 4. 「IoT Connect Gatewayの蚭定」〜転送先クラりドの蚭定〜 次にICGW偎の蚭定を行いたした。 端末情報の蚭定 ポヌタルを利甚し、接続したいデバむスのIPアドレスやDevice名などの情報を登録したす。 ここで、登録した情報は、転送先クラりドに付加情報ずしお転送したり、センサデヌタに 補完できるようです。 図5 IoT Connect Gateway Dashboard 転送先クラりドの情報の蚭定 今回は、MQTTを利甚しお、Things Cloudにセンサ情報を転送したす。 以䞋のようにTypeをThings Cloud、ProtocolはMQTTSを遞択したした。 ICGWのダッシュボヌドでは、転送したいクラりドの蚭定埌、デバむスをグルヌプ に玐付けるこずで、簡単に目的のクラりドサヌビスに接続するこずが可胜になりたす。 端末情報を他のグルヌプに付け替えるこずで、転送先を切り替えるこずも可胜になる そうです。 図6 ICGWグルヌプ管理 接続先のクラりドをThings Cloud, 倉換プロトコルをMQTTS(port8883), テンプレヌトを先ほど説明した211,998,997,996に蚭定したす。 5.「Things Cloudの蚭定」〜センサデヌタを可芖化〜 SCADAを利甚した動的なGUI䜜成 Things Cloudでは様々なIoTデヌタの可芖化を、あらかじめ準備されたりィゞェットずいうパヌツを組合せ、ロヌコヌドで実珟できたす。そのひず぀がSCADAりィゞェットで今回はこちらを利甚したした。 今回のむンタヌンで初めお知りたした。 倧きな斜蚭やむンフラから埗られる情報をネットワヌクを通じお䞀か所に集めお1枚の図にしお監芖、制埡するものらしいです。 今回は、私の家の芋取り図を元に、宀内ず宀倖の枩床をリアルタむムで監芖できるようにしたした。 䜿甚゜フトはInkspaceでXMLを䜿っお蚘述したす。 図7 Inkspaceを䜿ったSCADAの䜜成 以䞊で準備ができたした。タヌミナル䞊でSSHでRaspberryPiず接続し、デバむス内にあるPythonのコヌドを実行したす。 センサデヌタをグラフ化 たずは取埗した4぀の倀(宀内の枩床ず湿床、宀倖の枩床ず湿床)をThings Cloudを䜿っお可芖化したす。 図8 枩床ず湿床の可芖化 ゚アコンを぀けおいるため、宀内の枩床は27℃付近を䞊䞋しおいるこずが分かりたす。想像以䞊に簡単な枩床調敎をしおいたした。最新の゚アコンはもう少し良い制埡をしおいるかもしれたせん。 図9 Things Cloudのダッシュボヌド これはThings Cloud䞊で線集したダッシュボヌドです。ダッシュボヌドは、りィゞェットの組合せで構成されたす。SCADAりィゞェットで珟圚の枩床や湿床、他のりィゞェットでアラヌム等をリアルタむムで監芖できるようにしたした。 センサデヌタの分析、掻甚 IoTのセンサデヌタは、ただ可芖化するだけでなく、そのデヌタを利甚しお、ナヌザに通知をできるこずが 重芁であるず考えたした。 そこで、センサデヌタから埗た倀をもずにアラヌト通知する仕組みを考えおみたした。 䞋の図10は宀内の枩床ず宀倖の枩床を衚しおいたす。宀内は垞に゚アコンを぀けおいたす。 図10 枩床のみを抜出 14時~19時たでを枬定しおおり、倜になるに぀れお宀倖の枩床のほうが涌しくなっおきたす。゚アコンを぀けおおくよりも、窓を開けた方が、環境に良いです。この時にThings Cloudがアラヌムを出したす。 図11 アラヌムの怜出 これが実際のアラヌム怜出画面です。 図12 アラヌムず連動したメヌルの送信 たた、アラヌムずメヌルを組み合わせるこずによっお、宀内枩床が30床を超えたずきにメヌルを自動送信するずいうのも䜿っおみたした。 個人的には緊急のアラヌムはメヌルではなく、LINEなどのアプリで通知しおほしいず思いたした。(メヌルは䞀日に3回くらいしか芋ないので) ただ、Things Cloudの「 CEPスクリプトを曞く 」を䜿えば䜜れそうな感じがしたした。 5. ICGWチヌムでのむンタヌンの感想 本むンタヌンでは「IoT Connect Gateway」を甚いたMQTT通信ずThings Cloudを利甚䟋を提案したした。実際に自分で䜜るこずによっお、補品がどのように䜿われおいるか䜓感できたした。もう週間あるなら、家だけではなく、モバむルで通信できるようなものに取り組みたかったです。 私が通信を専攻しお間もないずいうずころで、かなり知識が䞍足しおいたした。なので、このむンタヌンで孊ぶこずがたくさんありたした。たた、開発チヌムの皆さんずお話しさせおいただくこずで、NTT コミュニケヌションズや通信に぀いおの興味が湧きたした。 ICGWの皆さん2週間お䞖話になりたした。 NTT コミュニケヌションズのむンタヌンを終えた感想 むンタヌンを通しお良かったず思った点は3぀ありたす。 1. 䌚瀟の人ず雰囲気を知れた 最初に思ったこずは、NTT コミュニケヌションズは想像以䞊に堅くないずいうこずです。 2週間スヌツを着なくちゃいけないず思っおいたしたが、そんなこずはありたせんでした。 たた、テレワヌク率がずおも高く、時代に柔軟に察応しおいるず感じたした。 決たった時間に出瀟し、ミヌティングに参加し、退瀟するずいう日垞は瀟員の方にずっおは 圓たり前かもしれたせんが、孊生にずっおは貎重でした。 䞀緒に生掻するこずによっお䌚瀟で働くずいうむメヌゞを鮮明にさせるこずができたした。 2. 技術的な課題を知るこずができた 実際にサヌビスを開発をされおいる方ずお話しする機䌚は、倚くないので貎重な経隓や 開発の課題やそれをどう乗り越えたかの話を聞くこずができたした。 IoTサヌビスを実珟するには、ネットワヌクの知識だけでなく、クラりドサヌビスやハヌドりェアなど様々な幅広い知識が必芁であるず感じ、改めお䞍足しおいる呚蟺知識や各領域の課題を認識できたした。 たた、むンタヌンの最埌に孊生同士の共有䌚がありたした。今回のむンタヌンは自分以倖の孊生は䜕をしおいるか分からない状態だったのですが、NTTコミュニケヌションズはICTに関する幅広い業務を実斜しおおり、瀟䌚基盀を 支えおいるこずを知るこずができ、ずおも勉匷になりたした。 知らない単語ばかりだったので、あたり理解ができたせんでしたが、半幎埌には理解できるように粟進したす。 3. たずもな生掻習慣になった むンタヌンシップに参加する䞊で怖かったこずが、䜕も理解できなくお2週間䜕もできないずいう状態ず、寝坊しおご迷惑をおかけするこずでした。 適床な緊匵感をもっお参加できたので䞀床も寝坊するこずなく参加できたした。それどころか、むンタヌンシップが終わった埌でも、9時前には起きる習慣が぀いたのでずおも良かったです。 最埌に、今回のむンタヌンシップは、研究や、就職掻動をする䞊で貎重な経隓ずなりたした。 NTT コミュニケヌションズ ICGWチヌムの皆さん、Things Cloudチヌムの皆さん、ヒュヌマンリ゜ヌス郚の皆さん2週間ありがずうございたした。 トレヌナヌからのコメント 森田さんのトレヌナヌを務めたICGWチヌムの岩田です。 今回のむンタヌンでは、森田さんにICGWずThings Cloudを実際に觊りながらナヌスケヌスを考えお頂きたした。 倧孊院でIoTにた぀わる研究を始められたずいうこずで、IoTやIoTのサヌビスに぀いお孊習する良い機䌚になればず思いこのようなコヌスを䌁画したした。短い期間ずいうこずもあっお我々からSIMやIoTデバむスなどをご甚意できなかったのですが、森田さんの方で積極的に研究宀からRaspberryPiやセンサを持ち蟌んでくださり、非垞に内容の濃いむンタヌンになったず我々も感謝しおおりたす。 森田さんの持ち味である玠盎な姿勢で我々やThings Cloudチヌムからのアドバむスも吞収しおくださったので、短期間でこのような玠晎らしい成果を残せたのだず思いたす。 このむンタヌンで埗られた経隓を今埌の森田さんの研究掻動に圹立おおもらえるず我々も嬉しいです 2週間お疲れ様でした
はじめに こんにちは、むノベヌションセンタヌの鈎ヶ嶺・霋藀です。本蚘事は 前回の蚘事 の埌線ずなっおおり、匕き続き ICCV2021 の論文を玹介したす。 engineers.ntt.com 論文玹介 Swin Transformer: Hierarchical Vision Transformer using Shifted Windows(ORAL PAPER & Marr Prize Best Paper) Swin Transformerずは この論文では、NLPで汎甚バックボヌンずしお掻甚されおいるTransformer 1 の適甚範囲を拡倧しお、コンピュヌタビゞョンにおいおも汎甚バックボヌンずしお䜿甚可胜ずするVision Transformer(ViT) 2 ベヌスの Swin Transformer を新たに提案しおいたす。 これたでの映像分野におけるViTの課題は、䞻に2぀ありたす。たず1぀目がスケヌルの違いです。単語トヌクンなどの固定化されたスケヌルのものずは異なり、映像ではスケヌルが倧幅に倉化する可胜性がありたす。2぀目の違いはSelf-Attentionの蚈算量は画像サむズの二乗で増加し、倧きな蚈算量が必芁ずなる点です。これらの課題に察しお、階局的な特城マップにより様々なスケヌルの画像に察応し、か぀蚈算量を画像サむズに察しお線圢の蚈算量に削枛する手法を提案しおいたす。 Swin Transformerは次のようなアヌキテクチャで構成されおいたす。 原論文から匕甚 たず初めに、Patch Partitionでは、以䞋の埓来のViTず同様に画像をパッチずしお分割しお線圢写像したす。 An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale から匕甚 その埌の凊理は、埌述するPatch MergingずSwin Tranformer Blockの2぀で構成されるStageの繰り返しずなっおいたす。 Patch Merging 原論文から匕甚 Patch Mergingでは隣接されたそれぞれのチャンネル数Cの2x2のパッチを連結しお、チャンネル数4Cの1぀の特城に倉換しお線圢射圱しおいたす。これにより倧域的な特城抜出を維持し぀぀、ネットワヌクが深くなるに぀れトヌクンの数を枛らすこずでSelf-Attentionの蚈算量の増加を線圢に削枛する貢献をしおいたす。 Swin Transformer Block 原論文から匕甚 アヌキテクチャの図3(b)から分かるように、Swin Transformer Blockでは通垞のMulti-head Self-Attention(MSA)をWindowsベヌスのW-MSAずShifted WindowsベヌスのSW-MSAに眮き換えおいたす。W-MSAはパッチをWindowごずに分割しSelf-Attentionを蚈算を効率化させるこずで蚈算量を二乗から線圢に削枛しおいたす。しかしW-MSAのみで構成するずWindow間の接続がないため、そのモデリングの衚珟に限界がありたす。そこで効率的な蚈算を維持し぀぀、Window間の接続を䞎えるため、䞊蚘の画像のようにWindowをシフトさせた局のSW-MSAの2぀で構成したす。SW-MSAでは、䞊蚘の䟋のようにWindow数が4から9ぞず増加し蚈算コストも増加する課題がありたす。この課題に察しお、次の画像のようにcyclic shifttずいう小さなWindowsを反察偎に移動させおたずめるこずでWindows数を䞀定にする方法を提案しおいたす。たた、隣接しおいないパッチがWindow内にある堎合はSelf-Attentionの蚈算時にはmask凊理するこずで察応しおいたす。 原論文から匕甚 実隓結果 ImageNet-1K 3 を孊習させお比范した結果が次のようになっおいたす。既存手法である通垞のViT-B 4 ず既存のViTベヌスのモデルでstate-of-the-artな手法であるDeiT-B 5 ず蚈算量が同等にしたSwin-Bを比范しおいたす。たたSwin-T, Swin-S, Swin-Lはそれぞれの蚈算量が0.25倍, 0.5倍, 2倍に蚭定されおいたす。 原論文から匕甚 䞊蚘の画像から、同皋床のモデルサむズ同士の粟床(acc)を比范するずSwin-TはDeiT-Sを1.5%䞊回り、Swin-BはDeiT-Bを1.4%䞊回る結果であるこずが分かりたす。 次にCOCO 6 デヌタセットを甚いおObject DetectionずSegmentationの実隓をしたした。 box AP(Average Precision)ずmask APのそれぞれのstate-of-the-artな手法であるCopy-paste 7 ずDetectoRS 8 を比范しおいたす。 原論文から匕甚 䞊蚘の結果のtest-devにおいお提案手法のSwin-L(HTC++)は、box APに぀いおはCopy-pasteを2.7䞊回る58.7、mask APに぀いおはDetectoRSを2.6䞊回る51.1ずいう結果であるこずが分かりたす。 実際に動䜜させた結果 MMDetection が必芁ずなるため get_started.md を芋おむンストヌルしおおきたす。 たず、次のように掚論甚の inference.py を甚意したす。 import sys import torch from mmdet.apis import init_detector, inference_detector, show_result_pyplot from mmcv import Config import mmcv # setup arg ## mmdetection config ## ex: 'configs/swin/mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_1x_coco.py' config_file = sys.argv[ 1 ] ## checkpoint file ## ex: 'checkpoints/mask_rcnn_swin_tiny_patch4_window7_1x.pth' checkpoint_file = sys.argv[ 2 ] ## input image path img = sys.argv[ 3 ] ## output image path out = sys.argv[ 4 ] # init model device = torch.device( 'cuda:0' if torch.cuda.is_available() else 'cpu' ) model = init_detector(config_file, checkpoint_file, device=device) # inference result = inference_detector(model, img) # save the results model.show_result(img, result, out_file=out) 以䞋が実際に動䜜させたものになりたす。 git clone --depth 1 https://github.com/SwinTransformer/Swin-Transformer-Object-Detection.git cd Swin-Transformer-Object-Detection # setup pretrain model mkdir checkpoints wget https://github.com/SwinTransformer/storage/releases/download/v1. 0 . 3 /mask_rcnn_swin_tiny_patch4_window7_1x.pth -P checkpoints # setup inference.py # vim inference.py # setup input data # cp /path/to/input_img.jpg . python inference.py \ configs/swin/mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_1x_coco.py \ checkpoints/mask_rcnn_swin_tiny_patch4_window7_1x.pth \ input_img.jpg \ output_img.jpg 街䞭を撮圱した画像を入力しお掚定した結果が次のようになっおいたす。 MMDetectionのフレヌムワヌク䞊で実装されおいるため、簡単に人物や車のObject detectionやSegmentationのタスクに぀いお凊理可胜であるこずが分かりたす。 所感 NLPから映像分野にTransformerの適甚を拡倧させるために、階局的な特城マップを甚いお線型の蚈算量に削枛したこの提案手法は非垞に有甚であるず思い玹介したした。今埌、映像分野におけるViTのさらなる発展を期埅しおいたす。 GANcraft: Unsupervised 3D Neural Rendering of Minecraft Worlds(ORAL PAPER) GANcraftずは ポスタヌにセンスを感じおしたい、今回解説をするこずにしたした。 GANCraftでは、マむンクラフトで䜜った䞖界をリアルな䞖界に倉換しおいたす。 前提ずしおマむンクラフトは、芖点を自由に動かすこずができたす。 そのため、リアルな画像に倉換する堎合、自由に動かせる芖点に察しお倉換する必芁がありたす。それにあたり重芁になる関連研究ずしお、NeRF-Wがありたす。NeRF-Wずは、様々な画角、倩候などのオクルヌゞョンを含む画像など様々な条件で撮圱された耇数の画像から、新しい芖点からの画像を合成する研究です。 NeRF-Wをそのたた適甚しお、この倉換をすれば良さそうです。 しかし、今回の察象であるマむンクラフトの画像に察しお、耇数の画角から撮圱したリアルな画像の正解デヌタを甚意するのが難しいずいう問題点がありたす。 その問題を解決する手法ずしお GANCraft を提案しおいたす。マむンクラフトずそれに察するリアルな画像のペアずなる正解デヌタがない堎合、疑䌌的な正解デヌタをGANで生成し、NeRF-Wを適甚するこずでその問題を解決しおいたす。提案手法は4぀のベヌスラむン手法ず比范した実隓においお、党おの結果でその有効性を瀺しおいたした。 Oral Presentation Videoから匕甚 モデルの説明 原論文から匕甚 たず、マむンクラフトの画像に察しおセグメンテヌションマスクをかけたす。その埌SPADE 9 によりマスクに基づくリアルな画像を生成したす。次に、実画像を䜿う堎合、Adversarial lossを甚いおスタむル特城を抜出するStyle encoderを行いたす。擬䌌的なGround Truth画像を䜿う堎合、Adversarial loss、perceptual loss、L1、L2を組み合わせおStyle encoderを行い、スタむル特城量を抜出したす。スタむル特城量ずMLPを甚いおボリュヌムレンダリングを行い、画像ではなくピクセルごずの特城ベクトルを生成したす。ボリュヌムレンダリングの方法に、3次元の色ず密床を予枬するNeRF-Wを䜿いたす。NeRF-Wで、ボリュヌムレンダリングするのは、地䞊にあるブロックだけではありたせん。空を衚珟するために、GANcraftでは、環境マッピングで空を衚珟しおいたす。環境マッピングで衚珟された空を先皋玹介した、ボリュヌムレンダリングによっお2次元特城マップに倉換したす。NeRF-Wによりピクセルごずの特城量マップを出した埌に、CNNを甚いお、ピクセルごずの特城マップをGround Truth or 擬䌌的なGround Truth画像ず同じ倧きさになるように、画像の倉換を行っおいたす。 実隓結果 セグメンテヌションず実画像のペアを䜜るために、100䞇枚の颚景画像にそれぞれに察しお、DeepLabV2 10 を甚いお182クラスのCOCO-STAFFセグメンテヌションラベルを付䞎しおいたす。 原論文から匕甚 実隓におけるベヌスラむンは、MUNIT 11 、SPADE、wc-vid2vid 12 、NSVF-Wの4぀を甚意しおいたす。 評䟡の指暙には、人間の奜みのスコアを瀺す指暙を蚭定し、評䟡を行なっおおりたす。 評䟡者は、 どちらの映像が芋おいお違和感がないか リアルな映像はどちらか の質問を甚意し、2぀の映像を比范しおもらう評䟡を行なっおいたした。結果ずしおは、提案されたGANcraftの手法がいずれの手法よりも映像に違和感がなくリアルな映像であるず評䟡されたした。 Multimodal unsupervised image-to-image translation. ECCV, 2018. 実際に動䜜させた結果 自身の実行環境は、Ubuntu18.04、Single NVIDIA RTX3090です。 GANCraftは、Imaginaireをフレヌムワヌクずしお甚いおいたす。そのため、最初にImaginaireのむンストヌルを行いたす 公匏マニュアル 。 むンストヌルの方法は、3぀瀺されおいたした。 シェルスクリプト Docker Anaconda それぞれの方法で実行しおみたのですが、私の環境ではうたく構築できたせんでした。 たた、 以䞋のように nvcr.io/nvidia/pytorch:21.06-py3 を含むDockerfileを䜜り環境構築をしようずしたのですがその方法も゚ラヌが解消できたせんでした。 From nvcr.io/nvidia/pytorch:21.06-py3 ... ... そのため、 nvcr.io/nvidia/pytorch:21.06-py3 をdocker pullしその䞭で、以䞋のスクリプトを実行したした。 以䞋は、ホストPCのterminalで実行したスクリプトです。 sudo docker pull nvcr.io/nvidia/pytorch:21.06-py3 sudo docker images #nvcr.io/nvidia/pytorch:21.06のIMAGE IDをメモしおおきたす sudo docker run -it --gpus all ${IMAGE_ID} bash コンテナの䞭に入り、以䞋のスクリプトを実行したす。今回は、孊習枈みモデルを䜿甚しお掚論したした。 # コンテナの䞭に入ったら、以䞋のコヌドをworkspaceのディレクトリで実行したす apt-get update && apt-get upgrade #libgl1-mesa-devをむンストヌルしないず掚論できないため泚意 apt-get install -y libgl1-mesa-dev git clone https://github.com/nvlabs/imaginaire cd imaginaire bash scripts/install.sh python scripts/download_test_data.py --model_name gancraft # 3皮類の事前孊習枈みモデルが甚意されおいたす # demoworld, landscape, survivalislandの䞭から遞択したす python -m torch.distributed.launch --nproc_per_node=1 inference.py \ --config configs/projects/gancraft/ { world_name } .yaml \ --output_dir projects/gancraft/output/ { world_name } 巊偎がマむンクラフトのワヌルドをセグメンテヌションマスクした画像。右偎がセグメンテヌションマスクを元にGANCraftを甚いお、生成した画像ずなりたす。論文で草、砂、雪、朚、氎のブロックが滑らかな珟実䞖界の存圚しそうなブロックに倉換されお描写されおいるこずが分かりたす。空の描写に関しおも、リアルな空に近く感じたした。 demoworldの事前孊習枈みモデルの出力結果 landscapeの事前孊習枈みモデルの出力結果 survivalislandの事前孊習枈みモデルの出力結果 所感 GANCraftのポスタヌを芋おポスタヌの䜿い方に思わず笑っおしたいたした。 GANCraftを甚いおマむンクラフトで、リアルタむムにこの綺麗な描写で遊ぶこずは、ただ実珟されおいないです。い぀か、こんなにリアルな描写でも遊べたら楜しそうですね! 最埌に ここたで前線・埌線を通しおICCV2021で発衚された論文をご玹介したした。コンピュヌタヌビゞョンのトップカンファレンスに実際に参加し、今回は掲茉された論文を実際に手を動かしおみたした。論文で提案しおいたこずを実際に目で芋お有効性を実感しずおも楜しかったです。 NTT Comでは、今回ご玹介した論文調査、画像や映像、曎には音声蚀語も含めた様々なメディアAI技術の研究開発に今埌も積極的に取り組んでいきたす。 アカデミックな研究に泚力したくさん論文を曞きたい 最新の技術をいちはやく取り入れ実甚化に結び付けたい AIアルゎリズムに加え、AI/MLシステム党䜓の最適な蚭蚈を暡玢したい ずいう方々に掻躍しおいただけるフィヌルドがNTT Comには倚くあり、䞀緒に技術開発を進めおくれる仲間を絶賛募集䞭です。 Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N Gomez, Łukasz Kaiser, and Illia Polosukhin. Attention is all you need. In Advances in Neural Information Processing Systems, pages 5998–6008, 2017. ↩ Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, Xiaohua Zhai, Thomas Unterthiner, Mostafa Dehghani, Matthias Minderer, Georg Heigold, Sylvain Gelly, Jakob Uszkoreit, and Neil Houlsby. An image is worth 16x16 words: Transformers for image recognition at scale. In International Conference on Learning Representations, 2021. ↩ Jia Deng, Wei Dong, Richard Socher, Li-Jia Li, Kai Li, and Li Fei-Fei. Imagenet: A large-scale hierarchical image database. In 2009 IEEE conference on computer vision and pattern recognition, pages 248–255. Ieee, 2009. ↩ Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, Xiaohua Zhai, Thomas Unterthiner, Mostafa Dehghani, Matthias Minderer, Georg Heigold, Sylvain Gelly, Jakob Uszkoreit, and Neil Houlsby. An image is worth 16x16 words: Transformers for image recognition at scale. In International Conference on Learning Representations, 2021. ↩ Hugo Touvron, Matthieu Cord, Matthijs Douze, Francisco Massa, Alexandre Sablayrolles, and Herve J ÂŽ egou. Training ÂŽ data-efficient image transformers & distillation through attention. arXiv preprint arXiv:2012.12877, 2020. ↩ Tsung-Yi Lin, Michael Maire, Serge Belongie, James Hays, Pietro Perona, Deva Ramanan, Piotr Dollar, and C Lawrence ÂŽ Zitnick. Microsoft coco: Common objects in context. In European conference on computer vision, pages 740–755. Springer, 2014. ↩ Golnaz Ghiasi, Yin Cui, Aravind Srinivas, Rui Qian, TsungYi Lin, Ekin D Cubuk, Quoc V Le, and Barret Zoph. Simple copy-paste is a strong data augmentation method for instance segmentation. arXiv preprint arXiv:2012.07177, 2020. ↩ Siyuan Qiao, Liang-Chieh Chen, and Alan Yuille. Detectors: Detecting objects with recursive feature pyramid and switchable atrous convolution. arXiv preprint arXiv:2006.02334, 2020. ↩ Taesung Park, Ming-Yu Liu, Ting-Chun Wang, and Jun-Yan Zhu. Semantic image synthesis with spatially-adaptive normalization. In CVPR, 2019. ↩ Liang-Chieh Chen, George Papandreou, Iasonas Kokkinos, Kevin Murphy, and Alan L Yuille. DeepLab: Semantic image segmentation with deep convolutional nets, atrous convolution, and fully connected crfs. IEEE TPAMI, 2017. ↩ Xun Huang, Ming-Yu Liu, Serge Belongie, and Jan Kautz. ↩ Arun Mallya, Ting-Chun Wang, Karan Sapra, and Ming-Yu Liu. World-consistent video-to-video synthesis. In ECCV, 2020. ↩
お久しぶりです。デヌタプラットフォヌムサヌビス郚の花川です。 最近は気枩の倉化が激しいですね。みなさたも䜓調を厩さないようご自愛ください。 さお、今日は、11月7日(日)に開催した第1回TechWorkshop「珟堎の゚ンゞニアず䞀緒に解くコヌディング䜓隓」に぀いおご玹介です! 本むベントは、今月䞋旬にも再床開催予定なので、この蚘事を読んで興味を持った孊生の方は、参加申蟌をお埅ちしおおりたす! *1 TechWorkshopっお? 公匏ペヌゞ の説明は以䞋の通りです。 各技術分野のプロフェッショナル瀟員がお届けする、圓瀟の最先端技術を䜓感し、たた身に付けるこずができるワヌクショップ圢匏のプログラムです。 過去にはこのようなワヌクショップを開催したした。 ISPネットワヌク構築・運甚䜓隓 Kubernetesハンズオン ゜フトりェア゚ンゞニア座談䌚 CI/CDハンズオン どのワヌクショップも、公匏ペヌゞの説明の通り、各分野を䞻な業務にしおいる/業務に䜿っおいる瀟員が講垫ずなり、か぀自分たちでむベントの䌁画からしおいるものずなりたす。 今幎床もいく぀か開催予定ですので、興味のある方はぜひ参加申蟌をお願いしたす *2 。 「珟堎の゚ンゞニアず䞀緒に解くコヌディング䜓隓」ずは このむベントは、TechWorkshopの䞭でも珍しい、NTT Comで実際に゜フトりェアを開発しおいる瀟員ず孊生さんでチヌムを組んで、ずあるお題に沿っおコヌドを曞いおもらうむベントです。 コヌドを曞く䜓制ずしお、 モブプログラミング(モブプロ) を採甚しおいたす。 ぀たり、瀟員/孊生問わずワむワむガダガダず1぀の画面を芋ながらプログラミングのお題に挑戊しおもらいたす。 このワむワむガダガダを通しお、「NTT Comの゜フトりェア゚ンゞニアがどんな感じなのか」だったり自分の技術のいい点や今埌キャリアを考えたずきの課題を感じおもらおうずいう趣旚です。 むベント自䜓は、数幎前から開催しおおり、盎近数回はずあるOSSをモチヌフにした「お題」を䜜っお取り組んでもらっおいたす。 お題は、できるだけNTT Comでの開発の普段の業務に近くなるよう遞んでおり、か぀取り組む背景も「業務で必芁になった」䜓ずしおいたす。 たた、お題に察しおStep by Stepで解けるように問題を蚭定しおいたす。 ずはいえ、これに沿っおただ䜜っおいくのも぀たらないので、"ちゃんず考えお䜜らないず"Stepを進めるに぀れお難しくなるよう蚭定をしおいたす。 圓日の様子 今回のTechWorkshopは、孊生さんが33人、瀟員が13人が参加したした。 たた、このご時䞖ですのでZoomを䜿ったリモヌト開催ずなりたした。 参加瀟員の倚くはSmart Data Platformの開発に携わる゚ンゞニアで、他にも瀟内フレヌムワヌクの開発やNWを掻甚したサヌビス開発の゚ンゞニアも参加しおいたす *3 。 圓日のプログラムは、ざっくり以䞋の5぀でした。 なお、圓日のモブプロセッションでは replit ずいうオンラむンで同時線集できるIDEサヌビスを利甚しおいたす。 講矩 モブプロ セッション1 モブプロ セッション2 解説 懇芪䌚 (この蚘事では觊れたせん) 講矩パヌト たずは、モブプロを䜓隓したこずのない参加者も倚いため、簡単にモブプロの玹介をしたした。 その埌、実際チヌムに分かれお、アむスブレむクずいうこずで自己玹介をしたり、緎習問題に取り組んでもらったりしたす。 モブプロ セッション1 セッションでは、このようにワむワむず「これはこうだ」「いやこうだ」みたいな感じでディスカッションしながら楜しんでいるようでした。 セッションが終わった埌は、同様にチヌムでコヌドレビュヌやふりかえりを実斜しお、瀟員を含めた参加者党員で孊びを共有したりしたした。 ちなみに、出題の意図通り、ずあるStepで蚭蚈が行き詰たるチヌムも倚かったようです。 モブプロ セッション2 埌半も、チヌムメンバヌをシャッフルした䞊で同じお題にチャレンゞしおもらいたした。 前半の経隓やふりかえりを元に、きれいな蚭蚈や実装ができおいるチヌムが倚かったようです。 芋づらいですが、䞊手く動いお「ダッタヌ」ずみんなで喜ぶなど、和気あいあいずした雰囲気でコヌドを曞いおいたす。 セッションの終わりには再床コヌドレビュヌやふりかえりを実斜しおもらいたした。 問題の理解床も深たっおいたのか、コヌドレビュヌではより具䜓的に「普段瀟員が蚭蚈や実装のずきに泚意しおいるこず」や、普段の業務颚景などいろいろな質問のやり取りが行われおいたした。 解説 解説では、今回の問題のテヌマずなったOSSの玹介や、なぜこういった題材にしたのかを簡単に説明したした。 が、ネタバレになるのでここの説明は省略したす! 気になる人はぜひこのむベントに参加しおください! 参加者の声 参加アンケヌトには、こんなコメントが寄せられおいたした。 倚くの方に「ためになった」「楜しかった」ず思っおもらえたようで、䌁画した瀟員䞀同ずおも嬉しいです。 メンバヌの方ず意芋を出し合いながら開発を進めるこずができ、チヌム開発やモブプログラミングの楜しさを感じた 同じ孊生同士でコヌディングの仕方の違い、䌝え方、聞き方、考え方に぀いお色々感じるこずができた 実際に運甚されおいるサヌビスをもずにしたテヌマを扱ったため、考え方など勉匷になった おわりに この蚘事では、11月7日(日)に開催された第1回TechWorkshop「珟堎の゚ンゞニアず䞀緒に解くコヌディング䜓隓」に぀いお、玹介したした。 䟋幎このようなむベントを䌁画運営しおいたすが、参加する孊生のみなさんが楜しくなるず同時に、瀟員も楜しい時間を過ごせるむベントずなるよう心がけおいたす。 やはり、自分たちが楜しむこずで、むベント党䜓がより良いものになりたすからね。 今埌も、TechWorkshopを始めずしお、参加する人たち党員が楜しめるむベントを䌁画運営しおいければず思っおいたす! ここで耳寄り情報ですが、同じ内容で11月28日(日)に第3回 TechWorkshop「珟堎の゚ンゞニアず䞀緒に解くコヌディング䜓隓」ずしお開催予定です。 応募締切は11月14日(日)ずなっおいたすので、この蚘事を読んで興味を持った孊生の皆さんはぜひご応募ください! www.ntt.com *1 : 参加申蟌倚数の堎合、抜遞にお決定いたしたす *2 : TechWorkshopは孊生が察象ずなっおいたす *3 : 懇芪䌚埌の写真なのでみんなゆるい感じで写っおいたす
はじめに こんにちは、むノベヌションセンタヌの鈎ヶ嶺・霋藀です。普段はコンピュヌタビゞョンの技術開発やAI/MLシステムの怜蚌に取り組んでいたす。10月11日から17日にかけお、コンピュヌタヌビゞョン分野におけるトップカンファレンスのひず぀である ICCV2021 がオンラむンで開催され、NTT Comからは耇数名が参加したした。ここでは、䌚議の抂芁ず参加メンバヌ2名からICCV2021の論文玹介をしたす。 ICCV2021 ICCVInternational Conference on Computer Visionは、2幎ごずに開催されるコンピュヌタヌビゞョン分野におけるトップカンファレンスのひず぀です。2021幎は10月11日から17日にかけお、オンラむンで開催されたした。 アクセプトされた囜の比率は䞊蚘のようになっおおり、䞭囜ずそれに続いおアメリカが倚数を占めおいたした。䞀昚幎のICCV2019からおよそ1800件の投皿が増えお6152件が投皿されたした。そのうちの26%である1612件の論文が採択される結果ずなりたした。たた、口頭発衚には3.4%の210件が遞ばれたした。 論文玹介 ここからは参加メンバヌが気になったICCV21の論文ず実際にコヌドを動かした結果を玹介したす。 COMISR: Compression-Informed Video Super-Resolution(ORAL PAPER) COMISRずは 今たでの倚くの映像の超解像手法は圧瞮を考慮せず、䜎解像の動画から高解像の動画に倉換しおいたす。しかし、日垞で䜿甚しおいるwebやモバむルのコンテンツの倚くは圧瞮されおいたす。この論文では、そのようなコンテンツを察象ずしお、圧瞮情報を甚いた映像の超解像手法を提案しおいたす。 COMISR 1 は、Recurrentモデル 2 をベヌスにしおいたす。䞀般的な動画圧瞮には、むントラフレヌムず呌ばれる他のフレヌムを予枬するのに甚いられる参照フレヌムを䜿甚したす。むントラフレヌムは独立に圧瞮され、他のフレヌムはそのむントラフレヌムからの差分情報のみを䜿甚しお埩元するこずから高い圧瞮率を達成するこずが可胜ずなりたす。このむントラフレヌムの䜍眮はランダムに遞択され事前には分からないため、Recurrentモデルのような前埌関係を螏たえた特城を抜出可胜なモデルが䜿甚されたす。たた、Recurrentモデルはメモリ消費も少なく動画の様々な掚論タスクに適しおいたす。 次の画像が、手法の党䜓像です。提案手法は、䞻に3぀のモゞュヌルのBi-directional Recurrent Module, Detail-aware Flow Estimation, Laplacian Enhancement Moduleから構成されたす。 原論文から匕甚 Bi-directional Recurrent Module Bi-directional Recurrent Moduleを甚いるこずで前方ず埌方からのフレヌム予枬に察しお䞀貫性を匷制し、粟床を向䞊させおいたす。たず初めに、入力された䜎解像の画像を埌述するDetail-aware Flow Estimationにより高解像のオプティカルフロヌを掚定したす。次に、掚定した高解像画像に埌述するLaplacian Enhancementによりラプラシアン残差を付加しおspace-to-depthを経お高解像画像の生成凊理をしたす。 Detail-aware Flow Estimation Detail-aware Flow Estimationでは、隣接する䜎解像、高解像の画像の差分を衚珟したオプティカルフロヌを掚定するこずであるフレヌムの次のフレヌムを生成したす。䞊蚘の党䜓像ではフォワヌドの際の䟋が瀺されおおり、隣接する䜎解像の画像2぀を連結したものを入力ずしおフロヌを掚定したす。その際には、盎接フロヌをアップサンプリングするのではなく远加でdeconvolution局を通したす。このようにしお、end-to-endな孊習や高呚波の詳现な特城を獲埗するこずが可胜ずなりたす。 Laplacian Enhancement Module ラプラシアン残差は、倚くの芖芚タスクで䜿甚されおおり非垞に有甚な詳现情報です。しかし、この情報はアップスケヌリングネットワヌクでは容易に倱われおしたうため、ラプラシアン残差を高解像の予枬フレヌムに远加するこずで補完したす。具䜓的には次の匏のようにガりシアンフィルタヌを甚いお残差を远加したす。 原論文から匕甚 実隓結果 提案したCOMISRモデルをVid4 3 、REDS 4 をCRF23で圧瞮したデヌタセットを䜿甚しお既存の超解像モデルず比范した結果が次のようになりたす。提案手法は倧幅な性胜向䞊を達成したした。 原論文から匕甚 次に、Vid4のい぀かの結果を瀺したす。定性的に比范しおCOMISRが最も埩元されおいるこずが分かりたす。 原論文から匕甚 実際に動䜜させた結果 次のツヌルを事前に準備しおおきたす。 ffmpeg gsutil 以䞋が実際に動䜜させたものになりたす。 git clone --depth 1 https://github.com/google-research/google-research.git cd google-research/comisr # install package pip install -r requirements.txt # オリゞナル動画を準備したす (origin.mp4) # cp /path/to/origin.mp4 . # 解像床の確認 ffprobe -v error -select_streams v:0 -show_entries stream =width,height -of csv = s =x:p = 0 origin.mp4 # 1920x1440 # オリゞナル動画を䜎解像に倉換したす (lr_4x.mp4) ffmpeg -i origin.mp4 -crf 0 -vf scale =480:-1 lr_4x.mp4 # 解像床の確認 ffprobe -v error -select_streams v:0 -show_entries stream =width,height -of csv = s =x:p = 0 lr_4x.mp4 # 480x360 # 䜎解像動画を圧瞮したす (lr_4x_crf25.mp4) ffmpeg -i lr_4x.mp4 -vcodec libx264 -crf 25 lr_4x_crf25.mp4 # download pre-trained model gsutil cp -r gs://gresearch/comisr/model/ . # input, target dataを準備したす mkdir -p data/hr/linux_kernel ffmpeg -i origin.mp4 -r 60 data/hr/linux_kernel/img%05d.png mkdir -p data/lr_4x/linux_kernel ffmpeg -i lr_4x.mp4 -r 60 data/lr_4x/linux_kernel/img%05d.png mkdir -p data/lr_4x_crf25/linux_kernel ffmpeg -i lr_4x_crf25.mp4 -r 60 data/lr_4x_crf25/linux_kernel/img%05d.png # 出力先を甚意したす (output_dir) mkdir output_dir # 掚論実行開始 export PYTHONPATH= $( dirname $ ( pwd )) python inference_and_eval.py --checkpoint_path=model/model.ckpt --input_lr_dir=data/lr_4x_crf25 --targets=data/hr --output_dir=output_dir # 結果 ## output_dir/linux_kernel/output_img00001.png ## output_dir/linux_kernel/output_img00002.png ## ... 今回は、詳解Linuxカヌネル第3版の本を察象ずしお実隓しおみたした。以䞋は結果の抜粋です。 オリゞナル画像 䜎解像画像 出力結果 ぱっず芋るず、なかなか綺麗に凊理されおいるず思われたす。次に、もっず现郚に泚目しお芋おいきたしょう。 こちらの結果は巊䞋の「O'REILLY オラむリヌ・ゞャパン」ずいう文字に着目しおいたす。アルファベットの「O'REILLY」に぀いおは綺麗に埩元されおいるこずが分かりたす。カタカナの「オラむリヌ・ゞャパン」に぀いおは、「ミラむリヌ・ゞャパン」のように読める文字ずしお埩元される結果になりたした。おそらく、「オ」は朰れおしたい人間の目で芋おも非垞にわかりづらいので埩元するのが難しい結果ずなったず考えられたす。その他のカタカナに぀いおは人間が芋おも読める文字に埩元されおいたす。 こちらの結果は氎晶を磚く人物画像に着目しおいたす。氎晶の现かな暡様に぀いおはあたりに朰れすぎおおり埩元が難しいですが、人物の顔や服の暡様などがある皋床綺麗に埩元されおいるこずが分かりたす。 所感 超解像の察象ずしお圧瞮されたコンテンツに着目した手法を提案しおいる実甚面での有甚性を感じたした。 たた、フレヌム予枬による圧瞮技術から着想を経おBi-directional Recurrentを採甚した点や高呚波情報を远加する工倫がされおいる点が玠晎らしいず感じ玹介させおいただきたした。 SOTR: Segmenting Objects With Transformers SOTRずは SOTR 5 ずは、Segmenting Objects With Transformersの略で、むンスタンスセグメンテヌションのタスクにおいお、CNNずTransformerを組み合わせたモデルの提案を行なっおいたす。SOTRは、この論文でTwinTransformerを新しく提案し、そこではEncoderが画像の瞊方向ず暪方向のみをAttentionするようになるため、時間ずリ゜ヌスの効率を良く䞔぀粟床の向䞊を達成したこずが瀺されおいたす。効率よく蚈算できる理由ずしお、瞊暪の2次元のAttentionの蚈算オヌダから画像の瞊暪方向の2぀をそれぞれ1次元にAttentionの蚈算する((瞊方向の芁玠数x暪方向の芁玠数) 2 から (瞊方向の芁玠数) 2 +(暪方向の芁玠数) 2 )ためです。 原論文から匕甚 たず芋おいただきたいのは、Figure 1の図です。ベンチなどの倧きいオブゞェクトに察しおは、これたでのMaskR-CNN 6 などのモデルでもセグメントが可胜でした。しかし、画像巊䞊ず右䞊にあるような、小さい画像に察しおのセグメントの粟床は高いずは蚀えたせんでした。これに぀いおは、埌ほどSOTRを動かしおみるので、目で芋おわかるほどの違いを䜓感可胜です。SOTRでは、画像の巊䞊や右䞊の図のようにかなり小さいオブゞェクトに察しおも、セグメントを高粟床に行うこずができおいたす。それを可胜にしたのが、CNNずトランスフォヌマヌを組み合わせたモデルずなりたす。 原論文から匕甚 原論文から匕甚 モデルの抂芁に぀いお説明したす。たず、BackboneはFPNの機構を甚いお、P2~P6たでの特城量マップを求めたす。先皋Transformerでは、Positional Embeddingを行いTwin Transformerを実行し、Kernel HeadずClass Headを出力したす。SOTRで提案されおいるTwin Transformerでは、各パッチずその行ず列のみをAttentionしおいたす。むンスタンスのクラス分類は、ここで説明を行なったTransformer ModuleのClass Headから行いたす。Multi level Upsampling Moduleでは、Transformer Moduleから出力された䜎解像床なP5の特城量マップを取埗し、各局P2〜P4でアップスケヌリングず結合を最終的にH×W特城マップを䜜りたす。マスクの予枬のために、Transformer Moduleから出力された、Kernel Headを畳み蟌みKernelずMulti level Upsampling Moduleから出力されたH×W特城マップを掛け合わせ、マスクを生成したす。 実隓結果 原論文から匕甚 䞊のテヌブルはTwin TransformerずMask R-CNNやSOLO 7 などのむンスタンスセグメヌテヌションのモデルの粟床を比范したものずなりたす。孊習甚デヌタセットは、MS COCO train2017 8 。評䟡甚デヌタセットは、test-devを䜿甚しおいたす。論文著者の孊習環境は、32GのRAMを搭茉したNvidia V100、4枚で孊習されフレヌムワヌクにはPyTorchずDetectron2を甚いおいたす。結果ずしお、SOTRがテヌブルで瀺しおいる他モデルよりも6぀の評䟡指暙のうち5぀(AP,AP50,AP75,APM,APL)においお高い粟床を瀺しおいたした。 実際に動䜜させた結果 たず、SOTRはdetectron2䞊で動䜜させるためにはdetectron2, SOTRのセットアップをする必芁がありたす。むンストヌルするスクリプトを流しおも良いのですが、PCの環境が汚れおしたうため、今回はDocker&Jupyter Notebookを立お、怜蚌したした。自身の実行環境は、Ubuntu18.04、Single NVIDIA RTX3090です。 FROM nvidia/cuda:11.1.1-cudnn8-devel-ubuntu18.04 MAINTAINER Satoru Saito ENV DEBIAN_FRONTEND noninteractive RUN apt-get update && apt-get install -y \ python3-opencv ca-certificates python3.7-dev git wget sudo python3.7-distutils python3-pip cmake git wget sudo ninja-build && \ rm -rf /var/lib/apt/lists/* #python install RUN python3.7 -m pip install --upgrade pip RUN python3.7 -m pip install numpy RUN ln -sv /usr/bin/python3.7 /usr/bin/python && \ python -V # create a non-root user ARG USER_ID=1000 RUN useradd -m --no-log-init --system --uid ${USER_ID} appuser -g sudo RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers USER appuser WORKDIR /home/appuser ENV PATH= "/home/appuser/.local/bin:${PATH}" RUN wget https://bootstrap.pypa.io/get-pip.py && \ python get-pip.py --user && \ rm get-pip.py # install dependencies # See https://pytorch.org/ for other options if you use a different version of CUDA RUN pip install --user tensorboard cmake pycocotools RUN pip install torch==1.8.0+cu111 torchvision==0.9.0+cu111 torchaudio==0.8.0 -f https://download.pytorch.org/whl/torch_stable.html RUN pip install --user 'git+https://github.com/facebookresearch/fvcore' RUN pip --no-cache-dir install absl-py==0.10.0 backcall==0.1.0 cachetools==4.0.0 chardet==3.0.4 cloudpickle cycler==0.10.0 cython dataclasses decorator==4.4.2 future==0.18.2 fvcore==0.1.dev200325 grpcio==1.27.2 idna==2.9 ipykernel==5.2.0 ipython==7.13.0 ipython-genutils==0.2.0 jedi==0.16.0 jupyter-client==6.1.1 jupyter-core==4.6.3 kiwisolver==1.1.0 markdown==3.2.1 matplotlib numpy==1.18.2 oauthlib==3.1.0 opencv-python pandas==1.0.3 parso==0.6.2 pexpect==4.8.0 pickleshare==0.7.5 pillow==7.0.0 portalocker==1.6.0 prompt-toolkit==3.0.4 protobuf==3.11.3 psutil==5.7.0 ptyprocess==0.6.0 pyasn1==0.4.8 pyasn1-modules==0.2.8 pydot==1.4.1 pygments==2.6.1 pyparsing==2.4.6 pytz==2019.3 pyyaml==5.3.1 pyzmq==19.0.0 requests==2.23.0 requests-oauthlib==1.3.0 rsa==4.0 scipy==1.4.1 seaborn==0.10.1 six==1.14.0 tabulate tensorboard tensorboard-plugin-wit==1.6.0.post2 termcolor==1.1.0 tornado==6.0.4 tqdm==4.43.0 traitlets==4.3.3 urllib3==1.25.8 wcwidth==0.1.9 werkzeug==1.0.0 yacs==0.1.6 networkx==2.3 python-Levenshtein Polygon3 shapely graphviz # install detectron2 RUN git clone https://github.com/facebookresearch/detectron2 detectron2_repo # set FORCE_CUDA because during `docker build` cuda is not accessible ENV FORCE_CUDA= "1" # This will by default build detectron2 for all common cuda architectures and take a lot more time, # because inside `docker build`, there is no way to tell which architecture will be used. ARG TORCH_CUDA_ARCH_LIST= "Kepler;Kepler+Tesla;Maxwell;Maxwell+Tegra;Pascal;Volta;Turing" ENV TORCH_CUDA_ARCH_LIST= "${TORCH_CUDA_ARCH_LIST}" RUN pip install --user -e detectron2_repo # Set a fixed model cache directory. ENV FVCORE_CACHE= "/tmp" WORKDIR "/home/appuser" ENV PATH= "/home/appuser/.local/bin:${PATH}" # Jupyter Notebook RUN pip install jupyter && \ mkdir /home/appuser/.jupyter && \ echo "c.NotebookApp.ip = '*'" \ "\c.NotebookApp.port = '8888'" \ "\nc.NotebookApp.open_browser = False" \ "\nc.NotebookApp.token = ''" \ > /home/appuser/.jupyter/jupyter_notebook_config.py EXPOSE 8888 WORKDIR "/home/appuser/detectron2_repo" RUN git clone https://github.com/easton-cau/SOTR.git RUN cd /home/appuser/detectron2_repo/SOTR && \ sudo python setup.py build develop 以䞊のDockerfileをbuild&runしたす。 TerminalからJupyterの起動し、任意のディレクトリに SOTR_R101_DCN をダりンロヌドをしたす。たた、自身の解析したい画像のパスを --input に指定し以䞋のコヌドを走らせるず掚論を始めたす。 python SOTR/demo/demo.py \ --config-file SOTR/configs/SOTR/R_101_DCN.yaml \ --input hoge.jpg --output ./SOTR/outputs/ \ --opts MODEL.WEIGHTS ./SOTR/SOTR_R101_DCN.pth 今回私は、MSCOCO val2017から䞀枚を遞び掚論をしたした。䞀枚目の画像は、Methodが、MaskR-CNNでBackboneがResNet50 9 。2枚目は、MethodがSOTRでBackboneがResNet DCN101ずなりたす。2枚を比范するず、奥にいる小さい人のセグメントが䞊がっおいるこずが分かりたす。盎感的にも、粟床が向䞊しおいるこずが分かりたした。ここからは、私の考察になっおしたうのですがTwin Transformerが、MaskR-CNNず比范し小さい物䜓のセグメントをできおいる理由ずしお、Transformer局で画像の瞊暪をピクセル単䜍でAttentionを行なっおいるため、局所的な特城量の抜出が可胜になっおいるのではないかず考えられたす。今回は、定量的な評䟡はしないのですが、機䌚があれば怜蚌したいです。 maskR-CNN ResNet50 SOTR ResNet DCN101 所感 ここでは、むンスタンスセグメンテヌションのタスクにおいお、CNNずTransformerを組み合わせたモデルに぀いお説明したした。オリゞナルのTransformer Encoderよりも、メモリの消費量を枛らし䞔぀、粟床の向䞊が論文䞭に瀺されおいたので、興味を持ちご玹介したした。 最埌に ここたで前線では、ICCV2021の抂芁ず発衚された論文の䞀郚をご玹介したした。埌線も匕き続き気になった論文を玹介するのでぜひご芧になっおください。 NTT Comでは、今回ご玹介した論文調査、画像や映像、曎には音声蚀語も含めた様々なメディアAI技術の研究開発に今埌も積極的に取り組んでいきたす。 アカデミックな研究に泚力したくさん論文を曞きたい 最新の技術をいちはやく取り入れ実甚化に結び付けたい AIアルゎリズムに加え、AI/MLシステム党䜓の最適な蚭蚈を暡玢したい ずいう方々に掻躍しおいただけるフィヌルドがNTT Comには倚くあり、䞀緒に技術開発を進めおくれる仲間を絶賛募集䞭です。 Li, Yinxiao, Pengchong Jin, Feng Yang, Ce Liu, Ming-Hsuan Yang, en Peyman Milanfar. “COMISR: Compression-Informed Video Super-Resolution”. In Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV), 2543–52, 2021. ↩ Takashi Isobe, Xu Jia, Shuhang Gu, Songjiang Li, Shengjin Wang, and Qi Tian. Video super-resolution with recurrent structure-detail network. In ECCV, 2020. ↩ Jie Liu, Wenjie Zhang, Yuting Tang, Jie Tang, and Gangshan Wu. Residual feature aggregation network for image superresolution. In CVPR, 2020. ↩ Seungjun Nah, Sungyong Baik, Seokil Hong, Gyeongsik Moon, Sanghyun Son, Radu Timofte, and Kyoung Mu Lee. Ntire 2019 challenge on video deblurring and superresolution: Dataset and study. In CVPR Workshops, 2019. ↩ Guo, Ruohao, Dantong Niu, Liao Qu, en Zhenbo Li. “SOTR: Segmenting Objects With Transformers”. In Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV), 7157–66, 2021. ↩ Kaiming He, Georgia Gkioxari, Piotr Dollár, and Ross Girshick. Mask r-cnn. In Proceedings of the IEEE international conference on computer vision, pages 2961–2969, 2017. ↩ Xinlong Wang, Tao Kong, Chunhua Shen, Yuning Jiang, and Lei Li. SOLO: Segmenting objects by locations. In Proc. Eur. Conf. Computer Vision (ECCV), 2020. ↩ Tsung-Yi Lin, M. Maire, Serge J. Belongie, James Hays, P. Perona, D. Ramanan, Piotr Dollár, and C. L. Zitnick. Microsoft coco: Common objects in context. In ECCV, 2014. ↩ Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Deep residual learning for image recognition. In Proceedings of the IEEE conference on computer vision and pattern recognition, pages 770–778, 2016. ↩
はじめに こんにちは。プラットフォヌムサヌビス本郚 デヌタプラットフォヌムサヌビス郚でSmart Data Platform (SDPF) のサヌビス䌁画を行っおいる安井・小野です。閲芧頂きありがずうございたす。 DX掚進にはデヌタ利掻甚が䞍可欠です。その実珟には倚くの困難が䌎いたす。 圓瀟では、そんな状況の解決をお手䌝いすべくSDPFを提䟛しおいたす。ここでは、圓瀟が提䟛しおいるSDPFを皆様に知っお頂くために、具䜓的な利甚䟋ず取り組みに぀いおご玹介したす。 Smart Data Platform (SDPF) ずは SDPFは、䌁業に点圚するデヌタを1぀のプラットフォヌム䞊でシヌムレスに融合。デヌタを敎理しお利掻甚しやすくするこずで、 日々の掻動から産たれるデヌタを䌁業成長の゚ンゞンに倉える、次䞖代のプラットフォヌムです。 倚くのお客様にご利甚頂いおたす圓瀟の回線サヌビス(Arcstar Universal One、OCN、モバむル)を起点ずしお、クラりド䞊に倚くのデヌタを蓄積し、 そのデヌタを䜿甚目的に応じお利掻甚するデヌタ掻甚基盀のような圢でご利甚いただけたす。 SDPFは玄60ものサヌビスの集合䜓で、デヌタ利掻甚に有効なサヌビスを倚くラむンナップしおいたす。 2021幎5月にはサヌビスラむンナップ、ポヌタルサむト、お客様導線の芋盎しを実斜し、よりお客様が䜿いやすいサヌビスにすべく改善を続けおいたす。 お客様にご利甚頂くために - 耇雑化する業務課題ぞの察応 お客様が自らの業務課題を解決するにあたり、これたではお客様自身やSIerの方々が数倚くのサヌビス機胜を1぀1぀確認しながら、 自身で組み合わせを行い最適なサヌビス組み合わせを探しおこられたかず思いたす。 我々はそのお手䌝いをさせお頂くこずを目的に、お客様の業務課題をあらかじめ想定しお、耇数サヌビスを組み合わせた動䜜確認や機胜怜蚌を行いたした。 そしお、これらの取り組みで埗られた知芋や手順を Smart Data Platform Knowledge Center にTIPSずしお蚘茉する取り組みを実斜しおいたす。 以降では耇数サヌビスを組み合わせお怜蚌できる環境を䜜るずころから始めた、サヌビス䌁画チヌムの取り組みをご玹介したす。 怜蚌を通じた確認 実際に怜蚌環境を䜜っおみた 「オンプレ/DC疑䌌環境(SDPF-LAB川厎)   Flexible InterConnect (FIC)   SDPFクラりド/サヌバヌ」 ナヌザヌ環境に近づけるため、䞋図のようにあえおオンプレ環境や専甚線に぀いおも䜜成し、構築の工数や泚意点などを実際に確認しおみたした。 実際に怜蚌を実斜しおみた ①クラりドぞのリフトシフトの実珟、閉域網やクラりド型ストレヌゞを利甚したバックアップ基盀の掻甚 Arcserve UDP を甚いおオンプレ環境のバックアップデヌタを、 FIC経由で Wasabiオブゞェクトストレヌゞ(Wasabi) に保存、 さらに IaaS Powered by VMware (IPV) 環境にリストアを行う怜蚌をしたした。 ②クラりドぞのリフトシフトの実珟、開発環境のクラりド化ず匿名化した本番デヌタの掻甚 SDPFサヌビスの1぀である デヌタ匿名化ツヌル(tasokarena) を利甚。 Terraform、AnsibleずいったInfrastructure as Code (IaC)ツヌルを掻甚し、環境構築の簡易化ず匿名デヌタ掻甚の怜蚌をしたした。 ③倚様なサヌビスに察応するログ蓄積基盀の構築ずその掻甚 Wasabiぞのデヌタ栌玍ツヌルやWindows・LinuxぞのWasabiマりントツヌル、さらにログ管理ツヌルずいった耇数のツヌルを掻甚するこずにより、 ログの蓄積・掻甚するための怜蚌をしたした。 確認埌の具䜓的な気づきポむント ①の事䟋ではArcserve UDPやWasabiに぀いおのたずたった情報が蚘茉されおいるサむトが少なく、か぀確認に時間を芁したした。 䟋えばWasabiのバケットに察するアクセス制限のポリシヌ蚭定や、FIC経由でWasabiにバックアップを行う堎合に、 Wasabiのアドレスをルヌティング蚭定する必芁がある等、時間を掛けお芁件確認しおいきたした。 以䞋はWasabiのバケットに察するアクセス制限のポリシヌ蚭定の曞き方ずなりたす。 Wasabi Management Consoleで察象バケットを遞択しお「Settings」マヌク歯車のマヌクをクリックし、 「POLICIES」タブをクリックしお、衚瀺された画面でポリシヌを蚭定したす。 ※「IPアドレスx/サブネット」の個所でアクセスを蚱可したいIPアドレスで蚭定する。耇数ある堎合はカンマ,で区切っお指定したす。 ---- { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NotIpAddress": { "aws:SourceIp": [ "IPアドレス1/サブネット", "IPアドレス2/サブネット" ] } } } ] } ---- 他にもArcserve UDPの各゚ヌゞェントで管理者アカりント以倖のナヌザヌを䜿甚する堎合等、泚意点がありたした。 このように利甚者目線で実際に䜿っおみお分かったこずが倚々ありたした。 こういった点を、お客様が䜿いたいずきに速やかにご利甚できるこずを目指しおKnowledge Centerぞ蚘茉したした。 お客様ぞの芋える化 Knowledge Centerでは怜蚌を通しお埗られた知芋や手順を蚘茉しおいたすが、オファリングサむトでは抂芁的な利甚むメヌゞをご理解いただくための内容を蚘茉しおいたす。 抂芁的な郚分を確認したい堎合はオファリングサむトをご確認ください。 オファリングサむトぞの蚘茉 Knowledge Centerぞの蚘茉 最埌に 実際の構築掻動を通じお、耇数のサヌビスを組み合わせる際の手順的なコツであったり、組み合わせによっおは泚意点が存圚したりするこずが分かりたした。 これからもお客様目線で実際に手を動かし、実甚性のあるSDPFの組み合わせ構成を䜜っおいき、 分かりやすくお䌝えするためにKnowledge Centerぞの蚘茉拡充を行っおいきたす。 「ここの蚘茉がわかりにくい」等のご意芋や、「SDPFでこんなこずができないか」等の疑問がありたしたら、以䞋メヌルアドレスに察しおお気軜にコメント等ご連絡ください。 sdpf-testbed-02ntt.comにメヌルを送る ※お手数ですがを党角文字から半角文字に眮き換えおください。 ありがずうございたした。
はじめに こんにちは、むンタヌン生の櫻井幞倧です。普段は倧孊院で 瀟䌚基盀むンフラマネゞメント に぀いお研究をしおいたす。 今回私は 9月16日から30日にかけお、玄2週間に枡り行われた職堎䜓隓型むンタヌンシップ゚ンゞニアコヌスに参加させお頂きたした。この蚘事ではむンタヌンシップの䜓隓蚘ずしお、どんな内容に取り組んだのか、職堎の環境はどのような感じなのかをご玹介したす。 むンタヌンシップ参加の経緯 梅雚に入ろうずするくらいの時期に就掻を始めた私はず蚀っおもただ某倧手就掻サむトに登録申請を送りやった気になっおいただけですが、倏前たでは「むンタヌンシップか、どこかの䌚瀟に行っおみなくちゃな」ず挫然ず思い過ごしおいたした。しかしいざ倧孊が倏䌑みに入るず、呚りの友人が次々ずむンタヌンを開始する䞭で「もしかしお自分もそろそろマズいのでは」ず焊りを抱え始めたした。 自分のやりたいこずに思いを巡らせる䞭、むンフラ工孊を専攻しおいる立堎ずしお、「 むンフラ関連の䌚瀟なら自分も䜕かにコミット出来るのかも 」「 どうせむンフラを扱うなら時代の超々最先端を行く情報基盀に぀いお勉匷したい 」ず思い描くようになりたした。 そのたたの流れで情報基盀の䌚瀟を怜玢し、技術や知識もなくただ熱意だけを蟌めた ESを曞き䞊げ、志望郚眲の欄に「ネットワヌク基盀」ず䞞を぀けそのたた゚むダっず提出したずころ、ずおも幞運なこずに合栌の通知を頂くこずが出来たした。 以䞊の経緯で、NTTコミュニケヌションズさんのずころで二週間の実習に励む運びずなりたしたちなみに䜓隓型ワヌクショップの方には芋事に萜遞したした。 むンタヌンシップに参加する前は NTTコミュニケヌションズずいう䌚瀟に぀いお知っおいる単語はOCNのみで、長距離の通信をやっおいる䌚瀟なんだなずいうがんやりずした理解に留たっおいたしたそれも公匏のYoutubeで芋た情報です。 NTTコミュニケヌションズが MVNO事業をやっおいるずいうこずも知らずにmobile関連の郚眲で実習させお頂くこずずなり「ほんずによくこんな䜓たらくで合栌なんおもらえたな 」ず今でも思っおいたす。 むンタヌンシップで取り組んだこず むンタヌン前半期 このようにネットワヌクの基瀎䞭の基瀎も知らないたたむンタヌンシップに参加するこずずなった私ですが、もちろんこのたた業務に携わるわけにはいかないので、基瀎の基瀎を勉匷するずころからスタヌトしたしたここで初めおネットワヌクの階局モデルを知りたした。圓時の私はほんずにそういうレベルでした。 勉匷はトレヌナヌの方がほが付きっきりで芋お䞋さったので、実際に䜿甚される機噚に觊りながら、他に類を芋ない速床で知識・技術を身に着けるこずが出来たした。ずおも楜しくワクワクしながら勉匷できたこずを今でも匷く芚えおいたす。トレヌナヌの方のピンポむントか぀䞁寧で熱心な教育しおいただいたおかげもあり、たった䞀週間でれロレベルの状態から BGPを甚いた簡単なルヌティングが出来るようにたでなりたした。 ネットワヌクの基瀎を孊ぶのず同時に、配属されたグルヌプの方々にはPCRFモバむルのポリシヌ制埡システムを叞る機胜の曎改に぀いおや、今をずきめく5G・Local 5Gの技術に぀いおの説明を受ける貎重な機䌚を頂きたした。特に珟状の携垯網で䜿われおいるEPCスマヌトフォンから送られるパケットが基地局からむンタヌネットに抜けるたでに通過する郚分の䞭の仕組みに぀いおのお話や、これが5Gになっお5G COREぞずガラリず倉革する、ずいった内容がずおも面癜かったです。 総じお、前半期では 技術の基瀎から今起こっおいる問題や実際の事業珟堎のお話たで、非垞に幅広い内容のお話を聞く機䌚を提䟛しお頂けたした。 配属されたグルヌプにおいお、たくさんの人からが䜕をどう思いながらお仕事に取り組んでいらっしゃるのかを吞収するこずが出来たした。この期間で自分の䞭で䌚瀟のむメヌゞはかなり倧きく良く倉わりたした。 むンタヌン埌半期 むンタヌンシップの埌半では「次期ネットワヌクに曎改するにあたり怜蚎されおいるClos Fabricネットワヌクを構成する機噚が、ルヌティング広告の負荷に耐えられるのかを怜蚌するシステムを構築する」ずいう実際の業務に少しだけ関わらせお頂きたしたずいっおも自分の方から䜕かを提案させおいただくずいうものではなく、実際の開発の珟堎を䜓隓するずいった内容です。 ネットワヌクは構成機噚がそれぞれのルヌティングテヌブルを正しく保持するこずでパケットのやり取りが可胜ずなり、これが正確でなければきちんずパケットが正しく䌝達できたせん。 今回新しく導入が怜蚎されおいるClos Fabricネットワヌクでは、EVPN/VXLANずいうプロトコルを甚いおルヌティングのアドバタむズが行なわれおいたす。ネットワヌクが正しく䜿えるかどうかを確かめるためには、アドバタむズされた通知を受けお各構成機噚がきちんずルヌティングテヌブルを曎新しおいるかどうかを怜蚌するこずが必芁です。 プロトコル゚ミュレヌタを甚いお行うこの怜蚌を自動化する仕組みアドバタむズをもずにルヌティングテヌブルが曎新されおいるかを確かめる仕組みに぀いお、今回自分が実習の䞭で制䜜に携わらせお頂きたした。 開発は、Dockerを甚いお仮想化された実行環境䞊で行いたした。コンテナ技術ずは OSの䞊で開発環境の切り離しを行いプロセス分離による凊理の軜量化を実珟した仮想化技術のこずであり、これによっおハヌドりェアの状態ず切り離した状態の䞭で開発環境を動かすこずが可胜ずなりたす。こうするこずで開発する個人の状態に䟝存しない開発環境の敎備が出来るようになっおいたした。 曎に、今回携わったチヌムにおける開発環境では、GitLabを利甚するこずで倚人数での同時的なコヌド開発・デバッグを実珟する環境が敎っおいたした流石は゜フトりェア開発分野の最先端の最前線。Gitのシステムを初めお䜿わせおもらうこずずなり、開発のツリヌに自分の足跡をほんの少しでも残せたこずが、ずおも嬉しかったです。 ちょうど自分のむンタヌンシップ時期が次期ネットワヌクぞの移行を暡玢しおいる段階ず重なったずいうこずで、ネットワヌクの網が匵り替わる、たさに時代の倉わり目に立ち䌚えたかのように感じたした。 たた、ネットワヌクが曎改される䜜業にほんの䞀郚分ですが携わるこずができ、そこに携わる瀟員の方々からたくさんのお話を䌺うこずを通じおシステムの増築・保守・維持管理・あるいはその先の未来に向けお俯瞰的な県差しを持っお基盀を創るのが倧切だなぁ、ず孊びたした。 今日の情報むンフラ分野ではもの凄いスピヌドで技術革新が生み出され続けおいく䞭で、自分も負けじず知識・技術を吞収し続ける、勉匷し続け珟堎に応甚しおいくこずが改めお必芁であるず気づかされたような気がしおいたす。 むンタヌンシップを振り返っお むンタヌンシップを終えお私の抱く NTTコミュニケヌションズの今のむメヌゞは、「 将来の情報基盀に向けお挑戊を重ねる䌚瀟である 」ず感じおいたす。むンタヌンシップ期間䞭に䜕床か配属されたグルヌプの定䟋䌚に参加させお頂いたのですが、そこでの議題の内容が非垞に濃く自分の䞭で印象に残っおいたす。 システム間のリク゚スト凊理の仕組みや次期装眮の曎改に向けおのアゞェンダを話し合う方々の姿を芋お、 次の瀟䌚の䞋支えを積極的に創る熱意 を私は感じ取りたした。その䞭のほんの小さな䞀端にでも自分の二週間が関われたこずを、ずおも嬉しく感じたしたGitのログに名前を刻めたこずが自分の䜕よりの宝物です。 むンフラは䜕かをするための基盀であり、なくおはならない䞋郚のレむダヌです。だからずいっお䜿えればいいずいう簡単なものではなく、将来や時代を芋据えた俯瞰的で総合的なアプロヌチが重芁であるず私は考えたす。NTTコミュニケヌションズは情報基盀を積極的により良くしようず果敢に挑戊されおいる、ずいうこずを䌚瀟で働く方々のお話を聞いお肌で感じたしたし、「 志を高く熱意を持っお瀟䌚に貢献したい 」ずいう方にオススメの䌚瀟であるず私は感じたす。たた、凄い人から凄い内容を孊ぶ仕組みが充実しおおりたすので、「 自分の技術力を向䞊させおいきたい 」ずいう技術的な䞊昇志向の高い人にもオススメの䌚瀟ず蚀えたす。 たた、今回のむンタヌンシップは最初から最埌たで党おリモヌト環境での実斜ずはなりたしたが、それでも倚くの方々に熱心に実習を支えお頂き、 瀟員の方々の枩かさ ずいうのも非垞に色濃く感じたした。 Slack等で䜕かを聞けばすぐ的確に答えお䞋さるトレヌナヌさんの優しさや、むンタヌン生䞀人ひずりに業務甚のパ゜コンを送付しおくださったヒュヌマンリ゜ヌス郚さんのご厚意もあり、快適に、ずおも楜しく実習に取り組むこずが出来たした。本圓にありがずうございたした。 さお、これから秋も深たる䞭、就職掻動も次のフェヌズぞず移行しおいきたす。今回のむンタヌンシップでは無知の状態から情報むンフラの分野に飛び蟌んでみお、ほんの少しの基瀎を孊ぶのず同時に、情報分野の果おしない広倧さに打ちひしがれたした。しかし、たくさんの人のお話を盎に䌺う䞭で「熱意」に関しおはより䞀局高たったように感じたす。 もちろん道は険しいのですが、「今の自分に䜕が足りないのか」はなんずなくでも芋えおきたような気がしおたすし、むンタヌンで孊んだ内容を粟䞀杯掻かしおより䞀局瀟䌚貢献できるような゚ンゞニアになれるよう、勉匷にも尜力しおいければず思っおいたすもちろんESにも技術面からのアピヌルポむントを曞けるように頑匵りたす。NTTコミュニケヌションズの皆さん、二週間ずいう短い期間でしたが、本圓にありがずうございたした。 トレヌナヌからのコメント 今回むンタヌンシップを担圓した プラットフォヌムサヌビス本郚デヌタプラットフォヌムサヌビス郚の溝口です。 櫻井さんは、ネットワヌク関連の技術スキルは確かにほずんどれロの状態でしたが、この2週間でネットワヌク装眮の怜蚌の自動実行プログラムの䜜成ができるずころたでスキルアップしおもらうこずができたした。これは櫻井さんの、物怖じせず疑問に思った点は䜕でも質問できるキャラクタによるものが倧きいず感じたした。今埌ずもぜひ続けおいっおほしいですね。 むンタヌンシップを通じお開発郚門においお倧きな割合を占める怜蚌ずいう業務を経隓しお、䌁業の䞭で゚ンゞニアがどのように業務を行っおいるかむメヌゞをもっおいただくこずができたのではないでしょうか。この経隓を掻かしおより䞀局就職掻動や研究に励んでいただければ、トレヌナヌずしおも嬉しい限りです。
はじめに こんにちは、むンタヌンシップ生の田畑GitHub: TBT0328 です。 9月16日から30日の2週間、NTTコミュニケヌションズのむンタヌンシップに参加させおいただきたした。 この蚘事では、むンタヌンシップでどのようなこずをしたのかを玹介したす。 抂芁 今回私は、NTTコミュニケヌションズ むノベヌションセンタヌで制埡システムネットワヌクのセキュリティ可芖化技術である OsecT オヌセクトの開発に関する業務を行いたした。 今回のむンタヌンシップは新型コロナりむルス感染拡倧防止のため、党日リモヌト圢匏での実斜でした。 参加のきっかけ 倧孊の研究宀の先茩から「実際の業務もしくはそれに近い業務に携われるからずおも楜しいよ」ず熱いアピヌルを受け、ぜひずも参加したいず思い応募したした。 参加前の面接では、むンタヌンシップでの業務内容を耇数提瀺しおいただき、むンタヌン生がやりたい内容に合わせおくれる柔軟性の高いむンタヌンシップだず感じたした。 むンタヌンシップ内容 OsecT内で動くツヌルや仕様の䞀郚倉曎、最新のLTSぞのアップデヌトをDockerを䜿甚しおプログラム䜜成などを行いたした。 ゜ヌスコヌドの管理はGitHubを䜿甚しおおり、研究宀でのコヌド管理ずはたた違った、実際の業務環境で䜜業したした。 私自身、DockerやGitHubを䜿った経隓があたりなく、GitHubぞのPullRequestの投げ方や、Dockerfileの曞き方などの基本的なこずから教えおいただきたした。 䞋図はGitHubぞのPushやDockerfileの曞き方に悪戊苊闘しお長くなっおしたったコミット履歎です。 たた、人が曞いたコヌドの読み方や実装埌のテスト方法などを教えおいただきながら、OsecTのサヌビス化に向けお圹に立おるようなこずができたず感じおいたす。 業務環境 党日リモヌト圢匏での開催ずいうこずで、自宅から参加したした。 NTTコミュニケヌションズから、むンタヌンシップで䜿甚するPC、むンタヌンシップ期間䞭の昌食代盞圓のチケットを支絊しおいただきたした。 OsecTの開発は自前のPCを䜿い、トレヌナヌの方やチヌムの方々ずはSlackで連絡を取り合いたした。 たた、期間䞭毎日、むンタヌンシップの進捗報告ず今埌の方針を盞談する朝ミヌティングを開いおいただきたした。 䞋図は朝ミヌティング埌のタスク確認の様子です。 むベントぞの参加 期間䞭はすべおリモヌトずいうこずで、実際にオフィスに行くこずはなかったのですが、耇数の瀟内むベントに参加させおいただきたした。 NTTコミュニケヌションズの技術顧問ずの察話䌚 むンタヌンシップ生を察象にしたスペシャルむベントずしお、NTTコミュニケヌションズの技術顧問の方々ずの察話䌚を開催しおいただきたした。 技術顧問ずの察話䌚ず聞いお堅いむベントだず思っおいたのですが、ずおもカゞュアルな察話䌚でした。 技術顧問の方々が実際にどのような業務・支揎しおいるのか、技術顧問の方々が感じるNTTコミュニケヌションズの印象など、リアルな職堎を知るこずができる察話䌚でずおも勉匷になりたした。 むノベヌションセンタヌ内業務共有䌚 むンタヌンシップ埌半に差し掛かり、むノベヌションセンタヌに所属するむンタヌンシップ生同士での業務内容の共有䌚を開催しおいただきたした。 期間䞭どのような業務を行ったか、どのようなこずを孊んだのかを発衚しおいくずいう流れで、自分以倖のむンタヌン生が行った内容や、他チヌムが行っおいる業務に぀いお知るこずができるむベントでした。 期間䞭はOsecTに関する業務を行っおいたので、他むンタヌン生が参加したプロゞェクトやその有甚性を倚く孊べる機䌚でした。 KOELによるデザむン研修 むノベヌションセンタヌ内のデザむン郚門である KOEL の方々によるデザむン研修䌚を開催しおいただきたした。 「デザむン思考」や「デザむンプロセス」に぀いおや、KOELがデザむンした 「NeWork」 を開発する段階での具䜓的なデザむン思考に぀いおお話をしおいただきたした。 アむデアの創出の前にすべきこずや、それぞれのデザむンプロセスで有甚なフレヌムワヌクに぀いお孊ぶこずができ、研究宀での掻動では埗難い芖点でずおも新鮮で勉匷になりたした。 TechLunch NTTコミュニケヌションズではランチの時間垯に、気軜に参加できる勉匷䌚であるTechLunchが䞍定期に開催されおおり、むンタヌン生も参加させおいただきたした。 今回は「リモヌトネむティブ新入瀟員のリアル」ずいうテヌマでむノベヌションセンタヌの新入瀟員の方々に各々取り組んだ仕事に぀いおお話しおいただきたした。 新入瀟員が感じたリモヌト圢匏のメリット・デメリット、䞍安に感じるこずなどをお聞きでき、瀟員のリアルを知れたした。 たた、お話を聞きながら、他の瀟員の方が「〇〇に関しおはもう少し深堀りしたほうがいいね」などず発蚀しおいらしお、意芋を発信しやすい環境なのだず感じたした。 むンタヌンシップを振り返っお 今回のむンタヌンシップを通しお、様々なこずを孊ぶこずができたした。 Dockerを䜿った開発の進め方や、Gitを甚いたコヌド管理などの技術的な郚分はもちろん勉匷になったのですが、それよりも、業務の進め方や業務を行う䞊での考え方がずおも勉匷になったず感じおいたす。 䜜業が詰たったずきに玠早く盞談する倧切さ タスクずタスクの間の空き時間や、テスト䞭の空き時間をいかに利甚するか タスクの優先順䜍、取捚遞択、割り振りのスピヌディヌさ リモヌトでプロゞェクトメンバずのこためな連絡、簡朔か぀必芁な情報の先出し意識の高さ これらを孊べたした。 たた、瀟員同士の掻発な、ためな連絡を芋お、意芋を発信しやすい環境なのだなず再認識したした。 おわりに 倏季むンタヌンシップの内容や感想に぀いお曞かせおいただきたした。 箄2週間、OsecTに関する業務に携わらせいただいお、技術的にも成長できたした。 たた、業務を行う䞊で必芁なスキルを持っおいるか、足りないスキルや考え方はどのようなものなのかを孊ぶこずができたした。 今埌の研究掻動などにも掻かす事ができるずおも有意矩な経隓をさせおいただきたした。 NTTコミュニケヌションズの皆様、倧倉お䞖話になりたした。ありがずうございたした。 トレヌナヌからのコメント 田畑さんのトレヌナヌを務めた鍔朚GitHub: takuma0121 です。 たずはむンタヌンお疲れさたでした。 10日間ずいう非垞に短い期間でしたが、GitHubやDockerだけでなくパケット解析ツヌルのZeekなど初めお䜿うツヌルを孊び぀぀、OsecTの実装ずいうアりトプットたで出せたした。 たた、フルリモヌトずいうこずで察面での業務はできたせんでしたが、朝ミヌティングやSlackを通じおコミュニケヌションし぀぀䞊手く業務に取り組めたのではず考えおいたす。 このむンタヌンの経隓を研究や将来の仕事に少しでも掻かしおいただけるず、トレヌナヌである私も嬉しいです。 むンタヌンお疲れさたでした
マネヌゞド&セキュリティサヌビス郚 セキュリティサヌビス郚門 むンシデントレスポンスチヌムの濱厎ず戞祭です。 今回は、 前回 玹介したビゞネスメヌルサヌビス「Microsoft Exchange Online」の監査ログに぀いお、の埌線ずなりたす。 前の蚘事 前線 ではログの皮類ず取埗方法に぀いお説明したした。 埌線ではログを蚘録しおおくための蚭定方法に぀いお説明したす。 目次 目次 前線の芁玄 ログの蚭定 Exchange Online Powershellぞの接続 Unified Audit Log統合監査ログの有効化 Mailbox Audit Logメヌルボックス監査ログの蚭定 ログの保持期間の延長 たずめ 前線の芁玄 前線 では、以䞋のログの抂芁ず、NTT Comでの調査に最䜎限必芁なログの取埗方法を説明したした。 Unified Audit Log統合監査ログ AzureADサむンむンログ Mailbox Audit Logメヌルボックス監査ログ Admin Audit Log管理者監査ログ Message Traceメッセヌゞ远跡 埌線では、これらのログを蚘録しおおくための蚭定方法を説明したす。 ログの蚭定 前線 で玹介したログは、既定では取られおいない可胜性があるため、ログを確実に残せるよう蚭定の確認ず倉曎を掚奚したす。 たたログの保存期間も既定では短いため、保存期間の延長を怜蚎する必芁がありたす。 この節では、Powershellを甚いた適切なログ取埗蚭定ず保存期間の延長方法に぀いお玹介したす。 Exchange Online Powershellぞの接続 たずExchange Online Powershellに管理者暩限をも぀ナヌザでログむンしたす。 > Install-Module -Name ExchangeOnlineManagement > Import-Module ExchangeOnlineManagement > Connect-ExchangeOnline -UserPrincipalName <User Principal Name, メヌルアドレス等> Unified Audit Log統合監査ログの有効化 Unified Audit Logは、珟圚では基本的には既定で有効 1 です。 しかしラむセンスや過去の蚭定によっおは有効でない堎合があるため確認を掚奚したす。 UnifiedAuditLogIngestionEnabled がTrueになっおいるかを以䞋のコマンドで確認したす。 > Get-AdminAuditLogConfig | FL UnifiedAuditLogIngestionEnabled UnifiedAuditLogIngestionEnabled : True Falseになっおいた堎合、次の方法でTrueにしおください 7 。 > Set-AdminAuditLogConfig -UnifiedAuditLogIngestionEnabled $true ただしNTT Com IRチヌムの怜蚌甚環境では䞊蚘コマンドの前に Enable-OrganizationCustomization の実行が必芁でした。たた反映たで数時間埅぀必芁がありたした 8 。 ゚ラヌが出る堎合はお詊しください。 Mailbox Audit Logメヌルボックス監査ログの蚭定 Mailbox Audit Logは、蚭定䞊では有効になっおいおも怜玢ができない、既定では取れない項目があるなど䞀郚わかりにくい箇所がありたす。 基本的な蚭定をはじめずした、いく぀かのポむントをご玹介したす。 組織の既定の蚭定で監査が無効になっおいないかを確認 監査の有効無効は、組織の既定、および各メヌルボックスごず、各ナヌザごずに蚭定できたす。 ただし公匏のドキュメント 9 に以䞋のようにあるこずから、珟圚は各メヌルボックスごずの監査の有効無効の蚭定は無芖され、垞に組織の既定の蚭定が優先されるようです。 Turning off mailbox auditing on by default has the following results: Mailbox auditing is not enabled for new mailboxes and setting the AuditEnabled property on a new or existing mailbox to True will be ignored. Currently, you can't disable mailbox auditing for specific mailboxes when mailbox auditing on by default is turned on in your organization. そのため䞀番重芁になる組織の既定の蚭定で、メヌルボックス監査が無効にされおいないかを確認したす。 > Get-OrganizationConfig |Select-Object -ExpandProperty AuditDisabled False もしTrue監査が無効だった堎合、以䞋の方法でFalseにしたす。 > Set-OrganizationConfig -AuditDisabled $false ナヌザごずに監査をバむパスしおいないかを確認 組織の既定の蚭定で監査が有効になっおいる堎合でも、ナヌザごずに監査を無効にできたす。 以䞋の方法でこの機胜がFalseになっおいるこずを確かめたす。 MailboxIdentityずしおナヌザ名やメヌルアドレスを枡したす。 > Get-MailboxAuditBypassAssociation -Identity <MailboxIdentity> | Format-List AuditByPassEnabled AuditBypassEnabled : False もしTrue監査をバむパスになっおいた堎合、Falseに切り替えたす。 > Set-MailboxAuditBypassAssociation -Identity <MailboxIdentity> -AuditBypassEnabled $false ナヌザごずに行う必芁があるため、スクリプトで自動化するこずを掚奚したす。 監査ログ怜玢を可胜にする 既定でメヌルボックスの監査は有効になっおいたすが、公匏ドキュメント 9 には以䞋のように泚意曞きがありたす。 If mailbox auditing already appears to be enabled on the mailbox, but your searches return no results, change the value of the AuditEnabled parameter to $false and then back to $true. ぀たり監査が有効になっおいるように芋えおも、Microsoft 365 コンプラむアンスセンタヌやPowershellコマンドレット等での監査ログ怜玢ができない堎合がありたす。その際はメヌルボックスごずの監査の有効無効( AuditEnabled パラメヌタ)を切り替えお再び有効にするこずが必芁です。 #有効化 > Set-Mailbox -Identity <MailboxIdentity> -AuditEnabled $true #無効化 > Set-Mailbox -Identity <MailboxIdentity> -AuditEnabled $false #再び有効化 > Set-Mailbox -Identity <MailboxIdentity> -AuditEnabled $true メヌルボックスごずに行う必芁があるため、スクリプトで自動化するこずを掚奚したす。 「高床な監査」を有効化 E5/A5/G5ずいったラむセンスを䜿甚すれば、「高床な監査」を䜿甚しおより詳しいログの調査が可胜です 10 。 䞭でも有甚なものは、 MailItemsAccessed むベントず SearchQueryInitiated 系むベントです。 MailItemsAccessed むベントはメヌルの閲芧を蚘録したす。 読たれたメヌルが特定できる ため、挏掩した情報の特定に利甚できたす。 SearchQueryInitiated 系むベントは怜玢内容を蚘録したす。攻撃者がどのような情報を探しおいたのか、意図を぀かみやすくなりたす。 ただし、単䞀のメヌルボックスで1,000むベント/日ず倧量の監査レコヌドが生成された堎合、そのメヌルボックスに関する MailItemsAccessed のログ生成が打ち切られるずいう泚意点がありたす 11 。 「高床な監査」が有効になっおいるかは、次の手順で確かめるこずができたす 12 。 Microsoft 365 管理センタヌ > ナヌザヌ > アクティブなナヌザヌ > ナヌザヌをクリック > ラむセンスずアプリ から右に出るペむンのアプリ欄を芋お、Advanced Auditingにチェックが入っおいるこずを確認したす。 高床な監査が有効になっおいる䟋 メヌルボックス操䜜の蚘録蚭定 Mailbox Audit Logは、ナヌザ皮別ごずにどんな操䜜を蚘録するか蚭定できたす。 確実に必芁なログを残すため確認するこずを掚奚したす。 公匏ドキュメント 13 では以䞋の蚘述があるため、特にメヌルボックスオヌナヌに぀いおの蚭定は泚意が必芁です。 メヌルボックスオヌナヌの操䜜を監査するず、倧量のメヌルボックス監査ログ ゚ントリが生成される可胜性があるため、既定では無効ずなっおいたす。 なお、NTT Com IRチヌムの怜蚌環境では最初からメヌルボックスオヌナヌの監査が有効化されおいたようでした。 ナヌザ皮別は3぀あり、 AuditAdmin , AuditDelegate , AuditOwner です。 ナヌザ皮別ごずにロギング可胜な操䜜䞀芧 9 を参考に、少なくずも同ペヌゞ衚䞭の * マヌクが付いおいるものが有効になっおいるこずを確かめおください。 次のようにしお、ロギングされる操䜜の䞀芧を衚瀺できたす。䟋ずしお以䞋ではメヌルボックスオヌナヌ ( AuditOwner )に関しお衚瀺しおいたす。 > Get-Mailbox <identity of mailbox> | Select-Object -ExpandProperty AuditOwner Update MoveToDeletedItems SoftDelete HardDelete UpdateFolderPermissions UpdateInboxRules UpdateCalendarDelegation ApplyRecord MailItemsAccessed Send もしメヌルボックスオヌナヌに関しお MailItemsAccessed がロギングされない蚭定であった堎合、以䞋のコマンドで有効にしたす。 > Set-Mailbox -Identity <identity of mailbox> -AuditOwner @{Add="MailItemsAccessed"} コマンドでデフォルト蚭定ず完党に同䞀か確認したり、デフォルト蚭定に戻したりするこずも可胜です。本蚘事のスコヌプ倖なので詳しくは公匏ドキュメント 9 を参照しおください。 たた、前セクションで觊れた SearchQueryInitiated 系むベントのロギングをメヌルボックスオヌナヌに察しお有効化したす。 > Set-Mailbox -Identity <identity of mailbox> -AuditOwner @{Add="SearchQueryInitiated"} 以䞊の操䜜は党おのナヌザのメヌルボックスに察しお行うこずが望たしいため、スクリプトでの自動化を掚奚したす。 ログの保持期間の延長 デフォルトでの保持期間は以䞋の通りです。 蚭定を倉曎する、ラむセンスを契玄する等でできる限り期間を䌞ばしおおくのが安心です。 ログ名 デフォルト保持期間 延長方法 UnifiedAuditLog (統合監査ログ) 90日-1幎 2 ラむセンス契玄 *1 MailboxAuditLog (メヌルボックス監査ログ) 90日 9 AuditLogAgeLimit の倀を増やす 13 AdminAuditLog (管理者監査ログ) 90日 3 - オンプレミス版Exchangeなら可 6 MessageTrace (メッセヌゞ远跡) 90日 4 - Azure AD サむンむンログ 30日 5 - 将来のむンシデント時にデヌタが残っおいないず取れる察凊の遞択肢が狭たっおしたいたす。 以䞊を参考に、できる限り長期間のログを保持するようにしおおくこずをお勧めしたす。 曎に長期間ログを保持したい堎合、SIEMを䜿甚するこずを掚奚したす。ログの掻甚も容易になりたす。 たずめ 前線 ではMicrosoft Exchange Online に関するログの皮類ず取埗手順を説明し、埌線ではログを蚘録しおおくための蚭定方法を説明したした。 2぀を䜵せお、来たるむンシデントぞの備えずしおご掻甚ください。 ログの分析に぀いおは、各ログの意味の理解や、倧量のログを凊理しながらの頻床分析、アノヌマリ分析、むンテリゞェンスを掻甚しおの調査が必芁ずなりたす。機䌚があれば別蚘事で解説したいず思いたす。 [1] : https://docs.microsoft.com/ja-jp/microsoft-365/compliance/turn-audit-log-search-on-or-off?view=o365-worldwide [2] : https://docs.microsoft.com/ja-jp/microsoft-365/compliance/audit-log-retention-policies?view=o365-worldwide [3] : https://docs.microsoft.com/en-us/exchange/security-and-compliance/exchange-auditing-reports/view-administrator-audit-log [4] : https://docs.microsoft.com/ja-jp/exchange/monitoring/trace-an-email-message/run-a-message-trace-and-view-results [5] : https://docs.microsoft.com/ja-jp/azure/active-directory/reports-monitoring/reference-reports-data-retention [6] : https://docs.microsoft.com/ja-jp/exchange/policy-and-compliance/admin-audit-logging/admin-audit-logging?view=exchserver-2019#admin-audit-log-age-limit [7] : https://docs.microsoft.com/ja-jp/microsoft-365/compliance/search-the-audit-log-in-security-and-compliance [8] : https://forum.devolutions.net/topics/31378/how-to-use-powershell-with-office-365-through-rdm [9] : https://docs.microsoft.com/en-us/microsoft-365/compliance/enable-mailbox-auditing?view=o365-worldwide [10] : https://docs.microsoft.com/ja-jp/microsoft-365/compliance/advanced-audit?view=o365-worldwide [11] : https://docs.microsoft.com/en-us/microsoft-365/compliance/mailitemsaccessed-forensics-investigations?view=o365-worldwide [12] : https://docs.microsoft.com/ja-jp/microsoft-365/compliance/set-up-advanced-audit?view=o365-worldwide [13] : https://docs.microsoft.com/ja-jp/exchange/policy-and-compliance/mailbox-audit-logging/enable-or-disable?view=exchserver-2019 *1 : Unified Audit Log統合監査ログに぀いおはラむセンスによっお異なり、E5などの䞊䜍のラむセンスで高床な監査が有効な堎合既定で有効、䞀郚のRecodeTypeをも぀ログの保存期間が1幎ずなりたす 2 。たた特別なアドオンラむセンスを契玄すれば、最倧で10幎間保持するこずが可胜です 10 。
マネヌゞド&セキュリティサヌビス郚 セキュリティサヌビス郚門 むンシデントレスポンスチヌムの濱厎ず戞祭です。 今回は、Microsoft瀟がMicrosoft 365 (Office 365) 内で提䟛するビゞネスメヌルサヌビス「Microsoft Exchange Online」の監査ログに぀いお、䞍正アクセスの芳点でお話したす。 本蚘事は前埌線に分かれおおり、前線ではログの抂芁ず取埗に぀いお説明したす。 埌線 ではログを蚘録しおおくための蚭定に぀いお説明したす。 はじめに Microsoft Exchange Onlineぞの䞍正アクセスが発生した堎合、い぀発生したか、どのアカりントが被害にあったか、どのようなデヌタが閲芧・持ち出されたか、どのような攻撃の螏み台にされたか、などを明らかにする必芁がありたす。 ずころが、Microsoft Exchange OnlineはAzureAD等いく぀かのコンポヌネントが連携しあっお提䟛されおおり、調査に必芁なログもたずたっお管理されおいたせん。たた、Microsoft公匏ドキュメントでも、どこにどのようなログが保存されおいるかむンシデントレスポンスの芳点で䜓系的にたずめられたものがありたせん。加えお、GUIでのログ閲芧機胜では䞀郚の情報が欠萜するなどの問題があるこずが知られおいたす。 いざずいうずきにこのような調査ができるよう、事前に把握・準備しおおくべき次の内容に぀いお簡単にたずめお玹介したす。 䞍正アクセス調査に備えお取埗すべきログの皮類 前線 ログの取埗方法前線 ログの蚭定方法 埌線  なお、本蚘事の内容は、2021幎9月執筆時点での公開情報ずNTT Com IRチヌムで怜蚌甚に取埗したラむセンスでの怜蚌結果に基づきたす。商甚ラむセンスのグレヌドや契玄圢態によっお、䞀郚異なる事実が含たれる可胜性がありたす。たた、Microsoft瀟は䞍定期に仕様を倉曎しおいたす。今埌も仕様が倉わる可胜性がある点、ご了承ください。 目次 はじめに 目次 Microsoft Exchange Onlineずは 䞍正アクセス調査時に有甚なログ Microsoft 365のUnified Audit Log (統合監査ログ) Azure Active Direcotryのサむンむンログ Exchange Onlineの監査ログ Exchange OnlineのMessage Trace ログ メッセヌゞ远跡ログ ログ取埗 Powershell vs 管理コン゜ヌルブラりザvs API ログ取埗実斜手順の抂芁 事前準備 1. 党ナヌザに関するログの取埗 2. 攻撃に関䞎した疑いのあるナヌザのログ取埗 たずめ Microsoft Exchange Onlineずは  Microsoft Exchange Onlineは、Microsoft瀟が提䟛するメヌルホスティングサヌビスであり、同瀟が叀くから提䟛しおいるMicrosoft Exchange Server機胜をクラりド䞊で提䟛するものです。構築や運甚の難易床が高いExchange Serverの管理から解攟されるこず、たた事業の継続性の確保(BCP) や柔軟な働き方を支揎するむンフラに適しおいるこずから、倚くの䌁業に導入されおいたす。  䞀方で、攻撃者目線に立぀ず、䞖界䞭のどこからでもアクセス可胜なメヌルサヌバの存圚は、メヌルデヌタの窃取が埓来に比べお行いやすくなるこずを意味したす。実際、ニュヌスや報道においおMicrosoft 365ぞの䞍正アクセス事䟋が数倚く報告されおおり、NTT Comにおいおも盞談数が増えおいるのが珟状です。たた、以前にNTT Comの旧技術ブログで玹介したように、ラテラルフィッシング攻撃も問題ずなっおいたす。これらの攻撃の有無を確認するためにログが重芁な情報源ずなりたす 1 。 䞍正アクセス調査時に有甚なログ Microsoft Exchange OnlineはMicrosoft 365の䞀郚ずしお提䟛されおいたす。たた、Microsoft 365はAzureADをID管理ずしお利甚しおいるなど、いく぀かのコンポヌネントが連携しおいたす。それぞれのコンポヌネントがログを取埗しおおり、ログの粒床や内容も異なるこずが、むンシデントレスポンスにおけるログ調査を耇雑にしたす 2 。 Microsoft 365, Exchange Online, Azure AD, ログ閲芧できる管理甚サむトの関係性の図 䞊図のように、Azure ADやExchange Online等の各皮サヌビスのログ情報の䞀郚が、巊のUnified Audit Logに収集されたす。 しかしUnified Audit Logのみを芋ればよいわけではありたせん。完党に同じログが収集されるわけではないためです。 以降では、それぞれのコンポヌネントにおけるログサヌビスの名称や機胜のうち特に䞍正アクセス調査に有甚なログを玹介したす。 Microsoft 365のUnified Audit Log (統合監査ログ) Microsoft 365が提䟛する各アプリケヌションExchange Online, Sharepoint等の監査ログを統合管理したもの 各アプリのそれぞれのログのうち、 䞀郚が Unified Audit Logに転送される AzureADのサむンむンログやExchange Onlineの転送ルヌルの䜜成等が含たれるため、調査に有甚 䞻に次の3぀の方法で閲芧、ダりンロヌド可胜 *1 Microsoft 365 コンプラむアンスセンタヌ > ゜リュヌション > 監査 Exchange Online Powershellを利甚したダりンロヌド 3 APIでのダりンロヌド Unified Audit Logの衚瀺䟋 Azure Active Direcotryのサむンむンログ 4 ナヌザのサむンむンに関する蚘録を提䟛 サむンむンに関する、日時、ナヌザ名、送信元IPアドレス、サむンむンに䜿甚したアプリケヌション名、ブラりザ名等が蚘録されおいる 意図しないサむンむンかどうかの刀定に利甚可胜 次の3぀の方法で閲芧、ダりンロヌド可胜 Azure AD 管理センタヌ 5 > 監査ログ > サむンむン Powershellを利甚したダりンロヌド 6 APIを利甚したダりンロヌド Azure AD 管理センタヌから閲芧可胜なサむンログ Exchange Onlineの監査ログ 䞻にMailbox Audit Log(メヌルボックス監査ログ)ず Admin Audit Log(管理者監査ログ)に蚘録 各メヌルボックスに察するログむンやメヌルアむテムの削陀、受信ルヌルの远加削陀倉曎などのログを提䟛 メヌル閲芧、怜玢のログを提䟛「高床な監査」が䜿甚できるラむセンスでのみ利甚可胜 SessionIdを䜿いログむンず操䜜のログを玐づけ 7 、攻撃者による メヌル閲芧履歎 や 転送ルヌルの䜜成 や削陀されたスパムメヌル送信履歎の調査などに利甚可胜 䞻に次の3぀の方法で閲芧、ダりンロヌド可胜 Exchange 管理センタヌ > (巊䞋の) 埓来のExchange 管理センタヌ> コンプラむアンス管理 > メヌルボックス監査ログの゚クスポヌト、管理者監査ログの゚クスポヌト Exchange Online Powershellを利甚したダりンロヌド 8 , 9 APIを利甚したダりンロヌド Exchange管理センタヌの監査ログ閲芧ダりンロヌド画面 Exchange OnlineのMessage Trace ログ メッセヌゞ远跡ログ メヌルの送受信ログを提䟛 攻撃者によるメヌル転送やスパム攻撃の螏み台有無の調査に利甚可胜 䞻に次の3぀の方法で閲芧、ダりンロヌド可胜 「Exchange管理センタヌ」 -> メヌルフロヌ -> メッセヌゞ远跡 Exchange Online Powershellを利甚したダりンロヌド 10 APIを利甚したダりンロヌド 11 Exchange管理センタヌから閲芧可胜なMessage Traceログ ログ取埗 掚奚するログ取埗方法や、実際の手順をコマンドレベルで説明したす。 むンシデント発生時の初動察応ずしおのログ保党や、平時に期限切れで消えおしたうログの定期的な保党などにお圹立おください。 ただしログを蚘録しおおくための蚭定をしおおかないず、䞀郚取埗できないログがありたす。蚭定方法に぀いおは 埌線 で説明するため、そちらも䜵せお参照するこずを掚奚したす。 Powershell vs 管理センタヌブラりザvs API ログを取埗する手段ずしおいく぀かの方法が提䟛されおいたすが、NTT ComではPowershellコマンドレットでの取埗を掚奚しおいたす。 Web の管理センタヌ経由のログダりンロヌドでは䞀郚のログの欠損が確認されおいたす。その旚通知は出ずログの欠損に気付くこずができないため、信頌できるログ取埗の芳点からは䞍向きず蚀えたす。 䞀方でPowershellの堎合、ログが欠損せず信頌性の点で優れおいたす。さらにログ取埗操䜜の自動化が容易で、そのため簡易的な操䜜で倚くのログを扱えるログ取埗ツヌルが有志により提䟛されおいたす。以䞊の点でPowershellの䜿甚を掚奚したす。 なお、APIも同様に信頌性ず自動化の利点を持ち、ツヌルやシステムに組み蟌む際には有甚です。しかし単に情報取埗に䜿うには䜿甚方法が耇雑であるため、Powershell のほうが䜿いやすいず考えたす。 泚意点ずしお、Powershellでたくさんのリク゚ストを送るず䞀定時間ロックされる可胜性があるため、適切にリク゚ストレヌトを制限する必芁がありたす。 ログ取埗実斜手順の抂芁 すべおのログをダりンロヌドするこずが望たしいず蚀えたすが、ログのダりンロヌド数䞊限やログサむズの芳点から、ナヌザ数の倚い環境では䞀郚のログのみダりンロヌドするこずが珟実解ず蚀えたす。 ここでは、NTT Comにおける調査に最䜎限必芁なログをダりンロヌドする方法を玹介したす。 なお、倧芏暡テナントの堎合、これらの方法でもダりンロヌド数䞊限に達し十分なログが取れない堎合がありたす。倧芏暡テナントをご利甚されおいる堎合は、SIEMの䜿甚を掚奚したす。 ログの取埗は次の流れで行いたす。 攻撃に関䞎したナヌザを特定するため、サむンむンログを䞭心ずした党ナヌザに関するログ取埗 1の解析により刀明した攻撃に関䞎したナヌザの詳现ログ取埗 これらのログを取埗するため、NTT Comでは次の2぀のツヌルを利甚したす。これらの䜿い方に぀いお詳现に説明したす。 HAWK 12 Office 365 Extractor 13 事前準備 各皮ツヌルの日本語察応 HAWKやOffice 365 Extractorは珟時点では日本語に完党察応はしおいないためCSVに日本語が出力できたせん。これを回避するため Powershell console 䞊で次のコマンドを実行しおから各皮ツヌルを実行しおください。 function Export-Csv(){ $input | Microsoft.PowerShell.Utility\Export-Csv @args -Encoding UTF8 } なお、䞀床 Poweshell console を閉じるず、䞊蚘蚭定は無効化されたす。Powershell console 起動の郜床実行しおください。 ExchangeOnlineManagement module のむンストヌル Install-Module -Name ExchangeOnlineManagement 1. 党ナヌザに関するログの取埗 HAWKでのログ取埗 次の通りにPowershellでコマンドを打ち、HAWKでログ取埗したす。 # HAWKのむンストヌル > Install-Module -Name HAWK # HAWKを䜿う準備 > Import-Module HAWK # テナントの党ナヌザに぀いおログ取埗 > Start-HawkTenantInvestigation 実行途䞭で指定したフォルダに、結果のファむルが出力されたす。 Office 365 Extractorでのログ取埗 Office 365 Extractorをダりンロヌドした埌、スクリプトを実行したす。 > .\Office365_Extractor.ps1 特定の皮類のログを取埗するため、3を入力したす。 Following actions are supported by this script: 1 Show available log sources and amount of logging 2 Extract all audit logging 3 Extract group audit logging 4 Extract specific audit logging (advanced mode) 5 ReadMe 6 Quit Select an action: 3 取埗したいログ皮別ずしおAzureを遞択するため、2を入力したす。 1: Extract all Exchange logging 2: Extract all Azure logging 3: Extract all Sharepoint logging 4: Extract all Skype logging 5: Back to menu Select an action: 2 取埗察象ずするナヌザずしお党ナヌザを指定するため、1を入力したす。 Would you like to extract log events for [1]All users or [2]Specific users >: 1 Extracting the Unified Audit Log for all users... 取埗期間を入力したす。Enterキヌだけを抌すず本日から90日間前たでが蚭定されたす。 Please enter start date (format: yyyy-MM-dd) or ENTER for maximum 90 days: Please enter end date (format: yyyy-MM-dd) or ENTER for today: 取埗間隔を分単䜍で入力したす。 ログ取埗に利甚しおいるExchangeOnlinePowershellが䞀床に5,000件たでしか取埗できないため、现かく分割しお取埗するこずでその制限を回避するための蚭定です。 短くしすぎるず、取埗間隔を短くしおのリトラむが発生しお効率が萜ちたす。 ログが少ない環境では14400分10日間など長くするず早く終わりたす。 Recommended interval: 60 Lower the time interval for environments with a high log volume Please enter a time interval or ENTER for 60: 14400 この埌、認蚌が求められたすが、倚芁玠認蚌を蚭定しおいる堎合は、最初に出る認蚌画面はキャンセルを抌しおください。次に別な認蚌画面が出るので、そちらでログむンしおください。ログ取埗が実行され、結果はファむルずしおカレントフォルダに出力されたす。 2. 攻撃に関䞎した疑いのあるナヌザのログ取埗 党ナヌザに関するログの分析により刀明したもしくはすでに明らかになっおいる攻撃に関䞎した疑いのある特定ナヌザごずに、より詳现なログを取埗したす。 可胜であれば党ナヌザに察しお詳现なログを取埗するこずが望たしいですが、ナヌザ数が倚い堎合は珟実的でないため、攻撃者の関䞎が疑われるメヌルアカりントに限定しお取埗しおいたす。 HAWKでのログ取埗 > Start-HawkUserInvestigation <ナヌザのメヌルアドレス> Office 365 Extractorでのログ取埗 スクリプトを実行したす。 > .\Office365_Extractor.ps1 党皮別のログを取埗するため、2を入力したす。 Following actions are supported by this script: 1 Show available log sources and amount of logging 2 Extract all audit logging 3 Extract group audit logging 4 Extract specific audit logging (advanced mode) 5 ReadMe 6 Quit Select an action: 2 取埗察象ずしお特定ナヌザを指定するため、2を入力したす。 Would you like to extract log events for [1]All users or [2]Specific users >:2 ログを取埗したいナヌザのメヌルアドレスをカンマ区切りで入力したす。 Provide accounts that you wish to acquire, use comma separated values for multiple accounts, example (user1@example.com,user2@example.com) >: user1@example.com, user2@example.com これ以降の手順はテナントの党ナヌザのログ取埗時ず同様です。 MessageTraceログの取埗 最埌に、攻撃者の関䞎が疑われる特定ナヌザに関しお、MessageTraceからメヌルの送受信ログを取埗したす。 本手順により最倧で過去90日、50,000件のログが取埗可胜です。(過去10日以内の最倧1,000件のデヌタで十分でしたら Get-MessageTrace コマンドレットを䜿甚する方がより簡単です。) たずExchange Online Powershellに接続したす。管理者暩限のあるアカりントを䜿甚しおください。 > Import-Module ExchangeOnlineManagement > Connect-ExchangeOnline -UserPrincipalName <User Principal Name, メヌルアドレス等> ログ生成ク゚リを発行したす。 (䟋では -SenderAddress で送信アドレスを指定しおいたす。 -RecipientAddress を䜿えば受信アドレスを指定できたす。) > Start-HistoricalSearch -ReportTitle "test" -StartDate 2019/12/1 -EndDate 2020/1/20 -ReportType MessageTrace -SenderAddress adminuser1@example.com JobId SubmitDate ReportTitle Status Rows ErrorCode ErrorDescription ----- ---------- ----------- ------ ---- --------- ---------------- 7308a7ca-2a05-46cf-XXXX-XXXXXXXXXXXX 2020/01/15 6:24:53 test NotStarted 0 タスクの進行状況を確認したす。 StatusがNotStartedになっおいるためただ開始されおいたせん。 > Get-HistoricalSearch JobId SubmitDate ReportTitle Status Rows ErrorCode ErrorDescription ----- ---------- ----------- ------ ---- --------- ---------------- 7308a7ca-2a05-46cf-XXXX-XXXXXXXXXXXX 2020/01/15 6:24:53 test NotStarted 0 タスクの進行状況を確認したす。 StatusがInProgressになっおいるため実行䞭です。 > Get-HistoricalSearch JobId SubmitDate ReportTitle Status Rows ErrorCode ErrorDescription ----- ---------- ----------- ------ ---- --------- ---------------- 7308a7ca-2a05-46cf-XXXX-XXXXXXXXXXXX 2020/01/15 6:24:53 test InProgress 0 タスクの進行状況を確認したす。 StatusがDoneになっおいるため実行完了しおいたす。 > Get-HistoricalSearch JobId SubmitDate ReportTitle Status Rows ErrorCode ErrorDescription ----- ---------- ----------- ------ ---- --------- ---------------- 7308a7ca-2a05-46cf-XXXX-XXXXXXXXXXXX 2020/01/15 6:24:53 test Done 2 JobIdを指定し詳现情報を確認したす。䞋蚘のFileUrlに蚘茉のURLに、ブラりザでアクセスしログをダりンロヌドできたす。 > Get-HistoricalSearch -JobId 7308a7ca-2a05-46cf-XXXX-XXXXXXXXXXXX | Format-List (...略...) FileUrl : https://admin.protection.outlook.com/ExtendedReport/Download?Type=OnDemandReport&RequestID=7308a7ca-2a05-46cf-XXXX-XXXXXXXXXXXX ReportStatusDescription : Complete – Ready for download ReportType : MessageTrace (...略...) たずめ 本蚘事では Microsoft Exchange Online 関係のログの抂芁ず、ログ取埗方法を説明したした。 どのようなログが取れるかを知っおおくこずは、いざずいうずき有効掻甚するために必芁䞍可欠です。 その䞀助ずなるべく公開された本蚘事をご掻甚いただけるず幞いです。 冒頭で述べたずおり、 埌線 ではログを蚘録しおおくための蚭定に぀いお説明したす。よろしければそちらもご芧ください。 https://developer.ntt.com/ja/blog/b097ce00-8942-43c6-bad4-842087f8dc6b ↩ https://blogs.technet.microsoft.com/junichia/2015/10/28/office-365-azure-adintuneazure-rms/ ↩ https://docs.microsoft.com/ja-jp/powershell/module/exchange/search-unifiedauditlog?view=exchange-ps ↩ https://docs.microsoft.com/ja-jp/azure/active-directory/reports-monitoring/concept-sign-ins ↩ https://aad.portal.azure.com/ ↩ https://docs.microsoft.com/ja-jp/azure/active-directory/reports-monitoring/reference-powershell-reporting ↩ https://techcommunity.microsoft.com/t5/security-compliance-and-identity/contextualizing-attacker-activity-within-sessions-in-exchange/ba-p/308710 ↩ https://docs.microsoft.com/ja-jp/powershell/module/exchange/search-mailboxauditlog?view=exchange-ps ↩ https://docs.microsoft.com/ja-jp/powershell/module/exchange/search-adminauditlog?view=exchange-ps ↩ https://docs.microsoft.com/ja-jp/powershell/module/exchange/get-messagetrace?view=exchange-ps ↩ https://docs.microsoft.com/ja-jp/previous-versions/office/developer/o365-enterprise-developers/jj984335(v=office.15) ↩ https://github.com/Canthv0/hawk ↩ https://github.com/PwC-IR/Office-365-Extractor ↩ *1 : 他にも耇数のダりンロヌド方法が提䟛されおいたす。詳しくはMicrosoft瀟にお問い合わせください。
はじめに こんにちは、むノベヌションセンタヌ テクノロゞヌ郚門の小倉 ( @Mahito ) です。 普段は Engineer Empowerment Project のリヌダヌずしお、゚ンゞニアのはたらく環境を良くする取り組みや NTT Tech Conference や勉匷䌚などの゚ンゞニアが楜しく働くための取り組みをしおいたす。 今回は瀟内で行った TechNight ずいうむベントで発衚した YAML の文法に぀いおの話を蚘事にしたものです。 もずもずの発衚は、YAML の蚘法に぀いお調べおるうちに「YAML こんなこず出来るのか」ずなったのでたずめたものでした。 YAML ずは 公匏サむト ( The official YAML Web Site ) ではこう曞かれおいたす。 YAML is a human friendly data serialization standard for all programming languages. たた、Wikipedia ( YAML - Wikipedia ) では初期の意味ず珟圚の意味が違うず曞いおありたした。 YAMLは再垰的に定矩された頭字語であり "YAML Ain't a Markup Language"YAMLはマヌクアップ蚀語じゃないの意味である。初期には "Yet Another Markup Language"もうひず぀別のマヌクアップ蚀語の意味ず蚀われおいたが、マヌクアップよりもデヌタ重芖を目的ずしおいたために埌付されおできた名前である。 珟圚の最新バヌゞョンは 1.2 で 12 幎近く曎新されおいたせん。 ( 最埌のパッチは 2009-10-01 ) 衚蚘方法 階局構造の衚珟 YAML はむンデントを䜿い階局構造で内容を衚珟したす。ただし、 むンデントにはタブが䜿えずスペヌスのみが䜿えたす 。むンデントはスペヌス 2 個単䜍でするこずが倚いそうです 始たりず終わり YAML ドキュメントは 任意 で --- から開始しお、 ... で終わらせるこずができたす。 これは、YAML 圢匏の䞀郚で、ドキュメントの最初ず最埌を瀺し、これらを甚いるこずで 1 ぀のファむル内に耇数の YAML ドキュメントを埋め蟌むこずができたす。 --- # やるこずリストブロック圢匏 - ブログを曞く - むベントの䌁画 - 技術調査・怜蚌 ... --- # 買い物リストむンラむン圢匏 [ トマト, 卵, サラダ油 ] 1 ぀のドキュメント内に耇数の YAML ドキュメントが埋め蟌たれおいる堎合、プログラミング蚀語によっおは load / safe_load では 1 ぀の YAML ドキュメントしか読めない、たたはそもそも読み蟌みできないものがありたす。 ( Ruby ) では耇数のうち先頭の 1 ぀の YAML ドキュメントしか読めたせん。 require ' yaml ' open( ' sample.yml ' , ' r ' ) do |yml| p YAML .safe_load(yml) end # => ["ブログを曞く", "むベントの䌁画", "技術調査・怜蚌"] Python では yaml.composer.ComposerError: expected a single document in the stream が返されたす。 import yaml with open ( 'sample.yml' ) as f: docs = yaml.safe_load(f) for doc in docs: print (doc) # => yaml.composer.ComposerError: expected a single document in the stream 1 ぀のドキュメント内に耇数の YAML ドキュメントがあるファむル読み蟌む際は load_stream ( Ruby )や load_all ( Python ) を䜿うずたずめお読むこずができたす。 require ' yaml ' open( ' sample.yml ' , ' r ' ) do |yml| p YAML .load_stream(yml) end # => [["ブログを曞く", "むベントの䌁画", "技術調査・怜蚌"], ["トマト", "卵", "サラダ油"]] なお、 --- を "directives end"、 ... を "document end" ず呌ぶそうですが、わかりにくいずいうこずで、 --- を YAML 1.1 で䜿われいた "document start" ずいう名前に戻そうずいう RFC が䞊がっおいたす。 私は --- が YAML に曞かれおいるのを芋たこずがありたすし、䜕なら䜿っおもいたしたが、「YAML の先頭にある蚘号でなくおも良い」皋床にしか意識しおきおいたせんでした。さらに、 ... はたったく芋たこずがなかったので、今回調べお初めお知りたした。 コメント 行頭、もしくはスペヌスの埌に番号蚘号 "#" を指定するず、その埌はコメントになりたす。 # 行頭コメント [ トマト, 卵, サラダ油 ] # これもコメント リスト - を䞊べるこずでリスト衚珟が可胜です。 --- # 果物䞀芧 - りんご - みかん - いちじく - もも 䞊蚘はブロック圢匏ですが、むンデントを䜿わずにむンラむン圢匏で [..., ..., ] ず衚珟するこずもできたす。 --- # 果物䞀芧 [ りんご, みかん, いちじく, もも ] 連想配列 key: value ずするこずで連想配列の衚珟が可胜です。 --- # 果物ず色の組み合わせ䞀芧 りんご : èµ€ みかん : オレンゞ いちじく : 癜ず赀 もも : ピンク # => {"りんご" => "èµ€", "みかん" => "オレンゞ", "いちじく" => "癜ず赀", "もも" => "ピンク"} リスト同様にむンラむン圢匏で {key1: value1, key2: value2, } ず衚珟するこずもできたす。 { りんご : èµ€, みかん : オレンゞ, いちじく : 癜ず赀, もも : ピンク } key:value ず : の埌ろにスペヌスを空けないず、文字ずしお扱われおしたいたす。 key:value # => "key:value" たた、 : のあずのスペヌスもしくは改行はマッピングに利甚されるので次のような c: ずいう衚珟ぱラヌずなりたす。 windows_drive : c: # => (<unknown>): mapping values are not allowed in this context at line 1 column 17 (Psych::SyntaxError) マッピング以倖の意図で : を利甚する際は、 : の埌ろにスペヌスや改行をいれない、もしくは '' や "" で括れば利甚できたす。 windows_path : c:\windows c_drive : 'c:' d_drive : "d:" # => {"windows_path"=>"c:\\windows", "c_drive"=>"c:", "d_drive"=>"d:"} "" でぱスケヌプを䜿甚できる点が、 '' ずの違いです。 single quote : '゚スケヌプが䜿えたせん\n' double_quote : "゚スケヌプが䜿えたす \n " # => {"single quote"=>"゚スケヌプが䜿えたせん\\n", "double_quote"=>"゚スケヌプが䜿えたす\n"} 耇雑なキヌマッピング YAML では "? " ( ? ずスペヌス)を䜿うず耇雑なキヌを生成できたす。 (出兞) Example 2.11. Mapping between Sequences ? - Detroit Tigers - Chicago cubs : - 2001-07-23 # => {["Detroit Tigers", "Chicago cubs"]=>[#<Date: 2001-07-23 ((2452114j,0s,0n),+0s,2299161j)>]} 䞊の ["Detroit Tigers", "Chicago cubs"] がキヌ、䞋の 2001-07-23 が Value ずなりたす。 同様に Key に連想配列も指定可胜です。 ? { New York Yankees : Atlanta Braves } : [ 2001-07-02, 2001-08-12, 2001-08-14 ] # => {{"New York Yankees"=>"Atlanta Braves"}=>[#<Date: 2001-07-02 ((2452093j,0s,0n),+0s,2299161j)>, #<Date: 2001-08-12 ((2452134j,0s,0n),+0s,2299161j)>, #<Date: 2001-08-14 ((2452136j,0s,0n),+0s,2299161j)>]} ちなみに "? " を倖すず䞋の : 以䞋は無芖されたす。 { New York Yankees : Atlanta Braves } : [ 2001-07-02, 2001-08-12, 2001-08-14 ] # => {"New York Yankees"=>"Atlanta Braves"} ? を䜿うこずで value を null にした連想配列の䜜成も可胜です。 (出兞) Example 2.25. Unordered Sets --- ? Mark McGwire ? Sammy Sosa ? Ken Griff # => {"Mark McGwire"=>nil, "Sammy Sosa"=>nil, "Ken Griff"=>nil} このあたりも YAML の公匏ドキュメントを芋お初めお知った機胜です。 連想配列の key に配列や連想配列を利甚したり、連想配列の value を null にするなど、今たで䜿ったこずがない機胜ですが知っおおくずい぀の日にか䜿う機䌚が蚪れるやもしれたせんね。 Bool の扱い Bool型倀 (True/False) は耇数圢匏で指定可胜です。 a : yes b : no c : True d : TRUE e : false # => {"a"=>true, "b"=>false, "c"=>true, "d"=>true, "e"=>false} 連想配列のキヌに yes や true , no などを䜿うず想定しない動きをするので泚意が必芁です。 yes : "We can" # => {true=>"We can"} もし先頭を yes にする堎合は文字ずしお蚭定する必芁がありたす。 "yes" : "We can" # => {"yes"=>"We can"} 耇数行に分けた衚珟 文字列は、 | たたは > を䜿甚しお耇数行に分けるこずができたす。 | を䜿甚しお耇数行に分けた堎合には、改行ず、末尟にあるスペヌスが含たれたす。 pipe_lines : | 耇数行の文章は '|' を䜿うこずで 楜に曞けたす。  # => {"pipe_lines"=>"耇数行の文章は\n'|' を䜿うこずで\n楜に曞けたす。 \n"} > を䜿うず改行を折り返しおスペヌスに眮き換えたす。 long_text : > 長い文章は '>' を䜿うこずで 1行で曞けたす # => {"long_text"=>"長い文章は '>'を䜿うこずで 1行で曞けたす\n"} どちらの堎合もむンデントは無芖されたす。 > を䜿う堎合で改行をしたいずきは以䞋の2぀を甚いお改行できたす。 改行だけの空癜行 むンデント埌に倀を蚘入 long_text_lines : > a b c d e f # => {"long_text_lines"=>"a b\nc d\n e\nf\n"} | や > の機胜は知っおいたしたが、 > の改行で「むンデント埌に倀を蚘入」は知らない機胜でした。 この機胜はむンデントを含めた改行になるのでちょっず䜿い方が限られたすが知っおおくず䟿利な仕様ですね。 タグず型 YAML は型を明瀺しおいない堎合、暗黙的な型付けがされたす。明瀺的な型付けは ! のシンボルを䜿ったタグで瀺されたす。 date : 2021-09-02 not-date : !!str 2021-09-02 # => { # "date"=>#<Date: 2021-09-02 ((2459460j,0s,0n),+0s,2299161j)>, # "not-date"=>"2021-09-02"} デフォルトのタグ URI は tag:yaml.org,2002: です。その䞭で定矩されおいる型のタグは以䞋のずおりです。 Collection Types map omap pairs set seq Scalar Types binary bool float int merge (省略蚘法 << ) null str timestamp value yaml 参照  Language-Independent Types for YAML™ Version 1.1 タグの URI を明瀺的に切り替える堎合は %TAG ! tag:hoge.com,2002: のように蚭定したす。 䞊蚘のようにデフォルトで定矩されおいるタグの呌び出しは !!str のように゚クスクラメヌションマヌク 2 ぀ ( !! ) , アプリケヌション特有のロヌカルタグの呌び出しぱクスクラメヌションマヌク 1 ぀ ( ! ) ず別れおいたす。 䟋: omapを指定 --- !!omap - yesterday : !!str 2021-09-01 - today : !!str 2021-09-02 - tomorrow : !!str 2021-09-03 # => {"yesterday"=>"2021-09-01", "today"=>"2021-09-02", "tomorrow"=>"2021-09-03"} 䟋: omapなし --- - yesterday : !!str 2021-09-01 - today : !!str 2021-09-02 - tomorrow : !!str 2021-09-03 # => [{"yesterday"=>"2021-09-01"}, {"today"=>"2021-09-02"}, {"tomorrow"=>"2021-09-03"}] 䟋: mapを指定 --- !!map - yesterday : !!str 2021-09-01 - today : !!str 2021-09-02 - tomorrow : !!str 2021-09-03 # => [{"yesterday"=>"2021-09-01"}, {"today"=>"2021-09-02"}, {"tomorrow"=>"2021-09-03"}] 䜙談 1.10 など末尟に 0 が入る数字を明瀺的に衚珟するためには文字にする必芁がありたす。 !!float 型では末尟の 0 が衚瀺されないので泚意が必芁です。 --- - 1.10 - !!float 1.10 - '1.10' # => [1.1, 1.1, "1.10"] タグず型の機胜も党く知らない機胜でした。 型の機胜は調べおいる䞭で䟿利だず感じたのでこれから䜿っおいきたい機胜です。 アンカヌず゚むリアス YAMLは & でアンカヌを蚭定し、 * で参照が可胜です。さらに << もしくは !!merge を䜿うこずで、参照先の倀の倉曎も可胜です。 --- !!omap - default : &default user : root password : password db_url : localhost:3306 - development : *default - production : <<: *default db_url : production:3306 # => {"default"=>{"user"=>"root", "password"=>"password", "db_url"=>"localhost:3306"}, # "development"=>{"user"=>"root", "password"=>"password", "db_url"=>"localhost:3306"}, # "production"=>{"user"=>"root", "password"=>"password", "db_url"=>"production:3306"}} 䞊蚘の䟋では default ずいうアンカヌを蚭定し、development はそのたた参照、poroduction は db_url を倉曎をしおいたす。 ゚むリアスずアンカヌも芋たこずはあるけどうたく䜿えおなかった機胜です。 今回調べたこずで理解が深たったので今埌は䜿っおいきたいです。 YAMLの今埌 ここたで玹介しおきた珟圚のバヌゞョンは "YAML 1.2 - 3rd Edition, Patched at 2009-10-01" です。 このバヌゞョンは 12 幎近く曎新されおいたせんでしたが、今幎の 5 月に突然次期バヌゞョンぞのRFCが始たっおいたす。 YAML Spec RFCs GitHub 䞊で Template をベヌスに PR 圢匏で RFC を受け付けおいるので、興味があればリポゞトリを芗いおみお、提案があれば RFC を曞いおPRをしおみおはいかがでしょう。 たずめ 普段䜕気なく䜿っおいる YAML ですが、ただ知らない、うたく䜿えおいない機胜がありたした。 この蚘事では YAML のすべおを玹介できおはいたせんが、もしこの蚘事を読んで YAML に興味を持っおいただけたのであれば、䞀床 YAML の公匏ペヌゞ を読んでみるこずをおすすめしたす。 たた、YAML の新しいバヌゞョンが動き出しおいるので、そちらも興味があればチェックしおみおはいかがでしょう。 参考 YAML Ain’t Markup Language (YAML™) Version 1.2 YAML - Wikipedia (英語) YAML - Wikipedia (日本語) YAML 構文 - Ansible Document Language-Independent Types for YAML™ Version 1.1
はじめに こんにちは、むノベヌションセンタヌ テクノロゞヌ郚門の小倉 ( @Mahito ) です。 普段は Engineer Empowerment Project のリヌダヌずしお、゚ンゞニアのはたらく環境を良くする取り組みや NTT Tech Conference や勉匷䌚などの゚ンゞニアが楜しく働くための取り組みをしおいたす。 今回は瀟内で行った TechNight ずいうむベントで発衚した YAML の文法に぀いおの話を蚘事にしたものです。 もずもずの発衚は、YAML の蚘法に぀いお調べおるうちに「YAML こんなこず出来るのか」ずなったのでたずめたものでした。 YAML ずは 公匏サむト ( The official YAML Web Site ) ではこう曞かれおいたす。 YAML is a human friendly data serialization standard for all programming languages. たた、Wikipedia ( YAML - Wikipedia ) では初期の意味ず珟圚の意味が違うず曞いおありたした。 YAMLは再垰的に定矩された頭字語であり "YAML Ain't a Markup Language"YAMLはマヌクアップ蚀語じゃないの意味である。初期には "Yet Another Markup Language"もうひず぀別のマヌクアップ蚀語の意味ず蚀われおいたが、マヌクアップよりもデヌタ重芖を目的ずしおいたために埌付されおできた名前である。 珟圚の最新バヌゞョンは 1.2 で 12 幎近く曎新されおいたせん。 ( 最埌のパッチは 2009-10-01 ) 衚蚘方法 階局構造の衚珟 YAML はむンデントを䜿い階局構造で内容を衚珟したす。ただし、 むンデントにはタブが䜿えずスペヌスのみが䜿えたす 。むンデントはスペヌス 2 個単䜍でするこずが倚いそうです 始たりず終わり YAML ドキュメントは 任意 で --- から開始しお、 ... で終わらせるこずができたす。 これは、YAML 圢匏の䞀郚で、ドキュメントの最初ず最埌を瀺し、これらを甚いるこずで 1 ぀のファむル内に耇数の YAML ドキュメントを埋め蟌むこずができたす。 --- # やるこずリストブロック圢匏 - ブログを曞く - むベントの䌁画 - 技術調査・怜蚌 ... --- # 買い物リストむンラむン圢匏 [ トマト, 卵, サラダ油 ] 1 ぀のドキュメント内に耇数の YAML ドキュメントが埋め蟌たれおいる堎合、プログラミング蚀語によっおは load / safe_load では 1 ぀の YAML ドキュメントしか読めない、たたはそもそも読み蟌みできないものがありたす。 ( Ruby ) では耇数のうち先頭の 1 ぀の YAML ドキュメントしか読めたせん。 require ' yaml ' open( ' sample.yml ' , ' r ' ) do |yml| p YAML .safe_load(yml) end # => ["ブログを曞く", "むベントの䌁画", "技術調査・怜蚌"] Python では yaml.composer.ComposerError: expected a single document in the stream が返されたす。 import yaml with open ( 'sample.yml' ) as f: docs = yaml.safe_load(f) for doc in docs: print (doc) # => yaml.composer.ComposerError: expected a single document in the stream 1 ぀のドキュメント内に耇数の YAML ドキュメントがあるファむル読み蟌む際は load_stream ( Ruby )や load_all ( Python ) を䜿うずたずめお読むこずができたす。 require ' yaml ' open( ' sample.yml ' , ' r ' ) do |yml| p YAML .load_stream(yml) end # => [["ブログを曞く", "むベントの䌁画", "技術調査・怜蚌"], ["トマト", "卵", "サラダ油"]] なお、 --- を "directives end"、 ... を "document end" ず呌ぶそうですが、わかりにくいずいうこずで、 --- を YAML 1.1 で䜿われいた "document start" ずいう名前に戻そうずいう RFC が䞊がっおいたす。 私は --- が YAML に曞かれおいるのを芋たこずがありたすし、䜕なら䜿っおもいたしたが、「YAML の先頭にある蚘号でなくおも良い」皋床にしか意識しおきおいたせんでした。さらに、 ... はたったく芋たこずがなかったので、今回調べお初めお知りたした。 コメント 行頭、もしくはスペヌスの埌に番号蚘号 "#" を指定するず、その埌はコメントになりたす。 # 行頭コメント [ トマト, 卵, サラダ油 ] # これもコメント リスト - を䞊べるこずでリスト衚珟が可胜です。 --- # 果物䞀芧 - りんご - みかん - いちじく - もも 䞊蚘はブロック圢匏ですが、むンデントを䜿わずにむンラむン圢匏で [..., ..., ] ず衚珟するこずもできたす。 --- # 果物䞀芧 [ りんご, みかん, いちじく, もも ] 連想配列 key: value ずするこずで連想配列の衚珟が可胜です。 --- # 果物ず色の組み合わせ䞀芧 りんご : èµ€ みかん : オレンゞ いちじく : 癜ず赀 もも : ピンク # => {"りんご" => "èµ€", "みかん" => "オレンゞ", "いちじく" => "癜ず赀", "もも" => "ピンク"} リスト同様にむンラむン圢匏で {key1: value1, key2: value2, } ず衚珟するこずもできたす。 { りんご : èµ€, みかん : オレンゞ, いちじく : 癜ず赀, もも : ピンク } key:value ず : の埌ろにスペヌスを空けないず、文字ずしお扱われおしたいたす。 key:value # => "key:value" たた、 : のあずのスペヌスもしくは改行はマッピングに利甚されるので次のような c: ずいう衚珟ぱラヌずなりたす。 windows_drive : c: # => (<unknown>): mapping values are not allowed in this context at line 1 column 17 (Psych::SyntaxError) マッピング以倖の意図で : を利甚する際は、 : の埌ろにスペヌスや改行をいれない、もしくは '' や "" で括れば利甚できたす。 windows_path : c:\windows c_drive : 'c:' d_drive : "d:" # => {"windows_path"=>"c:\\windows", "c_drive"=>"c:", "d_drive"=>"d:"} "" でぱスケヌプを䜿甚できる点が、 '' ずの違いです。 single quote : '゚スケヌプが䜿えたせん\n' double_quote : "゚スケヌプが䜿えたす \n " # => {"single quote"=>"゚スケヌプが䜿えたせん\\n", "double_quote"=>"゚スケヌプが䜿えたす\n"} 耇雑なキヌマッピング YAML では "? " ( ? ずスペヌス)を䜿うず耇雑なキヌを生成できたす。 (出兞) Example 2.11. Mapping between Sequences ? - Detroit Tigers - Chicago cubs : - 2001-07-23 # => {["Detroit Tigers", "Chicago cubs"]=>[#<Date: 2001-07-23 ((2452114j,0s,0n),+0s,2299161j)>]} 䞊の ["Detroit Tigers", "Chicago cubs"] がキヌ、䞋の 2001-07-23 が Value ずなりたす。 同様に Key に連想配列も指定可胜です。 ? { New York Yankees : Atlanta Braves } : [ 2001-07-02, 2001-08-12, 2001-08-14 ] # => {{"New York Yankees"=>"Atlanta Braves"}=>[#<Date: 2001-07-02 ((2452093j,0s,0n),+0s,2299161j)>, #<Date: 2001-08-12 ((2452134j,0s,0n),+0s,2299161j)>, #<Date: 2001-08-14 ((2452136j,0s,0n),+0s,2299161j)>]} ちなみに "? " を倖すず䞋の : 以䞋は無芖されたす。 { New York Yankees : Atlanta Braves } : [ 2001-07-02, 2001-08-12, 2001-08-14 ] # => {"New York Yankees"=>"Atlanta Braves"} ? を䜿うこずで value を null にした連想配列の䜜成も可胜です。 (出兞) Example 2.25. Unordered Sets --- ? Mark McGwire ? Sammy Sosa ? Ken Griff # => {"Mark McGwire"=>nil, "Sammy Sosa"=>nil, "Ken Griff"=>nil} このあたりも YAML の公匏ドキュメントを芋お初めお知った機胜です。 連想配列の key に配列や連想配列を利甚したり、連想配列の value を null にするなど、今たで䜿ったこずがない機胜ですが知っおおくずい぀の日にか䜿う機䌚が蚪れるやもしれたせんね。 Bool の扱い Bool型倀 (True/False) は耇数圢匏で指定可胜です。 a : yes b : no c : True d : TRUE e : false # => {"a"=>true, "b"=>false, "c"=>true, "d"=>true, "e"=>false} 連想配列のキヌに yes や true , no などを䜿うず想定しない動きをするので泚意が必芁です。 yes : "We can" # => {true=>"We can"} もし先頭を yes にする堎合は文字ずしお蚭定する必芁がありたす。 "yes" : "We can" # => {"yes"=>"We can"} 耇数行に分けた衚珟 文字列は、 | たたは > を䜿甚しお耇数行に分けるこずができたす。 | を䜿甚しお耇数行に分けた堎合には、改行ず、末尟にあるスペヌスが含たれたす。 pipe_lines : | 耇数行の文章は '|' を䜿うこずで 楜に曞けたす。  # => {"pipe_lines"=>"耇数行の文章は\n'|' を䜿うこずで\n楜に曞けたす。 \n"} > を䜿うず改行を折り返しおスペヌスに眮き換えたす。 long_text : > 長い文章は '>' を䜿うこずで 1行で曞けたす # => {"long_text"=>"長い文章は '>'を䜿うこずで 1行で曞けたす\n"} どちらの堎合もむンデントは無芖されたす。 > を䜿う堎合で改行をしたいずきは以䞋の2぀を甚いお改行できたす。 改行だけの空癜行 むンデント埌に倀を蚘入 long_text_lines : > a b c d e f # => {"long_text_lines"=>"a b\nc d\n e\nf\n"} | や > の機胜は知っおいたしたが、 > の改行で「むンデント埌に倀を蚘入」は知らない機胜でした。 この機胜はむンデントを含めた改行になるのでちょっず䜿い方が限られたすが知っおおくず䟿利な仕様ですね。 タグず型 YAML は型を明瀺しおいない堎合、暗黙的な型付けがされたす。明瀺的な型付けは ! のシンボルを䜿ったタグで瀺されたす。 date : 2021-09-02 not-date : !!str 2021-09-02 # => { # "date"=>#<Date: 2021-09-02 ((2459460j,0s,0n),+0s,2299161j)>, # "not-date"=>"2021-09-02"} デフォルトのタグ URI は tag:yaml.org,2002: です。その䞭で定矩されおいる型のタグは以䞋のずおりです。 Collection Types map omap pairs set seq Scalar Types binary bool float int merge (省略蚘法 << ) null str timestamp value yaml 参照  Language-Independent Types for YAML™ Version 1.1 タグの URI を明瀺的に切り替える堎合は %TAG ! tag:hoge.com,2002: のように蚭定したす。 䞊蚘のようにデフォルトで定矩されおいるタグの呌び出しは !!str のように゚クスクラメヌションマヌク 2 ぀ ( !! ) , アプリケヌション特有のロヌカルタグの呌び出しぱクスクラメヌションマヌク 1 ぀ ( ! ) ず別れおいたす。 䟋: omapを指定 --- !!omap - yesterday : !!str 2021-09-01 - today : !!str 2021-09-02 - tomorrow : !!str 2021-09-03 # => {"yesterday"=>"2021-09-01", "today"=>"2021-09-02", "tomorrow"=>"2021-09-03"} 䟋: omapなし --- - yesterday : !!str 2021-09-01 - today : !!str 2021-09-02 - tomorrow : !!str 2021-09-03 # => [{"yesterday"=>"2021-09-01"}, {"today"=>"2021-09-02"}, {"tomorrow"=>"2021-09-03"}] 䟋: mapを指定 --- !!map - yesterday : !!str 2021-09-01 - today : !!str 2021-09-02 - tomorrow : !!str 2021-09-03 # => [{"yesterday"=>"2021-09-01"}, {"today"=>"2021-09-02"}, {"tomorrow"=>"2021-09-03"}] 䜙談 1.10 など末尟に 0 が入る数字を明瀺的に衚珟するためには文字にする必芁がありたす。 !!float 型では末尟の 0 が衚瀺されないので泚意が必芁です。 --- - 1.10 - !!float 1.10 - '1.10' # => [1.1, 1.1, "1.10"] タグず型の機胜も党く知らない機胜でした。 型の機胜は調べおいる䞭で䟿利だず感じたのでこれから䜿っおいきたい機胜です。 アンカヌず゚むリアス YAMLは & でアンカヌを蚭定し、 * で参照が可胜です。さらに << もしくは !!merge を䜿うこずで、参照先の倀の倉曎も可胜です。 --- !!omap - default : &default user : root password : password db_url : localhost:3306 - development : *default - production : <<: *default db_url : production:3306 # => {"default"=>{"user"=>"root", "password"=>"password", "db_url"=>"localhost:3306"}, # "development"=>{"user"=>"root", "password"=>"password", "db_url"=>"localhost:3306"}, # "production"=>{"user"=>"root", "password"=>"password", "db_url"=>"production:3306"}} 䞊蚘の䟋では default ずいうアンカヌを蚭定し、development はそのたた参照、poroduction は db_url を倉曎をしおいたす。 ゚むリアスずアンカヌも芋たこずはあるけどうたく䜿えおなかった機胜です。 今回調べたこずで理解が深たったので今埌は䜿っおいきたいです。 YAMLの今埌 ここたで玹介しおきた珟圚のバヌゞョンは "YAML 1.2 - 3rd Edition, Patched at 2009-10-01" です。 このバヌゞョンは 12 幎近く曎新されおいたせんでしたが、今幎の 5 月に突然次期バヌゞョンぞのRFCが始たっおいたす。 YAML Spec RFCs GitHub 䞊で Template をベヌスに PR 圢匏で RFC を受け付けおいるので、興味があればリポゞトリを芗いおみお、提案があれば RFC を曞いおPRをしおみおはいかがでしょう。 たずめ 普段䜕気なく䜿っおいる YAML ですが、ただ知らない、うたく䜿えおいない機胜がありたした。 この蚘事では YAML のすべおを玹介できおはいたせんが、もしこの蚘事を読んで YAML に興味を持っおいただけたのであれば、䞀床 YAML の公匏ペヌゞ を読んでみるこずをおすすめしたす。 たた、YAML の新しいバヌゞョンが動き出しおいるので、そちらも興味があればチェックしおみおはいかがでしょう。 参考 YAML Ain’t Markup Language (YAML™) Version 1.2 YAML - Wikipedia (英語) YAML - Wikipedia (日本語) YAML 構文 - Ansible Document Language-Independent Types for YAML™ Version 1.1
こんにちは、むノベヌションセンタヌの䞉島です。 本蚘事では、次䞖代の監芖技術ずしお期埅されるTelemetry技術に぀いおご玹介したす。 この蚘事に぀いお 本蚘事では䞋蚘の3点を共有したす。 埓来の監芖技術が抱える課題ずTelemetryの可胜性 Telemetryの技術抂芁ず、各瀟の実装状況 NTT Comのネットワヌク䞊で怜蚌し埗られた知芋ず、期埅されるナヌスケヌス 埓来の監芖技術が抱える課題 ネットワヌク運甚においおは、障害怜知やパフォヌマンス分析のため監芖技術が重芁ずなりたす。 埓来のネットワヌクでは、SNMPSimple Network Management Protocolず呌ばれる技術が広く利甚されおいたす。 SNMPの仕組みを図1に瀺したす。SNMPはUDPベヌスなネットワヌク監芖技術です。デヌタモデルはMIBManagement Information Baseず呌ばれるデヌタベヌスに定矩されおおり、ベンダ共通の暙準MIBず固有の拡匵MIBが存圚したす。 SNMPの情報取埗者をSNMP Manager、情報発行者をSNMP Agentず呌びたす。情報の取埗手法ずしお、SNMP Managerがリク゚ストベヌスに情報を取埗するPollingず、SNMP Agentがトリガヌベヌスに情報を送信するTrapが存圚したす。 埓来のSNMPが抱える課題ずしお、䞋蚘の3点が挙げられたす。 高負荷な凊理構造 マルチベンダ環境における管理の煩雑さ N察N構成での芏暡性の限界 1.高負荷な凊理構造に぀いお図2に瀺したす。 ネットワヌク監芖ではトラフィック量や機噚の負荷情報Memory・CPU・枩床等の取埗が求められたす。しかしSNMPのPollingはリク゚ストベヌスであるため、高粟现な情報を取埗するために間隔を狭めるず、CPU負荷の増倧ず凊理時間の増加が課題ずなりたす。 2.マルチベンダ環境における管理の煩雑さに぀いお図3に瀺したす。 SNMPでは暙準MIBが乏しく、䟋えばCPU䜿甚率等のパラメヌタを取埗できない課題が存圚したす。 そのため、マルチベンダな環境で同じ情報を取埗するためには、機皮ごずに固有な拡匵MIBのOIDObject IDを指定する必芁があり、管理コストが増倧したす。 3.N察N構成での芏暡性の限界に぀いお図4に瀺したす。 倧芏暡なネットワヌクでは、デヌタ利掻甚のため耇数のデヌタ利甚者が同じ機噚の情報を取埗するこずが考えられたす。䟋えば利甚者Aはトラフィック量を可芖化のために取埗し、利甚者Bはむンタヌフェヌス状態をDown怜知のために取埗するなど SNMPではAgentずManagerを1察1のUDPで接続しお監芖するため、N察N構成ではAgent/Managerの組み合わせ分のUDP接続が必芁ずなり、受信偎で凊理可胜なメッセヌゞに限界が生じたす。 たた、送信先・監芖先ごずに異なる倀を取埗したい堎合、組み合わせに応じおSNMP Agent/Managerに定矩する必芁があり、管理コストが増倧したす。 たずめずしお、SNMPは䞋蚘3皮の課題を抱えおいたす。 高負荷なプロトコル構造による取埗可胜な情報粟床の䜎䞋ず、リアルタむム性の損倱 暙準MIBの乏しさによるマルチベンダ環境における管理の煩雑さ N察N構成構築時の芏暡性の課題 これらを解決する監芖技術ずしお、Telemetry技術が期埅されおいたす。 Telemetryに぀いお Telemetryは次䞖代のネットワヌク監芖技術であり、各瀟による怜蚎や実装・OpenConfig等による暙準化が進められおいたす。 Telemetryは、䞀般的には䞋蚘3぀の特城を持぀よう蚭蚈されおいたす。 SNMPず比范し䜎負荷なプロトコル蚭蚈による高粟现でリアルタむムな情報取埗 OpenConfigによるベンダフリヌな情報取埗 Pub/Subモデルの導入が容易な蚭蚈による高い芏暡性 これらの特城から、前節で挙げたSNMPの課題を解決する技術ずしお期埅されおいたす。 Telemetryは、Pub/Subモデルず呌ばれるデヌタの送受信モデルを採甚しおいたす。 Pub/Subモデルに぀いお図5に瀺したす。 Pub/Subモデルは䞋蚘3぀の芁玠から構成されたす。 Publisher: 発行者 (送信者)。メッセヌゞを発行する Broker: 仲介者。メッセヌゞを仲介する Subscriber: 賌読者 (受信者)。メッセヌゞを取埗し掻甚する Pub/Subモデルの利点ずしお、① メッセヌゞの送信者・受信者がお互いを盎接認識する必芁がなく、非同期か぀疎結合である点、②Brokerを介しお1察N、N察N構成が取れるため、芏暡性の高い点 が挙げられたす。情報はTopicずいう属性で管理され、Publisher・SubscriberはTopicを指定するこずにより情報を送信・受信したす。 図6にTelemetryのパむプラむン構成を瀺したす。 Telemetryパむプラむンは䞋蚘の芁玠から構成されたす。 Publisher: デヌタの発行元であるネットワヌク機噚 Broker: Pub/Subの倚重化を行う仲介圹 Subscriber: デヌタの受け取り・利甚をするアプリケヌション Pub/Subモデルの利点は倱われたすが、䞊蚘の構成以倖にPublisherずSubscriberを盎結する構成も可胜です。 以降でそれぞれの芁玠に぀いお解説したす。 Publisher Publisherはメッセヌゞの発行者であり、䞋蚘の3぀の芁玠から構成されたす。 監芖察象ずなるネットワヌク機噚 監芖察象機噚ずCollectorを繋ぐTransport郚分 Publisherからデヌタを受信するCollector 監芖察象機噚に関する抂念ずしお、情報モデルず接続方匏の分類に぀いおご説明したす。 機噚の情報モデルには、䞻にOpenConfig・ベンダネむティブの2皮が存圚したす。OpenConfigはベンダニュヌトラルな利甚を想定しお暙準化が進められおいるネットワヌクコンフィグのモデルであり、YANGに埓い定矩されおいたす。䞀方ベンダネむティブは補品ごずに固有の情報モデルであり、䞀般的にOpenConfigよりも察応状況が良く、扱うこずのできる情報も豊富な傟向がありたす。 機噚が発行する情報は、Sensor-Pathず呌ばれるデヌタパスにより予め指定されおおり、決められた間隔でメッセヌゞを発行し、Collectorぞず送信したす。 䞋蚘にSenrsor-Pathの䟋を瀺したす。Sensor-PathはYANGのツリヌ構造に合わせお情報を取埗するためのデヌタパスであり、SNMPにおけるOIDに近い抂念です。 OpenConfig: Interfaceに関する情報党般Configuration/State/Statistic含む “/interfaces/” OpenConfig: Interfaceごずの入力パケットカりンタ単䜍: byte “/interfaces/interface/state/counters/in-octets” OpenConfig: xe-0/0/0の入力パケットカりンタ単䜍: byte “/interfaces/interface[name='xe-0/0/0']/state/counters/in-octets” Juniper ベンダネむティブ: Interfaceに関する情報党般 “/junos/system/linecard/interface/” 䟋のように、深いパスを指定するこずで取埗する情報を现かく指定できたす。 たた、OpenConfigずベンダネむティブでは同じ情報を取埗する堎合でも異なるパスを指定する必芁がありたす。 2021幎8月時点の実装では、同じOpenConfigでもベンダにより察応状況が異なるため、各瀟のドキュメントを確認し取埗するSensor-Pathを決める必芁がありたす。 次に接続方匏の違いに぀いおご説明したす。Telemetryでは、情報を発行するPublisherず受け取るCollectorの接続方向により、Dial-InずDial-Outの接続方匏が存圚したす。図7にそれぞれぞれの抂念を瀺したす。 Dial-InはCollectorがPublisherに接続する手法です。利点ずしおはgRPCによる自動化を行っおいるネットワヌクの堎合、機噚に蚭定されたgNMIを利甚しお情報を取埗できるため、Telemetry甚远加蚭定の䞍芁な点が挙げられたす。 䞀方Dial-OutはPublisherがCollectorに接続する手法です。利点ずしおはCollector偎が監芖するPublisherのリストを管理する必芁がないためCollectorをステヌトレスに蚭蚈可胜であり、Dial-Inに比べお芏暡性が高い点や、Publisher偎にもACLによる制埡が䞍芁ずなる点が挙げられたす。 䞊蚘より、特別な理由がない堎合は管理コストを考慮しDial-Outを採甚するこずをお勧めしたす。ただし、䟋えばgRPCによる運甚自動化を行っおいるネットワヌクなどでは、Dial-InのTelemetryが容易に導入可胜な堎合もありたす。たた、2021幎8月時点では、ベンダによりDial-In/Dial-Outの察応状況が異なるため、泚意が必芁です。 次にTransport郚分に぀いお説明したす。Transportは監芖察象デバむスずCollectorを繋ぐ転送の圹割を持ちたす。 TransportはEncodingずEncapsulationの芁玠から成り立ちたす。 Encoding: メッセヌゞの圢匏。JSON、GPBなどから遞択可胜 Encapsulation: 通信圢匏。TCP/UDPやgRPC、NETCONFなどを遞択可胜 SNMPはUDPによる通信のみを採甚しおいたしたが、Telemetryではメッセヌゞをどのような圢匏で蚘述し、どのような通信圢匏で送るかを決めるこずができたす。取埗したい情報の性質や、運甚で既に採甚しおいるプロトコルなどを考慮しながら決めるこずをお勧めしたす。 CollectorはPublisherが発行したメッセヌゞを受信する圹割を持ちたす。2021幎8月時点の䞻なCollector実装を䞋蚘の衚にご玹介したす。 ベンダ OSS実装 ベンダ玔正実装 ※Subscriber機胜も兌ねる Arista ockafka Openconfigbeat Arista CloudVision Cisco Pipeline Telegraf/Fluentd等の専甚Plugin Crosswork Health Insights Juniper Jtimon Telegraf/Fluentd等の専甚Plugin Paragon Insights SONiC gnxi単発で取埗するCLIツヌル gNMIc - 䞊蚘でご玹介したベンダ玔正実装は、単䜓のCollectorではなくSubscriberずしおの可芖化や自動化の機胜を備えおいたす。 Collectorごずに特城や存圚する機胜が異なるため、䟋えばPublisherのグルヌプ化やKafkaずの連携など、必芁な機胜を考慮し遞定するこずをお勧めしたす。 Broker Brokerはメッセヌゞの仲介者であり、Message Queueが該圓したす。 Message Queueはメッセヌゞを䞭継する芁玠であり、䞻な実装ずしおはApache Kafkaや、Public CloudにおけるCloud Pub/Sub・SQSなどが挙げられたす。 䞀般的な実装では、クラスタリングやミラヌリングなど、冗長化を行う仕組みを持぀こずが倚いです。図8に䞀般的なBrokerのMessage Queue的な圹割を瀺したす。 Publisherが発行するメッセヌゞにはTopicずデヌタが含たれおいたす。Brokerは受信したメッセヌゞをTopicごずのキュヌに栌玍した埌、Subscriberからの賌読に応じおメッセヌゞを送信したす。 Subscriber Subscriberはメッセヌゞの受信者であり、デヌタを受け取り利甚する芁玠です。 Subscriberはナヌスケヌスごずに様々な機胜・パむプラむンを持ちたす。䞀般的には①リアルタむムな監芖 & 詳现な情報に基づく可芖化・分析、②アラヌト、③蚭定の自動化/自己治癒 などが考えられたす。 怜蚌構成ず取埗結果 ここからは、NTT Com内にお実斜した怜蚌に぀いおご玹介したす。 今回の構成では、NTT Comの瀟内ネットワヌク環境においお怜蚌を実斜したした。図9に構成図の䞀郚を瀺したす。 怜蚌ではPublisher/Subscriberをそれぞれ倚重化し、Brokerに収容しおいたす。 監芖察象の機噚はArista・Cisco・Juniperず、Whiteboxな䌝送装眮に搭茉されたSONiCの4ベンダを採甚しおいたす。たた、SubscriberはオンプレミスのGrafanaによる可芖化を行うず同時に、Google Cloud Platform䞊のKafkaにミラヌリングを行い、Public Cloudず連携が行えるこずも怜蚌したした。 図10、図11にそれぞれから取埗した実際のデヌタをJSON圢匏で瀺したす。 図10はArista機噚で発行し、ockafkaを通じ取埗したデヌタの䟋です。図の通り、デヌタは単発のJSON型ずなっおいたす。 䞀方、図11はその他の機噚から取埗したデヌタの䟋です。図の通り、Juniper/TelegrafではネストされたJSON型になっおおり、SONiC、gNMIcはJSON型の䞭にリストが含たれおいたす。たた、Cisco/Pipelineでは耇数のJSON型がリストに含たれる圢匏であるこずがわかりたす。 このようなデヌタは盎接InfluxDBに取り蟌むこずができないため、敎圢凊理が必芁ずなりたす。LogstashやTelegrafずいったコレクタには敎圢機胜が存圚したすが、デバッグが難しい、耇雑な条件分岐を曞きにくいなど、汎甚性に問題がありたした。 そこで、今回の怜蚌ではデヌタ敎圢機を䜜成し察応したした。図12にデヌタ敎圢機を含めたフロヌを瀺したす。 䜜成したデヌタ敎圢機は、たずKafkaから生デヌタが含たれるTopicを賌読し、デヌタを取埗したす。取埗したデヌタをPython Scriptで敎圢した埌、Kafkaに察しお取埗したものずは異なるTopicでメッセヌゞを発行したす。これにより、Subscriberがデヌタ敎圢機の発行したTopicを指定するこずで、敎圢埌のデヌタを取埗できるようにしおいたす。 図13に、実際に取埗したデヌタをGrafanaで可芖化した䟋を瀺したす。 今回の怜蚌では、TelemetryずSNMPで、Interfaceの受信したTraffic量の可芖化を行いたした。Telemetryは1000msJunosのみ2000ms、SNMPでは負荷を考慮し、䞀般的に1分以䞊の間隔で取埗するこずが倚いですが、今回はPrometheusが取埗可胜であった15秒間隔でデヌタを採り、比范しおいたす。 図13ではマむクロバヌストの怜知を想定しバヌストトラフィックを生成しおおりたす。結果の通り、Telemetryではリアルタむムで耇数のスパむクが芳枬されたすが、SNMPでは、Pollingによる遅延が入った埌、なだらかな山ずなり可芖化が行われおいるこずが読み取れたす。 怜蚌を通じお埗られた知芋 ここからはNTT Com内での怜蚌を通じお埗られた知芋ず期埅されるナヌスケヌスをご玹介したす。 導入時に考慮すべき点ずしお、䞋蚘3点が挙げられたす。 1. 察象機皮ごずにパラメヌタを分ける手法の怜蚎 珟時点のTelemetryでは、ベンダごずに①Collector、②Dial-In / Dial-Out、③OpenConfig/ベンダネむティブの遞択を含めたSensor-Path などのパラメヌタを指定する必芁がありたす。 マルチベンダ環境における効率的な管理のため、䟋えばNetbox・Zabbix等でデバむス情報を管理しおいるネットワヌクでは、それらの情報ず組み合わせ、ベンダごずに蚭定を切り替える仕組みを開発するこずで、管理コストを䞋げるこずが期埅できたす。 2. デヌタの保持期間ず粒床 Telemetryはms単䜍での情報取埗が可胜であるため、取埗した倧量のデヌタを長期にわたっお保持するこずが珟実的ではありたせん。 そのため、Telemetry導入の際にはデヌタの保持期間や保持する時間的な粒床などの事前怜蚎が必芁ずなりたす。 これらに該圓するナヌスケヌスは䞻に ① 取埗した瞬間の閟倀による凊理その瞬間の詳现なデヌタが必芁、② 障害発生埌の切り分け1日-2日以内の詳现なデヌタが必芁の2皮が想定されたす。①、②どちらのナヌスケヌスでも、詳现なデヌタは1日-2日のみ保持し、それを過ぎたものはデヌタを時間単䜍などで集玄しお保持すれば良いず考えたす。 3. 監芖基盀の性胜 2.の内容ずも関連したすが、Telemetryを導入する際にはネットワヌク芏暡ず取埗デヌタず量・保持期間に埓い、事前に監芖基盀のメモリやストレヌゞ等のリ゜ヌスを蚈算しおおく必芁があり、導入前の怜蚌が必須ずなりたす。 Telemetryに期埅されるナヌスケヌス これたでの結果より、珟時点のナヌスケヌスずしお䞋蚘の3点を考えおいたす。 シングルベンダ環境におけるリアルタむムな情報収集 gNMIを通じたコンフィグ投入等、自動化技術ずの組み合わせ 他の監芖技術ずの連携 1.に぀いおは、OpenConfigでの実装が远い぀いおいない郚分もベンダネむティブなSensor-Pathにより情報を取埗でき、たたベンダごずの独自機胜や玔正Collectorの利甚が可胜です。さらに、ベンダ固有の実装Cisco Event Driven TelemetryやMellanox What Just Happened等を利甚できるなどの利点が存圚したす。 2.に぀いおは、共有のgNMIを利甚しお監芖・自動化が可胜である利点を生かし、Telemetryにより振る舞いを監芖し、閟倀や機械孊習ベヌスでのコンフィグ倉曎・自己治癒などの利甚が考えられたす。 3.に぀いおは、䟋えばTelemetryのStatisticをxFlowのリアルタむムなフロヌず組み合わせ利甚する、SyslogアラヌトをトリガヌずしTelemetryのState・Statisticを保存するなど、高粟现な情報を生かす手法が考えられたす。 たたどの甚途に぀いおも、今埌OpenConfig察応の充実やCollector・Dial-Out察応などの統䞀により、マルチベンダ察応が進むこずにより、より利甚しやすい技術ずなるず期埅しおいたす。 たずめ NTT Comでの技術怜蚌を通じ、Telemetryの䞋蚘3点の特城を怜蚌したした。 SNMPず比范し䜎負荷な蚭蚈によるリアルタむムな情報取埗 OpenConfigによるベンダフリヌな情報取埗 Pub/Subモデルの導入が容易な蚭蚈による高い芏暡性 2021幎8月時点の実装では、リアルタむムな情報取埗はms単䜍での情報取埗・䜎負荷なプロトコル蚭蚈等により期埅通りの匷みがありたすが、マルチベンダ性に課題があるずいうのが怜蚌から埗られた所感です。 OpenConfigの察応状況やCollectorの統䞀に぀いおは、これからたすたす実装が進むず予想されるため、今埌の発展に期埅しおいたす。 付録 今回の怜蚌で甚いた各機噚のコンフィグ䟋を共有したす。お手元での怜蚌にご利甚ください。 なお、これらコンフィグ䟋は珟状有姿で提䟛され、NTT Comは明瀺的・黙瀺的を問わず䞀切の保蚌をせず、䜕ら責任を負いたせん。 Arista 本䜓偎はgNMI蚭定か専甚デヌモンを立ち䞊げるかの2択。 EOS 4.22以降ではgNMI蚭定が掚奚されおいる。 本䜓偎 - gNMI蚭定 management api gnmi transport grpc Telemetry port <Port> ip access-group <ACL名> provider eos-native ! 本䜓偎 - 専甚デヌモン蚭定 ※ OpenConfigの堎合はTerminAttrをOpenConfigに読みかえる。 daemon TerminAttr exec /usr/bin/TerminAttr -disableaaa -grpcaddr <CollectorのIP addr>:<Port> ip access-group <ACL名> no shutdown ! Collector - ockafakaDockerでの立ち䞊げ䟋 手順は 公匏リポゞトリ を参照。 $ docker pull aristanetworks/ockafka $ docker run aristanetworks/ockafka -addrs <Publisher Addr>:<Port> -kafkaaddrs <Kafka Addr>:<Port> -kafkatopic arista_eos_telemetry -subscribe <PATH> Collector - openconfigbeatDockerでの立ち䞊げ䟋 手順は 公匏リポゞトリ を参照。 % git clone https://github.com/aristanetworks/openconfigbeat.git // openconfigbeat.ymlを線集 openconfigbeat: addresses: ["<Publisher Addr>"] default_port: <Port> paths: ["interfaces/interface/name"] username: "<Username>" password: "<Password>" output.kafka: hosts: ["<Kafka Addr>:<Port>"] topic: <Topic名> // openconfigbeat.ymlを/盎䞋に配眮するようDockerfileを線集 % docker build -f ./Dockerfile -t openconfigbeat:latest . --no-cache=true % docker run -d --net=host --name openconfigbeat openconfigbeat:latest Cisco IOS-XR 本䜓偎 - Dial-Out蚭定 telemetry model-driven destination-group <destination-group名> vrf <VRF名> address-family ipv4 <Collector Addr> port <Port> encoding <゚ンコヌディング手法> protocol <トランスポヌトのプロトコル> ! ! sensor-group <sensor-group名> sensor-path <sensor-path> ! subscription <subscription名> sensor-group-id <sensor-group名> sample-interval <Interval(ms)> destination-id <destination-group名> source-interface <むンタヌフェヌス名> ! ! 本䜓偎 - TPAThird Party Applications蚭定 IOS-XR暙準のマネゞメントVRF以倖でTelemetryを扱う堎合に必芁。 vrf <VRF名> address-family ipv4 update-source dataports active-management ! ! ! Collector - Pipeline 手順は 公匏リポゞトリ を参照。 pipeline.confを線集埌、 $ docker run -d --net=host [--volume <local>:/data] --name pipeline pipeline:<version> [collector] stage = xport_input type = grpc encap = gpbkv listen = :<Port> [kafka] stage = xport_output type = kafka encoding = json_events brokers = <Kafka Addr>:<Port> topic = <Topic名> [inspector] stage = xport_output type = tap file = /data/dump.txt datachanneldepth = 1000 Juniper 本䜓偎 - Dial-In蚭定 set system services extension-service request-response grpc clear-text address <Publisher Addr> set system services extension-service request-response grpc clear-text port <Port> set system services extension-service request-response grpc skip-authentication set system services extension-service notification allow-clients address <Collector Addr> Junos 20.2R1以降でDial-Outにも察応しおいる が、察応するOSSのCollector実装が存圚しないため未怜蚌。 Collector - Telegraf Juniper公匏のCollector実装である jtimon も存圚するが、Kafkaずの連携機胜が存圚しないため本怜蚌ではTelegrafのモゞュヌルを採甚。 [[inputs.jti_openconfig_telemetry]] servers = ["<Publisher Addr>:<Port>", "<Publisher Addr>:<Port>"] # 取埗察象を耇数指定可 username = "<Username>" password = "<Password>" client_id = "telegraf" # 取埗察象の機噚内(ルヌタ等)でナニヌクである必芁がある # 1぀の機噚に察しお耇数プロセスからsubscribeする堎合は、 # 異なる文字列にする sample_frequency = "2000ms" sensors = [ "/interfaces/interface[name=vme]/state", "/system", "/components", "/junos" ] retry_delay = "1000ms" str_as_tags = false [[outputs.kafka]] brokers = ["<Kafka Addr>:<Port>"] topic = "<Topic名>" data_format = "json" SONiC 本䜓偎 - Telemetryサヌビスの蚭定 # vi telemetry-service.yaml apiVersion: v1 kind: Service metadata: name: telemetry-svc spec: type: NodePort ports: - port: <Port> protocol: TCP selector: app: usonic # kubectl apply -f telemetry-service.yaml kubectl get svc を実行し、埅ち受けポヌトを確認しおおく。 Collector - gNMIc 手順は 公匏ペヌゞ 参照。 # vi gnmic.yml targets: <Publisher Addr>:<Port>: subscriptions: - port_stats skip-verify: true username: <Username> password: <Password> insecure: true subscriptions: port_stats: target: COUNTERS_DB paths: - <Sensor-Path> mode: stream stream-mode: sample sample-interval: 5s encoding: json outputs: output1: type: kafka address: <Kafka Addr>:<Port> topic: <Topic名> format: json debug: true
はじめに IoT Connect Gatewayずは IoT Connect Gatewayの特城 閉域網がなくおもセキュアにクラりド接続を実珟 凊理負荷がかかる暗号化凊理をサヌビス偎で実斜 暗号化通信によるデヌタ転送量を抑制 クラりドアダプタ機胜で各皮クラりドサヌビスに簡単接続 IoT Connect Gatewayにかける思い CI/CDの取り組みずサヌビスリリヌス Infrastructure as Code Test as Code GitOps 個人的な思い 最埌に 次回予告 ICGWに関するお問い合わせ先 はじめに こんにちは、デヌタプラットフォヌムサヌビス郚でIoT Connect Gateway開発チヌムのTech Leadを しおいる 栗原良尚(@yoshinao) です。 この床、NTT Com Engineers' Blogオヌプンに合わせお、開発をおこなっおいるIoT Connect Gatewayに぀いおご玹介、情報発信をできる機䌚をいただきたした。閲芧頂きありがずうございたす。 Engineers' Blogでは、単なるサヌビス玹介だけでなく、IoT Connect Gatewayの䜿い方や、どんな事ができるのかなどのレシピや呚蟺技術を実隓や電子工䜜を通じお発信しおいきたいず思っおおりたす。 たた、皆様からのリク゚ストやフィヌドバックを通じお、双方向の情報発信、みなさたの声を次期開発に掻かしたいず考えおおりたすのでリク゚ストやコメントを頂けたすず幞いです。個人的にも蚘事投皿の励みになりたす笑 どうぞ、よろしくお願い臎したす。 IoT Connect Gatewayずは IoT Connect GatewayICGW ずは、NTT Comが 2021幎4月6日にリリヌス したIoT向けGatewayサヌビスです。 このサヌビスは、IoTセンサヌやデバむスで収集したデヌタをクラりドやお客様のサヌビスに簡単か぀セキュアに転送するためのゲヌトりェむサヌビスです。 ICGWでは、IoTデバむスからの通信をNTT ComのGatewayで䞀床終端するこずで、IoTデバむス偎に必芁な機胜をオフロヌドしたり、転送先を切り替えたり、デバむス偎に機胜远加必芁なく様々な付加䟡倀を利甚するこずが可胜になりたす。 ICGWは、NTT Comが提䟛しおいる SmartDataPlatfor(SDPF) のIoTカテゎリのサヌビスで、 IoT Connect Mobile Type S ず組み合わせおご利甚が可胜です。 今埌も他のSDPFサヌビスのシヌムレスな連携を目指すこずで、䞀぀のプラットフォヌム䞊でシヌムレスに融合、デヌタを敎理しお利掻甚を容易にするこずを目指しおいたす。 IoT Connect Gatewayの特城 以䞋に、珟圚のサヌビスの特城をご玹介したす。 1. 閉域網がなくおもセキュアにクラりド接続を実珟 IoTデバむスからクラりドにセキュアにデヌタを送信したい堎合、個別に閉域網で接続する、デバむスからデヌタ暗号化しお送信するずいった方法がありたすが、どちらもコストがかかるずいう課題がありたす。 ICGWは、モバむル網ずむンタヌネットの境界に䜍眮し、IoTデバむスからICGWの区間はモバむル網でセキュアに、ICGWからクラりドサヌビスに接続する時は、ICGWで暗号化(HTTPS/MQTTS) するこずでセキュアで安䟡なサヌビス接続を実珟しおいたす。 2. 凊理負荷がかかる暗号化凊理をサヌビス偎で実斜 IoTデバむスから暗号化したデヌタを送信する堎合、デバむス偎で暗号化を行うこずになりたすが、いく぀かの課題に盎面するこずがありたす。 暗号化によっおIoTデバむスの消費電力が倧きくなっおしたう IoTデバむスの補造コストが高くなっおしたう ICGWは、これらの課題をサヌビス偎で暗号化を行うこずで解決したす。端末偎で暗号化の暗号化胜力を気にする必芁はありたせん。 たた、鍵の亀換などの䜜業もサヌビス偎で䞀括しお実斜できるので、端末ごずの個別蚭定は必芁なくなるずいうメリットがありたす。 3. 暗号化通信によるデヌタ転送量を抑制 IoTデバむスから暗号化通信を行う堎合、暗号化によるプロトコルオヌバヘッドが発生し、暗号化しない通信ず比范しおデヌタ通信料が倚くなるずいう課題がありたす。 ICGWでは、IoTデバむスからICGW区間は、閉域のモバむル網を利甚するため、暗号化を必芁ずせずセキュアにデヌタを転送可胜です。たた、サヌビス偎で暗号化凊理を行うため、セキュアか぀デヌタ通信量を節玄するこずが可胜です。 4. クラりドアダプタ機胜で各皮クラりドサヌビスに簡単接続 ICGWでは、暗号化ず合わせお、各皮クラりドサヌビスの差異を 意識するこずなく簡単に接続できるクラりドアダプタを提䟛しおいたす。 この機胜によっお、IoTデバむスに利甚クラりドに合わせた接続パラメヌタなどの個別の蚭定や開発のコストを削枛するこずが可胜ずなりたす。 各皮クラりドサヌビスは、頻繁に機胜アップデヌトや新芏サヌビスを展開しおいたすが、既に展開枈みのIoTデバむスに、これらのアップデヌトを远埓しおいくこずは困難です。 しかしICGWを利甚しおいる堎合、簡単に転送先サヌビスの倉曎や新機胜が利甚可胜になりたす。 これはすでに展開枈みのIoTデバむスを管理する䞊でも倧きなメリットずなりたす。たた、長期運甚の芳点では、暗号化プロトコルのアップデヌトや远埓ができる点も重芁になりたす。 珟圚察応䞭のクラりドサヌビス クラりドサヌビス プロトコル AWS IoTCore HTTP MQTT GCP IoTCore HTTP MQTT Azure IoTHub HTTP MQTT 珟圚、NTT ComのIoTプラットフォヌムである Things Cloud のクラりドアダプタやその他の新アダプタ察応に぀いおも珟圚開発を行っおいたすので、ご期埅ください。 IoT Connect Gatewayにかける思い CI/CDの取り組みずサヌビスリリヌス ICGWの開発は、スピヌディヌに新機胜を開発し、いち早くお客さたに提䟛するためにDevOpsチヌムずしお開発、運甚を行っおいたす。 新機胜開発・提䟛を実珟するために以䞋のようなこずをICGWのDevOpsチヌムでは取り組んでいたす。このあたりの話もブログ投皿などでお話できればず思っおたす。 1. Infrastructure as Code ICGWの環境構築䜜業は Terraform を利甚し、コヌド管理で 開発環境、テスト環境、商甚環境の構築を行っおいたす。 これにより、新機胜をリリヌスするために必芁ずなる構成倉曎や拠点の远加をスピヌディヌに実珟するこずが可胜になりたした。 2. Test as Code スピヌド感をもった開発も重芁ですが、品質も重芁ですので これたで通り品質を担保し、開発するための仕組みずしお UnitTest, E2E Testなどの怜蚌䜜業をGitHub Actionsで自動化するこずで埓来の怜蚌時間を削枛しおいたす。 たた新機胜远加でデグレが発生しおいないかをチェックし、品質を担保する仕組みを実珟しおいたす。 3. GitOps これたでの開発では、コヌド開発以倖の䜜業や倚倧な時間が必芁でした。 そこで、コンテナ化や Argo CD や Helm を利甚するこずで、CI/CDを実珟し開発者が開発に集䞭できる環境を実珟し、商甚環境に適応しおいくずいう仕組みを䜜りたした。 たた、Stg環境では、開発䞭の新機胜を先行的にお客様やIoTデバむスベンダの方にトラむアルしお頂くなどの取り組みもすすめおいたす。 個人的な思い このICGWは、私が小さなころから奜きな 電子回路の䞖界 ず倧孊院から倢䞭になった ネットワヌクやクラりドの䞖界 を぀なぐサヌビスずしお非垞に思い入れがあるサヌビスです。 このサヌビス開発をはじめお、趣味でIoTデバむスをRaspberry PiやM5Stackなどを利甚しお色々ず開発しおいたすが、その根底には、 「぀くるひず」 でありたいずいう思いがあるず思っおいたす。 以䞋の動画は2007幎頃、ずある番組の1000回攟送蚘念CMずしお床だけ攟送されたもので、リアルタむムに芋お衝撃を受けたものです。 圓時、分野をネットワヌクに倉えお倧孊院進孊するか悩んでおり、その埌も、博士埌期課皋に進むか就職するかなど、い぀も人生の倧きな分岐点をこれたで支えおきおくれた倧切な動画なので、玹介させおください。 この動画の䞭で、息子がただただ聞いおくる「なんでこの䌚瀟にしたの」ずいう無邪気な質問に察しお、私達は自身の勀める瀟名に眮き換えた時、「自分の子䟛が玍埗する答え」、「自分自身が玍埗できる答え」を出せるでしょうか 私の堎合、「なんでNTT Com/NTTグルヌプにしたの」ずいう質問に察しお、父芪の回答である「぀くる人になりたかった」を 「぀くる人であるず共に、぀なぐ人になりたかった」 ず息子に自身をもっお蚀えるよう、これからもサヌビス開発に取り組みたいずおもっおいたす。 最埌に IoTサヌビス関係者、クラりドサヌビス提䟛者などみなさんず共に、 私達の技術が誰かの䜕かの圹に立ちたい 、たたその先にいる 利甚者の幞せに貢献できれば ずいう思いをもっお、これからもサヌビス開発を続けおいきたいず思っおいたす。 それがNTT Comが掲げる Re-connect X ず自分は思っおいたす。 この思いは、匊瀟のNTT Com Engineers' Blog投皿者の共通の思いであるず思っおいたす。そんな䌚瀟にしおいきたいず思っおいたすので、これからも NTT Com ならびに NTT Com Engineers' Blog をよろしくお願い臎したす。 次回予告 今回は、ICGWのご玹介ずICGWにかける思いの投皿になっおしたいたしたが、次回はICGWの䜿い方や、ICGWを䜿った電子工䜜やアプリの蚘事を投皿する予定です。 to be continued... ICGWに関するお問い合わせ先 トラむアル、サヌビス導入に関するお問い合わせ 資料請求・お問い合わせフォヌム 開発チヌムぞのお問い合わせ メヌルを送る ※お手数ですがを半角文字に眮き換えおください
こんにちは、デゞタル改革掚進郚の河合ず浅野です 私たちデゞタル改革掚進郚では、普段から党瀟で䜿うためのデヌタ分析環境の開発・提䟛を行っおいたす。 今回は瀟内でデヌタ分析コンペティションを開催したのでその内容を報告したす。 瀟内デヌタ分析コンペティションずは 瀟内にある様々なデヌタ掻甚課題をコンペティション圢匏に萜ずし蟌み、党瀟で知恵をしがっお解こうずいう詊みです。 もずもず、デヌタサむ゚ンスの界隈ではKaggleやatmaCupず呌ばれる分析力を競うコンペが行われおおり、課題や技術を集団で共有しお解く文化がありたす。 今回はそれらを参考に、瀟内のデヌタを䜿ったコンペを 6/21~7/2 の週間にかけお初開催したした。 開催にあたっお期埅したこずは、以䞋の぀です。 様々な郚眲に散らばっおいるサヌビス特有のドメむン知識、デヌタ、分析技術を䞀箇所に集める 優れた゜リュヌションを集合知によっお短期間で探し出す デヌタ掻甚人材の育成や発掘 䞊蚘を満たすために、KaggleやatmaCupを参考にコンペのルヌルを工倫しお䜜りたした。 具䜓的には䞋蚘のような点です。 予枬結果の蚭定 特定期間に過孊習しおしたうのを避けるため、予枬範囲を2皮類に分けお評䟡する。 䞀方は予枬倀を投皿するず即時蚈算されるpublic scoreに、もう䞀方は最終日たで結果がわからず順䜍決めに䜿われるprivate scoreずしお評䟡する。 情報共有に察する評䟡 参加者は分析結果を適宜共有するDiscussionこずができ、そこにいいねやコメントを぀けるこずが可胜。いいね数が䞊䜍の方も衚地察象ずする チヌムでの参加も可胜ずする コンペのテヌマず進め方 第䞀回のテヌマずしお、むンタヌネットのトラフィック量(※通信量のこず)の将来予枬を蚭定したした。 必芁な分析技術の範囲ずしおは、耇数地域のトラフィックを予枬する倚倉量の時系列予枬ずなりたす。スコアずしおは平均絶察パヌセント誀差(MAPE)を䜿いたした。 コンペティションは以䞋のようなスケゞュヌルで実斜したした。 6/21(月) 開䌚匏: テヌマの説明 6/22(火) 初心者向け講座#1 デヌタの読み蟌みからベヌスラむンのsubmitたでのチュヌトリアル 6/24(朚) 初心者向け講座#2 応甚コンテンツの玹介。 EDA/validation評䟡に぀いお 6/28(月) もくもく䌚#1 6/29(火) もくもく䌚#2 7/2(金) ~17:30 コンペ終了 7/6(火) 結果発衚・閉䌚匏 7/14 成瞟䞊䜍者の発衚. 分析内容の共有䌚 今回のむベントはフルリモヌトのオンラむン開催でしたが、 コンペ初参加の方でもむベントに入りやすいように、初心者向け講座を耇数回 たた分析䜜業内容や疑問点を解消するためのもくもく䌚も耇数回実斜したした。 これらに参加すれば、誰でも共有されたサンプルコヌドを䜿っお 予枬結果を䜜っお投皿できるような圢にしおいたす。 コンペ環境 デゞタル改革掚進郚では、NTTcom内のデヌタ掻甚を掚進するためDLXず呌ばれる党瀟員が䜿える分析基盀を開発しおいたす。 今回はこの分析基盀にコンペ参加者に向けおJupyter labベヌスの環境を甚意し、PythonやRを䜿っお分析できるようにしたした。 デヌタセットはhadoop䞊に眮き、trinoず呌ばれる分散SQLク゚リ゚ンゞンを䜿っお自由に参加者がSQLを叩いおアクセスできるようになっおいたす。 たた、某コンペサむトを参考に、瀟内コンペサむト「Saggle」を甚意し、予枬結果の投皿やコヌドの共有ができるようにしたした。 分析Notebookの共有 リヌダヌボヌド 結果 名を超える゚ントリヌをいただき、最終的なsubmit回数は800回を超えたした。 参加者の予枬誀差のスコア(public)の掚移は以䞋のような感じでした。 コンペが進むに぀れ党䜓のスコアが良くなっおいく様子がみお取れたす。 䞀方でprivate scoreの方も合わせお芋おみるず、分析コンペでありがちな過孊習が発生しおいたのがわかりたす。 今回はsubmit回数の制限を行わなかったこずもあり、public scoreを远い求めすぎおprivate scoreが䞋がり、最終順䜍が䞋がる(shake down)ずいう悲しい思いをされた参加者が倚かったず思いたす。 順䜍発衚埌には、スコア䞊䜍者の方に䜿った手法を解説しおいただきたした。 参加者の声 開催埌、参加者の方からアンケヌトを取ったずころ 課題がやや難しかったずいう意芋もありたしたが、 「知識が無いなりにも操䜜ができる環境・サンプルコヌド準備を始め、基瀎的な質問ぞの応揎サポヌトに感謝感謝でした」「初めおのコンペ参加でしたが、ディスカッションも盛り䞊がり、いろいろな気付きがあっお倧倉楜しむこずができたした」 ずいった意芋を倚数いただくこずができたした。 このうち90%以䞊の方から、「次回開催があれば他の瀟員にも参加をお勧めしたい」ず回答をいただき、瀟内でも非垞にポゞティブな意芋をいただくこずができたした。 たずめ 今回は瀟内の実デヌタを䜿った分析コンペの開催報告でした。 今回の分析コンペによっお䞋蚘のような結果が埗られたした。 共通のデヌタを䜿っお倚様なスキルやバックグラりンドを持぀瀟員が議論しながら䞀぀の分析課題に取り組むこずができた 2週間ずいう短い期間でデヌタの理解ずより高粟床な予枬モデルを䜜成するこずができた 初めおコンペに参加した方/分析知識がなかった方を含め50名以䞊の方が、デヌタ分析、予枬たでできるようになった 今埌は、アむデア゜ンなどもう少し範囲を広げお分析コンペを定期開催できるよう目指しおいきたいず考えおいたす。 これからもコムのデヌタ掻甚が盛んになり、業務やサヌビスをよりよくしおいけるように取り組んでいきたす
職堎䜓隓型むンタヌンシップ゚ンゞニアコヌス募集䞭です (~2021/8/20) 本むンタヌンシップは、実際に各分野で゚ンゞニアずしお働いおいるNTTコミュニケヌションズの瀟員ず䞀緒に働くこずで、実際の開発珟堎を肌で感じお頂くこずができるむンタヌンシップです。 業務䜓隓を通じお、NTTコミュニケヌションズにおける゚ンゞニアの仕事が理解できるだけでなく、職堎䜓隓を通しおみなさん自身が成長を実感できる内容になっおいたす。 参加者からは「゚ンゞニアの仕事が理解できた」「自分の掻躍のむメヌゞが湧いた」などの声も毎幎倚数頂いおいたす。 たた、参加いただいた孊生の方から、次のようなアりトプットもいただいおおりたす。 NTTコミュニケヌションズでむンタヌンシップをしおきたした!! NTTコミュニケヌションズ むンタヌンシップレポヌト 働くむメヌゞを持ちたい方、自分のスキルや胜力がどのように掻かせるのかを知りたい方はぜひご応募ください 募集䞭の゚ンゞニア皮別は次のずおりです。 AI゚ンゞニア ゜フトりェア゚ンゞニア ネットワヌクむンフラ゚ンゞニア セキュリティ゚ンゞニア テレプレれンス゚ンゞニア その他詳现情報は、 募集ペヌゞ をご芧ください。みなさんのご応募をお埅ちしおおりたす ※新型コロナりむルス感染状況により、開催の䞭止・開催内容の倉曎等の可胜性がありたす。 ※倏むンタヌンで実斜するものは、゚ンゞニアコヌスのみずなりたす。
こんにちは、むノベヌションセンタヌの田良島です。普段はコンピュヌタビゞョンの技術開発や怜蚌に取り組んでいたす。7月27日から30日にかけお、画像の認識ず理解技術に関する囜内䌚議の MIRU2021 が開催され、NTT Comからは蚈4名が参加し2件の発衚をしたした。 7/27(火)-7/30(金)にオンラむンで開催される、画像の認識・理解シンポゞりム( #MIRU2021 ) においお、匊瀟むノベヌションセンタヌから2件の研究成果を発衚したす 映像AI分野の研究者・゚ンゞニア・孊生が集う囜内最倧玚の孊䌚です。 孊生は参加費無料✚ ぜひご参加ください▌ https://t.co/4RKvofBCSg — NTTコミュニケヌションズ (@NTTCom_online) 2021幎7月27日 画像の認識・理解シンポゞりム( #MIRU2021 ) においお、本日28日(æ°Ž)のプログラムに、匊瀟の田良島が登堎したす ■15:00-15:30 口頭発衚ショヌト2 ■17:15-18:30 むンタラクティブ1-2 「One Shot Deep Model for Multi-Actor Scene Understanding」 詳现はこちら▌ https://t.co/4RKvofBCSg — NTTコミュニケヌションズ (@NTTCom_online) 2021幎7月28日 画像の認識・理解シンポゞりム( #MIRU2021 ) にお、匊瀟の䞹野、垂川、島田、朚村、泉谷が研究成果を発衚したす ■7/29(朚) 15:45-17:00 「プロセスデヌタおよび炉内映像Optical-Flowに基づくマルチモヌダル深局孊習によるごみ焌华プラントの蒞気量掚定」 詳现はこちら▌ https://t.co/4RKvofBCSg — NTTコミュニケヌションズ (@NTTCom_online) 2021幎7月29日 ここでは、参加メンバヌでMIRUの報告をしたいず思いたす。 ※なお私たちのチヌムでは、2021幎8月4日珟圚゚ントリヌ受付䞭の 職堎䜓隓型むンタヌンシップ に、 AI/MLシステムずの統合を志向した、メディアAI技術の研究開発 ずいうポストを出しおいたす。孊生さんであればどなたでも応募可胜です、ご興味あればぜぴントリヌを怜蚎ください MIRU2021 MIRUはコンピュヌタビゞョンや画像映像認識を扱う囜内最倧玚の孊䌚です。個人的には、MIRUは SSII ず䞊んで画像映像認識を察象ずした囜内孊䌚の二倧巚頭をなしおいる印象がありたす。MIRUの方がよりアカデミックな雰囲気 今幎は過去最倚の1,428名の参加があった ずのこずで、この技術分野の勢いをひしひしず感じたす MIRUの発衚区分(招埅講挔等を陀く)には口頭発衚(ロング、ショヌト)ずむンタラクティブ発衚があり、前者は査読がありたす。今回NTT Comからは、口頭発衚(ショヌト)1件ずむンタラクティブ発衚1件を行いたした。以䞋ではたず、口頭発衚の機䌚をいただいた "One Shot Deep Model for Multi-Actor Scene Understanding" に぀いおご玹介したす。 NTT Comからの発衚 この研究では、䞍特定倚数の人物(アクタヌ)が写る映像を入力ずしおそのシヌンを認識する問題に取り組んでいたす。より具䜓的には、アクタヌを怜出・远跡するこずに加え、各個人がずる動䜜ず、アクタヌが集団でずる行動ずを認識するずいう問題です。集団の行動は、チヌムスポヌツでのセットプレむをむメヌゞしおいただくず分かりやすいかもしれたせん。アクタヌはシヌンの䞭でお互いに圱響を及がし合うので、特に個人の動䜜や集団の行動の認識では、アクタヌ間の盞互䜜甚を捉えるこずも重芁になっおきたす。 アプロヌチずしお、アクタヌの怜出・远跡・個人動䜜認識・集団行動認識の各サブタスクにState-of-the-art(SOTA)の方法を適甚するずいうものがたず思い぀きたす。ですがこのアプロヌチには、党䜓の凊理が冗長でか぀時間がかかっおしたう問題がありたす。どのサブタスクにも䜕かしらの深局孊習モデルを甚意するこずになり、か぀それらはしばしば同じバックボヌンであったりするので、圓然ず蚀えば圓然です。䞀方で各サブタスクに぀いお考えおみるず、䟋えば同䞀人物は前埌のフレヌムで同じ動䜜を継続しおいる可胜性が高いなど、それらは少なからず関係し合っおいるこずに気が付きたす。サブタスクは関係し合っおいるのに各々は独立に解くずいうアプロヌチには、改善の䜙地がある気がしおきたした。 このモチベヌションのもず、本研究では䞊蚘の党サブタスクを解くための特城をワンショットで出力可胜なモデルを提案しおいたす。モデルは、各フレヌムから怜出、远跡、行動/動䜜認識のための特城抜出を担う畳み蟌みニュヌラルネットワヌク(CNN)、行動/動䜜特城をその盞互䜜甚を考慮しお倉換するニュヌラルネットワヌク(Relation Encoder)ずから構成しおいたす。Relation Encoderでは、Transformer 1 で採甚されおいるMulti-Head Attentionを拡匵し、アクタヌの芋え方ず䜍眮どちらの情報もふたえた特城倉換を実珟しおいるずころがポむントです。 Volleyballデヌタセット 2 ずいう代衚的なベンチマヌクで評䟡したずころ、各サブタスク毎にSOTAを適甚するアプロヌチず同等の性胜を、党䜓で玄半分のモデルサむズおよび2倍の凊理速床で実珟できるこずが確認できたした。 発衚はZoomのりェビナヌで実斜し、およそ450名の方に聎講いただきたした。たたむンタラクティブ発衚はoViceで実斜し、倚くの方ず盎接ディスカッションさせおいただきたした。MIRU運営の皆様や聎講・質疑くださった皆様、たこずにありがずうございたした。この分野の競争は本圓に激しいなず感じおいたすが、来幎以降もぜひ私たちの取り組みを発衚しおいけるよう頑匵りたいです。 気になった発衚 こんにちは、むノベヌションセンタヌの鈎ヶ嶺です。普段は、クラりド・ハむブリッドクラりド・゚ッゞデバむスを利甚したAI/MLシステムに関する業務に埓事しおいたす。私からは3件気になった発衚をご玹介したす。 L1-2 動的光線空間のシングルショット撮圱 抂芁 時間成分を含んだ動的な光線空間をシングルショット撮圱から埩元する手法を提案しおいたした。光線空間ずは様々な角床から撮圱した画像を利甚した倚芖点画像矀で3次元ディスプレむなどに応甚されたす。埓来的なカメラアレむでは装眮の倧芏暡化ずいう課題、レンズアレむ型のplenoptic cameraでは䞀台のカメラで撮圱できる代わりに芖点ごずの空間解像床が䜎䞋するずいう課題がありたす。 䟋: 倧芏暡なカメラアレむシステム 3 提案法では、1台のカメラの開口面ず撮像面で埗られる情報を適切に2次元䞊に笊号化し、CNNで5次元の動的な光線空間を埩元し高解像床、高フレヌムレヌトを実珟しおいたした。さらにハヌドりェアによる怜蚌も実斜しおおり、実応甚䞊の有効性も瀺しおいたした。 所感 1台のカメラにある開口面ず撮像面の関係が光線空間を衚珟しおいるこずを利甚し、それを2次元空間䞊に笊号化し埩元する発想が面癜かったです。さらにハヌドりェアでも怜蚌が成功しおおり、今埌の応甚が期埅される研究でした。 L2-1 連動する骚栌動䜜の衚珟に適した時空間特城の孊習による人物運動予枬法 抂芁 人物骚栌動䜜の予枬モデルにおいお動䜜特城を時間的・空間的に集玄するアヌキテクチャを提案しおいたした。 人物運動予枬モデルには、2぀課題がありたす。たず盎前の動䜜が支配的なケヌスや、長期的な動䜜が支配的なケヌスなど参照すべき特城が異なる時間的問題です。次に、局所的な動䜜のみを考慮すれば良いケヌスず倧域的な動䜜を考慮しなければならないケヌスなど参照する特城が異なる空間的問題です。提案法では、時間的問題に察しおMultiscale Temporal Convolution 4 のそれぞれの䞭間局を甚いお参照時間の異なる特城を衚珟するこずで時間的に集玄しおいたす。空間的問題に察しおは、Encoderでは䜍眮ベヌスの空間に出力し、Decoderに角床ベヌスの空間を入力ずしお利甚しおいたした。それぞれの空間は䜍眮ず回転ベクトルのダコビ行列から2぀の特城量空間間のダコビ行列を生成しお写像されたす。これらの手法から、高い性胜を瀺す予枬結果を提瀺しおいたした。 所感 EncoderずDecoderで䜍眮ず角床ずいう異なる特城を甚いるこずで空間的に頑健な予枬モデルにしおいる点が面癜かったです。実際のデモを芋おも高い粟床で予枬されおおり、興味深い研究でした。 L5-3 An Improved Inter-intra Contrastive Framework for Self-supervised Video Representation Learning 抂芁 この発衚では、動画に関する察照孊習 5 の手法Inter-Intra Contrastive(IIC) 6 を改良したIICv2を提案しおいたした。 IICの党䜓像 䞻にIICv2は3぀の芁玠が拡匵されおいたす。1぀目がAnchorであるフレヌム矀からFrame repeating, Temporal shuffling, Clip rotationなど操䜜をしお察照孊習の負䟋を生成するintra-negative sampleです。2぀目は画像に察しおのStrong data augmentations 7 です。3぀目はContrastive lossが適甚される空間に衚珟をマッピングする小さなネットワヌクであるprojection head 8 です。実隓結果ずしお UCF101 9 , HMDB51 10 のデヌタセットにおいお最新のSOTAを䞊回る結果を瀺しおいたした。 所感 動画に察する察照孊習においお、負䟋の生成方法や効果的なデヌタの氎増し法などの様々な改良をしおおり勉匷になりたした。最終的な性胜も珟圚のSOTAを䞊回っおおり、今埌の参考にしたいず思いたした。 こんにちは、むノベヌションセンタヌ新入瀟員の霋藀です。普段は、今回䞀緒に参加しおいる鈎ヶ嶺ず同じく、クラりド・ハむブリッドクラりド・゚ッゞデバむスを利甚したAI/MLシステムの研究開発をコンピュヌタビゞョンを題材に取り組んでいたす。私からも3件気になった発衚をご玹介したす。 L1-3 Can Vision Transformers Learn without Natural Images? arXiv:2103.13023 抂芁 Vision Transformer(ViT) 11 の性胜は、孊習に甚いるデヌタセットサむズに匷く圱響を受けるこずが知られおいたすが、倧芏暡なデヌタセットを甚意するにはコストや倫理の問題が生じたす。この研究では、数匏から画像ずラベルを自動生成する FractalDB 12 を甚いおViTの事前孊習を行うず、自然画像ずその正解ラベルを甚いお孊習した堎合ずほが同粟床が埗られる、぀たり自然画像を甚いるこずなくViTの事前孊習は可胜だずいう驚くべき結果が瀺されおいたす。 評䟡 ・FractalDBで事前孊習したViTずImageNet-1k 13 ,Places-365 14 などを事前孊習させたViTを比范した実隓 ・FDSL(FractalDB-10k)ずSSL(Jigsaw 15 , Rotation 16 , MoCov2 17 , SimCLRv2 18 )の比范実隓を行っおいたす。 Computer Vision and Pattern Recognition (CVPR). (2009) 248–255 DeiTsで事前孊習枈みのFractalDB-1k/10kがImageNet-100/Places-30のモデルを䞊回り、ImageNet-1k/Places-365を䞊回るこずはできたせんでした。ですが、ImageNet-1kず肉薄した性胜を持っおいるこずが実隓から分かりたした。 FractalDB-10KはSimCLRv2よりも若干粟床を䞊回った結果を出したした。たた、C10、VOC12、P30においおは粟床を䞊回った結果を出しおいたす。 所感 今埌、研究が発展するこずにより様々なタスクぞの応甚可胜性が高いため、楜しみな研究の1぀になりたした。゜ヌスコヌドもオヌプン゜ヌスで公開されおいるので、手元で詊しおみたいずも思いたす。 L2-4 Lightning-fast Virtual Try-on without Paired Data and Direct Supervision 抂芁 この研究では、匱教垫あり孊習を甚いお、仮想詊着を提案しおいたす。仮想詊着ずは、Sourceの画像に察しお、Targetの服に着せ替える技術のこずで、応甚先ずしお、アパレルのECショップなどがありたす。埓来手法の、アノテヌションコスト、メモリの消費量、テスト速床の問題を解決するものずしお、本発衚の手法 (LiVIRT) を提案しおいたす。゚ンゞンの䞭身ずしおは、3぀のネットワヌクを甚いおいたす。その䞭で無駄を取り払うなどの工倫によるネットワヌクの高速化を行っおいたす。 評䟡 デヌタにペアデヌタがある堎合の実隓では、教垫あり孊習の手法(CP-VTON 19 , SieveNet 20 )ずLiVIRTの比范を行い、教垫あり孊習ずほが同じ粟床で仮想詊着ができおいたす。 ペアデヌタが存圚する堎合の実隓においおも、粟床が良いこずが実隓で瀺されおいたす。 所感 私が詊したこずのある仮想詊着は、実際に着おいる感があたりありたせんでした。仮想詊着の技術はECサむトのUX向䞊に倧きく圱響するず思うので、興味深く発衚を聞かせおいただきたした。 L5-1 耇屈折反射特性の蚈枬に基づく材質識別 抂芁 材質識別は、資源の開発やリサむクル、自動運転など様々なシヌンで求められる技術です。この研究では、耇屈折反射特性から抜出された特城量をU-net 21 に入力しおクラス分類を行っおいたす。 評䟡 79皮類の材質を、金属・朚材・垃・暹脂・石材に材質クラスの識別を行っおいたす。U-netず比范する手法ずしおは、k近傍法を甚いおいたす。結果ずしお、5皮類の材質クラスの識別平均正解率は、U-netで0.90、k近傍法で0.87ずなり、U-netを甚いた方が正解率が高いこずが確認できたした。 所感 耇屈折反射特性から特城量を求めおいる点が面癜いず感じたした。モデルのバックボヌンを倉えた堎合の粟床倉化も気になるずころです。 最埌に MIRU2021の暡様をご玹介したした。NTT Comでは、今回ご玹介した孊䌚での発衚調査はもちろんのこず、画像や映像、曎には音声蚀語も含めた様々なメディアAI技術の研究開発に今埌も積極的に取り組んでいきたす。たた䞀緒に技術開発を進めおくれる仲間も絶賛募集䞭です。 アカデミックな研究に泚力したくさん論文を曞きたい 最新の技術をいちはやく取り入れ実甚化に結び付けたい AIアルゎリズムに加え、AI/MLシステム党䜓の最適な蚭蚈を暡玢したい ずいう方々に掻躍しおいただけるフィヌルドが匊瀟には倚くあり、いく぀か新卒採甚のポゞションを甚意する予定です。゚ントリヌの受付開始は2022幎1月以降ずなる予定ですが、よろしければぜひ新卒採甚ペヌゞをりォッチしおいただけるず嬉しいです さらに冒頭でも述べた通り、2021幎8月4日珟圚、NTT Comでは 倏の職堎䜓隓型むンタヌンシップ の゚ントリヌを受付䞭です。私達のチヌムからも、AI゚ンゞニアカテゎリに AI/MLシステムずの統合を志向した、メディアAI技術の研究開発 ずいうポストを出しおいたす。むンタヌンを通じお、䌚瀟やチヌムの雰囲気、そしお私たちの取り組みを知っおいただく機䌚にできればず考えおいたす。皆様のご応募、心からお埅ちしおいたす Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., … & Polosukhin, I. (2017). Attention is all you need. In Advances in neural information processing systems (pp. 5998-6008). arXiv:1706.03762 ↩ Ibrahim, M.S., Muralidharan, S., Deng, Z., Vahdat, A., & Mori, G. (2016). A Hierarchical Deep Temporal Model for Group Activity Recognition. 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 1971-1980. ↩ 裞県立䜓ラむブ映像システムを支えるカメラアレむの開発 https://news.mynavi.jp/photo/article/20080625-cameraarray/images/004l.jpg ↩ Lea, C., Flynn, M. D., Vidal, R., Reiter, A., & Hager, G. D. (2017). Temporal convolutional networks for action segmentation and detection. In proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (pp. 156-165). arXiv:1611.05267 ↩ Khosla, P., Teterwak, P., Wang, C., Sarna, A., Tian, Y., Isola, P., … & Krishnan, D. (2020). Supervised contrastive learning. arXiv preprint arXiv:2004.11362. arXiv:2004.11362 ↩ Tao, Li, Xueting Wang, and Toshihiko Yamasaki. “Self-supervised video representation learning using inter-intra contrastive framework.” Proceedings of the 28th ACM International Conference on Multimedia. 2020. arXiv:2008.02531 ↩ Grill, J.-B., Strub, F., Altche, F., Tallec, C., Richemond, P. H., ÂŽBuchatskaya, E., Doersch, C., Pires, B. A., Guo, Z. D., Azar, M. G. et al.: Bootstrap your own latent: A new approach to self-supervised learning, Advances in Neural Information Processing Systems (2020) ↩ Chen, T., Kornblith, S., Norouzi, M., & Hinton, G. (2020, November). A simple framework for contrastive learning of visual representations. In International conference on machine learning (pp. 1597-1607). PMLR. ↩ Soomro, K., Zamir, A. R. and Shah, M.: UCF101: A dataset of 101 human actions classes from videos in the wild, arXiv preprint arXiv:1212.0402 (2012). ↩ Kuehne, H., Jhuang, H., Garrote, E., Poggio, T. and Serre, T.: HMDB: A large video database for human motion recognition, IEEE International Conference on Computer Vision, pp. 2556–2563 (2011). ↩ Dosovitskiy, A., Beyer, L., Kolesnikov, A., Weissenborn, D., Zhai, X., Unterthiner, T., … & Houlsby, N. (2020). An image is worth 16x16 words: Transformers for image recognition at scale. arXiv preprint arXiv:2010.11929. arXiv:2010.11929 ↩ H. Kataoka, K. Okayasu, A. Matsumoto, E. Yamagata, R.Yamada, N.Inoue, A. Nakamura, and Y. Satoh. Pre-training without Natural Images. In Asian Conference on Computer Vision (ACCV), 2020. arXiv:2006.10029 ↩ Deng, J., Dong, W., Socher, R., Li, L.J., Li, K., Fei-Fei, L.: ImageNet: A LargeScale Hierarchical Image Database. In: The IEEE International Conference on ↩ Zhou, B., Lapedriza, A., Khosla, A., Oliva, A., Torralba, A.: Places: A 10 million Image Database for Scene Recognition. IEEE Transactions on Pattern Analysis and Machine Intelligence (TPAMI) 40 (2017) 1452–1464 ↩ Noroozi, M., & Favaro, P. (2016, October). Unsupervised learning of visual representations by solving jigsaw puzzles. In European conference on computer vision (pp. 69-84). Springer, Cham. ↩ Gidaris, S., Singh, P., Komodakis, N.: Unsupervised Representation Learning by Predicting Image Rotations. In: International Conference on Learning Representation(ICLR) (2018) arXiv:1803.07728 ↩ Chen, X., Fan, H., Girshick, R., & He, K. (2020). Improved baselines with momentum contrastive learning. arXiv preprint arXiv:2003.04297. arXiv:2003.04297 ↩ Chen, T., Kornblith, S., Swersky, K., Norouzi, M., & Hinton, G. (2020). Big self-supervised models are strong semi-supervised learners. arXiv preprint arXiv:2006.10029. arXiv:2006.10029 ↩ Bochao Wang, Huabin Zheng, Xiaodan Liang, Yimin Chen, Liang Lin, Meng Yang.“Toward Characteristic-Preserving Image-based Virtual Try-On Network”.arXiv preprint arXiv:1807.07688. arXiv:1807.07688 ↩ Surgan Jandial, Ayush Chopra, Kumar Ayush, Mayur Hemani, Abhijeet Kumar, Balaji Krishnamurthy.“SieveNet: A Unified Framework for Robust Image-Based Virtual Try-On”.arXiv preprint arXiv:2001.06265. arXiv:2001.06265 ↩ O. Ronneberger, P. Fischer, T. Brox, ”U-net: Convolutional networks for biomedical image segmentation”, MICCAI, 2015 ↩
こんにちは、むノベヌションセンタヌの前田です。今回は、前回に匕き続き、私のチヌムで開発䞭の制埡OTシステム向けセキュリティ察策技術OsecTオヌセクトに぀いおご玹介したす。 前回の蚘事前線では、以䞋の内容をご玹介したした。 OTネットワヌクの抂芁 OTネットワヌクのセキュリティ察策ず課題 OsecTの抂芁 OsecTのネットワヌク可芖化機胜の詳现 本蚘事では、 OsecTの脅嚁怜知機胜の詳现 に぀いお、ご玹介したす。 前線のおさらい 工堎・ビル等のスマヌト化に䌎い、OTネットワヌクのセキュリティリスクも高たっおいたす。しかし、OTのネットワヌクは閉域ネットワヌクずしお構築されおきたこずや独自OS・プロトコルが倚数利甚されおきたこずから、セキュリティ察策が進んでいない珟状がありたす。こうした状況を受けお、NTT Comでは、OTのセキュリティ察策技術OsecTオヌセクトを開発しおいたす。 OsecTには、 守るべき資産や通信の可芖化を行うネットワヌク可芖化機胜 ず、 䞍正に接続された端末やサポヌト切れのOSを利甚する端末等を怜出した際のアラヌト機胜脅嚁怜知機胜 の2぀の機胜がありたす。 以降では、OsecTの脅嚁怜知機胜の詳现に぀いお、開発の工倫点などを亀えながらご玹介したす。 ※OsecTは珟圚開発䞭の技術であり、正匏リリヌス時には仕様・画面むメヌゞが倉わる可胜性が倧いにありたす。 脅嚁怜知機胜 OTの守るべき資産・ネットワヌクを可芖化し、資産台垳の最新化や監芖ポむントの明確化等が行えたら、次のステップずしお有甚なのが脅嚁怜知機胜になりたす。 こちらの機胜もネットワヌク可芖化機胜ず同様に、オフラむンのトラヒックデヌタを元に定期アセスメント等で利甚する䜿い方もできたすが、リアルタむムのトラヒックデヌタをミラヌリングで取り蟌んで脅嚁怜知機胜で凊理し、発出されるアラヌトを監芖する䜿い方が有効です。 OsecTでは、以䞋の7぀の脅嚁怜知機胜を開発䞭です。機胜毎にコンテナを分けるこずで、必芁なものだけを遞択しお導入できる䜜りにしおいたす。 たた、各脅嚁怜知機胜は、次のいずれかに属しおいたす。 孊習期間を定めおその期間を正垞状態ずしお孊習し、怜知期間においお、孊習モデルず異なる振る舞いが芳枬された堎合にアラヌトを発出する「アノマリ怜知」 セキュリティの脅嚁に぀ながる通信パタヌンやサポヌト切れのOS情報などを事前定矩したルヌルに基づき怜知期間の通信をチェックし、ルヌルにマッチした堎合にアラヌトを発出する「ルヌルベヌス怜知」 新芏端末怜知 こちらは、アノマリ怜知に属し、孊習期間のトラヒックデヌタに登堎する、{IPアドレス, MACアドレス}の組み合わせを孊習しお、孊習モデルに登堎しない{IPアドレス, MACアドレス}の組み合わせの通信が芳枬された堎合にアラヌトを発出しおいたす。 アラヌト画面は、次のようになっおいたす。 こちらでは、圓該通信が発生した時刻、未孊習の{IPアドレス, MACアドレス}の組み合わせに加えお、圓該端末を特定しやすいように、MAC Vendorの情報を、たた、圓該端末が䞍正なものだった堎合にアクセス先を特定できるように、圓該端末がクラむアントずなっお利甚しおいるサヌビスず宛先IPアドレス、圓該端末がサヌバずなっお利甚しおいるサヌビスず送信元IPアドレス、の情報を衚瀺しおいたす。こちらのアラヌトを芋るこずで、蚈画されおいない端末がネットワヌクに接続された際などに早期発芋するこずができたす。 ネットワヌクホワむトリスト こちらは、アノマリ怜知に属し、孊習期間のトラヒックデヌタに登堎する、{送信元IPアドレス, 送信元ポヌト番号, 宛先IPアドレス, 宛先ポヌト番号, プロトコル}の組み合わせを孊習しお、孊習モデルに登堎しない組み合わせの通信が芳枬された堎合にアラヌトを発出しおいたす。 OTの独自サヌビスのプロトコルの䞭には、䞀般的な通信サヌビスの振る舞いずは異なり、送信元ポヌト番号が固定倀で、宛先ポヌト番号がランダム or 範囲の倀を取るものがありたす。こちらの特城を考慮せずにネットワヌクホワむトリストの孊習モデルを䜜成するず、孊習モデルの行数テヌブル数が膚倧になる問題がありたす。OsecTでは、こうしたサヌビスの通信を自動刀別・集玄しお効率的に孊習しおいたす。 孊習モデルは、䟋えば、以䞋のようなものが䜜成され、4行目や7行目が前述の仕組みで集玄された箇所になりたす。 たた、ネットワヌクホワむトリストのアラヌト画面は、次のようになっおいたす。 こちらでは、圓該通信が発生した時刻、未孊習の{送信元IPアドレス, 送信元ポヌト番号, 宛先IPアドレス, 宛先ポヌト番号, プロトコル}の組み合わせに加えお、圓該IPアドレスに玐づく端末や利甚サヌビスを特定しやすいように、IPアドレス郚分にマりスカヌ゜ルを合わせた際に、端末の情報を吹き出しで衚瀺するようにしおいたす。こちらのアラヌトを芋るこずで、平垞時ずは異なる宛先ぞの通信や平垞時に利甚しおいない䞍審なサヌビスの通信などを早期発芋できたす。 OTコマンドホワむトリスト こちらは、アノマリ怜知に属し、OTプロトコルのL7情報を甚いた脅嚁怜知機胜になっおいたす。 珟圚は、ビルのオヌトメヌション・制埡に利甚されるBACnet/IPに察応しおおり、孊習期間のトラヒックデヌタに登堎する、{送信元IPアドレス、宛先IPアドレス、BACnet/IPのL7情報}の組み合わせを孊習しお、孊習モデルに登堎しない組み合わせの通信が芳枬された堎合にアラヌトを発出しおいたす。 OTコマンドホワむトリストBACnet/IPのアラヌト画面は、次のようになっおいたす。 こちらでは、圓該通信が発生した時刻、未孊習の{送信元IPアドレス、宛先IPアドレス、BACnet/IPのL7情報}の組み合わせに加えお、圓該IPアドレスに玐づく端末や利甚サヌビスを特定しやすいように、IPアドレス郚分にマりスカヌ゜ルを合わせた際に、端末の情報を吹き出しで衚瀺しおいたす。こちらのアラヌトを芋るこずで、平垞時ずは異なるBACnetサヌビスコマンド通信の発生を早期発芋でき、䟋えばビルシステムの保守䜜業スケゞュヌル等ず突合しお適切な通信かを確認するこずで、異垞を特定できたす。 流量ベヌスラむン怜知 こちらは、アノマリ怜知に属し、孊習期間のトラヒックデヌタに登堎する、{送信元IPアドレス, 宛先IPアドレス}のペア毎に、各時間垯のトラヒック量パケット数、バむト数をベヌスに、各時間垯で取り埗るトラヒック量の範囲䞊限倀ず䞋限倀を掚定しお、その倀を孊習モデルずしお保存したす。怜知期間では、孊習されたトラヒック量の䞊限倀を䞊回る/たたは䞋限倀を䞋回る通信が芳枬された堎合にアラヌトを発出したす。たた、OTでは決められた時間に機械的に通信する端末が倚く存圚するため、{src_ip, dst_ip}のペア毎に、各時間垯での通信の有無を孊習しお、平垞時は通信が発生する時間垯にもかかわらず、通信が発生しなくなった堎合にもアラヌトを発出しおいたす。 OTでは、工堎等が皌働しおいる日なのか、非皌働の日なのかによっお、通信量や頻床の傟向が倧きく異なる堎合があるため、こちらの機胜では、非皌働日や非皌働の時間垯を蚭定できるようにしおいたす。非皌働日・時間垯の堎合は、皌働日ずは別のベヌスラむン䞊限倀ず䞋限倀を䜜成しお怜知に利甚したす。 流量ベヌスラむン怜知のアラヌト画面は、次のようになっおいたす。 こちらでは、圓該通信が発生した時刻、送信元IPアドレス、宛先IPアドレス、アラヌト皮別䞊限倀を䞊回った/䞋限倀を䞋回った/通信が停止した、デヌタ皮別パケット数/バむト数、芳枬した通信量、孊習された通信量の䞊限倀、孊習された通信量の䞋限倀、通信断の刀定に利甚されるカりンタの倀などを衚瀺しおいたす。たた、他の脅嚁怜知ず同様に、IPアドレスにマりスカヌ゜ルを合わせた際の端末情報の吹き出し衚瀺もありたす。 䟋えば、画像の2行目では、2019/08/20 6:30においお、10.1.0.232から10.1.0.55ぞのパケット数が孊習された䞊限倀の483個に察しお、10052個芳枬されおおり、䞊限倀を超えたこずでアラヌトが発出されおいたす。 流量ベヌスラむン怜知ではさらに、通信量の倉化や異垞性を分かりやすくするために、次のような時系列グラフで、芳枬された通信の詳现を確認できるようにしおいたす。 こちらのグラフでは、赀線が孊習された䞊限倀、青線が孊習された䞋限倀、黒線が芳枬倀を衚しおいたす。たた、グラフ䞊の点にマりスカヌ゜ルを合わせるこずで、芳枬された倀や通信に含たれるサヌビスの内蚳を吹き出しで衚瀺しおいたす。さらに、こちらの画面で分析に必芁な情報が極力完結するように、画面右には、送信元IPアドレスず宛先IPアドレスに玐づく端末の詳现情報を衚瀺しおいたす。こちらのアラヌトや通信の詳现ペヌゞを芋るこずで、平垞時からの急激な通信量の増加や攻撃等でのシステム停止による通信断などを早期発芋できたす。 呚期異垞怜知 こちらは、アノマリ怜知に属し、BACnet/IPに特化した脅嚁怜知機胜ずなっおいたす。孊習期間のトラヒックデヌタに登堎する、{送信元IPアドレス, 宛先IPアドレス, BACnet/IPのL7情報}の組み合わせ毎に、信号凊理技術を甚いお、通信呚期60秒に1回、通信発生などを抜出しお孊習したす。怜知期間では、{送信元IPアドレス, 宛先IPアドレス, BACnet/IPのL7情報}毎に、通信呚期を抜出し、孊習された呚期ず比范しお、呚期倖の通信が発生した堎合、たたは呚期的な通信が消倱した堎合にアラヌトを発出したす。 こちらは、NTTの瀟䌚情報研究所で考案された 技術 がベヌスずなっおおり、耇数のビルの通信デヌタを分析しお埗られたノりハりに基づき、アルゎリズムの構築、特城量・各皮パラメヌタの蚭定を行っおいたす。 呚期異垞怜知の孊習モデルは、次のようになっおいたす。 こちらでは、{送信元IPアドレス, 宛先IPアドレス, BACnet/IPのL7情報}の組み合わせ毎に、孊習された通信呚期(PRI)、孊習時に非呚期ずしお刀定された通信数(non_periodic)、最終刀定されたモデル(period=通信に呚期性あり、non=通信に呚期性なし、period_and_non=通信に呚期性ありずなしが混圚)などを衚瀺しおいたす。孊習された通信呚期(PRI)の項目は、(時間間隔, 通信回数)で衚蚘されるようになっおおり、䟋えば、(62, 3)は、62秒毎に3回ず぀の通信が発生するこずを意味しおいたす。たた、呚期性なしの堎合は(-1, 1)が衚瀺されたす。なお、1行目の[(62, 3), (-1,1)]は、通信を分解した際に、呚期性のある通信ず非呚期の通信が混圚しおいるこずを意味しおいたす。 たた、呚期異垞怜知のアラヌト画面は、次のようになっおいたす。 こちらでは、圓該通信が発生した時刻、アラヌトの内容(Non Periodic communication=呚期倖通信の発生、Lost Communication=呚期通信の消倱)、{送信元IPアドレス, 宛先IPアドレス, BACnet/IPのL7情報}の組み合わせ、ホバヌで端末の詳现情報を衚瀺しおいたす。こちらのアラヌトを芋るこずで、BACnet/IPにおける䞍正なコマンドの挿入や通信断を早期発芋できたす。 サポヌト切れOS端末怜知 こちらは、ルヌルベヌス怜知に属したす。サポヌト切れOSの䞀芧衚を事前ルヌルずしお保持しおおり、怜知期間のトラヒックデヌタの䞭に登堎する{IPアドレス, MACアドレス}の組み合わせ毎にOSを掚定し、サポヌト切れOSの䞀芧衚の内容ずマッチする堎合にアラヌトを発出しおいたす。 前線でご玹介したネットワヌク可芖化機胜でも、OS掚定情報を衚瀺しおいたすが、あちらは䞻に定期アセスメント等で利甚するこずを想定しおいるため、様々なメトリックを利甚しお、少しでも叀いOSの疑いがあれば衚瀺するようにしおいるのに察しお、脅嚁怜知機胜は䞻にリアルタむムにアラヌトを監芖する䜿い方を想定しおいるため、運甚者の負担を軜枛する誀怜知を枛らすように、確実性が高く、改ざんが困難なメトリックのみを利甚しおOS情報を掚定しおいたす。 サポヌト切れOS端末怜知のアラヌト画面は、次のようになっおいたす。 こちらでは、圓該通信が発生した時刻、{IPアドレス, MACアドレス}の組み合わせ、OS情報に加えお、圓該端末を特定しやすいように、MAC Vendorずホスト名の情報を、たた、圓該端末が䞍正なものだった堎合にアクセス先を特定できるように、圓該端末がクラむアントずなっお利甚しおいるサヌビスず宛先IPアドレス、圓該端末がサヌバずなっお利甚しおいるサヌビスず送信元IPアドレス、の情報を衚瀺しおいたす。こちらのアラヌトを芋るこずで、サポヌト切れのOSを利甚する端末がネットワヌクに接続された際に早期発芋できたす。 シグネチャ怜知 こちらは、ルヌルベヌス怜知に属したす。セキュリティの脅嚁に぀ながる通信パタヌンの情報シグネチャを事前ルヌルずしお保持しおおり、シグネチャの内容に合臎する通信が芳枬された堎合に、アラヌトを発出しおいたす。 こちらの機胜では、オヌプン゜ヌスのIT向けIDS(Intrusion Detection System)である「 Suricata 」ず、Proofpoint瀟が配垃しおいる ルヌルファむル シグネチャを利甚しおいたす。 ルヌルファむルには、セキュリティの脅嚁に぀ながる通信パタヌンを衚すルヌルが耇数蚘茉されおいたすが、䞀䟋を挙げるず、次のようなものがありたす。 alert http $HOME_NET any -> any any (msg:"ET POLICY Outgoing Basic Auth Base64 HTTP Password detected unencrypted"; flow:established,to_server; content:"Authorization|3a 20|Basic"; nocase; http_header; content:!"YW5vbnltb3VzOg=="; within:32; http_header; content:!"Proxy-Authorization|3a 20|Basic"; nocase; http_header; threshold: type both, count 1, seconds 300, track by_src; reference:url,doc.emergingthreats.net/bin/view/Main/2006380; classtype:policy-violation; sid:2006380; rev:13; metadata:created_at 2010_07_30, updated_at 2020_08_28;) Suricataのルヌルのフォヌマットは、以䞋のようになっおいたす。 action: シグネチャにマッチした際のアクション䟋では、alert header: ルヌルを適甚するプロトコル、IPアドレス、ポヌト番号、通信の向き䟋では、http $HOME_NET any -> any any rule options: オプション䟋では、(msg: から 28;) たでの括匧で囲たれた郚分 䞊蚘の䟋は、http通信か぀監芖察象のネットワヌクから任意のポヌト、宛先ぞの通信を怜査し、rule optionsで指定された条件を満たした堎合に、"ET POLICY Outgoing Basic Auth Base64 HTTP Password detected unencrypted"(ベヌシック認蚌でHTTPパスワヌドが暗号化されおいないこずを怜出したずいう意味)のアラヌトを発出するルヌルになっおいたす。 rule optionsには、现かなマッチ条件などを;で区切っお耇数指定可胜で、䟋えば、 flow:established,to_server; content:"Authorization|3a 20|Basic"; の郚分は、フロヌが確立しおいおclient→server方向であるこず、ペむロヌドに"Authorization: Basic"が含たれるこず、を衚しおいたす。 正確なルヌルの読み方は、 公匏ドキュメント をご参照ください。 OsecTでは、Suricataの出力結果を、次のようなアラヌト画面ずしお衚瀺しおいたす。 こちらでは、圓該通信が発生した時刻、送信元IPアドレス、送信元ポヌト番号、宛先IPアドレス、宛先ポヌト番号、プロトコル、マッチしたルヌルの内容ずカテゎリ、Severity1: high, 2: medium, 3: lowを衚瀺しおいたす。たた、他の脅嚁怜知機胜ず同様に、極力こちらの画面だけで必芁な情報を確認できるように、ホスト情報をホバヌ衚瀺しおいたす。 こちらのアラヌトを芋るこずで、脆匱性を含む叀いJavaの利甚や平文でのパスワヌドのやり取りなど、セキュリティの脅嚁に぀ながる通信の発生を早期発芋できたす。 アラヌト統合画面 OsecTでは、ここたでにご玹介した7぀の脅嚁怜知機胜のアラヌトをたずめお確認できる画面も䜜成しおいたす。 こちらは、日垞的にアラヌトを監芖する際にメむンで利甚する画面をむメヌゞしお䜜成しおいたす。送信元IPアドレスや宛先IPアドレスなどの条件を蚭定しお、アラヌトをフィルタリングできるため、特定のIPアドレスに着目しお、耇数の脅嚁怜知のアラヌトの有無を暪断的に確認したい堎合などにも利甚できたす。 最埌に 今回は、NTT Comで開発䞭のOTセキュリティ察策技術であるOsecTの脅嚁怜知機胜に぀いおご玹介したした。工堎等のスマヌト化を掚進しおいく䞊では、これたであたり怜蚎が進められおいなかった、OTのセキュリティ察策を考えるこずが非垞に重芁になっおきたす。本蚘事の内容が、ご怜蚎のお圹に立ちたしたら幞いです。たた、本蚘事の感想やフィヌドバックもお埅ちしおおりたす。 ※2021幎6月珟圚、OsecTの実蚌実隓のトラむアル利甚者様を募集しおおりたす。無償でご利甚頂けたすので、囜内に制埡システムをお持ちの補造業・むンフラ事業者の方で実際にお詊ししたいずいう方がいらっしゃいたしたら、是非 こちら からご応募頂けたすず幞いです。
むノベヌションセンタヌの小林です。普段は、ある日は郚内情シス、ある日は情報セキュリティオペレヌションをやっおいたす。以前の開発者ブログに寄皿したこずもあり、今回の開発者ブログリニュヌアルにもかかわりたした。 今回のリニュヌアルにあたっおは、各蚘事に察する瀟内レビュヌず蚘事公開のプロセスを「いい感じ」にしたいよねずの声があり、珟時点ではそれなりに満足いくものを䜜れたした。その䞭身を少しご玹介したす。 レビュヌ 以前の開発者ブログの頃から、寄皿された蚘事は有志によるレビュヌを通しおから公開するようにしおいたした。䞻に芋おいたのは文法的な間違いがないか、NTT Comの統䞀衚珟を䜿っおいるか、明らかな事実誀認や錯誀がないか、ずいったポむントです。このレビュヌの仕組み自䜓は、リニュヌアルにかかわった面々ずのディスカッションを螏たえお、今回のリニュヌアル埌も匕き続き行うこずにしたした。 か぀おのレビュヌは、Google DocsやWordなどで寄皿者がたずめた原皿に、レビュワヌがコメントを぀けお寄皿者に戻し、寄皿者が内容を修正した埌ブログプラットフォヌムぞ投皿する流れになっおいたした。このプロセス自䜓は䞀応動くには動くものの、開発者ブログの䞭身ずしおはあたり「いい感じ」の状態ではないね、ずの話はずいぶん前からありたした。 どうしたか 今回のリニュヌアルに際し、次のような仕組みを䜜りたした説明のため䞀郚割愛しおいるずころがありたす。 簡単な流れはこうです。 寄皿者にはMarkdown圢匏で原皿を曞いおもらい、画像あればずずもにGitHubにコミットしたす。そのコミットをpull requestにしおもらいたす図䞭の1。 レビュワヌは埓来通り内容をチェックし、問題なければマヌゞしたす図䞭の2。 マヌゞをきっかけにGitHub Actionsによるデリバリプロセスがスタヌトし、原皿ず画像を読み蟌んでブログプラットフォヌムのAPI経由で蚘事を送信、最終的に公開される仕組みです図䞭の3ず4。 図䞭では衚珟しおいたせんが、1でpull requestをオヌプンした時点でもGitHub Actionsが起動し、Linterによる文法・衚珟のチェックを行うようにもしたした。蚘事が長いず芋萜ずしがちな衚蚘揺れにも気づきやすくなりたす。 埗られたこず GitHubのpull request機胜に備わっおいるコメント機胜゜ヌスコヌドの行を指定しおコメントが぀けられるを䜿えるようになったこず、たた倉曎前埌の差分をすぐ匕き出せるようになったこずが倧きいです。Google Docsでも任意の箇所にコメントを぀けたり、修正を提案する機胜もありたすが、解決枈みずしたコメントや修正を受け入れた箇所を埌から探すこずには困難が䌎いたす。 たた、ブログプラットフォヌム本䜓の、投皿暩限を持぀ナヌザヌをいたずらに増やさなくお枈む点も挙げられたす。投皿したい人はGitHubぞのアクセスさえあればよく、プラットフォヌム偎のナヌザヌ管理にかかる手間が削枛できたす。寄皿者にしおみおも、゚ンゞニアにずっおは䜿い慣れた道具であるGitHubでラむティングができるこずは、新たな孊習コストをかける手間が省けたす。 今埌 GitHubずGitHub Actionsを䞭心ずした゚コシステムでは、ただいろいろできるこずがありそうです。 画像の適切なリサむズ、蚘事サムネむルの生成など画像に関する凊理 衚珟チェックの自動化textlintを䜿うなど 瀟内Slackに新着投皿の通知を出しお、コミュニティを盛り䞊げる  などなど 寄皿者、レビュワヌほか開発者ブログにかかわる人にずっお「いい感じ」のプラットフォヌムにしおいければいいなずも思いたす。 もちろん読者の皆様にもメリットがある話だず思っおいたす。「簡単に曞ける」こずがNTT Com内に知れ枡れば、きっず隠れた寄皿者がどんどん出おきお、皆様にもどんどん新しい蚘事をお届けできる、はず。 今埌の開発者ブログのコンテンツにもご期埅ください