S3の「署名バージョン2」廃止と、サードパーティツールのS3プラグインへの影響
「S3の署名バージョン2 廃止にAWS CLIやSDKをバージョンアップせずに対応する方法を調べてみた」
に関連して、S3を利用するサードパーティツールへの影響についても調べてみました。
S3はデータのETL処理(Extraction Transformation and Load)において、加工前データ・加工後データの保存先として利用されることが多く、サードパーティのETLツールにも、S3用のプラグインが用意されています。
これらサードパーティツールのS3プラグインの内部では、AWS SDKが利用されているため、これらのバージョンが古い場合、S3へのAPIリクエスト時の署名バージョンが「署名バージョン2」になっている可能性があり、プラグインの入れ替えやツール自体のアップデートが必要になる可能性があります。
今回は、ETL処理で良く利用される「Embulk」のS3プラグイン「embulk-input-s3」で、S3の署名バージョン2 廃止に対応する方法を調べてみました。
Embulkの「embulk-input-s3」で S3の「署名バージョン2」廃止に対応する方法
※ あくまで対応方法の一つになりますが、ご参考にしていただければ幸いです。また、以下に記載している方法は実際の環境で動作をご検証のうえご利用ください。
Embulkの「embulk-input-s3」のバージョンと、利用されている「aws-sdk」のバージョンを調べる
インストール済みの「embulk-input-s3」プラグインのバージョンを確認
$ embulk gem list 2019-XX-XX 05:12:55.465 +0000: Embulk v0.8.8 (中略) embulk-input-s3 (0.2.7)
「embulk-input-s3」プラグインの classpath
ディレクトリに移動し、利用されている「aws-java-sdk」のバージョンを調べます。
$ ls ~/.embulk/jruby/2.2.0/gems/embulk-input-s3-0.2.7/classpath/ aws-java-sdk-core-1.10.33.jar embulk-input-s3-0.2.7.jar aws-java-sdk-kms-1.10.33.jar httpclient-4.3.6.jar aws-java-sdk-s3-1.10.33.jar httpcore-4.3.3.jar commons-codec-1.6.jar jcl-over-slf4j-1.7.12.jar
上記のように「aws-java-sdk/1.11.xx」より以前のバージョンが利用されている場合、S3へのアクセスの署名バージョンはデフォルトで署名バージョン2になっているため対応が必要になります。
実際にEmbulkを実行し、S3バケットにアクセス、その際の署名バージョンを確認してみる
config.yml は対象のS3バケットにアクセスする設定
in: type: s3 bucket: sigv2-test-bucket path_prefix: test/ : :
Embulkを実行
$ embulk run config.yml
CloudTrailのログを確認してみるとやはり、 SignatureVersion
が SigV2
となっていました。
: : "eventTime": "2019-XX-XXT05:19:11Z", "eventSource": "s3.amazonaws.com", "eventName": "ListObjects", "awsRegion": "ap-northeast-1", "sourceIPAddress": "xxx.xxx.xxx.xxx", "userAgent": "[aws-sdk-java/1.10.33 Linux/4.4.5-15.26.amzn1.x86_64 Java_HotSpot(TM)_64-Bit_Server_VM/24.80-b11/1.7.0_80]", "requestParameters": { "bucketName": "sigv2-test-bucket", "Host": "sigv2-test-bucket.s3.amazonaws.com", "max-keys": "1024", "prefix": "test/" }, "responseElements": null, "additionalEventData": { "SignatureVersion": "SigV2", : :
「embulk-input-s3」をバージョンを指定してアップグレードする
下記の手順でプラグインをアップデートすることができます。
$ embulk gem install embulk-input-s3 -v 0.2.21 2019-XX-XX XX:XX:XX.XXX +0900: Embulk v0.8.8 Fetching: embulk-input-s3-0.2.21.gem (100%) Successfully installed embulk-input-s3-0.2.21 1 gem installed
注意点としては、最新バージョンに上げてしまうとJavaのバージョンとの互換性の問題で、プラグインが動きませんでしたので、「embulk-input-s3」の0.2系の最新バージョンである、「embulk-input-s3 0.2.21」を指定しました。
内部で利用されている「aws-java-sdk」のバージョンを確認すると「1.11.253」が利用されています。
$ ls ~/.embulk/jruby/2.2.0/gems/embulk-input-s3-0.2.21/classpath/ aws-java-sdk-core-1.11.253.jar ion-java-1.0.2.jar aws-java-sdk-kms-1.11.253.jar jackson-annotations-2.6.0.jar aws-java-sdk-s3-1.11.253.jar jackson-core-2.6.7.jar commons-codec-1.9.jar jackson-databind-2.6.7.1.jar embulk-input-s3-0.2.21.jar jackson-dataformat-cbor-2.6.7.jar embulk-util-aws-credentials-0.2.21.jar jcl-over-slf4j-1.7.12.jar httpclient-4.5.2.jar jmespath-java-1.11.253.jar httpcore-4.4.4.jar
下記の手順は必須ではないですが、古いバージョンのプラグインを削除したい場合は、下記のコマンドで削除することができます。
$ embulk gem uninstall embulk-input-s3 2019-04-04 03:15:59.397 +0000: Embulk v0.8.8 Select gem to uninstall: 1. embulk-input-s3-0.2.7 2. embulk-input-s3-0.2.20 3. All versions > 1 Successfully uninstalled embulk-input-s3-0.2.7
再度、Embulkを実行
$ embulk run config.yml
CloudTrailのログを確認し、 SignatureVersion
が SigV4
になっていることを確認できました。
: : "eventTime": "2019-XX-XXT05:45:48Z", "eventSource": "s3.amazonaws.com", "eventName": "ListObjects", "awsRegion": "ap-northeast-1", "sourceIPAddress": "xxx.xxx.xxx.xxx", "userAgent": "[aws-sdk-java/1.11.253 Linux/4.4.5-15.26.amzn1.x86_64 Java_HotSpot(TM)_64-Bit_Server_VM/24.80-b11 java/1.7.0_80 jruby/9.0.5.0]", "requestParameters": { "bucketName": "sigv2-test-bucket", "Host": "sigv2-test-bucket.s3.ap-northeast-1.amazonaws.com", "max-keys": "1024", "encoding-type": "url", "prefix": "test/" }, "responseElements": null, "additionalEventData": { "SignatureVersion": "SigV4", : :
まとめ
- S3へのAPIリクエストにおける「署名バージョン2」が2019年6月24日に廃止されます
- S3を利用するサードパーティツールにも影響があります(内部で利用しているaws-sdkが古い場合)
- Embulkのようなプラグイン方式でS3プラグインを提供しているツールでは、プラグインの入れ替えで対応が可能です
S3をサードパーティツールから利用されている方は、内部で利用されているaws-sdkのバージョンをご確認いただくことをお勧めいたします。
また、下記関連記事もご参考にいただければ幸いです
参考記事:「S3の署名バージョン2 廃止にAWS CLIやSDKをバージョンアップせずに対応する方法を調べてみた」
参考記事:「ETLツール「Talend」でS3署名バージョン2廃止に対応する方法」