1.2K Views
November 22, 23
スライド概要
Cloud Security Day 2023 #Lightning Talk&交流会
仕事:AWS運用保守&PM的なことをしています。 2023-24 Japan AWS All Certifications Engineers.
CLOUD SECURITY DAY 2023 #LIGHTNING TALK&交流会 【S3バケットアクセス制御】 各種ポリシーを活用した S3アクセス制御 2023.11.22 佐藤 竜也
自己紹介 # 名前 ・佐藤 竜也(ますの) @masno_soy # 経歴 ・営業→婚活パーティ運営→SES→CIer # 業務内容 ・AWS基盤 運用・保守 / PM(仮) # 資格 ・2023 Japan AWS All Certifications Engineers # 深掘りしたいAWSサービス ・CloudWatch
お話しする内容 S3バケットへのアクセス制御で各種ポリシーを活用する S3バケットポリシーでアクセス元を制限する 特定のVPCに限定 特定のIPアドレスに限定 VPCエンドポイントポリシーでアクセス先を制限する AWSのリポジトリへアクセス可能 野良AWSアカウントへのS3バケットアクセスは不可
なぜS3バケットへのアクセス制御を実装したいのか 今回は「情報流出を未然に防ぐ」ことを目的とする アクセス元制限(IP / VPCエンドポイント) IAM情報漏洩時の予防措置となるため アクセス先制限(AWSアカウントID) 悪意あるユーザによるデータ漏えいを防ぐため
各ポリシーに反映するアクセス制御 設計方針 以下の要素を利用してアクセス制御を行う ・IPアドレス ・VPCエンドポイント ・AWSアカウントID ガードレールとなる要所は 【明示的な拒否設定】を用いる
前提知識 AWSポリシーの 評価理論
前提知識:AWSポリシーの評価理論 引用:https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow
前提知識:AWSポリシーの評価理論 優先度 評価理論 内容 明示的な拒否 (Deny) ポリシーでDenyが設定されている場合。 IAMやS3などのポリシーで明示的なAllow条件が設定されていても、明示的なDeny が優先される。 2 明示的な許可 (Allow) ポリシーでAllowが設定されている場合。 IAMやS3などのポリシーで明示的なDenyが設定されていなければ、明示的なAllow が適用される。 3 暗黙的な拒否 (Deny) ポリシーにDenyもAllowも設定されていない場合(デフォルト)。 暗黙のDenyとして通信は遮断される。 1
着地点に向けた概要 IAMアクセスキー/ロールを利用してS3にアクセスする S3バケットにアクセス制御を実装する 特定のVPCに限定 特定のIPアドレスに限定 S3 VPCエンドポイントにアクセス制御を実装する AWSのリポジトリへアクセス可能 外部AWSアカウントへのS3バケットアクセスは不可
設定内容 IAMポリシー
IAM でのセキュリティのベストプラクティスより抜粋 IAM ポリシーで条件を指定してアクセスをさらに制限する ポリシーステートメントが有効になる条件を指定する ことができます。これにより、アクションやリソース へのアクセスを許可することができますが、これは、 アクセスのリクエストが特定の条件を満たしている場 合に限られます。 引用:https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/best-practices.html
IAMで細かいことを考えないで セキュリティ担保された運用が したい(心の声)
まずはAWS管理ポリシーでの運用からスタート AWS 管理ポリシーの開始と最小特権のアクセス許可への移行 ユーザーやワークロードへのアクセス許可の付与を開始す るには、多くの一般的なユースケースに対してアクセス許 可を付与する AWS マネージドポリシーを使用します。 引用:https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/best-practices.html
設定内容 S3バケットポリシー
S3 バケットポリシー設計 IAMアクセスキーを利用してS3バケットにアクセスする S3バケットにアクセス制御を実装する 特定のVPCに限定 特定のIPアドレスに限定 EC2はVPCエンドポイント経由でS3へアクセスする AWSのリポジトリへアクセス可能 野良AWSアカウントへのS3バケットアクセスは不可
S3 バケットポリシー設計
{
"Version": "2012-10-17",
"Condition": {
"Statement": [
"NotIpAddress": {
{
"aws:SourceIp": "54.x.x.x/32"
"Effect": "Deny",
},
"Principal": "*",
"StringNotEquals": {
"Action": "s3:*",
"aws:SourceVpce": "vpce-1a2b3c4d"
"Resource": [
}
"arn:aws:s3:::bbbb-bucket",
}
"arn:aws:s3:::bbbb-bucket/*"
],
}
]
}
「54.x.x.x/32」もしくは
「vpce-1a2b3c4d」以外は拒否
(余談)Allowのみで制御:セキュリティホールあり { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::bbbb-bucket", "arn:aws:s3:::bbbb-bucket/*" ], Denyが明記されていないため 明示的なAllow(優先度2)が適用される (例) IAMポリシーでAllow設定あり IP制限等が機能しない IAMポリシーでAllow/Deny設定なし 制限範囲内から誰でもアクセス可能
赤丸部分(S3バケット入口制御)が完了
設定内容 VPCエンドポイント ポリシー
VPCエンドポイントポリシー設計 IAMアクセスキーを利用してS3バケットにアクセスする S3バケットにアクセス制御を実装する 特定のVPCに限定 特定のIPアドレスに限定 EC2はVPCエンドポイント経由でS3へアクセスする AWSのリポジトリへアクセス可能 外部AWSアカウントへのS3バケットアクセスは不可
VPCエンドポイントポリシー設計
{
"Version": "2008-10-17",
"Statement": [
"Condition": {
{
"StringNotEquals": {
"Effect": "Deny",
"aws:PrincipalAccount": "123456789012"
"Principal": "*",
}
"Action": "*",
}
"NotResource": [
},
"arn:aws:s3:::packages.ap-northeast-1.amazonaws.com/*",
{
"arn:aws:s3:::repo.ap-northeast-1.amazonaws.com/*",
"Effect": "Allow",
"arn:aws:s3:::amazonlinux.ap-northeast-1.amazonaws.com/*",
"Principal": "*",
"arn:aws:s3:::amazonlinux-2-repos-ap-northeast-1/*",
"Action": "*",
"arn:aws:s3:::al2023-repos-us-east-1-de612dc2/*"
"Resource": "*"
],
}
]
}
VPCエンドポイントポリシー設計(ALリポジトリ) "NotResource": [ "arn:aws:s3:::packages.ap-northeast-1.amazonaws.com/*", "arn:aws:s3:::repo.ap-northeast-1.amazonaws.com/*", "arn:aws:s3:::amazonlinux.ap-northeast-1.amazonaws.com/*", "arn:aws:s3:::amazonlinux-2-repos-ap-northeast-1/*", "arn:aws:s3:::al2023-repos-ap-northeast-1-de612dc2/*" AL1 AL2 AL2023 S3エンドポイントを経由してアクセスする場合 AmazonLinux関連のリポジトリアクセス以外はDeny → AmazonLinux関連のリポジトリは拒否されない
VPCエンドポイントポリシー設計(ALリポジトリ) 「NotResource」に記載していない状態ではアクセス不可 403エラーでリポジトリにアクセスが出来ない
VPCエンドポイントポリシー設計(AWSアカウントID) "Condition": { "StringNotEquals": { "aws:PrincipalAccount": "123456789012" } 「StringNotEquals」の項目へ アクセス許可するAWSアカウントID を記載 } }, { "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*" } ] } 下記で指定した除外の通信に対して ・NotResource ・StringNotEquals 「Allow」で通信許可を記載
赤丸部分(VPCエンドポイント出口制御)が完了
これで完了かと思いきや まだセキュリティホールが...
考慮漏れ確認 ・54.xx.xx.xxでダウンロード ・別アカウントへアップロード ・クラウドストレージ等に別途保存 etc...
セキュリティホールを埋める手段を考える IAMのAWS管理ポリシーでS3 Read Onlyとする バケットポリシーでGIP経由のGet操作は禁止する DX接続を実装しプライベート通信を実装する 54.xx.xx.xxはリスク受容とする etc... どこまでリスクを許容出来るか データの特性から検討が必要
まとめ AWS管理ポリシーで簡易な運用を実現するためにリソースベー スポリシーの設定を取り入れる VPCエンドポイントポリシー、S3バケットポリシーなど ガードレールの要所となる権限は「明示的なDeny」で設定する IAM運用が容易なポリシー設計はセキュリティホールが生じや すいので注意する テストケースに沿ってリスク許容範囲か否かを判断する
参考情報 ●ポリシーの評価論理 https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow ●バケットポリシーを使用した VPC エンドポイントからのアクセスコントロール https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html ●インターネットにアクセスせずに Amazon Linux 1、Amazon Linux 2、または Amazon Linux 2023 を 実行している EC2 インスタンス で yum を更新したり、パッケージをインストールする方法はありますか? https://repost.aws/ja/knowledge-center/ec2-al1-al2-update-yum-without-internet ●IAM でのセキュリティのベストプラクティス https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/best-practices.html ●閉域要件におけるS3周辺ポリシーの組み合わせ方 https://speakerdeck.com/mhrtech/bi-yu-yao-jian-niokerus3zhou-bian-porisifalsezu-mihe-wasefang
ご清聴ありがとうございました