はじめに
こんにちは、KCCS デジタルプラットフォーム部の林です。
以前Network Connectivity Configuration(以下NCC)の機能を利用することでServerless ComputeからPrivateLink経由で安全にS3へ接続することができるという記事を書きました。
当時はNetwork Loadbalancerを構築して接続先のVPCエンドポイントを作成する必要がありましたが、最近のこのNCCの機能がアップデートされ、直接S3のエンドポイントを指定できるようになりました。
注意
本機能は執筆時点でパブリックプレビュー機能となっております。
利用にはDatabricks社に申請を行い機能を有効にしていただく必要があります。
また、今後のアップデートにより画面構成や設定手順が変更となる可能性があります。
事前準備
以下のリソースは事前に作成されていること
・接続先のS3バケット
・S3バケットを外部ロケーションとして登録するための資格情報
構築手順
0.機能の有効化
アカウントのプレビュー画面より、「Outbound (serverless) AWS Private Link to AWS-managed resources」の項目をオンにする。
1.NCCの構築
アカウント管理画面のセキュリティ→ネットワーク接続構成の画面にアクセスし、「ネットワーク接続構成を追加」を実行する。
ネットワーク接続構成の名前とリージョンを指定し、「追加」を押下する。
作成されたネットワーク接続構成の画面に遷移し、プライベートエンドポイントルールのタブに切り替え「プライベートエンドポイントルールを追加」を実行する。
機能が有効になっている場合、AWSのリソースタイプの選択画面が表示されるため、「S3バケット」を選択する。
※嬉しいことにS3以外にも複数のAWSサービスが選択可能になっています!
接続先のS3バケット名を入力し、「追加」を選択するとエンドポイントルールが作成される。
2.バケットポリシーの設定
接続先のS3のバケットポリシーを設定する。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowVpcEndpointAccess",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::{bucket-name}",
"arn:aws:s3:::{bucket-name}/*"
],
"Condition": {
"StringEquals": {
"aws:sourceVpce": "{vpc-id}"
}
}
}
]
}
{bucket-name}には接続先のバケット名を、{vpc-id}には先ほど作成したエンドポイントルールのVPCエンドポイントのIDを入力する。
3.NCCをワークスペースにアタッチする
アカウント画面のワークススペース画面より、NCCをアタッチするワークスペースの詳細画面を表示する。
ネットワーキングの項目の「ネットワーク接続構成」で、先ほど作成したNCCを選択し、保存する。
4.NCC設定の有効化
プライベートエンドポイントルールの画面でルールの右端にあるハンバーガーボタンより「ルールを更新」を実行し、「ルールを有効化」のボタンをONにする。
※NCCのルールを作成してワークスペースにアタッチしただけでは設定が有効にならないため注意
5.外部ロケーションの作成
Databricksのワークスペース画面に移動し、予め作成済みの資格情報を用いて外部ロケーションの設定を行う。
6.接続確認
作成した外部ロケーション上にデータを作成して接続元の情報を確認する。
CloudTrailのログよりイベント情報を確認する。
| user_arn | eventName | vpcEndpointId |
|---|---|---|
| arn:aws:sts::xxxxxxxxxxxx:assumed-role/dbx-servertess-test-role/xxxxxxx | PutObject | vpce-xxxxxxxxx |
vpcEndpointIdがNCCで設定したVPCエンドポイントのIDとなっており、NCC経由でアクセスされたことが確認できる。
まとめ
NCCのアップデートによりS3を始め様々なAWSリソースへ直接PrivateLink接続できるようになりました。
もちろん元々存在していたNetworkLoadbalancer経由でのアクセスも引き続き利用可能なので、サービス一覧に無いリソースへのアクセスも可能です。
閉域接続周りは悩まされることが多かったので、これは嬉しいアップデートでした。




