Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Managing Data Access with Amazon S3 Access Points

2025年09月19日に「Dev.to」が公開したITニュース「Managing Data Access with Amazon S3 Access Points」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Amazon S3 Access Pointsは、S3データへのアクセス管理を簡素化する機能だ。VPCに紐付けることで、複雑なポリシーを使わずに特定のネットワークからのアクセスのみを許可でき、チームやアプリケーションごとに詳細な権限を設定し、データのセキュリティと管理性を高める。

ITニュース解説

クラウドサービスの世界では、日々大量のデータが生成され、保存されている。システムエンジニアを目指す上で、このデータを安全かつ効率的に管理する知識は不可欠だ。Amazon S3(Simple Storage Service)は、データを保存するための非常に強力なストレージサービスだが、データへのアクセス方法を管理するのは時に複雑になることがある。そこで登場するのが、Amazon S3 Access Pointsという機能である。これは、S3バケットに保存されたデータへのアクセスを、よりシンプルかつきめ細かく制御するための仕組みだ。

従来のS3では、バケット全体に対して適用される「バケットポリシー」というルールを使ってアクセスを管理していた。しかし、複数のチームやアプリケーション、ネットワーク(VPC)が同じバケット内のデータに異なるレベルのアクセスを必要とする場合、このバケットポリシーは非常に複雑になりがちだった。S3 Access Pointsを使うと、一つのS3バケットに対して、それぞれ異なるアクセス許可を持つ専用の「入り口」を複数作成できる。これにより、データへのアクセス制御が格段に柔軟になり、管理も簡単になる。特に、機密データを扱う場面では、誰が、どのアプリケーションが、どのネットワークからデータにアクセスできるかを厳密に制御できることが求められるため、S3 Access Pointsは非常に重要な役割を果たす。

この記事では、S3 Access Pointsの具体的な使い方を、ステップバイステップで学ぶ。まず、機密情報を保存するためのS3バケットを作成する。次に、このバケットに対して、特定のネットワーク(VPC: Virtual Private Cloud)からのみアクセスを許可するAccess Pointを設定する。そして最後に、実際にコードを動かして、設定したAccess Pointが意図通りに機能しているか、つまり許可されたネットワークからはアクセスでき、許可されていないネットワークからはアクセスできないことを確認する。

最初のステップとして、Amazon S3バケットを準備する。このバケットは、機密性の高い文書を保存する「主要な保管場所」となる。AWSマネジメントコンソールにログインし、S3サービスを選択して「バケットを作成」する。バケット名は、AWS全体で一意になるようにランダムな文字列を含めて指定する。最も重要なセキュリティ設定として、「すべてのパブリックアクセスをブロック」が選択されていることを必ず確認する。これは、意図せずバケットがインターネットに公開されてしまうのを防ぐための基本的なセキュリティ対策である。バケットが作成されたら、次に「sampledata.txt」という簡単なテキストファイル(例えば「これは組織の機密データです。」という内容)を作成し、作成したS3バケットにアップロードする。これで、S3バケットは機密ファイルを安全に保存する準備が整った。

次に、Access Pointを作成する。S3 Access Pointsの主な目的は、特定のアプリケーションやユーザー、役割に対して、必要なアクセスのみを許可する「きめ細かな権限定義」を容易にすることだ。特に、今回は特定のVPC(仮想プライベートクラウド)からのアクセスのみを許可するAccess Pointを設定する。

このために、まず専用のVPCを作成する。VPCとは、AWSクラウド内に構築する、ユーザーが完全に管理できる仮想的なプライベートネットワークのことだ。AWSマネジメントコンソールでVPCサービスを開き、「VPCなど」のオプションを選択してVPCを作成する。この時、「S3ゲートウェイエンドポイント」という設定を必ず有効にする。S3ゲートウェイエンドポイントは、VPC内のリソースがインターネットを経由せずに、プライベートにS3に接続できるようにするための仕組みである。これにより、セキュリティが向上し、ネットワークトラフィックの効率も上がる。VPCが作成されたら、そのVPCのIDを控えておく。これはAccess Pointを設定する際に必要となる。

VPCの準備ができたら、いよいよS3 Access Pointを作成する。S3サービスに戻り、左側のメニューから「汎用バケットのアクセスポイント」を選択し、「アクセスポイントを作成」をクリックする。Access Pointに「vpc-bound-access-point」という名前を付け、先ほど作成したS3バケットを選択する。「ネットワークオリジン」の項目では、「仮想プライベートクラウド(VPC)」を選び、先ほど控えておいたVPC IDを貼り付ける。ここでも「すべてのパブリックアクセスをブロック」が有効になっていることを確認する。

