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
How to think about Acsess controll of Amazon ...
Search
chadain
October 11, 2019
Technology
1
1.9k
How to think about Acsess controll of Amazon S3 simply
How to think about Acsess controll of Amazon S3 simply
chadain
October 11, 2019
Tweet
Share
More Decks by chadain
See All by chadain
AWS Control Towerと HashiCorp Terraformでいい感じにマルチアカウント管理をしよう
chazuke4649
1
1.9k
Account Factory for Terraform (AFT) 入門
chazuke4649
1
1.8k
minimum-guardrails-by-aws-iam
chazuke4649
1
2.1k
"Are you Well-Architected?" Introducing about Cloud Optimization Aseesment
chazuke4649
0
1k
re:GrowthOSAKA2019-CoreServicesUpdate(IAM.S3.EC2)
chazuke4649
0
1.5k
Other Decks in Technology
See All in Technology
Engineering Managementのグローバルトレンド #emoasis / Engineering Management Global Trend
kyonmm
PRO
6
980
React Server Componentは 何を解決し何を解決しないのか / What do React Server Components solve, and what do they not solve?
kaminashi
6
1.2k
Security response for open source ecosystems
frasertweedale
0
100
製造業の会計システムをDDDで開発した話
caddi_eng
3
940
caching_sha2_passwordのはなし
boro1234
0
210
頻繁リリース × 高品質 = 無理ゲー? いや、できます!/20250306 Shoki Hyo
shift_evolve
0
150
チームの性質によって変わる ADR との向き合い方と、生成 AI 時代のこれから / How to deal with ADR depends on the characteristics of the team
mh4gf
4
330
非エンジニアにも伝えるメールセキュリティ / Email security for non-engineers
ykanoh
13
3.9k
技術的負債を正しく理解し、正しく付き合う #phperkaigi / PHPerKaigi 2025
shogogg
7
1.8k
数百台のオンプレミスのサーバーをEKSに移行した話
yukiteraoka
0
670
移行できそうでやりきれなかった 10年超えのシステムを葬るための戦略 / phper-kaigi-2025-ryu
carta_engineering
0
690
モノリスの認知負荷に立ち向かう、コードの所有者という思想と現実
kzkmaeda
0
110
Featured
See All Featured
Navigating Team Friction
lara
184
15k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
30
1.1k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Into the Great Unknown - MozCon
thekraken
36
1.7k
Adopting Sorbet at Scale
ufuk
75
9.3k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
12
1.4k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.9k
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
Building an army of robots
kneath
304
45k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
51
2.4k
4 Signs Your Business is Dying
shpigford
183
22k
Transcript
S3のアクセス管理を シンプルに考えるためのTips コンサルティング部 茶⾕ 和弥(ちゃだいん)
2 アジェンダ • ⾃⼰紹介 • なぜS3のアクセス管理はややこしいのか • 概念を整理 • Tips(これがメイン)
3 基本これだけ︕ このセッションで覚えて帰っていただきたいこと • バケット/オブジェクトACLは、⼀旦忘れる • 原則︓最⼩権限から始めよ • クロスアカウントはIAMロールが無難 •
⼀般公開しないなら、ブロックパブリックアクセス
4 ⾃⼰紹介 茶⾕ 和弥 (ちゃだいん) - AWS事業本部コンサルティング部 - ロール︓ソリューションアーキテクト -
2019年1⽉ジョイン - 出⾝︓⽯川県⾦沢市 - 好きなもの︓クラフトビール
5 なぜS3のアクセス管理は ややこしいのか︖
6 なぜS3のアクセス管理はややこしいのか︖ 1. ポリシーの種類が多くて 使い分けがわからない
7 なぜS3のアクセス管理はややこしいのか︖ 1. ポリシーの種類が多くて使い分けがわからない • 例︓バケットの中にある特定のオブジェクトの読み取りを 制限したい。どうする︖ • 使えるもの︓ユーザーポリシー, バケットポリシー,
バケットACL • 使い⽅︓1つでもOK、組み合わせてもOK • →結局どの⽅法が⼀番ベストなんだろう...
8 なぜS3のアクセス管理はややこしいのか︖ 2. ポリシーの優先順位が どうなるのかわからない
9 なぜS3のアクセス管理はややこしいのか︖ 2. ポリシーの優先順位がどうなるのかわからない • ポリシーが全くない状態だとどうなる︖ • 「無し」と「許可」では許可が勝つ︖ • 「許可」と「拒否」ではどっちが勝つ︖
10 概念の整理
11 S3アクセス管理における概念の整理 • アクセスポリシー • 誰が(Principal) • 何に対して(Resource) • 何を許可/拒否する(Action)
12 アクセスポリシー ユーザーポリシー • IAMユーザー・グループ・ロールに適⽤ • アクセスをユーザー単位で制御するのに◎ バケットポリシー • バケットに適⽤
• アクセスをバケット単位で制御するのに◎ ACL(バケット/オブジェクト) • バケット/オブジェクト適⽤ • アクセスをオブジェクト単位で制御するのに◎
13 誰が(Principal) AWSアカウント ユーザー サービス パブリック(⼀般公開)
14 何に対して(Resource)・何を許可する(Action) バケット オブジェクト • バケットオペレーション • バケットの作成 • バケットの削除
• バケット⼀覧の取得 etc • オブジェクトオペレーション • オブジェクトの作成 • オブジェクトの参照 • オブジェクトの更新etc
15 S3アクセス管理における概念の整理(再掲) • アクセスポリシー • ユーザーポリシー(ユーザー/グループ/ロール) • バケットポリシー • ACL(バケット/オブジェクト)
• 誰が(Principal) • AWSアカウント • ユーザー • サービス • パブリック etc • 何に対して(Resource) • バケット • オブジェクト • 何を許可/拒否する(Action) • バケット オペレーション • オブジェクト オペレーション
16 権限の勝ち負け 暗黙的拒否 < 明⽰的許可 < 明⽰的拒否 デフォルトDeny < Allow
< Deny 許可してない < 許可している < 拒否している
17 いきなり ここで問題です。
18 いきなり 次の場合、 どちらの権限が優先されるでしょう︖
19 権限の勝ち負けの問題 ユーザーポリシー • アカウント内の全バケットに 対するフルアクセスを許可す る バケットポリシー • ヤマダさんを除く⼀部のユー
ザーにのみフルアクセスを許可 する ヤマダさん SampleBucket アクセスできる︖ できない︖
20 権限の勝ち負けの問題 ユーザーポリシー • アカウント内の全バケットに 対するフルアクセスを許可す る バケットポリシー • ヤマダさんを除く⼀部のユー
ザーにのみフルアクセスを許可 する ヤマダさん SampleBucket
21 Tips紹介 (個⼈的な⾒解です) (わかりやすさ優先で⼀部極端な表現を使います)
22 Tips1 バケット/オブジェクトACLは、⼀旦忘れる
23 バケット/オブジェクトACLは、⼀旦忘れる 主たる理由︓ほとんどのケースが、 ユーザーポリシーとバケットポリシーで対応可能だから。 その他の理由︓ • ACLでは、制御できる範囲が限られている • ACLよりもユーザーポリシーとバケットポリシーが優先される →
存在は知っているが、現段階では⼀旦忘れてOK
24 Tips2 原則︓最⼩権限から始めよ
25 原則︓最⼩権限から始めよ S3に限らず、IAMのベストプラクティスでもある。 “最⼩限のアクセス権限から開始し、必要に応じて追加のアクセス権限を 付与します。この⽅法は、ゆるいアクセス権限で始めて後でそれらをし ぼろうとするよりも安全です。” 出来るだけ最⼩限にしぼってから始める⽅がより安全なのです。 したがって、ユーザーポリシーだけ︖バケットポリシーだけ︖ それとも両⽅が良いの︖議論については、 「できれば両⽅でしぼる。無理なら⽚⽅でしぼる。」と考えます。
26 次に浮かぶ疑問 では、 ユーザーポリシーとバケットポリシー、 まずはどっちを考えたら良いのだろう︖
27 アクセスポリシー(再掲) ユーザーポリシー • IAMユーザー・グループ・ロールに適⽤ • ユーザー単位でアクセスを制御するのに◎ バケットポリシー • バケットに適⽤
• バケット単位でアクセスを制御するのに◎ ACL(バケット/オブジェクト) • バケット/オブジェクト適⽤ • オブジェクト単位でアクセスを制御するのに◎
28 その疑問を解決すべく 超簡単なフローチャート 作ってみました。
29 質問はたった3つだけ 1. パブリックアクセスさせたい︖ 2. 複数のAWSアカウントから アクセスさせたい︖ 3. 単⼀のAWSアカウント内から アクセスさせたい︖
30 ポリシーを考える順番 1. パブリックアクセスさせたい︖ 2. 複数のAWSアカウントから アクセスさせたい︖ NO YES Main:バケットポリシー
YES NO Main:ユーザーポリシー(IAMロール) Sub:バケットポリシー Main:ユーザーポリシー Sub:バケットポリシー 3. 単⼀のAWSアカウント内から アクセスさせたい︖ YES
31 ポリシーを考える順番 1. パブリックアクセスさせたい︖ Main:バケットポリシー YES 理由︓ユーザーポリシーで、パブリックアクセス を管理するのは無理だから。→必然的にバケット ポリシー⼀択。
32 ポリシーを考える順番 2. 複数のAWSアカウントから アクセスさせたい︖ YES Main:ユーザーポリシー(IAMロール) Sub:バケットポリシー 理由︓他のAWSアカウントからのアクセスは IAMロールが無難(詳細は次のTips)
33 ポリシーを考える順番 Main:ユーザーポリシー Sub:バケットポリシー 3. 単⼀のAWSアカウント内から アクセスさせたい︖ YES 理由1︓S3に限らずすべての権限は、 できるだけIAMで⼀元管理できる⽅がよい。
理由2︓S3は、デフォルトDeny。 下⼿に触るよりデフォルトが安全。 (追加・補⾜的にバケットポリシーを使⽤する)
34 権限の勝ち負けの問題(再掲) ユーザーポリシー • アカウント内の全バケットに 対するフルアクセスを許可す る バケットポリシー • ヤマダさんを除く⼀部のユー
ザーにのみフルアクセスを許可 する ヤマダさん SampleBucket OK
35 権限の勝ち負けの問題(再掲) ユーザーポリシー • アカウント内の全バケットに 対する読み取りを許可する バケットポリシー • ヤマダさんを除く⼀部のユー ザーにのみフルアクセスを許可
する ヤマダさん SampleBucket OK ユーザーポリシー を修正すべき
36 ポリシーを考える順番 1. パブリックアクセスさせたい︖ 2. 複数のAWSアカウントから アクセスさせたい︖ NO YES Main:バケットポリシー
• 理由︓ユーザーポリシーで、パブリックアクセスを管 理するのは無理だから。→必然的にバケットポリシー ⼀択。 YES NO Main:ユーザーポリシー (IAMロール) Sub:バケットポリシー • クロスアカウントアクセスはIAMロールが有⽤ (詳細は次のTipsにて解説) Main:ユーザーポリシー Sub:バケットポリシー • できるだけ権限周りは、IAMで⼀元管理する⽅がシ ンプルになるので、ユーザーポリシーでまず考える • それだと難しい場合にバケットポリシーを使う 3. 単⼀のAWSアカウント内から アクセスさせたい︖ YES
37 Tips3 クロスアカウントはIAMロールが無難
38 クロスアカウントはIAMロールが無難 クロスアカウントアクセスとは、 複数のAWSアカウントが登場すること。 クロスアカウントがややこしくなる要因はただ1つ。 ※アカウントが異なる場合、 バケット所有者とオブジェクト所有者を考慮する必要が出てくるから。 (同⼀アカウント内ではこの考慮は不要です)
39 バケット所有者とオブジェクト所有者 OK NG バケットとオブジェクトの所有者のAWSアカウントが異なる場合、 オブジェクト所有者がバケット所有者にオブジェクトACLで権限を与えない限り、 バケット所有者は、そのオブジェクトを触ることができない。
40 クロスアカウントの例 アカウントA アカウントB アカウントC アカウントAのバケットに、 アカウントBのユーザーがオブジェクトをputして、 アカウントAとアカウントCのユーザーがgetするパターン
41 クロスアカウントの例(IAMロール使わないver) アカウントA アカウントB アカウントC バケットポリシー ユーザーポリシー ユーザーポリシー オブジェクトACL ユーザーポリシー
42 クロスアカウントの例(IAMロール使わないver) 【アカウントA】 - バケットポリシー - バケットに対してアカウントB/Cのアクセスを許可する - ただし、アカウントBがオブジェクトACLのフルコントロールを許可 してないとNG
- ユーザーポリシー - ユーザーに対してバケット・オブジェクトのアクセスを許可する 【アカウントB】 - ユーザーポリシー - ユーザーに対してバケット・オブジェクトのアクセスを許可する - オブジェクトACL - アカウントA/Cにオブジェクトのフルコントロールを許可する 【アカウントC】 - ユーザーポリシー - ユーザーに対してバケット・オブジェクトのアクセスを許可する
43 クロスアカウントの例(IAMロール使わないver) アカウントA アカウントB アカウントC バケットポリシー ユーザーポリシー ユーザーポリシー オブジェクトACL ユーザーポリシー
バケット所有者と オブジェクト所有者が 違うので、 オブジェクトACLが必要に… さらにアカウントが増えた 時の対応範囲が広い… ・オブジェクトACLの修正 ・バケットポリシーの修正
44 クロスアカウントの例(IAMロール使うver) アカウントA アカウントB アカウントC ユーザーポリシー ユーザーポリシー ユーザーポリシー ロールポリシー (B)
ロールポリシー (C)
45 クロスアカウントの例(IAMロール使うver) 【アカウントA】 - ユーザーポリシー - ユーザーに対してバケット・オブジェクトのアクセスを許可する - ロールポリシー(アカウントB⽤) -
対象のバケットへのアクセスを許可する - ロールポリシー(アカウントC⽤) - 対象のバケットへのアクセスを許可する 【アカウントB】 - ユーザーポリシー - アカウントAのロール使⽤を許可する 【アカウントC】 - ユーザーポリシー - アカウントAのロール使⽤を許可する
46 クロスアカウントの例(IAMロール使うver) アカウントA アカウントB アカウントC ユーザーポリシー ユーザーポリシー ユーザーポリシー ロールポリシー (B)
ロールポリシー (C) バケット所有者=オブジェ クト所有者なので、オブ ジェクトACLが不要 アカウント追加時も アカウントAで 集中管理が可能
47 クロスアカウントの例(IAMロール使うver) アカウントA アカウントB アカウントC ユーザーポリシー ユーザーポリシー ユーザーポリシー ロールポリシー (B)
ロールポリシー (C) 1.オブジェクト所有者を意識しないで済む⽅が シンプルでわかりやすい 2.別アカウントのことは、 全てロールに払い出す⽅が管理しやすい
48 Tips4 ⼀般公開しないなら、 ブロックパブリックアクセス
49 ⼀般公開しないなら、ブロックパブリックアクセス What is ブロックパブリックアクセス ? • Re:invent2018発表の新機能 • ポリシー全無視でパブリックアクセスをブロックする最強
なやつ • いわば「安全装置」 → パブリックに公開する予定のないバケットは とりあえず有効化するのが安全。
50 最後にもう⼀度
51 基本これだけ︕(再掲) このセッションで覚えて帰っていただきたいこと • バケット/オブジェクトACLは、⼀旦忘れる • 原則︓最⼩権限から始めよ • クロスアカウントはIAMロールが無難 •
⼀般公開しないなら、ブロックパブリックアクセス
52