[Talend]tS3Connectionを利用してS3へ接続をする(IAMロール編)

今回はTalendのコンポーネント「tS3Connection」を利用したS3への接続(IAMロール編)です。
2019.02.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。DI部の大高です。

今回はTalendのコンポーネント「tS3Connection」を利用したS3への接続(IAMロール編)です。アクセスキー、シークレットキーを利用した基本的な接続についてはこちらの記事をご参照ください。

[Talend]tS3Connectionを利用してS3へ基本的な接続をする | DevelopersIO

なお、今回はIAMロールを割り当てたEC2インスタンスを利用するのですが、こちらについての細かい内容は記載しません。

前提条件

Talendのバージョンは「Talend Open Studio for Big Data」の「Version 7.1.1」で検証しています。

実行環境としてはIAMロールを割り当てたEC2インスタンスを利用しています。ロールにはS3に対する適切なポリシー設定を行っておく必要がありますが、今回は検証のため「AmazonS3FullAccess」を設定してあります。

tS3Connectionについて

「tS3Connection」を利用すると「tS3XXXXX」というS3用の各コンポーネントにおけるコネクションを共通設定することができます。

「tS3Connection」コンポーネントのTalend Helpページはこちらです。

tS3Connection

では、具体的に以下で解説していきます。

ジョブの説明

「tS3Connection」でコネクションを張るだけのシンプルなジョブです。また、接続が正常に完了したことを確認するために「tJava」で標準出力にメッセージを出力しています。

「tS3Connection」コンポーネントの設定

「tS3Connection」コンポーネントでは、以下のように接続設定をしました。

AWSロールからクレデンシャルを継承

今回はアクセスキー、シークレットキーを利用しません。代わりに「AWSロールからクレデンシャルを継承」オプションを利用します。

このオプションを有効にすると、内部のJavaコードは以下のように変わります。

アクセスキー、シークレットキーを利用した場合

final String decryptedPassword_tS3Connection_1 = routines.system.PasswordEncryptUtil
		.decryptPassword("df5d5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");

com.amazonaws.auth.AWSCredentials credentials_tS3Connection_1 = new com.amazonaws.auth.BasicAWSCredentials(
		"AKIAIXXXXXXXXXX",
		decryptedPassword_tS3Connection_1);
com.amazonaws.auth.AWSCredentialsProvider credentialsProvider_tS3Connection_1 = new com.amazonaws.internal.StaticCredentialsProvider(
		credentials_tS3Connection_1);

「AWSロールからクレデンシャルを継承」オプションを利用した場合

com.amazonaws.auth.AWSCredentialsProvider credentialsProvider_tS3Connection_1 = new com.amazonaws.auth.InstanceProfileCredentialsProvider();

AWSCredentialsProvider として、InstanceProfileCredentialsProviderが利用されるように変わったことが分かります。これにより、IAMロールが設定されているEC2インスタンスからEC2 Metadata Serviceを利用し、一時キーを取得することによってS3に接続することができるようになっています。

従って、コンポーネントにアクセスキー、シークレットキーを埋め込まなくてもよくなりました。

※クレデンシャルに関する詳しい内容については、都元さんの以下の記事がとても参考になりました。

IAMによるAWS権限管理運用ベストプラクティス (2) | DevelopersIO

「tJava」コンポーネントの設定

「tJava」コンポーネントでは簡単な確認メッセージが出力されるように設定しておきます。

System.out.println("Success");

実行結果

今回の設定は以上です。実際にこのジョブをEC2インスタンス上で実行すると以下のように出力されます。

$ ./tS3Connection_IAMRole_run.sh
Success

「tJava」の出力から、S3への接続が成功していることが判断できます。なお、IAMロールからS3へのアクセスポリシーを削除し、接続できなくした場合には以下のように例外が発生してエラー終了します。

$ ./tS3Connection_IAMRole_run.sh
Exception in component tS3Connection_1 (tS3Connection_IAMRole)
com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: A3490XXXXX; S3 Extended Request ID: XXXXX69iZQ=), S3 Extended Request ID: XXXXX69iZQ=
        at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1658)
        at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1322)
        at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1072)
        (略)

まとめ

以上、「tS3Connection」を利用したS3への接続(IAMロール編)のご紹介でした。

引き続き他の各種設定についてご紹介できればと思います。それでは!