次に、このAccess Pointの「ポリシー」を設定する。ポリシーは、誰が、何を、どのようにアクセスできるかを定義するルールだ。今回のAccess Pointポリシーでは、以下のような内容を記述する。 このポリシーは、「このAccess Pointを経由して、S3バケット内のオブジェクト(ファイル)を読み取る(s3:GetObject)ことを許可する」と定義している。ただし、その許可には条件があり、「リクエストが特定のVPC(aws:SourceVpcで指定したVPC ID)から来た場合のみ」という制限を設けている。これにより、Access Pointを通じてS3バケットのデータにアクセスできるのは、指定されたVPC内に存在するサービスやアプリケーションのみとなる。これが、ネットワークレベルでのセキュリティを強制する重要な設定だ。

Access Pointが作成されたら、設定が正しく機能しているかを検証する。AWS Lambda関数を使って、実際にS3へのアクセスを試みる。Lambdaは、サーバーを意識せずにコードを実行できるサービスで、今回はS3へのアクセスコードを実行するために利用する。

まず、Access Pointでアクセスを許可したVPC(org-vpc)内にLambda関数を作成する。AWSマネジメントコンソールでLambdaサービスを開き、「関数を作成」する。関数名には「accesspoint_function」と入力し、ランタイムはPython 3.11を選択する。実行ロールとしては、LambdaがS3にアクセスするための権限を持つ既存のIAMロール(例えばLambdaExecutionRole)を指定する。次に、重要な設定として「詳細設定」を展開し、「VPCを有効にする」を選択する。ここで、org-vpcと、その中のプライベートサブネット二つ、そしてデフォルトのセキュリティグループを指定する。これにより、このLambda関数はorg-vpcという仮想プライベートネットワーク内で動作することになる。

Lambda関数が作成されたら、コードエディタにPythonコードを追加する。このコードは、Boto3というAWS SDKを使ってS3クライアントを初期化し、先ほど作成したAccess PointのARN(Amazonリソースネーム)を指定して、「sampledata.txt」というファイルを読み取る処理を実行する。Access PointのARNは、S3バケットのARNではなく、Access Point自体を指定する点が重要である。

コードをデプロイしたら、早速テストを実行する。Lambda関数上で「テスト」ボタンをクリックし、適当なテストイベントを作成して実行する。結果として、関数の実行は成功し、ログには「This is sensitive organizational data.」というファイルの内容が表示されるはずだ。これは、Lambda関数がAccess Pointで許可されたVPC内で動作しているため、S3 Access Pointのポリシーによってアクセスが許可されたことを示している。

次に、Access Pointでアクセスを「許可していない」VPCからのアクセスを試す。Lambda関数の設定タブでVPCセクションを編集し、VPCをorg-vpcから、AWSアカウントの「デフォルトVPC」に変更する。サブネットもデフォルトVPCのものを選び、設定を保存する。ネットワークの変更が適用されるまでしばらく待ってから、再度Lambda関数をテスト実行する。

結果として、今度は関数の実行が「失敗」する。ログには「AccessDenied」や「403 Forbidden」といったエラーメッセージが表示され、データが取得できないことを確認できる。これは、Lambda関数がAccess Pointで許可されていないデフォルトVPC内で動作しているため、Access PointのポリシーによってS3データへのアクセスが正しく拒否されたことを示している。このテスト結果により、S3 Access Pointsのネットワークレベルでのアクセス制御が期待通りに機能していることが証明される。

Amazon S3 Access Pointsは、S3データへのアクセスを管理するための非常に強力な機能であることがわかる。Access Pointsを特定のVPCに紐付けることで、従来のIAMポリシーに加えて、ネットワークレベルでのセキュリティを強制できる。これは、複数の組織やチームが同じS3バケット内のデータを共有する「マルチテナント環境」や、厳格なデータアクセス要件を持つ「コンプライアンス」が求められるシナリオ、あるいは特定のネットワークセグメントにデータアクセスを分離したい場合に特に有用だ。この一連の作業を通して、S3バケットの作成、VPCに紐付けられたAccess Pointの設定、そして許可されたネットワークと制限されたネットワークからのアクセステストを行う実践的な経験を得られたはずだ。この知識は、AWS環境でより安全で管理しやすいデータアクセスパターンを設計するための基盤となり、システムエンジニアとして非常に価値のあるスキルとなるだろう。

関連コンテンツ

関連IT用語