[Ver 2023.1 新機能] S3 ツールにおける IAM ロールのサポートが開始されました

2023.05.24

2023/5/17 に Alteryx Designer の Version 2023.1 がリリースされました。

Designer 2023.1リリースノート | Alteryx Documentation

新機能の一つとして、Alteryx Designer の S3 ダウンロードツールおよび S3 アップロードツールでの認証方法に「AssumeRole」を指定できるようになりました。こちらの機能を試してみましたので、本記事で内容をまとめます。

AssumeRole とは

AssumeRole は、特定の IAM ロールに関連付けられた権限を一時的に引き受ける機能です。これにより、ロールに関連付けられた権限に基づいた AWS リソースに対する操作が行えるようになります。
AssumeRole の詳細については、下記の記事をご参照ください。

AssumeRole(スイッチロール)を理解して、AWSへのデプロイを少しでも安全に実施しよう #devio2021 | DevelopersIO

これまで、 Alteryx Designer からの S3 へのアクセスには、S3 に対する操作権限をもった IAM ユーザーのアクセスキー(アクセスキーID・シークレットキー)が必要でした。つまり、S3 へのアクションが許可されたポリシーを関連付けた IAM Roleを作成し、IAM ユーザーやユーザーグループにアタッチしておく必要がありました。

今回のアップデートにおいても、IAM ユーザーのアクセスキーの入力が必要となりますが、AssumeRole を使うことができるので、IAM ユーザー自身には常に権限を付与しておく必要がなく、権限も一時的なものになるので、永続的な権限が付与された状態よりも、認証情報漏洩時のリスクが軽減されます。

検証環境

下記の環境で検証しています。

  • Windows 10 Pro
  • Alteryx Designer 2023.1

AWS 側の設定

まずは AWS 側で、S3 へのアクセスに必要なポリシーを作成し、ロールに関連付けます。また、S3 ツールでの AssumeRole には、IAM ユーザーで権限を引き受けます。その際に、アクセスキー(アクセスキーID・シークレットキー)の入力が必要なので、本記事では、S3 へのアクセス用ユーザーを作成することとしました。

  • IAM ユーザーの作成
    • ここではalteryx-s3-user という名称で作成し、アクセスキーを発行しておきます
  • IAM ロールの作成
    • alteryx-s3-user が引き受けることになる IAM ロールを作成します
      • ここではalteryx-s3-assume の名称で作成しています
    • 信頼関係は下記のように定義しました
      • ※Principal に IAM ユーザー(alteryx-s3-user)の Arn を指定することで、alteryx-s3-user がこの IAM ロールを引き受けることができるようになります
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "Statement1",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::XXXXXXXXXXXX:user/alteryx-s3-user"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
  • IAM ポリシーの作成
    • 下記の内容で、ポリシーを定義し、IAM ロール(alteryx-s3-assume )にアタッチします
    • 操作対象のバケットは絞り込んでいますが、下記のアクションが許可されていれば、S3 ツール で実行可能な各操作を実行できるようになります ※詳細は後述します。
    • 参考:ユーザーポリシーの例 | AWS
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "s3:ListAllMyBuckets",
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket",
                    "s3:GetBucketLocation"
                ],
                "Resource": "arn:aws:s3:::[バケット名]"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject",
                    "s3:GetObject"
                ],
                "Resource": "arn:aws:s3:::[バケット名]/*"
            }
        ]
    }

Alteryx 側の設定

DCM(データ接続マネージャー)で、S3 に対する接続情報を作成します。

データソースの作成

Alteryx Designer のメニューより「ファイル > 接続を管理」を設定します。接続マネージャーが開くので、「データソース」タブから「+ 新規」を選択します

テクノロジーとして「S3」を選択します。

