S3の署名バージョン2 廃止に対応する方法を調べてみた(Embulk S3プラグイン編)

記事タイトルとURLをコピーする

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のログを確認してみるとやはり、 SignatureVersionSigV2 となっていました。

    :
    :
  "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のログを確認し、 SignatureVersionSigV4 になっていることを確認できました。

    :
    :
    "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廃止に対応する方法