[Ver 2023.1 新機能] S3 ツールにおける IAM ロールのサポートが開始されました
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:::[バケット名]/*" } ] }
- 下記の内容で、ポリシーを定義し、IAM ロール(
Alteryx 側の設定
DCM(データ接続マネージャー)で、S3 に対する接続情報を作成します。
データソースの作成
Alteryx Designer のメニューより「ファイル > 接続を管理」を設定します。接続マネージャーが開くので、「データソース」タブから「+ 新規」を選択します
テクノロジーとして「S3」を選択します。
ここでは、下記の内容で設定しました。
- データソース名
- Alteryx で使用する S3 に対する任意の接続名称を設定します
- エンドポイント
- ここでは、Default(既定)としました
- このオプションの場合、ツールで指定したバケット名からどのリージョンにあるか内部的に取得されます
- AssumeRole する IAM ロールに、ポリシーで設定した
s3:GetBucketLocation
の許可がない場合、「Default」だとエラーとなるので、バケットを作成したリージョンのエンドポイントを指定する必要があります
- 特定のリージョンを指定する場合、
s3.us-west-2.amazonaws.com
の形式で記入します
- ここでは、Default(既定)としました
- サーバー側の暗号化
- デフォルトの SSE-S3 の場合、
SSE-AES256
を指定することで問題なく動作しました - その他、
SSE-KMS
も指定可能です- この場合、KMS キーID を追加入力します
- デフォルトの SSE-S3 の場合、
資格情報の作成
次に、資格情報を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 へのアクセスが可能となるので、ぜひとも使いたい機能と思います。
今回は以上になります。