APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

【AWS】S3バケットをdnfのリポジトリ化してVPCエンドポイント経由でアクセスしてみた

目次

はじめに

こんにちは、クラウド事業部の菅です。

数年前、AWSのパッケージ管理の仕組みについて興味を持ち、AWSと同じ方法で独自のリポジトリを作成できないか調査したことがありました。
当時は静的ウェブサイトホスティングの有効化が必要だと思っていましたが、弊社野本の記事を見つけVPCエンドポイントのみで実現できそうでしたので検証してみました。

techblog.ap-com.co.jp

構成図

準備

VPCなどのリソースの作成は省略します。

検証用のS3バケットとして、apc-kan-s3-bucketという名前のバケットを作成しています。
バケットポリシーには、以下のルールを設定しています。

  • 今回作成するVPCエンドポイントを経由しないGetObjectを禁止する
  • 今回作成するVPCエンドポイントを経由するGetObjectを許可する

VPCエンドポイント経由のhttpsアクセスを許可するため、明示的に許可ルールを設定しています。

使用したCloudFormationテンプレートは以下の通りです。
※S3バケット部分のみ抜粋

  S3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: apc-kan-s3-bucket
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true

  S3BucketPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: !Ref S3Bucket
      PolicyDocument:
        Version: 2012-10-17
        Statement:
          - Action:
              - s3:GetObject
            Effect: Deny
            Resource: !Join
              - ''
              - - !GetAtt S3Bucket.Arn
                - /*
            Principal: '*'
            Condition:
              StringNotEquals:
                aws:SourceVpce: !Ref VPCEndpointS3
          - Action:
              - s3:GetObject
            Effect: Allow
            Resource: !Join
              - ''
              - - !GetAtt S3Bucket.Arn
                - /*
            Principal: '*'
            Condition:
              StringEquals:
                aws:SourceVpce: !Ref VPCEndpointS3

リポジトリの作成

EC2内にdnfのリポジトリを作成します。
今回は、検証のためリポジトリ内にhttpdとその依存パッケージを格納しています。

sh-5.2$ cat /etc/system-release
Amazon Linux release 2023.7.20250331 (Amazon Linux)
sh-5.2$ sudo dnf install createrepo -y
Amazon Linux 2023 Kernel Livepatch repository                                                                               129 kB/s |  15 kB     00:00
Dependencies resolved.
============================================================================================================================================================
 Package                                 Architecture                 Version                                       Repository                         Size
============================================================================================================================================================
Installing:
 createrepo_c                            x86_64                       0.20.0-1.amzn2023.0.3                         amazonlinux                        74 k
Installing dependencies:
 createrepo_c-libs                       x86_64                       0.20.0-1.amzn2023.0.3                         amazonlinux                       101 k

Transaction Summary
============================================================================================================================================================
Install  2 Packages

Total download size: 176 k
Installed size: 446 k
Downloading Packages:
(1/2): createrepo_c-0.20.0-1.amzn2023.0.3.x86_64.rpm                                                                        1.0 MB/s |  74 kB     00:00
(2/2): createrepo_c-libs-0.20.0-1.amzn2023.0.3.x86_64.rpm                                                                   1.2 MB/s | 101 kB     00:00
------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                       1.6 MB/s | 176 kB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                    1/1
  Installing       : createrepo_c-libs-0.20.0-1.amzn2023.0.3.x86_64                                                                                     1/2
  Installing       : createrepo_c-0.20.0-1.amzn2023.0.3.x86_64                                                                                          2/2
  Running scriptlet: createrepo_c-0.20.0-1.amzn2023.0.3.x86_64                                                                                          2/2
  Verifying        : createrepo_c-0.20.0-1.amzn2023.0.3.x86_64                                                                                          1/2
  Verifying        : createrepo_c-libs-0.20.0-1.amzn2023.0.3.x86_64                                                                                     2/2

Installed:
  createrepo_c-0.20.0-1.amzn2023.0.3.x86_64                                  createrepo_c-libs-0.20.0-1.amzn2023.0.3.x86_64

Complete!
sh-5.2$ mkdir /tmp/repository && cd $_
sh-5.2$ sudo dnf install --downloadonly --downloaddir=./ httpd -y
(省略)
sh-5.2$ createrepo ./
Directory walk started
Directory walk done - 12 packages
Temporary output repo path: ./.repodata/
Preparing sqlite DBs
Pool started (with 5 workers)
Pool finished
sh-5.2$ ls -l
total 2412
-rw-r--r--. 1 root     root      132150 Apr  9 06:03 apr-1.7.5-1.amzn2023.0.4.x86_64.rpm
-rw-r--r--. 1 root     root      100204 Apr  9 06:03 apr-util-1.6.3-1.amzn2023.0.1.x86_64.rpm
-rw-r--r--. 1 root     root       17131 Apr  9 06:03 apr-util-openssl-1.6.3-1.amzn2023.0.1.x86_64.rpm
-rw-r--r--. 1 root     root       19243 Apr  9 06:03 generic-logos-httpd-18.0.0-12.amzn2023.0.3.noarch.rpm
-rw-r--r--. 1 root     root       48746 Apr  9 06:03 httpd-2.4.62-1.amzn2023.x86_64.rpm
-rw-r--r--. 1 root     root     1440292 Apr  9 06:03 httpd-core-2.4.62-1.amzn2023.x86_64.rpm
-rw-r--r--. 1 root     root       14373 Apr  9 06:03 httpd-filesystem-2.4.62-1.amzn2023.noarch.rpm
-rw-r--r--. 1 root     root       83024 Apr  9 06:03 httpd-tools-2.4.62-1.amzn2023.x86_64.rpm
-rw-r--r--. 1 root     root      322442 Apr  9 06:03 libbrotli-1.0.9-4.amzn2023.0.2.x86_64.rpm
-rw-r--r--. 1 root     root       33646 Apr  9 06:03 mailcap-2.1.49-3.amzn2023.0.3.noarch.rpm
-rw-r--r--. 1 root     root      170180 Apr  9 06:03 mod_http2-2.0.27-1.amzn2023.0.3.x86_64.rpm
-rw-r--r--. 1 root     root       62366 Apr  9 06:03 mod_lua-2.4.62-1.amzn2023.x86_64.rpm
drwxr-xr-x. 2 ssm-user ssm-user     180 Apr  9 06:04 repodata

EC2内に作成したリポジトリをS3バケットにアップロードします。
また、S3バケットをdnfのリポジトリとして参照させるために設定を追加します。

sh-5.2$ aws s3 mv ./ s3://apc-kan-s3-bucket/test-repo --recursive
(省略)
sh-5.2$ cat << 'EOS' > test.repo
[test-repo]
name=test repo
baseurl=https://apc-kan-s3-bucket.s3.$awsregion.amazonaws.com/test-repo/
enabled=0
gpgcheck=0
EOS
sh-5.2$ sudo mv test.repo /etc/yum.repos.d/
sh-5.2$ dnf repolist all
repo id                                               repo name                                                                                     status
amazonlinux                                           Amazon Linux 2023 repository                                                                  enabled
amazonlinux-debuginfo                                 Amazon Linux 2023 repository - Debug                                                          disabled
amazonlinux-source                                    Amazon Linux 2023 repository - Source packages                                                disabled
kernel-livepatch                                      Amazon Linux 2023 Kernel Livepatch repository                                                 enabled
kernel-livepatch-source                               Amazon Linux 2023 Kernel Livepatch repository - Source packages                               disabled
test-repo                                             test repo                                                                                     disabled

確認

S3バケットにアップロードしたリポジトリからhttpdをインストールしてみます。

sh-5.2$ dnf list httpd --disablerepo=* --enablerepo=test-repo
test repo                                                                                                                    46 kB/s | 3.0 kB     00:00
Available Packages
httpd.x86_64                                                          2.4.62-1.amzn2023                                                           test-repo
sh-5.2$ sudo dnf install httpd -y --disablerepo=* --enablerepo=test-repo
test repo                                                                                                                   135 kB/s |  12 kB     00:00
Dependencies resolved.
============================================================================================================================================================
 Package                                   Architecture                 Version                                       Repository                       Size
============================================================================================================================================================
Installing:
 httpd                                     x86_64                       2.4.62-1.amzn2023                             test-repo                        48 k
Installing dependencies:
 apr                                       x86_64                       1.7.5-1.amzn2023.0.4                          test-repo                       129 k
 apr-util                                  x86_64                       1.6.3-1.amzn2023.0.1                          test-repo                        98 k
 generic-logos-httpd                       noarch                       18.0.0-12.amzn2023.0.3                        test-repo                        19 k
 httpd-core                                x86_64                       2.4.62-1.amzn2023                             test-repo                       1.4 M
 httpd-filesystem                          noarch                       2.4.62-1.amzn2023                             test-repo                        14 k
 httpd-tools                               x86_64                       2.4.62-1.amzn2023                             test-repo                        81 k
 libbrotli                                 x86_64                       1.0.9-4.amzn2023.0.2                          test-repo                       315 k
 mailcap                                   noarch                       2.1.49-3.amzn2023.0.3                         test-repo                        33 k
Installing weak dependencies:
 apr-util-openssl                          x86_64                       1.6.3-1.amzn2023.0.1                          test-repo                        17 k
 mod_http2                                 x86_64                       2.0.27-1.amzn2023.0.3                         test-repo                       166 k
 mod_lua                                   x86_64                       2.4.62-1.amzn2023                             test-repo                        61 k

Transaction Summary
============================================================================================================================================================
Install  12 Packages

Total download size: 2.3 M
Installed size: 6.9 M
Downloading Packages:
(1/12): apr-util-openssl-1.6.3-1.amzn2023.0.1.x86_64.rpm                                                                    443 kB/s |  17 kB     00:00
(2/12): generic-logos-httpd-18.0.0-12.amzn2023.0.3.noarch.rpm                                                               985 kB/s |  19 kB     00:00
(3/12): httpd-2.4.62-1.amzn2023.x86_64.rpm                                                                                  2.4 MB/s |  48 kB     00:00
(4/12): apr-util-1.6.3-1.amzn2023.0.1.x86_64.rpm                                                                            1.0 MB/s |  98 kB     00:00
(5/12): apr-1.7.5-1.amzn2023.0.4.x86_64.rpm                                                                                 1.2 MB/s | 129 kB     00:00
(6/12): httpd-filesystem-2.4.62-1.amzn2023.noarch.rpm                                                                       798 kB/s |  14 kB     00:00
(7/12): httpd-core-2.4.62-1.amzn2023.x86_64.rpm                                                                              21 MB/s | 1.4 MB     00:00
(8/12): httpd-tools-2.4.62-1.amzn2023.x86_64.rpm                                                                            1.4 MB/s |  81 kB     00:00
(9/12): mailcap-2.1.49-3.amzn2023.0.3.noarch.rpm                                                                            1.6 MB/s |  33 kB     00:00
(10/12): mod_lua-2.4.62-1.amzn2023.x86_64.rpm                                                                               2.1 MB/s |  61 kB     00:00
(11/12): mod_http2-2.0.27-1.amzn2023.0.3.x86_64.rpm                                                                         3.3 MB/s | 166 kB     00:00
(12/12): libbrotli-1.0.9-4.amzn2023.0.2.x86_64.rpm                                                                          2.9 MB/s | 315 kB     00:00
------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                        10 MB/s | 2.3 MB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                    1/1
  Installing       : apr-1.7.5-1.amzn2023.0.4.x86_64                                                                                                   1/12
  Installing       : apr-util-openssl-1.6.3-1.amzn2023.0.1.x86_64                                                                                      2/12
  Installing       : apr-util-1.6.3-1.amzn2023.0.1.x86_64                                                                                              3/12
  Installing       : mailcap-2.1.49-3.amzn2023.0.3.noarch                                                                                              4/12
  Installing       : httpd-tools-2.4.62-1.amzn2023.x86_64                                                                                              5/12
  Installing       : libbrotli-1.0.9-4.amzn2023.0.2.x86_64                                                                                             6/12
  Running scriptlet: httpd-filesystem-2.4.62-1.amzn2023.noarch                                                                                         7/12
  Installing       : httpd-filesystem-2.4.62-1.amzn2023.noarch                                                                                         7/12
  Installing       : httpd-core-2.4.62-1.amzn2023.x86_64                                                                                               8/12
  Installing       : mod_http2-2.0.27-1.amzn2023.0.3.x86_64                                                                                            9/12
  Installing       : mod_lua-2.4.62-1.amzn2023.x86_64                                                                                                 10/12
  Installing       : generic-logos-httpd-18.0.0-12.amzn2023.0.3.noarch                                                                                11/12
  Installing       : httpd-2.4.62-1.amzn2023.x86_64                                                                                                   12/12
  Running scriptlet: httpd-2.4.62-1.amzn2023.x86_64                                                                                                   12/12
  Verifying        : apr-1.7.5-1.amzn2023.0.4.x86_64                                                                                                   1/12
  Verifying        : apr-util-1.6.3-1.amzn2023.0.1.x86_64                                                                                              2/12
  Verifying        : apr-util-openssl-1.6.3-1.amzn2023.0.1.x86_64                                                                                      3/12
  Verifying        : generic-logos-httpd-18.0.0-12.amzn2023.0.3.noarch                                                                                 4/12
  Verifying        : httpd-2.4.62-1.amzn2023.x86_64                                                                                                    5/12
  Verifying        : httpd-core-2.4.62-1.amzn2023.x86_64                                                                                               6/12
  Verifying        : httpd-filesystem-2.4.62-1.amzn2023.noarch                                                                                         7/12
  Verifying        : httpd-tools-2.4.62-1.amzn2023.x86_64                                                                                              8/12
  Verifying        : libbrotli-1.0.9-4.amzn2023.0.2.x86_64                                                                                             9/12
  Verifying        : mailcap-2.1.49-3.amzn2023.0.3.noarch                                                                                             10/12
  Verifying        : mod_http2-2.0.27-1.amzn2023.0.3.x86_64                                                                                           11/12
  Verifying        : mod_lua-2.4.62-1.amzn2023.x86_64                                                                                                 12/12

Installed:
  apr-1.7.5-1.amzn2023.0.4.x86_64                          apr-util-1.6.3-1.amzn2023.0.1.x86_64          apr-util-openssl-1.6.3-1.amzn2023.0.1.x86_64
  generic-logos-httpd-18.0.0-12.amzn2023.0.3.noarch        httpd-2.4.62-1.amzn2023.x86_64                httpd-core-2.4.62-1.amzn2023.x86_64
  httpd-filesystem-2.4.62-1.amzn2023.noarch                httpd-tools-2.4.62-1.amzn2023.x86_64          libbrotli-1.0.9-4.amzn2023.0.2.x86_64
  mailcap-2.1.49-3.amzn2023.0.3.noarch                     mod_http2-2.0.27-1.amzn2023.0.3.x86_64        mod_lua-2.4.62-1.amzn2023.x86_64

Complete!
sh-5.2$ dnf list installed httpd
Installed Packages
httpd.x86_64                                                          2.4.62-1.amzn2023                                                           @test-repo
sh-5.2$ sudo systemctl start httpd
sh-5.2$ systemctl status httpd
● httpd.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; preset: disabled)
     Active: active (running) since Wed 2025-04-09 06:08:16 UTC; 8s ago
       Docs: man:httpd.service(8)
   Main PID: 26107 (httpd)
     Status: "Started, listening on: port 80"
      Tasks: 177 (limit: 1057)
     Memory: 13.4M
        CPU: 74ms
     CGroup: /system.slice/httpd.service
             ├─26107 /usr/sbin/httpd -DFOREGROUND
             ├─26108 /usr/sbin/httpd -DFOREGROUND
             ├─26109 /usr/sbin/httpd -DFOREGROUND
             ├─26160 /usr/sbin/httpd -DFOREGROUND
             └─26180 /usr/sbin/httpd -DFOREGROUND
sh-5.2$ curl http://localhost/
<html><body><h1>It works!</h1></body></html>

無事、インストールすることができました!

まとめ

今回は、S3バケットをdnfのリポジトリ化してVPCエンドポイント経由でアクセスしてみました。
バケットポリシーを設定することで、VPCエンドポイントのみでhttpsアクセスすることができました。
同じS3バケットポリシーでもAPIとhttpsでアクセス可否が異なるようなので、そのうち整理したいと思います。

お知らせ

APCはAWS Advanced Tier Services (アドバンストティアサービスパートナー) 認定を受けております。

その中で私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。

www.ap-com.co.jp

また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。

www.ap-com.co.jp