0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EC2からS3へVPCエンドポイント(インターフェース型)経由でアクセスすることを試す

Last updated at Posted at 2024-11-12

はじめに

本記事は以下記事を実際にやってみたことを記録した記事です

この構成を作って、S3にアクセスしてみます。この画像は転載なのでIPは違うかもしれません。他は同じだと思いますが、自分の解釈が入っているの少し違うかもしれません
image.png

環境構築

S3作成

なんか適当に作っておきましょう

VPC作成

VPC名: test-vpc-endpoint-interface-type
後の設定は画像の通り
image.png

セキュリティグループの作成

PublicサブネットのEC2インスタンスのセキュリティグループの作成

  • セキュリティグループ名: test-vpc-endpoint-interface-type-public-ec2-sg
  • VPC: test-vpc-endpoint-interface-type
  • 説明 : test-vpc-endpoint-interface-type-public-ec2-sg
  • インバウンドルール:
    • SSH(ポート22): すべてのインバウンドトラフィック(0.0.0.0/0)を許可 ※お仕事ではアクセス元は制限しようね
  • アウトバウンドルール:
    • すべてのアウトバウンドトラフィック(0.0.0.0/0)を許可

PrivateサブネットのEC2インスタンスのセキュリティグループの作成

  • セキュリティグループ名: test-vpc-endpoint-interface-type-private-ec2-sg
  • VPC: test-vpc-endpoint-interface-type
  • 説明: test-vpc-endpoint-interface-type-private-ec2-sg
  • インバウンドルール:
    • SSH(ポート22): test-vpc-endpoint-interface-type-public-ec2-sgセキュリティグループからのアクセスを許可
  • アウトバウンドルール:
    • すべてのアウトバウンドトラフィック(0.0.0.0/0)を許可 ※お仕事では制御がいるのかも

PrivateサブネットのVPCエンドポイントのセキュリティグループの作成

  • セキュリティグループ名: test-vpc-endpoint-interface-type-private-eni-sg

  • VPC: test-vpc-endpoint-interface-type

  • インバウンドルール:

    • HTTPS(ポート443): test-vpc-endpoint-interface-type-private-ec2-sgセキュリティグループからのアクセスを許可
  • アウトバウンドルール:

    • すべてのアウトバウンドトラフィック(0.0.0.0/0)を許可 ※お仕事では制御がいるのかも

IAMロールの作成とアタッチ

  1. IAMコンソールで「ロール」を作成し、EC2を選択。
  2. AmazonS3FullAccessポリシーをアタッチ。
  3. ロール名ec2toS3AccessTestを付けてロールを作成。

EC2インスタンスの作成と設定

PublicサブネットにEC2を作成

  • 名前: test-vpc-endpoint-interface-type-public-ec2
  • Amazon マシンイメージ (AMI): Amazon Linux 2023 AMI
  • アーキテクチャ: 64ビット(x86)
  • インスタンスタイプ: t2.micro
  • キーペア: 任意
  • VPC: test-vpc-endpoint-interface-type-vpc
  • サブネット: test-vpc-endpoint-interface-type-subnet-public1-ap-northeast-1a
  • パブリック IP の自動割り当て: 有効化
  • ファイアウォール (セキュリティグループ): test-vpc-endpoint-interface-type-public-ec2-sg ※既存のセキュリティグループです

EC2を作成したら
インスタンス一覧でインスタンス選択→アクション→セキュリティ→IAMロールを変更→ec2toS3AccessTestを選択→IAMロールの更新をクリック
※本来はこっちは不要だが動作検証したいのでロールを適用しておく

PrivateサブネットにEC2を作成

  • 名前: test-vpc-endpoint-interface-type-private-ec2
  • Amazon マシンイメージ (AMI): Amazon Linux 2023 AMI
  • アーキテクチャ: 64ビット(x86)
  • インスタンスタイプ: t2.micro
  • キーペア: 任意
  • VPC: test-vpc-endpoint-interface-type-vpc
  • サブネット: test-vpc-endpoint-interface-type-subnet-private1-ap-northeast-1a
  • パブリック IP の自動割り当て: 無効化
  • ファイアウォール (セキュリティグループ): test-vpc-endpoint-interface-type-private-ec2-sg ※既存のセキュリティグループです

EC2を作成したら
インスタンス一覧でインスタンス選択→アクション→セキュリティ→IAMロールを変更→ec2toS3AccessTestを選択→IAMロールの更新をクリック

VPCエンドポイント(インターフェース型)の作成(S3アクセス用)

VPCコンソールで「エンドポイント」を選択し、「エンドポイントの作成」を選択

  • 名前タグ - オプション: test-vpc-endpoint-interface-type
  • サービスカテゴリ: AWSのサービス
  • サービス: com.amazonaws.ap-northeast-1.s3 amazon Interface
  • VPC: test-vpc-endpoint-interface-type-vpc
  • サブネット: ap-northease-1a(apne1-az4) test-vpc-endpoint-interface-type-subnet-private1-ap-northeast-1a
  • セキュリティグループ: test-vpc-endpoint-interface-type-private-eni-sg
  • ポリシー: フルアクセス

image.png

※セキュリティグループの選択が画像ではわからないが、test-vpc-endpoint-interface-type-private-eni-sgを選択してね
image.png

※しばらくはステータスが保留中になるかもしれない。使用可能になるまで待とう

