はじめに
本記事は以下記事を実際にやってみたことを記録した記事です
この構成を作って、S3にアクセスしてみます。この画像は転載なのでIPは違うかもしれません。他は同じだと思いますが、自分の解釈が入っているの少し違うかもしれません
環境構築
S3作成
なんか適当に作っておきましょう
VPC作成
VPC名: test-vpc-endpoint-interface-type
後の設定は画像の通り
セキュリティグループの作成
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
セキュリティグループからのアクセスを許可
- SSH(ポート22):
- アウトバウンドルール:
- すべてのアウトバウンドトラフィック(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
セキュリティグループからのアクセスを許可
- HTTPS(ポート443):
-
アウトバウンドルール:
- すべてのアウトバウンドトラフィック(0.0.0.0/0)を許可 ※お仕事では制御がいるのかも
IAMロールの作成とアタッチ
- IAMコンソールで「ロール」を作成し、EC2を選択。
- AmazonS3FullAccessポリシーをアタッチ。
- ロール名
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
- ポリシー:
フルアクセス
※セキュリティグループの選択が画像ではわからないが、test-vpc-endpoint-interface-type-private-eni-sg
を選択してね
※しばらくはステータスが保留中になるかもしれない。使用可能になるまで待とう
エンドポイントのDNS名を確認する。*.vpce-0fb14fa18f4a834bc-nlgbi1a2.s3.ap-northeast-1.vpce.amazonaws.com
となってました。これが大事
動作確認
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
エンドポイントを指定してない場合パブリックアクセスしているらしい
次にプライベートサブネットから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に聞いてみた
終わったら
すぐ消そうね
- EC2
- VPCエンドポイント
他は課金されないと思う