Share
Embed
閉域要件におけるS3周辺ポリシーの組み合わせ方
Security-JAWS第23回での登壇資料です。
イベントURL:https://s-jaws.doorkeeper.jp/events/127684
登壇動画URL:https://youtu.be/Q-dKRmVgpRA?t=5860
株式会社みずほ銀⾏ 情報数理⼯学研究所 デジタル技術開発部
August 18, 2022
Transcript
88 slides
-
閉域要件における S3周辺ポリシーの組み合わせ方 2021.11.11 Security-JAWS 第23回 Copyright (c) Mizuho Research &
Technologies, Ltd. All Rights Reserved. (免責事項) 当資料は情報提供のみを目的として作成されたものであり、商品の勧誘を目的としたものではありません。 本資料は、当社が信頼できると判断した各種データに基づき作成されておりますが、その正確性、確実性を 保証するものではありません。また、本資料に記載された内容は予告なしに変更されることもあります。 -
自己紹介 氏名:松尾 優成(まつお ゆうせい) 所属:先端技術研究部 兼 プロジェクト推進部
役割: AWS社内案件の設計・構築サポート みずほコミュニティ ERG ”コクリエ” の運営 -
アカウントA 構成概要 オンプレミスからS3に格納したユーザー情報を、EC2 で分析して還元するシステム。 VPC Corporate data center bucket-a
Direct Connect VPCe (I/F型) VPCe (G/W型) 閉域用 bucket-b S3 ・ ・ ・ EC2 運用者 -
アカウントA 構成概要 オンプレミスからS3に格納したユーザー情報を、EC2 で分析して還元するシステム。 VPC Corporate data center bucket-a
Direct Connect VPCe (I/F型) VPCe (G/W型) 閉域用 bucket-b S3 ・ ・ ・ EC2 運用者 ①オンプレミスにある ユーザー情報を・・・ -
アカウントA 構成概要 オンプレミスからS3に格納したユーザー情報を、EC2 で分析して還元するシステム。 VPC Corporate data center bucket-a
Direct Connect VPCe (I/F型) VPCe (G/W型) 閉域用 bucket-b S3 ・ ・ ・ EC2 運用者 ②S3にアップロード -
アカウントA 構成概要 オンプレミスからS3に格納したユーザー情報を、EC2 で分析して還元するシステム。 VPC Corporate data center bucket-a
Direct Connect VPCe (I/F型) VPCe (G/W型) 閉域用 bucket-b S3 ・ ・ ・ EC2 運用者 ③S3のデータをEC2でETL処理 -
アカウントA 構成概要 オンプレミスからS3に格納したユーザー情報を、EC2 で分析して還元するシステム。 VPC Corporate data center bucket-a
Direct Connect VPCe (I/F型) VPCe (G/W型) 閉域用 bucket-b S3 ・ ・ ・ EC2 運用者 ④EC2から再度S3に アップロードし・・・ -
アカウントA 構成概要 オンプレミスからS3に格納したユーザー情報を、EC2 で分析して還元するシステム。 VPC Corporate data center bucket-a
Direct Connect VPCe (I/F型) VPCe (G/W型) 閉域用 bucket-b S3 ・ ・ ・ EC2 運用者 ⑤オンプレミスに処理済みの ユーザー情報を還元 -
アカウントA 構成概要(補足) ユーザーごとに専用のS3バケットがあり、ユーザー増加に応じてS3バケットも増加。 バッチ処理のみで、インターネットアクセスなし。 VPC Corporate data center
bucket-a Direct Connect VPCe (I/F型) VPCe (G/W型) 閉域用 bucket-b S3 ・ ・ ・ EC2 運用者 -
閉域網だからといって、きちんと対策しないと・・・ VPC Corporate data center Direct Connect VPCe (I/F型) VPCe
(G/W型) EC2 閉域用 運用者 アカウントA bucket-a bucket-b S3 ・ ・ ・ -
閉域網だからといって、きちんと対策しないと・・・ VPC Corporate data center Direct Connect VPCe (I/F型) VPCe
(G/W型) EC2 閉域用 運用者 アカウントC(社外) アカウントA bucket-z 流出! C C データ流出リスクがある!→ C -
データ流出観点で着目するポリシーは3つ VPC Corporate data center bucket-a Direct Connect VPCe (I/F型)
VPCe (G/W型) EC2 閉域用 bucket-b S3 ・ ・ ・ 運用者 アカウントA Ⅰ. IAMポリシー Ⅱ. VPCエンドポイントポリシー Ⅲ. バケットポリシー Ⅰ Ⅰ Ⅲ Ⅱ -
アカウントA 重要データを保持するのは3箇所 VPC Corporate data center bucket-a Direct Connect VPCe
(I/F型) VPCe (G/W型) 閉域用 bucket-b S3 ・ ・ ・ EC2 ① 閉域用端末 ② EC2 ③ S3バケット 運用者 ←これらに置かれたデータが流出するのを防ぎたい・・・! ① ② ③ -
VPCe利用者のアクセス権限 VPC Corporate data center bucket-a Direct Connect VPCe (I/F型)
VPCe (G/W型) EC2 閉域用 bucket-b S3 ・ ・ ・ 運用者 アカウントA ① ② ③ -
VPCe利用者のアクセス権限 VPC Corporate data center bucket-a Direct Connect VPCe (I/F型)
VPCe (G/W型) EC2 閉域用 bucket-b S3 ・ ・ ・ 運用者 アカウントA ① 閉域用端末 ② EC2 ③ S3バケット ←①と②に焦点を絞ってみる ① ② ③ -
VPCe利用者のアクセス権限 VPC Corporate data center bucket-a Direct Connect VPCe (I/F型)
VPCe (G/W型) EC2 閉域用 bucket-b S3 ・ ・ ・ 運用者 アカウントA ・IAMポリシー例 { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::bucket-*“ } -
VPCe利用者のアクセス権限 VPC Corporate data center bucket-a Direct Connect VPCe (I/F型)
VPCe (G/W型) EC2 閉域用 bucket-b S3 ・ ・ ・ 運用者 アカウントA ・IAMポリシー例 { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::bucket-*“ } IAMポリシーのAction句は最小権限を前提。 -
VPCe利用者のアクセス権限 VPC Corporate data center bucket-a Direct Connect VPCe (I/F型)
VPCe (G/W型) EC2 閉域用 bucket-b S3 ・ ・ ・ 運用者 アカウントA ・IAMポリシー例 { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::bucket-*“ } 最小権限を厳密にするならば、Resource句で bucket-a, bucket-b のように書くべきだが・・・ -
VPCe利用者のアクセス権限 VPC Corporate data center bucket-a Direct Connect VPCe (I/F型)
VPCe (G/W型) EC2 閉域用 bucket-b S3 ・ ・ ・ 運用者 アカウントA ・IAMポリシー例 { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::bucket-*“ } S3バケット増加に伴うポリシー更新体力を 抑えるため、ワイルドカードを使いたい -
開発者 権限管理者 S3バケットが増加したので、IAMロールに 権限を追加してもらえますか? 5営業日で対応します! 別途、5営業日で対応します! S3バケットが更に増加し・・・(ry 11/1(月) 11/4(木) 11/8(月)
S3バケットのArnを間違えたので、依頼内容を 修正したいのですが・・・ -
開発者 権限管理者 S3バケットが増加したので、IAMロールに 権限を追加してもらえますか? 5営業日で対応します! 別途、5営業日で対応します! S3バケットが更に増加し・・・(ry 11/1(月) 11/4(木) 11/8(月)
S3バケットのArnを間違えたので、依頼内容を 修正したいのですが・・・ ※Permissions Boundaryは 本題から逸れるので考慮外 -
VPCe利用者のアクセス権限 VPC Corporate data center bucket-a Direct Connect VPCe (I/F型)
VPCe (G/W型) EC2 閉域用 bucket-b S3 ・ ・ ・ 運用者 アカウントA ・IAMポリシー例 { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::bucket-*“ } というわけで、やはりワイルドカードを使いたい! -
VPCe利用者:不正経路 VPC Corporate data center bucket-a Direct Connect VPCe (I/F型)
VPCe (G/W型) EC2 閉域用 bucket-b S3 ・ ・ ・ 運用者 アカウントC(社外) アカウントA bucket-z bucket-zをアカウントCに作成 -
VPCe利用者:不正経路 VPC Corporate data center bucket-a Direct Connect VPCe (I/F型)
VPCe (G/W型) EC2 閉域用 bucket-b S3 ・ ・ ・ 運用者 アカウントC(社外) アカウントA bucket-z IAMポリシーにワイルドカードを利用 { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::bucket-*“ } -
VPCe利用者:不正経路 VPC Corporate data center bucket-a Direct Connect VPCe (I/F型)
VPCe (G/W型) EC2 閉域用 bucket-b S3 ・ ・ ・ 運用者 アカウントC(社外) アカウントA bucket-z 社外のS3バケットポリシーに以下を設定 { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{アカウントA-ID}:root" }, "Action": "s3:*", "Resource”: "arn:aws:s3:::bucket-z/*" } IAMポリシーにワイルドカードを利用 { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::bucket-*“ } -
VPCe利用者:不正経路 VPC Corporate data center bucket-a Direct Connect VPCe (I/F型)
VPCe (G/W型) EC2 閉域用 bucket-b S3 ・ ・ ・ 運用者 アカウントC(社外) アカウントA bucket-z IAMポリシーにワイルドカードを利用 { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::bucket-*“ } 社外のS3バケットポリシーに以下を設定 { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{アカウントA-ID}:root" }, "Action": "s3:*", "Resource”: "arn:aws:s3:::bucket-z/*" } 流出! -
VPCe利用者:不正経路 VPC Corporate data center bucket-a Direct Connect VPCe (I/F型)
VPCe (G/W型) EC2 閉域用 bucket-b S3 ・ ・ ・ 運用者 アカウントC(社外) アカウントA bucket-z 流出! ・IAMポリシー例 { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::bucket-*" } -
IAMロール:S3アカウント制限を追加 VPC Corporate data center bucket-a Direct Connect VPCe (I/F型)
VPCe (G/W型) EC2 閉域用 bucket-b S3 ・ ・ ・ 運用者 アカウントC(社外) アカウントA bucket-z ・IAMポリシー例 { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::bucket-*" } ・追加IAMポリシー例 { "Effect": "Deny", "Action": "s3:*", "Resource": "*", "Condition": { "StringNotEquals": { "s3:ResourceAccount": "アカウントA-ID" } } 参考) https://dev.classmethod.jp/articles/iam-condition-keys-amazon-s3-resource-account/ -
IAMロール:S3アカウント制限を追加 VPC Corporate data center bucket-a Direct Connect VPCe (I/F型)
VPCe (G/W型) EC2 閉域用 bucket-b S3 ・ ・ ・ 運用者 アカウントC(社外) アカウントA bucket-z ・追加IAMポリシー例 { "Effect": "Deny", "Action": "s3:*", "Resource": "*", "Condition": { "StringNotEquals": { "s3:ResourceAccount": "アカウントA-ID" } } 制限可能! 参考) https://dev.classmethod.jp/articles/iam-condition-keys-amazon-s3-resource-account/ ・IAMポリシー例 { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::bucket-*" } -
クレデンシャル持ち込みパターン VPC Corporate data center Direct Connect VPCe (I/F型) VPCe
(G/W型) EC2 閉域用 運用者 アカウントC(社外) アカウントA bucket-z アクセス者側で アカウントCの クレデンシャルを利用 C C C -
クレデンシャル持ち込みパターン VPC Corporate data center Direct Connect VPCe (I/F型) VPCe
(G/W型) EC2 閉域用 運用者 アカウントC(社外) アカウントA bucket-z 流出! C C C -
クレデンシャル持ち込みパターン VPC Corporate data center Direct Connect VPCe (I/F型) VPCe
(G/W型) EC2 閉域用 運用者 アカウントC(社外) アカウントA bucket-z 流出! C C 社外のクレデンシャルを持ち込まれると、 S3 データイベントの CloudTrail ログが アカウントAで記録されないため、要注意。 C -
クレデンシャル持ち込みによる他アカウントへの流出対策も s3:ResourceAccount ※ を VPCエンドポイントポリシーで使用すれば大丈夫 VPC VPCe (I/F型) VPCe (G/W型)
※アクセスポイントを使っている場合、 s3:DataAccessPointArnも有用。 アカウントC(社外) bucket-z -
KMS開発者ガイド:https://docs.aws.amazon.com/ja_jp/kms/latest/ developerguide/kms-vpc-endpoint.html#vpce-policy しかし、この記載をそのまま使うと、 全ての Principal でアクセス不可・・・。 以下 Statement も追加で必要。 {
"Action": "*", "Effect": "Allow", "Resource": "*“, “Principal": "*“ } -
{ "Statement": [ { "Effect": "Deny", "Principal": {"AWS": "*"}, "Action":
"*", "Resource": "*", "Condition": { "StringNotEquals": { "aws:PrincipalAccount": "アカウントA-ID" } } }, { "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*" } ] } 本ポリシーでクレデンシャルの持ち込み 利用を制限可能。 ※s3:ResourceAccountの記載は割愛。 VPCエンドポイントポリシー例 VPC VPCe (I/F型) VPCe (G/W型) アカウントA -
{ "Statement": [ { "Effect": "Deny", "Principal": {"AWS": "*"}, "Action":
"*", "Resource": "*", "Condition": { "StringNotEquals": { "aws:PrincipalAccount": "アカウントA-ID" } } }, { "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*" } ] } ただし、EC2でAmazon Linuxの リポジトリを利用している場合は要注意。 VPCエンドポイントポリシー例 VPC VPCe (I/F型) VPCe (G/W型) EC2 アカウントA -
{ "Statement": [ { "Effect": "Deny", "Principal": {"AWS": "*"}, "Action":
"*", "Resource": "*", "Condition": { "StringNotEquals": { "aws:PrincipalAccount": "アカウントA-ID" } } }, { "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*" } ] } yum updateのリクエストでは アカウントAのprincipal情報をもたないため、 アクセス拒否されてしまう。 VPCエンドポイントポリシー例 VPC VPCe (I/F型) VPCe (G/W型) EC2 アカウントA AWS管理 amazonlinux リポジトリ -
{ "Statement": [ { "Effect": "Deny", "Principal": {"AWS": "*"}, "Action":
"*", “NotResource": "arn:aws:s3:::amazonlinux.{region}.amazonaws.com/*", "Condition": { "StringNotEquals": { "aws:PrincipalAccount": "アカウントA-ID" } } }, { "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*" } ] } アカウントA EC2が使用するVPCeのエンドポイントポリシーでは NotResource句 を使って以下を指定すれば、 AmazonLinuxリポジトリにアクセス可。 VPCエンドポイントポリシー例 VPC VPCe (I/F型) VPCe (G/W型) EC2 AWS管理 amazonlinux リポジトリ -
重要データを保持するのは3箇所 VPC Corporate data center bucket-a Direct Connect VPCe (I/F型)
VPCe (G/W型) EC2 閉域用 bucket-b S3 ・ ・ ・ 運用者 アカウントA ① 閉域用端末 ② EC2 ③ S3バケット ←①と②は前述の対策で大丈夫そう ① ② ③ -
重要データを保持するのは3箇所 VPC Corporate data center bucket-a Direct Connect VPCe (I/F型)
VPCe (G/W型) EC2 閉域用 bucket-b S3 ・ ・ ・ 運用者 アカウントA ① 閉域用端末 ② EC2 ③ S3バケット ←次に③S3バケットへの正常・不正経路を考えてみる ① ② ③ -
アカウントA S3バケット:正常経路の洗い出し VPC Corporate data center bucket-a Direct Connect VPCe
(I/F型) VPCe (G/W型) EC2 Management Console アカウントB(ユーザー管理) IAM User 閉域用 インターネット用 Read Only Role bucket-b S3 ・ ・ ・ CloudFormation S3 Replication 運用者 ① ② ③ ④ ⑤ IP制限 -
S3バケット:不正経路の洗い出し VPC Corporate data center bucket-a Direct Connect VPCe (I/F型)
VPCe (G/W型) EC2 閉域用 インターネット用 bucket-b S3 ・ ・ ・ AWS Services 運用者 ③ ① ② アカウントC(社外) アカウントA Public Access AWS Services -
不正経路は色々あるので 正常経路以外を全て拒否したい アカウントA VPCe (I/F型) VPCe (G/W型) Read Only Role
S3 CloudFormation S3 Replication ① ② ③ ④ ⑤ bucket-a -
"Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::bucket-a", "arn:aws:s3:::bucket-a/*"
], "Condition": { "StringNotEquals": { "aws:sourceVpce": [ “S3VPCe(I/F型)のID", “S3VPCe(G/W型)のID" ] }, "StringNotLike": { "aws:userId": [ "{ReadOnlyRoleID}:*", "{CFnRoleID}:*", "{S3ReplicationRoleID}:*" ] } ①~⑤のいずれかに一致しない場合 Denyする例。 S3バケットポリシー例 ※色々書き方はあるのでご参考程度に・・・ アカウントA bucket-a VPCe (I/F型) VPCe (G/W型) Read Only Role S3 CloudFormation S3 Replication ① ② ③ ④ ⑤ ① ② ③ ④ ⑤ -
S3 "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::bucket-a",
"arn:aws:s3:::bucket-a/*" ], "Condition": { "StringNotEquals": { "aws:sourceVpce": [ “S3VPCe(I/F型)のID", “S3VPCe(G/W型)のID" ] }, "StringNotLike": { "aws:userId": [ "{ReadOnlyRoleID}:*", "{CFnRoleID}:*", "{S3ReplicationRoleID}:*" ] } 逆に言うと、①~⑤のいずれかに 一致すればアクセス可能。 S3バケットポリシー例 ※色々書き方はあるのでご参考程度に・・・ アカウントA VPCe (I/F型) VPCe (G/W型) Read Only Role CloudFormation S3 Replication ① ② ③ ④ ⑤ ① ② ③ ④ ⑤ bucket-a -
"Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::bucket-a", "arn:aws:s3:::bucket-a/*"
], "Condition": { "StringNotEquals": { "aws:sourceVpce": [ “S3VPCe(I/F型)のID", “S3VPCe(G/W型)のID" ] }, "StringNotLike": { "aws:userId": [ "{ReadOnlyRoleID}:*", "{CFnRoleID}:*", "{S3ReplicationRoleID}:*" ] } リクエスト元のVPCエンドポイントIDを検査。 S3バケットポリシー例 ※色々書き方はあるのでご参考程度に・・・ アカウントA VPCe (I/F型) VPCe (G/W型) ① ② ① ② bucket-a S3 -
S3 "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::bucket-a",
"arn:aws:s3:::bucket-a/*" ], "Condition": { "StringNotEquals": { "aws:sourceVpce": [ “S3VPCe(I/F型)のID", “S3VPCe(G/W型)のID" ] }, "StringNotLike": { "aws:userId": [ "{ReadOnlyRoleID}:*", "{CFnRoleID}:*", "{S3ReplicationRoleID}:*" ] } S3バケットポリシー例 ※色々書き方はあるのでご参考程度に・・・ アカウントA Read Only Role CloudFormation S3 Replication ③ ④ ⑤ ③ ④ ⑤ bucket-a リクエスト元の IAM ロールIDを検査。 -
"Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::bucket-a", "arn:aws:s3:::bucket-a/*"
], "Condition": { "StringNotEquals": { "aws:sourceVpce": [ “S3VPCe(I/F型)のID", “S3VPCe(G/W型)のID" ] }, "StringNotLike": { "aws:userId": [ "{ReadOnlyRoleID}:*", "{CFnRoleID}:*", "{S3ReplicationRoleID}:*" ] } (注意点) ③のスイッチロール時はランダムにセッション名が発行 されるが、Principal 句でワイルドカード利用不可。 aws:userId を使用して制御する。 参考) https://dev.classmethod.jp/articles/s3-bucket-acces-to-a-specific-role/ S3バケットポリシー例 ※色々書き方はあるのでご参考程度に・・・ アカウントA Read Only Role ③ ③ bucket-a アカウントB (ユーザー管理) IAM User AWS STS S3 -
S3 "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::bucket-a",
"arn:aws:s3:::bucket-a/*" ], "Condition": { "StringNotEquals": { "aws:sourceVpce": [ “S3VPCe(I/F型)のID", “S3VPCe(G/W型)のID" ] }, "StringNotLike": { "aws:userId": [ "{ReadOnlyRoleID}:*", "{CFnRoleID}:*", "{S3ReplicationRoleID}:*" ] } S3バケットポリシー例 ※色々書き方はあるのでご参考程度に・・・ アカウントA CloudFormation S3 Replication ④ ⑤ ③ ④ ⑤ bucket-a AWSサービスの場合は、Principal句や aws:PrincipalServiceName でも記述可。 -
S3 "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::bucket-a",
"arn:aws:s3:::bucket-a/*" ], "Condition": { "StringNotEquals": { "aws:sourceVpce": [ “S3VPCe(I/F型)のID", “S3VPCe(G/W型)のID" ] }, "StringNotLike": { "aws:userId": [ "{ReadOnlyRoleID}:*", "{CFnRoleID}:*", "{S3ReplicationRoleID}:*" ] } S3バケットポリシー例 ※色々書き方はあるのでご参考程度に・・・ アカウントA bucket-a バケット自体のArnをResource句に指定すると Condition句の設定ミス時にrootユーザー以外で バケットを全く触れなくなるので要注意。 -
アクセスポイントも利用する方が バケットポリシーの内容を分割できておすすめ! アカウントA VPCe (I/F型) VPCe (G/W型) Read Only Role
S3 CloudFormation S3 Replication bucket-a Access point Access point VPC access point -
アカウントA VPCe (I/F型) VPCe (G/W型) Read Only Role S3 CloudFormation
S3 Replication bucket-a Access point Access point VPC access point S3アクセスポイントポリシーのざっくり説明 ※詳細は割愛 バケットポリシー: 特定のアクセスポイントからのリクエスト以外をDeny。 -
アカウントA VPCe (I/F型) VPCe (G/W型) Read Only Role S3 CloudFormation
S3 Replication Access point Access point VPC access point S3アクセスポイントポリシーのざっくり説明 ※詳細は割愛 アクセスポイントポリシー: 各アクセスポイントで設定。特定経路以外をDeny。 -
脱線しましたが、S3バケットもバケットポリシーで 特定経路以外をDenyすれば、大丈夫そう VPC Corporate data center bucket-a Direct Connect VPCe
(I/F型) VPCe (G/W型) EC2 閉域用 bucket-b S3 ・ ・ ・ 運用者 アカウントA ① ② ③ ① 閉域用端末 ② EC2 ③ S3バケット -
ポリシー関連をまとめてみる VPC Corporate data center bucket-a Direct Connect VPCe (I/F型)
VPCe (G/W型) EC2 閉域用 bucket-b S3 ・ ・ ・ 運用者 アカウントA Ⅰ. IAMポリシー: s3:ResourceAccountで 社外バケットへのアクセスをDeny ※S3に触れる全IAMロールに適用推奨 Ⅱ.VPCeポリシー: aws:PrincipalAccount で クレデンシャルの持込をDeny ※ResourceAccountの併用もあり Ⅲ.バケットポリシー: aws:sourceVpceなどで 特定経路以外をDeny ※アクセスポイント利用がおすすめ Ⅰ Ⅰ Ⅲ Ⅱ -
S3バケット周りの設定補足 パブリックアクセスブロック → アカウント単位で有効化 S3バケット・オブジェクトのACL → 不要なアクセス許可を付与しない
カスタマー管理CMK → 重要データをもつS3バケットは、カスタマー管理CMKで暗号化 -
(余談)発見的統制も相応の体力・・・ CSPM(Cloud Security Posture Management)の製品を導入 →多数の様々なルールから、適用対象・カスタマイズ対象を制定 Security HubのCISベンチマークを順守
→ConfigやCloudWatchアラーム周りの通知をポチポチ実装 -
まとめ N/W的に閉域構成だとしても、データ流出のリスクはあり、安心できない 閉域要件のS3周りで気を付けたい点は・・・ • 社外バケットへのアクセスを防いでいるか • クレデンシャルの持込を対策できているか •
機微情報を扱うバケットはアクセス経路を限定しているか (課題?)境界防御からの脱却を夢見る