エンドポイントのDNS名を確認する。*.vpce-0fb14fa18f4a834bc-nlgbi1a2.s3.ap-northeast-1.vpce.amazonaws.comとなってました。これが大事

image.png

動作確認

PC-> パブリックサブネットのEC2 -> プライベートサブネットのEC2にsshログインします

ssh EC2のパブリックIP
[ec2-user@ip-10-0-14-11 ~]$ aws s3 ls
2024-11-09 08:54:39 cf-templates-yjmgyq7q01ge-ap-northeast-1
2024-11-12 13:57:53 cfn-lambda-mattermost

エンドポイントを指定してない場合パブリックアクセスしているらしい
image.png

次にプライベートサブネットからS3にアクセスしてみる

ssh EC2のプライベートIP

# ここはprivateサブネットのEC2で行います。

# --regionつけないと動かないみたい。他のネット記事にも書いてあった。となるとEC2から実行するプログラムでawsコマンドを実行している場合は動かなくなる恐れはある。ラムダは影響ないと書いてあったがやはり検証は必要。なお、このコマンドをpublicのEC2で実行するとフリーズする
[ec2-user@ip-10-0-138-204 ~]$ aws s3 ls
^C

# --regionつけると動いた 
[ec2-user@ip-10-0-138-204 ~]$ aws s3 ls --region ap-northeast-1 --endpoint-url https://bucket.vpce-0fb14fa18f4a834bc-nlgbi1a2.s3.ap-northeast-1.vpce.amazonaws.com
2024-11-09 08:54:39 cf-templates-yjmgyq7q01ge-ap-northeast-1
2024-11-12 13:57:53 cfn-lambda-mattermost


# nslookup VPCエンドポイントの画面で表示されているIPとAddressが一致
[ec2-user@ip-10-0-138-204 ~]$ nslookup vpce-0fb14fa18f4a834bc-nlgbi1a2.s3.ap-northeast-1.vpce.amazonaws.com
Server:         10.0.0.2
Address:        10.0.0.2#53

Non-authoritative answer:
Name:   vpce-0fb14fa18f4a834bc-nlgbi1a2.s3.ap-northeast-1.vpce.amazonaws.com
Address: 10.0.136.199


# バケットの中までみたい
[ec2-user@ip-10-0-138-204 ~]$ aws s3 ls s3://test-codepipeline-zangief --region ap-northeast-1 --endpoint-url https://bucket.vpce-0fb14fa18f4a834bc-nlgbi1a2.s3.ap-northeast-1.vpce.amazonaws.com       
                           PRE deploy-artifacts/
                           PRE test-codepipeline-za/
2024-09-24 12:31:44          4 test.txt

# curl
[ec2-user@ip-10-0-138-204 ~]$ curl -v https://bucket.vpce-0fb14fa18f4a834bc-nlgbi1a2.s3.ap-northeast-1.vpce.amazonaws.com
* Host bucket.vpce-0fb14fa18f4a834bc-nlgbi1a2.s3.ap-northeast-1.vpce.amazonaws.com:443 was resolved.
* IPv6: (none)
* IPv4: 10.0.136.199 # これがプライベートIPらしく、プライベート接続だと思うことにする
*   Trying 10.0.136.199:443...
* Connected to bucket.vpce-0fb14fa18f4a834bc-nlgbi1a2.s3.ap-northeast-1.vpce.amazonaws.com (10.0.136.199) port 443
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
*  CAfile: /etc/pki/tls/certs/ca-bundle.crt
*  CApath: none
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-CHACHA20-POLY1305 / prime256v1 / rsaEncryption
* ALPN: server did not agree on a protocol. Uses default.
* Server certificate:
*  subject: CN=s3.ap-northeast-1.amazonaws.com
*  start date: Nov 12 00:00:00 2024 GMT
*  expire date: Dec 11 23:59:59 2025 GMT
*  subjectAltName: host "bucket.vpce-0fb14fa18f4a834bc-nlgbi1a2.s3.ap-northeast-1.vpce.amazonaws.com" matched cert's "bucket.vpce-0fb14fa18f4a834bc-nlgbi1a2.s3.ap-northeast-1.vpce.amazonaws.com"      
*  issuer: C=US; O=Amazon; CN=Amazon RSA 2048 M02
*  SSL certificate verify ok.
*   Certificate level 0: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 1: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
* using HTTP/1.x
> GET / HTTP/1.1
> Host: bucket.vpce-0fb14fa18f4a834bc-nlgbi1a2.s3.ap-northeast-1.vpce.amazonaws.com
> User-Agent: curl/8.5.0
> Accept: */*
>
< HTTP/1.1 307 Temporary Redirect
< x-amz-id-2: Hsb8HGdPNavLnWseZE1EI1sK9IfcLJkgAweYTJH5iqz+ipI0LX3lAOl9Q44pfihLty71kElbv44=
< x-amz-request-id: 85T3176T174RFFNZ
< Date: Tue, 12 Nov 2024 15:44:50 GMT
< Location: https://aws.amazon.com/s3/
< Content-Length: 0
< Server: AmazonS3
<
* Connection #0 to host bucket.vpce-0fb14fa18f4a834bc-nlgbi1a2.s3.ap-northeast-1.vpce.amazonaws.com left intact
[ec2-user@ip-10-0-138-204 ~]$

curlの結果をAIに聞いてみた

image.png

image.png

終わったら

すぐ消そうね

  • EC2
  • VPCエンドポイント

他は課金されないと思う

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?