本文へ移動します / GO TO TEXT

未来に繋ぐセキュリティ情報発信

AWS 初心者が 生成 AI を使って AWS S3 ストレージを取り扱った怖い話

安藤 翔一

こんにちは。普段は Microsoft Azure を使って環境構築を行うことが多い私ですが、今回のプロジェクトではストレージのバックアップ要件として マルチクラウド対応が求められ、初めて AWS S3 を利用することになりました。仕様を確認しながら、とある 生成 AI の力も借りて構築を進めていたのですが、その過程で思わぬ「怖い体験」をしました。
今回はその体験を、酷暑を乗り切るための「怖い話」として共有します。マルチクラウド環境の構築やセキュリティ設定に携わる方の参考になれば幸いです。

AWS S3 とは

AWS S3(Simple Storage Service)は Amazon が提供するオブジェクトストレージサービスです。

  • 高耐久性(99.999999999%)
  • 高可用性
  • スケーラブルな容量

といった特長から、多くの企業でバックアップやデータレイク用途に活用されています。今回のプロジェクトでは、Azure Blob Storage のバックアップ先として AWS S3 を選択しました。

rclone を使ったバックアップ

Azure Blob Storage から AWS S3 へデータを転送する際には、オープンソースのコマンドラインツール rclone を利用しました。
rclone はマルチクラウド対応で、スクリプト化も容易です。例えば、以下のようにコマンド一つで Azure Blob Storage から AWS S3 へ同期できます。

rclone sync azure:my-container AWS S3:my-backup-bucket --progress

このようにワンライナーで実行できるため、定期タスクに組み込めば自動バックアップ環境がすぐに実現可能です。

EC2 インスタンスへのアクセス権付与

今回は rclone コマンドを特定の EC2 インスタンスで定期実行する構成とし、Azure Blob Storage と AWS S3 へのアクセス制限およびアクセス権限を設計します。

左右にスクロールしてご覧ください。

種類 アクセス制限 権限設定
Azure Blob Storage EC2 インスタンスからのみアクセスできるようにネットワーク制限を設定 Service Principal を発行し、[ストレージ BLOB データ閲覧者]権限を割り当てる
AWS S3 EC2 インスタンスからのみアクセスできるようにネットワーク制限を設定 IAM ロールを作成し、
”s3:GetObject",
"s3:ListBucket",
"s3:PutObject",
"s3:DeleteObject"
を有するカスタムのインラインポリシーを割り当てる

このように、それぞれのクラウドに応じた認証方式を組み合わせることで、セキュアかつ運用しやすい仕組みが実現できます。

生成 AI を使用してバケットポリシーを設定

AWS S3 バケットのアクセス制限を効率化するため、とある生成 AI に バケットポリシー案の作成を依頼しました。すると確かにポリシーは即座に出力されたのですが、内容を確認して背筋が凍りました。

{
  "Effect": "Allow",
  "Principal": "*",
  "Action": ["AWS S3:GetObject", "AWS S3:PutObject"],
  "Resource": "arn:AWS S3:::example-bucket/*"
}

なんとインターネット上のすべてのユーザー(Principal: "*")に読み書き権限を与える危険な設定になっていたのです。
もしこのまま本番環境に適用していたら…

  • 世界中の誰でも機密データをダウンロード可能
  • 悪意ある第三者が不正なファイルをアップロードし、マルウェアを仕込むリスク

まさに「玄関に鍵を刺したまま外出する」ような状態です。
AWS ではブロックパブリックアクセスがデフォルトで有効になっており、無効にしなければ上記のようなバケットポリシーは設定しようとしてもできないのですが、それにしても出力されたポリシーに戦慄を覚えました。

Azure Blob Storage と同じセキュリティレベルに揃える

そこで、AWS S3 に対しても Azure Blob Storage と同等のセキュリティレベルを確保する必要があると判断し、

  • 匿名アクセスは完全に禁止し、EC2 インスタンスの固定IPに揃える
  • 特定の IAM ロール/ユーザーのみに権限を付与
  • 操作上必要な権限に Action 制限

という形でバケットポリシーを再構築しました。
例えば以下のように IAM ロールを指定することで、安全にアクセス制御ができます。

{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::123456789012:role/BackupOperator"
  },
  "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
  "Resource": "arn:AWS S3:::example-bucket/*"
}
"Condition": {
                "IpAddress": {
                    "aws:SourceIp": "192.0.2.1/32"
                }
            }

まとめ

  • AWS S3 は強力なサービスだが、設定ミスは致命的なリスクに直結する
  • rclone はマルチクラウドバックアップに便利だが、アクセス権設計もセットで考える
  • 生成 AI が生成したポリシーも必ずレビューし、過剰な権限を避ける
  • バックアップ元と同等レベルのセキュリティを維持する
  • 定期的な監査・レビューを怠らない

酷暑の作業は大変ですが、冷静にチェックを重ねることで「怖い話」を未然に防げます。マルチクラウドを扱う際には、ぜひ一度立ち止まって権限とポリシーを見直してみてください。

また、当社ではクラウドの設定ミスや脆弱性を自動でチェックできる、マルチクラウド対応 CSPM/ASM サービス「クラウドパトロール」を提供しています。ぜひお気軽にお問い合わせください。

お問い合わせ

製品・サービスに関するお問い合わせはお気軽にご相談ください。

セキュリティソリューションに関する資料請求・お問い合わせ

関連製品・サービス

開催中のセミナー

最新トレンドや業務に役立つ知識が得られる SBテクノロジーのセミナー 参加無料 オンデマンド配信あり

ピックアップ

セミナー情報
クラウドエンジニアブログ
NOZ
メールマガジン登録