[Talend]tS3Connectionを利用してS3へ接続をする(Assume Role編)

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

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

はじめに

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

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

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

上記の記事では単純にアクセスキー、シークレットキーを利用した接続をしていましたが、今回はこれに加えて別アカウントのロールを引き受けることができる機能を試したいと思います。

前提条件

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

tS3Connectionについて

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

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

tS3Connection

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

ジョブの説明

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

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

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

アクセスキー、シークレットキー

AWSのマネージメントコンソールなどで作成した、IAMユーザのアクセスキー、シークレットキーを指定します。

ロールを担う

Assume Roleの設定です。今回はAWS環境Aで上記で設定したアクセスキー、シークレットキーを用意し、別のAWS環境Bのロールで上記AのIAMユーザを信頼させています。

具体的にはAWS環境Bのロールにて以下のような信頼関係の設定を行っており、7行目の個所にAWS環境AのIAMユーザのARNを指定しています。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::XXXXXXXXXXXX:user/XXXXXXXXXXXXXXXXXXXXXXXX"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

なお、このIAMロールにはS3に対する適切なポリシー設定を行っておく必要がありますが、今回は検証のため「AmazonS3FullAccess」を設定してあります。

ロールARN

上記のように設定してあるロールARNを、ここに設定します。

ロールセッション名

ロールセッションを特定するためのセッション名(任意文字列)を指定します。

セッション処理時間

セッション処理時間(分)を指定します。

生成されるJavaコード

上記の設定は、Javaのコードとしては以下のようになっています。

int sessionDurationSeconds_tS3Connection_1 = 15 * 60;
com.amazonaws.auth.STSAssumeRoleSessionCredentialsProvider.Builder stsBuilder_tS3Connection_1 = new com.amazonaws.auth.STSAssumeRoleSessionCredentialsProvider.Builder(
"arn:aws:iam::XXXXXXXXXXXX:role/XXXXXXXXXXXXXXXXXXXXXXXX",
"talend_session").withLongLivedCredentialsProvider(
credentialsProvider_tS3Connection_1)
.withRoleSessionDurationSeconds(
		sessionDurationSeconds_tS3Connection_1);

実行結果

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

[statistics] connecting to socket on port 4052
[statistics] connected
Success
[statistics] disconnected

「tJava」の出力から、S3への接続が成功していることが判断できます。なお、信頼関係の設定において以下のようにMFAを必須としている場合には例外が発生してエラー終了しますので注意が必要です。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::XXXXXXXXXXXX:user/XXXXXXXXXXXXXXXXXXXXXXXX"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "Bool": {
          "aws:MultiFactorAuthPresent": "true"
        }
      }
    }
  ]
}

まとめ

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

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