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
0
68
クロスアカウント環境におけるAWS S3バケットへのアクセスで詰まっていた
2025/10/25 JAWS-UG広島 第24回勉強会
Haruki Tazoe
October 25, 2025
Tweet
Share
More Decks by Haruki Tazoe
See All by Haruki Tazoe
PHPのプロセス制御について
jdkfx
0
52
ちょっとした「翻訳ブーム」はこうして始まった
jdkfx
0
340
フロントエンドのチューニングに挑戦してみる
jdkfx
0
180
ドキュメント翻訳で学ぶ新しい言語仕様・機能
jdkfx
1
410
フレームワークの内部構造を理解するためにフレームワークを作ってみることにした / phpcon-2021
jdkfx
2
1.2k
Other Decks in Programming
See All in Programming
技術検証結果の整理と解析をAIに任せよう!
keisukeikeda
0
130
RAGでハマりがちな"Excelの罠"を、データの構造化で突破する
harumiweb
9
2.9k
OTP を自動で入力する裏技
megabitsenmzq
0
120
How to stabilize UI tests using XCTest
akkeylab
0
130
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
220
Understanding Apache Lucene - More than just full-text search
spinscale
0
130
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
1
130
go directiveを最新にしすぎないで欲しい話──あるいは、Go 1.26からgo mod initで作られるgo directiveの値が変わる話 / Go 1.26 リリースパーティ
arthur1
2
570
grapheme_strrev関数が採択されました(あと雑感)
youkidearitai
PRO
1
240
条件判定に名前、つけてますか? #phperkaigi #c
77web
1
350
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
780
PHPで TLSのプロトコルを実装してみる
higaki_program
0
250
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
64
52k
From π to Pie charts
rasagy
0
150
So, you think you're a good person
axbom
PRO
2
2k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
560
Build your cross-platform service in a week with App Engine
jlugia
234
18k
The agentic SEO stack - context over prompts
schlessera
0
700
Are puppies a ranking factor?
jonoalderson
1
3.1k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
310
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
64
53k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
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/
ご清聴ありがとう ございました!