Amazon Rekognition が PrivateLink をサポート!よりセキュアな環境で画像および動画分析が出来るようになりました
公式のリリースからちょっと時間が経ってしまいましたが、Amazon Rekognition で PrivateLink がサポートされましたのでご紹介します。
従来はパブリックエンドポイントにアクセスする必要がありましたので、IGW や NATGW などインターネットにアクセスする手段が必要がありましたが、PrivateLink のサポートによって VPC 内のアクセスだけで Rekognition が利用できるようになりました。
さっそく試してみる
環境としては以下のような図になります。
VPC エンドポイントの作成
[VPC ダッシュボード] - [エンドポイント] から エンドポイントの作成
をクリック。サービス名から com.amazonaws.ap-northeast-1.rekognition
を選択します。
VPC やサブネット、DNS は環境に合わせて選択。セキュリティグループ は事前に作成していた以下のようなルールのものを利用しました。
タイプ | プロトコル | ポート範囲 | ソース |
---|---|---|---|
HTTPS | TCP | 443 | (VPC CIDR) |
[エンドポイントの作成] をクリックして完了です。
プライベート環境からのアクセスを試す
S3 に解析用の画像を入れておく必要があるので、手持ちの写真から以下をアップロードしておきました。
それでは、プライベート環境の EC2 から Rekognision を利用してみます。
$ aws rekognition detect-labels --image "S3Object={Bucket=cm-rekognition,Name=ny.jpg}" --region ap-northeast-1 { "Labels": [ { "Instances": [], "Confidence": 99.82121276855469, "Parents": [ { "Name": "Transportation" }, { "Name": "Vehicle" } ], "Name": "Automobile" }, { "Instances": [], "Confidence": 99.82121276855469, "Parents": [], "Name": "Transportation" }, { "Instances": [], "Confidence": 99.82121276855469, "Parents": [ { "Name": "Transportation" } ], "Name": "Vehicle" }, (以下、省略)
プライベートな環境から正常にリクエストが投げれて、レスポンスが得られることを確認できましたね。以下のように Rekognition のエンドポイントを名前解決すると、PrivateLink に登録したサブネットが返ってきています。
$ dig rekognition.ap-northeast-1.amazonaws.com ; <<>> DiG 9.9.4-RedHat-9.9.4-74.amzn2.1.2 <<>> rekognition.ap-northeast-1.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42121 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;rekognition.ap-northeast-1.amazonaws.com. IN A ;; ANSWER SECTION: rekognition.ap-northeast-1.amazonaws.com. 60 IN A 192.168.3.150 rekognition.ap-northeast-1.amazonaws.com. 60 IN A 192.168.2.171
簡単ではありますが、検証は以上です。
さいごに
ネットワークトラフィックを AWS ネットワーク内に保持することにより、Amazon Rekognition を簡単かつセキュアにアクセスできるようになりました。AWS のアーキテクチャは日進月歩です。一度作って終わりではなく、定期的にアーキテクチャを見直し、最適なアーキテクチャを検討していくことが大切ですね。
以上!大阪オフィスの丸毛(@marumo1981)でした!