ここでは、下記の内容で設定しました。

  • データソース名
    • Alteryx で使用する S3 に対する任意の接続名称を設定します
  • エンドポイント
    • ここでは、Default(既定)としました
      • このオプションの場合、ツールで指定したバケット名からどのリージョンにあるか内部的に取得されます
      • AssumeRole する IAM ロールに、ポリシーで設定したs3:GetBucketLocation の許可がない場合、「Default」だとエラーとなるので、バケットを作成したリージョンのエンドポイントを指定する必要があります
    • 特定のリージョンを指定する場合、s3.us-west-2.amazonaws.com の形式で記入します
  • サーバー側の暗号化
    • デフォルトの SSE-S3 の場合、SSE-AES256 を指定することで問題なく動作しました
    • その他、SSE-KMS も指定可能です
      • この場合、KMS キーID を追加入力します

資格情報の作成

次に、資格情報を2種類作成します。

IAM ユーザーの資格情報

AssumeRole する IAM ユーザーの資格情報を作成します。接続マネージャーの「資格情報」タブより「+新規」を選択します。
ここでは、下記の内容で作成しました。

  • 資格情報名
    • AssumeRole 用の IAM ユーザーに対する Alteryx 上での名称を設定します
  • 保管庫
    • シークレットの保管先を選択します。DCM 上に保管する場合は上図の設定とします。外部保管庫を使用する場合、事前に作成済みの情報を選択します。
  • メソッド
    • IAM ユーザーでの AssumeRole が必要なので、「AWS IAM アクセスキー」を選択し、アクセスキーID・シークレットアクセスキーを入力します

IAM ロールの資格情報

AssumeRole する IAM ロールの資格情報を作成します。再度、接続マネージャーの「資格情報」タブより「+新規」を選択します。下記の内容で作成しました。

  • 資格情報名、保管庫
    • IAM ユーザーの時と同様です
  • メソッド
    • AWS Assume Role を指定します
  • AWS アカウント番号
    • 内部的には AssumeRole 時にロールの Arn を指定するので、その際に必要な 12桁のアカウントIDを記入します
  • ロール
    • 引き受けたい IAM ロールの名称を入力します

データソースと資格情報の紐づけ

再度、「データソース」タブに戻り、作成済みの S3 への接続情報を選択します。「資格情報の接続」を押下し、認証方法として「AWS Assume Role」を選択します。

すると、下記のように IAM アクセスキーと AssumeRole の資格情報を選択できるメニューがが表示されるので、それぞれ作成済みの資格情報を選択し、「リンク」を押下します。ここで接続テストも実施できます。

AssumeRole による S3へのアクセスを行う

ワークフローを開き、S3 ダウンロードツールを配置します。
「データ接続マネージャー(DCM)の使用」にチェックが入っている状態で「接続を設定します」を押下します。

接続マネージャーが開き作成済みの S3 に関するデータソースが表示されるので、接続したいデータソースをします。

ここでは、すでに資格情報の紐づけを行っているので「接続」を押下します。

すると接続マネージャーが閉じ、ワークフローのツール設定に反映されます。
あとは、接続したいバケットやオブジェクトを選択します。以降の処理はこれまでと同様です。

なお、設定の「バケット名」に関して、ツール設定からバケットを一覧表示する場合、ポリシーに付与したs3:ListAllMyBuckets のアクション許可が必要となります。
※このアクション許可がない場合、接続するバケット名を直接入力することで対処可能です。

S3 アップロードツール についても、同様の設定となります。

DCM を使用しない場合

この場合、ツールの設定画面から認証方法として「ロールを設定」を選択することで、同様の設定とできます。ただし、私の環境では、IAM ユーザーのシークレットアクセスキーの入力箇所が存在しなかったため、こちらでは設定することができませんでした。
今回のアップデートで、DCM の使用がデフォルトとなったため、アクセスキー等の認証情報はツールで直接設定するよりも DCM にて一元管理する方がよいと感じました。

さいごに

Alteryx Designer から S3 へのアクセス方法として、AssumeRole を試してみました。
一時的な権限であることに加え、直接 IAM ユーザーに権限を付与せずに済むので、より安全な方法で S3 へのアクセスが可能となるので、ぜひとも使いたい機能と思います。
今回は以上になります。