Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
クロスアカウント環境におけるAWS S3バケットへのアクセスで詰まっていた
Search
Haruki Tazoe
October 25, 2025
Programming
74
0
Share
クロスアカウント環境におけるAWS S3バケットへのアクセスで詰まっていた
2025/10/25 JAWS-UG広島 第24回勉強会
Haruki Tazoe
October 25, 2025
More Decks by Haruki Tazoe
See All by Haruki Tazoe
PHPのプロセス制御について
jdkfx
0
60
ちょっとした「翻訳ブーム」はこうして始まった
jdkfx
0
360
フロントエンドのチューニングに挑戦してみる
jdkfx
0
190
ドキュメント翻訳で学ぶ新しい言語仕様・機能
jdkfx
1
440
フレームワークの内部構造を理解するためにフレームワークを作ってみることにした / phpcon-2021
jdkfx
2
1.3k
Other Decks in Programming
See All in Programming
Liberating Ruby's Parser from Lexer Hacks
ydah
2
2.6k
Spec-Driven Development with AI Agents (Workshop, May 2026)
antonarhipov
3
330
Kubernetesを使わない環境にもCloud Nativeなデプロイを実現する / Enabling Cloud Native deployments without the complexity of Kubernetes
linyows
3
350
Firefoxにコントリビューションして得られた学び
ken7253
2
160
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
560
HTML-Aware ERB: The Path to Reactive Rendering @ RubyKaigi 2026, Hakodate, Japan
marcoroth
0
670
【26新卒研修】OpenAPI/Swagger REST API研修
dip_tech
PRO
0
150
GoogleCloudとterraform完全に理解した
terisuke
1
190
AI-DLC Deep Dive
yuukiyo
9
5.6k
Symfony AI in Action - SymfonyLive Berlin 2026
chr_hertel
1
130
mruby on C#: From VM Implementation to Game Scripting (RubyKaigi 2026)
hadashia
2
1.7k
AIベース静的検査器の偽陽性率を抑える工夫3選
orgachem
PRO
4
450
Featured
See All Featured
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
61
43k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
230
The Cost Of JavaScript in 2023
addyosmani
55
9.9k
Building an army of robots
kneath
306
46k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
340
Designing Experiences People Love
moore
143
24k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
250
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
54k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
340
GraphQLとの向き合い方2022年版
quramy
50
15k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
140
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
290
Transcript
クロスアカウント環境におけるAWS S3 バケットへのアクセスで詰まっていた 2025/10/25 JAWS-UG広島 第24回勉強会 田添春樹
アプリ開発最前線2025冬 ~サーバレス再び~
初心者による初心者向けの発表です!
自己紹介 • 名前・所属 ◦ 田添春樹 / @jdkfx ◦ 株式会社GoQSystem •
よく使う技術 ( 使っていた技術 ) ◦ PHP, JavaScript, Vue.js, Svelte … • 趣味 ◦ バイクで道の駅スタンプラリー
アジェンダ • システム構成概要について • 開発時の構成について • 問題発生と問題の切り分けの流れ • クロスアカウントアクセスについて •
問題解決
システム構成概要について
システム構成概要について • 登場人物 ◦ アカウントA: ファイルをアップロードするバケットを所有(BucketA) ◦ アカウントB:コピー先のバケットを所有(BucketB) ◦ Lambda関数:S3イベント通知を受け取り、ファイルをコピーする
システム構成概要について • 処理の流れ ◦ システムが BucketA にファイルをアップロード ▪ アプリケーションのバッチ処理が putObject
を実行 ◦ S3 のイベント通知が発火 ▪ BucketA に「ファイルがアップロードされた」ことを検知 ▪ 指定された Lambda 関数を呼び出す ◦ Lambda 関数が起動し、イベント情報を受け取る ◦ Lambda 関数内で CopyObjectCommand を実行 ▪ source = BucketA/xxx ▪ destination = BucketB/xxx ▪ S3 API を使ってオブジェクトをコピー
システム構成概要について
開発時の構成について
開発時の構成について • 最初は同一アカウント内でバケットAとバケットBを使って開発 • 特別なクロスアカウント設定がないので、もちろん動作する
ここまではうまく動作した…
問題発生
問題発生 • クロスアカウント設定を行った本番環境での動作でトラブル発生 • アカウントA → アカウントB へファイルコピーができない!
問題切り分けの流れ
問題切り分けの流れ • そもそもファイルコピーではなくそれぞれのバケットにアクセス出来るのか ◦ アカウントAからバケットAにはアクセス出来るのか → 出来た ◦ アカウントAからバケットBにはアクセス出来るのか →
出来なかった • バケット内のオブジェクトは取得出来るのか ◦ アカウントAからバケットAでオブジェクトを取得出来るのか → 出来た ◦ アカウントAからバケットBでオブジェクトを取得出来るのか → そもそもバケットにアクセス出来なかったので出来ないことは自明
問題切り分けの流れ • ファイルコピー操作によるものではなく、バケットBにアクセス出来ないと いうことが原因 • バケットBにアクセス出来ない原因を探る ◦ Bucketとして設定した変数やKeyの確認 ◦ CopySourceの中身の確認
◦ typoやファイル名などの間違いは無く、正しい値が設定されていた
クロスアカウント アクセスについて
クロスアカウントアクセスについて • AssumeRole ◦ あるAWSアカウント(アカウントA)が別のアカウント(アカウントB) の権限を一時的に借りる仕組み ◦ アカウントAはAWS STS(Security Token
Service) を使って一時的な 認証情報(セッションクレデンシャル)を取得する ◦ その間、アカウントAはアカウントBになりきって操作を行う
クロスアカウントアクセスについて
問題解決
問題解決 • AssumeRoleしたうえでもう一度検証 • そもそもファイルコピーではなくそれぞれのバケットにアクセス出来るのか ◦ アカウントAからバケットAにはアクセス出来るのか → 出来なかった ◦
アカウントAからバケットBにはアクセス出来るのか → 出来た • バケット内のオブジェクトは取得出来るのか ◦ アカウントAからバケットAでオブジェクトを取得出来るのか → そもそもバケットにアクセス出来なかったので出来ないことは自明 ◦ アカウントAからバケットBでオブジェクトを取得出来るのか → 出来た
問題切り分けの流れ • AssumeRoleしない状態での検証 • そもそもファイルコピーではなくそれぞれのバケットにアクセス出来るのか ◦ アカウントAからバケットAにはアクセス出来るのか → 出来た ◦
アカウントAからバケットBにはアクセス出来るのか → 出来なかった • バケット内のオブジェクトは取得出来るのか ◦ アカウントAからバケットAでオブジェクトを取得出来るのか → 出来た ◦ アカウントAからバケットBでオブジェクトを取得出来るのか → そもそもバケットにアクセス出来なかったので出来ないことは自明 再掲
問題解決 • アカウントAによってアクセスできていたバケットが反転 • クロスアカウント環境においてAssumeRoleをするかしないかによってアク セスできるバケットがどちらか一方になる • なぜならアカウントAがAssumeRoleをすると別のアカウントBになり切って しまうから
問題解決 • どちらか一方のアカウントのバケットにしかアクセスできない • CopyObjectCommandは引数で ◦ Bucketでコピー先のバケット名(アカウントB)、 ◦ CopySourceでコピー元のバケット名(アカウントA) を必要とする
• よって、CopyObjectCommandが使えないことが今回の問題の原因
問題解決 • 2つのS3クライアントを用意 ◦ アカウントAでバケットAにアクセスできるクライアント① ◦ アカウントAがAssumeRoleして、アカウントBのバケットBにアクセス できるクライアント② • 処理の流れ
◦ クライアント①がバケットAから getObject を実行し、ファイルを Buffer として取得 ◦ クライアント②がそのBufferを使って、バケットBへ putObject を実行 • 結果 ◦ CopyObjectCommand を使わずに、同等の処理を実現できた ◦ これにより、発生していたアクセス権限の問題が解決した
問題解決
まとめ
まとめ • 問題点/原因/解決策を振り返る ◦ 問題: クロスアカウント環境でS3へファイルコピー時にバケットアクセス失敗 ◦ 原因: クロスアカウント環境による権限の問題と、AssumeRoleによって“引き 受けたアカウント”の権限で動いていたため
◦ 解決: 2つのクライアントを用いてgetObject→putObjectに変更 • そして、IAMや権限設計を学ぶきっかけとなった
参考資料 • クロスアカウント環境におけるAWS S3バケットへのアクセスで詰まってい た ◦ https://blog.jdkfx.com/assume-role-aws-s3 • Node.js AWS
SDKでSTS AssumeRoleを行い安全にクロスアカウントアクセ スする ◦ https://zenn.dev/faycute/articles/4d1326bbf0be24 • 別アカウントのS3バケットを利用する手順 ◦ https://dev.classmethod.jp/articles/how-to-use-s3-cross-account/
ご清聴ありがとう ございました!