$30 off During Our Annual Pro Sale. View Details »

AWS IAMポリシーのConditionを書くときの勘所

AWS IAMポリシーのConditionを書くときの勘所

IAMポリシーのConditionを使うことで柔軟な権限設計を実現できます。今回はこの Conditionを書くときに意識したい「キーの可用性」の話をします。

MasahiroKawahara

July 25, 2022
Tweet

More Decks by MasahiroKawahara

Other Decks in Technology

Transcript

  1. *".ϙϦγʔͷ $POEJUJPOΛॻ͘ͱ͖ͷצॴ dΩʔͷՄ༻ੑͷ࿩d  "84ࣄۀຊ෦ ઒ݪ੐େ

  2. ૝ఆࢹௌऀ Ø *".Ϣʔβʔϩʔϧͷݖݶ؅ཧΛ͍ͯ͠Δਓ ü $POEJUJPOΛ࢖ͬͨॊೈͳݖݶઃܭΛݕ౼த Ø "84Λֶश͍ͯ͠Δਓ ü ϕʔγοΫͳ*".ϙϦγʔ͸ॻ͍ͨ͜ͱ͕͋Δ ü

    $POEJUJPOͷࡉ͔͍࢖͍ํΛ೺Ѳ͍ͨ͠ 3
  3. ໨࣍  લఏ஌ࣝ  ΩʔՄ༻ੑͷ࿩  $POEJUJPOઃܭͷ࿩ 4

  4. 5 લఏ஌ࣝ ✎τϐοΫ✎ *".ϙϦγʔ ϦΫΤετίϯςΩετ  ৚݅Ωʔ ϙϦγʔม਺ $POEJUJPO۟

  5. 6 *".ϙϦγʔ

  6. *".ϙϦγʔͱ͸ ݖݶΛఆΊͨ΋ͷɻ+40/ܗࣜͰॻ͘ Ø ୭͕ <1SJODJQBM> Ø ͲͷϦιʔεʹରͯ͠ <3FTPVSDF> Ø ͲͷΞΫγϣϯΛ

    <"DUJPO> Ø ೚ҙ Ͳͷ৚݅ԼͰ <$POEJUJPO>˞ࠓ೔ͷτϐοΫ Ø ڐՄڋ൱͢Δ͔ <&GGFDU> 7
  7. *".ϙϦγʔཁૉͷΠϝʔδ ը૾"84ʹ͓͚Δ"#"$ͷخ͠͞ɺਏ͞ΛޠΓ·ͨ͠ ",*#""84c%FWFMPQFST*0 8

  8. 9 ϦΫΤετίϯςΩετ

  9. ϦΫΤετίϯςΩετͱ͸ ϦΫΤετʹؔ͢Δ৘ใΛ·ͱΊͨ΋ͷ ڐՄڋ൱Λܾఆ͢ΔͨΊͷΠϯϓοτ 10

  10. ϦΫΤετίϯςΩετͷΩʔ ৚݅Ωʔ ͱ͸ ಛఆཁૉΛࢦͨ͢ΊͷΩʔ ৚݅Ωʔͱ΋ݺͿ ओʹ$POEJUJPO۟Ͱ࢖͏ͨΊ 11

  11. 12 ৚݅Ωʔ

  12. ৚݅Ωʔͷछྨ छྨ͋Δ Ø άϩʔόϧ৚݅Ωʔ ྫ aws:username Ø αʔϏεݻ༗ͷ৚݅Ωʔ ྫ ec2:Vpc

    13
  13. άϩʔόϧ৚݅Ωʔ 14 AWS グローバル条件コンテキストキー - AWS Identity and Access Management

  14. αʔϏεݻ༗ͷ৚݅Ωʔ ˞Ϧιʔε୯Ґ ΋͘͠͸ ΞΫγϣϯ YϦιʔε୯Ґ 15 AWS のサービスのアクション、リソース、および条件キー - サービス認証リファレンス

  15. 16 ϙϦγʔม਺

  16. ϙϦγʔม਺ ʮϦΫΤετίϯςΩετͷΩʔͷ஋ʯΛࢦ͢΋ͷ ͜ΕΛ*".ϙϦγʔͷ஋ʹࢦఆͰ͖Δ 17

  17. 18 $POEJUJPO۟

  18. *".ϙϦγʔͷ$POEJUJPO۟ ϙϦγʔ͕ద༻ ڐՄڋ൱ ͞ΕΔ৚݅Λهड़Ͱ͖Δ 19

  19. $POEJUJPO׆༻ͷྫ Ø ৚݅Ωʔ Ø ৚݅Ωʔͷ஋ Ø ৚݅ԋࢉࢠ 20

  20. $POEJUJPO׆༻ͷྫ ৚݅Ωʔ Ø ৚݅Ωʔ Ø ৚݅Ωʔͷ஋ Ø ৚݅ԋࢉࢠ 21 ϦΫΤετίϯςΩετͷΩʔ

  21. $POEJUJPO׆༻ͷྫ ৚݅Ωʔͷ஋ Ø ৚݅Ωʔ Ø ৚݅Ωʔͷ஋ Ø ৚݅ԋࢉࢠ 22 ۩ମతͳจࣈྻ਺஋ɺ΋͘͠

    ͸ϙϦγʔม਺
  22. $POEJUJPO׆༻ͷྫ ৚݅ԋࢉࢠ Ø ৚݅Ωʔ Ø ৚݅Ωʔͷ஋ Ø ৚݅ԋࢉࢠ 23 ʮ৚݅Ωʔͷ஋ʯͱʮ࣮ࡍͷϦ

    ΫΤετίϯςΩετͷ஋ʯΛ Ͳͷج४Ͱൺֱ͢Δ͔
  23. ৚݅ԋࢉࢠͷྫ Ø จࣈྻͷൺֱ StringEquals/StringNotEquals Ø ਺஋ͷൺֱ NumericLessThan/NumericGreaterThan Ø ৚݅Ωʔͷ༗ແνΣοΫNull Ø

    ͳͲ 24
  24. ࢀߟ ͲΕ͕৚݅ΩʔʁͲΕ͕ϙϦγʔม਺ʁ Ø ৚݅Ωʔ Ø $POEJUJPO۟Ͱ࢖͏ Ø +40/ͷʮΩʔʯ෦෼Ͱ࢖͏ Ø ϙϦγʔม਺

    Ø $POEJUJPO۟ ΋͘͠͸ 3FTPVSDF۟Ͱ࢖͏ Ø +40/ͷʮΩʔͷ஋ʯ෦෼Ͱ࢖͏ Ø ${} ͰׅΔ 25
  25. ࢀߟ ϙϦγʔͷධՁ࿦ཧ"/% 03 26 ը૾4όέοτϙϦγʔͷ۩ମྫͰֶͿ"84ͷ1PMJDZυΩϡϝϯτ c%FWFMPQFST*0

  26. 27 ΩʔՄ༻ੑͷ࿩ ✎τϐοΫ✎ ΩʔͷՄ༻ੑ ৚݅Ωʔ͕ແ͍ͱ͖ͷڍಈ ϙϦγʔม਺͕ແ͍ͱ͖ͷڍಈ

  27. ͸͡Ίʹ·ͱΊ Ø ϦΫΤετίϯςΩετͷΩʔʹ͸Մ༻ੑ͕͋Δ Ø ࢦఆͨ͠৚݅Ωʔ͕ແ͍ͱ͖ɺෆҰக GBMTF ͱ͠ ͯѻΘΕΔ ü ූ߸൓సܥͷ৚݅ԋࢉࢠͷ৔߹ɺUSVFʹͳΔ

    Ø ࢦఆͨ͠ϙϦγʔม਺͕ແ͍ͱ͖ɺͦͷεςʔτ ϝϯτ͸ແޮʹͳΔ 28
  28. 29 ΩʔͷՄ༻ੑ

  29. ΩʔͷՄ༻ੑʁ ϦΫΤετͷ಺༰࣍ୈͰɺಛఆΩʔ͕ ଘࡏ͢Δέʔεɺଘࡏ͠ͳ͍έʔε͕͋Δ 30

  30. ΩʔͷՄ༻ੑͷௐ΂ํ άϩʔόϧ৚݅Ωʔ υΩϡϝϯτʹهࡌ 31 AWS グローバル条件コンテキストキー #aws:ResourceTag - AWS Identity

    and Access Management
  31. ΩʔͷՄ༻ੑͷௐ΂ํ αʔϏεݻ༗ͷ৚݅Ωʔ Ϧιʔε୯Ґ ΋͘͠͸ΞΫγϣϯ º Ϧιʔε୯ҐͰՄ༻ੑ͕ܾఆ 32 AWS のサービスのアクション、リソース、および条件キー -

    サービス認証リファレンス
  32. Ωʔແ͍ͱ͖ͷڍಈΛ೺Ѳ͠Α͏ Ø ࢦఆͨ͠ʮ৚݅Ωʔʯ͕ແ͍ͱ͖ Ø ࢦఆͨ͠ʮϙϦγʔม਺ʯ͕ແ͍ͱ͖ 33

  33. Ωʔແ͍ͱ͖ͷڍಈΛ೺Ѳ͠Α͏ Ø ࢦఆͨ͠ʮ৚݅Ωʔʯ͕ແ͍ͱ͖ Ø ࢦఆͨ͠ʮϙϦγʔม਺ʯ͕ແ͍ͱ͖ 34

  34. ࢦఆͨ͠ʰ৚݅Ωʔʱ͕ແ͍ͱ͖ͷڍಈ ෆҰக GBMTF ͱͯ͠ѻΘΕΔ 35

  35. ࢦఆͨ͠ʰ৚݅Ωʔʱ͕ແ͍ͱ͖ͷڍಈ ⾠ ͨͩ͠ʮNot ৚݅ԋࢉࢠʯͷ৔߹͸ USVF ʹͳΔ 36

  36. Ωʔແ͍ͱ͖ͷڍಈΛ೺Ѳ͠Α͏ Ø ࢦఆͨ͠ʮ৚݅Ωʔʯ͕ແ͍ͱ͖ Ø ࢦఆͨ͠ʮϙϦγʔม਺ʯ͕ແ͍ͱ͖ 37

  37. ࢦఆͨ͠ʰϙϦγʔม਺ʱ͕ແ͍ͱ͖ͷڍಈ ⾠ εςʔτϝϯτ͕ແޮʹͳΔ 38

  38. 39 ͜͜Ͱ໰୊

  39. ͜͜Ͱ໰୊ ʲέʔεʳ ʲέʔεʳ͸ %FOZ͞ΕΔ PS͞Εͳ͍ʁ 40

  40. ͜͜Ͱ໰୊ ʲέʔεʳ ʲέʔεʳ͸ %FOZ͞ΕΔ PS͞Εͳ͍ʁ 41 ʮϓϦϯγύϧ ϩʔϧ ͷ 1SPKFDUλά஋ʯͱ

    ʮϦιʔε &$ ͷ 1SPKFDUλά஋ʯ͕ Ұக͠ͳ͍ͱ͖ʹ &$ΠϯελϯεͷىಈఀࢭΛڋ൱͢Δ
  41. ͜͜Ͱ໰୊ ʲέʔεʳ ʲέʔεʳ͸ %FOZ͞ΕΔ PS͞Εͳ͍ʁ 42 ʲέʔεʳ ϩʔϧʹ1SPKFDUλάΛ෇͚๨Εͨ

  42. ͜͜Ͱ໰୊ ʲέʔεʳ ʲέʔεʳ͸ %FOZ͞ΕΔ PS͞Εͳ͍ʁ 43 ʲέʔεʳ Πϯελϯεʹ1SPKFDUλάΛ෇͚๨Εͨ

  43. ͜͜Ͱ໰୊ ʲέʔεʳ ʲέʔεʳ͸ %FOZ͞ΕΔ PS͞Εͳ͍ʁ 44

  44. ·ͣ౴͑ ʲέʔεʳ͸%FOZ͞ΕΔ ʲέʔεʳ͸%FOZ͞Εͳ͍ 45

  45. ʲέʔεʳ͸%FOZ͞ΕΔ ৚݅Ωʔ͕ແ͍ঢ়ଶͳͷͰ ෆҰக GBMTF ѻ͍ ‑ ͨͩɺ৚݅ԋࢉࢠ͸ StringNotEquals ‑ ූ߸൓సͷ৚݅ԋࢉࢠͳͷͰɺ

    USVF ʹͳΔ ‑ ϙϦγʔ͸࣮ߦ %FOZ 46
  46. ʲέʔεʳ͸%FOZ͞Εͳ͍ ϙϦγʔม਺͕ແ͍ঢ়ଶ ‑ εςʔτϝϯτ͸ແޮ ‑ ϙϦγʔ͸࣮ߦ͞Εͳ͍ %FOZ͞Εͳ͍ 47

  47. 48 $POEJUJPOઃܭͷ࿩ ✎τϐοΫ✎ IfExists, Null, ϙϦγʔม਺ͷσϑΥϧτ஋

  48. 49 ৚݅ΩʔΛߟྀͨ͠ $POEJUJPOઃܭ

  49. ৚݅Ωʔͷ৔߹ Ωʔ͕ແ͍ͱ͖ͷʮϙϦγʔΛ࣮ߦ͢Δ͠ͳ͍ʯΛ ίϯτϩʔϧ͠Α͏ʂ Ø USVF ϙϦγʔΛ࣮ߦ͢Δ ͱ͍͔ͨ͠ Ø GBMTF ϙϦγʔΛ࣮ߦ͠ͳ͍

    ͱ͍͔ͨ͠ 50
  50. ʮ৚݅Ωʔ͕ແ͍ʯͱ͖ʹ USVF ʹ͢Δ ...IfExists ৚݅ԋࢉࢠΛ࢖͓͏ʂ Ø NullΛআ͘ શͯͷ৚݅ԋࢉࢠͷ຤ඌʹ௥ՃՄೳ ü ৚݅Ωʔ͕ແ͍ͱ͖ʹ

    USVF ͱͳΔ 51 ✎ϙΠϯτ✎ ʮ৚݅ԋࢉࢠʹࠨӈ͞Εͳ͍ʯ
  51. ʮ৚݅Ωʔ͕ແ͍ʯͱ͖ʹ GBMTF ʹ͢Δ “Null”: {“key”: false} Λ௥ه͠Α͏ʂ Ø Null͸ ৚݅Ωʔͷଘࡏ൑ఆͰ࢖͑Δ৚݅ԋࢉࢠ

    ü ஋͸ USVF Ωʔ͕ଘࡏ͠ͳ͍ ·ͨ͸ GBMTF Ωʔ͕ଘࡏ͢Δ 52 ✎ϙΠϯτ✎ ʮ৚݅ԋࢉࢠʹࠨӈ͞Εͳ͍ʯ
  52. 53 ϙϦγʔม਺Λߟྀͨ͠ $POEJUJPOઃܭ

  53. ϙϦγʔม਺ͷ৔߹ Ωʔ͕ແ͍ͱ͖ͷڍಈΛίϯτϩʔϧ͠Α͏ʂ Ø σϑΥϧτ஋ͷࢦఆ Ø Null ͷ໌ࣔతͳهࡌ 54

  54. ϙϦγʔม਺ͷ σϑΥϧτ஋ ࢦఆ Ωʔ͕ແ͍ͱ͖ͷσϑΥϧτ஋ΛࢦఆՄೳ ॻ͖ํ${key,‘default-value’} 55 ✎ϙΠϯτ✎ ʮεςʔτϝϯτແޮԽΛճආʯ

  55. Null ͷ໌ࣔతͳهࡌ Null Λ໌ࣔతʹهࡌͯ͠ ʮΩʔ͕͋ΔલఏͷεςʔτϝϯτʯΛࣔ͢ 56 ✎ϙΠϯτ✎ ʮϙϦγʔ࣮ߦ৚݅Λ໌ࣔతʹهࡌʯ

  56. Null ͷ໌ࣔతͳهࡌ 57 ➥Ωʔ͕ͳ͍ͱ͖ Ø /VMMͷ෦෼Ͱ GBMTFͱͳΔ Ø ͜ͷ࣌఺Ͱ $POEJUJPO෦෼͕

    GBMTFʹͳ Δ͜ͱ͕֬ఆ͢Δ˞ Ø ϙϦγʔ͸࣮ߦ͞Εͳ͍ ➥Ωʔ͕ͳ͍ͱ͖ Ø ϙϦγʔม਺ʹࢦఆͨ͠Ωʔ͕ແ͍ Ø εςʔτϝϯτ͕ແޮʹͳΔ Ø ϙϦγʔ͸࣮ߦ͞Εͳ͍ ˞$POEJUJPO͸શ৚݅ͷ"/%Ͱ ධՁ͞ΕΔͨΊ
  57. 58 ·ͱΊ

  58. ·ͱΊ ΩʔͷՄ༻ੑͱڍಈͷ࿩ Ø ϦΫΤετίϯςΩετͷ Ωʔʹ͸Մ༻ੑ͕͋Δ Ø ৚݅Ωʔ͕ແ͍ͱ͖͸ ෆҰக GBMTF ü

    /PUܥͷ৔߹͸ USVF Ø ϙϦγʔม਺͕ແ͍ͱ͖͸ εςʔτϝϯτແޮ 59 ϙϦγʔม਺ ੍ޚͷ࿩ Ø σϑΥϧτ஋ͷࢦఆ Ø Nullͷ໌ࣔతͳهࡌ ৚݅Ωʔ ੍ޚͷ࿩ Ø USVFʹ͍ͨ͠ͱ͖͸ IfExists Ø GBMTFʹ͍ͨ͠ͱ͖͸ Null
  59. None
  60. ࢀߟ • "84 • "84άϩʔόϧ৚݅ίϯςΩετΩʔ  "84*EFOUJUZBOE"DDFTT.BOBHFNFOU • "84ͷαʔϏεͷΞΫγϣϯɺϦιʔεɺ͓Αͼ৚݅Ωʔ 

    αʔϏεೝূϦϑΝϨϯε • *".+40/ϙϦγʔཁૉ৚݅ԋࢉࢠ  "84*EFOUJUZBOE"DDFTT.BOBHFNFOU • ϙϦγʔͷཁૉม਺ͱλά  "84*EFOUJUZBOE"DDFTT.BOBHFNFOU • %FWFMPQFST*0 • 4όέοτϙϦγʔͷ۩ମྫͰֶͿ"84ͷ1PMJDZυΩϡϝϯτ c%FWFMPQFST*0 • ʲ"84*".ʳ$POEJUJPOͷ৚݅Ωʔ΍ϙϦγʔม਺͸Մ༻ੑΛҙࣝ͠Α͏ʂͱ͍͏࿩ c %FWFMPQFST*0 • খωλ"84*".ϙϦγʔͷ $POEJUJPOͰ࢖͑Δ৚݅ԋࢉࢠ l/VMMzͷ࢖͍ΈͪΛߟ͑Δ c %FWFMPQFST*0 • "84ʹ͓͚Δ"#"$ͷخ͠͞ɺਏ͞ΛޠΓ·ͨ͠ ",*#""84c%FWFMPQFST*0 61