LoginSignup
0
0

More than 3 years have passed since last update.

【GCP】BeyondCorp Remote Access実装〜GCPを介してAzureへ接続〜

Posted at

準備
テスト用のドメインを2つ用意(Azureのインスタンスにひもづけるもの、HTTPSロードバランサにひもづけるもの)お名前ドットコムなどで用意してください。

流れ
①GCP側のネットワークを設定する
②IAPconnectorをデプロイする
③Google Load BalacerのDNSを設定する
④Azure側でインスタンスを作成する
⑤Azure側のネットワークの設定をする
⑥GCP側でVPNの設定をする
⑦GCP側、Azure側にFWの設定をする

参考URL
https://yomon.hatenablog.com/entry/2019/10/gcp_azure_vpn
https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/tutorial-lamp-stack

手順
①GCP側のネットワークを設定する
※GCPの設定はCLIで行います。以下の設定値は参考例となりますので、こちらを元に作成してみてください。

GCP 関連変数

GCP_PROJECT=YOUR_PROJECT_ID
GCP_REGION=asia-northeast1
GCP_PUBLIC_IP_NAME=mypubip
GCP_VPC_NAME=myvpc
GCP_VPC_PREFIX=10.1.0.0/16
GCP_SUBNET_NAME=mysubnet
GCP_SUBNET_RANGE=10.1.0.0/24
GCP_GW_NAME=vpn-gw-azure
GCP_TUNNEL_NAME=azure-tunnel
GCP_GW_ROUTE=azure-gw-route
IKE_PRE_SHARED_KEY=abcd1234

パブリックIPの取得
gcloud compute addresses create ${GCP_PUBLIC_IP_NAME} \
--project=${GCP_PROJECT} \
--region=${GCP_REGION}

VPCネットワーク作成
gcloud compute --project=${GCP_PROJECT} networks create ${GCP_VPC_NAME} --subnet-mode=custom
gcloud compute --project=${GCP_PROJECT} networks subnets create ${GCP_SUBNET_NAME} \
--network=${GCP_VPC_NAME} \
--range=${GCP_SUBNET_RANGE} \
--region=${GCP_REGION}

Cloud VPNゲートウェイ作成・設定

VPN Gatewayの作成

gcloud compute target-vpn-gateways create ${GCP_GW_NAME} \
--network ${GCP_VPC_NAME} \
--region ${GCP_REGION} \
--project ${GCP_PROJECT}

Firewall Ruleの追加

gcloud compute forwarding-rules create "${GCP_GW_NAME}-rule-esp" \
--address ${GCP_PUBLIC_IP} \
--target-vpn-gateway ${GCP_GW_NAME} \
--ip-protocol "ESP" \
--region ${GCP_REGION} \
--project ${GCP_PROJECT}
gcloud compute forwarding-rules create "${GCP_GW_NAME}-rule-udp500" \
--address ${GCP_PUBLIC_IP} \
--ip-protocol "UDP" --ports "500" \
--target-vpn-gateway ${GCP_GW_NAME} \
--region ${GCP_REGION} \
--project ${GCP_PROJECT}
gcloud compute forwarding-rules create "${GCP_GW_NAME}-rule-udp4500" \
--address ${GCP_PUBLIC_IP} \
--ip-protocol "UDP" --ports "4500" \
--target-vpn-gateway ${GCP_GW_NAME} \
--region ${GCP_REGION} \
--project ${GCP_PROJECT}

②IAPconnectorをデプロイする
PJを作成する
以下のAPIを有効化する
Compute Engine API
Google Kubernetes Engine API
Cloud Deployment Manager API V2
IAMに移動し、「Google APIサービスエージェント」というアカウントにGKE管理者の権限を追加。
用意していたHTTPSロードバランサにひもづけるドメインに以下のCAAレコードを追加する。
CAA 0 issue "letsencrypt.org"
0 issue "pki.goog"
Cloud Load Balnacingのページにて、「詳細設定メニュー」をクリック。
[証明書]タブをクリック。
[+ SSL証明書を作成]をクリック。
以下の項目を入力
名前:任意
作成モード:[Googleマネージドの証明書を作成する]にチェック
ドメイン:HTTPSロードバランサにひもづけるドメインを入力
cloud shellを起動
以下のコマンドを入力
git clone https://github.com/GoogleCloudPlatform/iap-connector
cd iap-connector/

vim iap-connector.yaml のコマンドを入力し、iap-connector.yamlを編集。
resources.properties.zone: GKEクラスタを展開するゾーンを入力します
resources.properties.serviceAccountName: 手順1で設定したGoogle APIサービスエージェントのアカウント名
resources.properties.routing.name: 任意の設定名。Deployment Managerのデプロイ名になります
resources.properties.routing.mapping.source: Cloud Load Balancingに割り当てるドメイン
resources.properties.routing.mapping.destination: 転送先(IPアドレスは不可。Azureのインスタンスにひもづけたドメインを記載)
resources.properties.tls: 手順1で作成したSSL証明書名
末尾3行はオプションのプロパティです。/iap-connector.py.schemaファイルに説明があります。今回は動作確認用途なので、GKEクラスタノードの利用料金をなるべく安くなるようにしてみました。

imports:
- path: iap-connector.py

resources:
- name: iap-connector
type: iap-connector.py
properties:
zone: asia-northeast1-a
serviceAccountName: xxxxxxxxxxx@cloudservices.gserviceaccount.com
network: ${GCP_VPC_NAME}の値を入力してください
subnetwork: ${GCP_SUBNET_NAME}の値を入力してください
routing:
- name: bcra-hogehoge-work
mapping:
- name: host
source: bcra-hogehoge.work
destination: bcra-hogehoge-azure.work/info.php
tls:
- bcra-hogehoge-work
preemptible: true
initialNodeCount: 1
replicas: 1

以下のgcloud コマンドでCloud Deployment Managerのデプロイを実行します。
gcloud deployment-manager deployments create test-bcra-com --config=iap-connector.yaml
※test-bcra-comはresources.properties.routing.nameと合わせてください。
※作成まで5分ほどかかります。

コンソール画面にて、セキュリティ>IAPに移動し、IAPを有効にしてください
「Oauthの同意」が表示されるため、ボタンをクリックし、設定をしてください

③Google Load BalacerのDNSを設定する
コンソール画面のネットワークサービス>負荷分散をクリックし、さくせいされているLBの名前をクリック
HTTPSのLBが作成されているため、そこに表示されているIPアドレスを用意したドメインのAレコードに登録する。

※HTTPSのLBが作成されていない場合、手動で作成する。

④Azure側でインスタンスを作成する
https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/tutorial-lamp-stack

上記のサイトを元にAzureのVMを作成する

⑤Azure側のネットワークの設定をする
https://yomon.hatenablog.com/entry/2019/10/gcp_azure_vpn

Azure 関連変数

AZURE_SUBSCRIPTION=YOUR_SUBSCRIPTION_ID
AZURE_RG_NAME=VPN_RG
AZURE_PUBLIC_IP_NAME=AzurePubIP
AZURE_LOCATION=japaneast
AZURE_VNET_NAME=MyVNet
AZURE_VNET_PREFIX=10.10.0.0/16
AZURE_SUBNET_NAME=MySubnet
AZURE_SUBNET_PREFIX=10.10.0.0/24
AZURE_GW_SUBNET_NAME=GatewaySubnet
AZURE_GW_SUBNET_PREFIX=10.10.255.0/27
AZURE_LOCAL_GW_NAME=GCPGW
AZURE_GW_NAME=VNetGW
AZURE_GW_SKU=VpnGw1
AZURE_CONN_NAME=GCPTunnel
IKE_PRE_SHARED_KEY=abcd1234

リソースグループ作成
az group create --name VPN_RG --location japaneast

以下を参照し、VMを作成
https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/tutorial-lamp-stack

az vm create \
--resource-group VPN_RG \
--name myVM \
--image UbuntuLTS \
--admin-username azureuser \
--generate-ssh-keys

az vm open-port --port 80 --resource-group VPN_RG --name myVM

az network public-ip list --resource-group VPN_RG --query [].ipAddress

ssh azureuser@20.194.172.34
Webサーバを構築

仮想ネットワーク作成
az network vnet create --name MyVNet --resource-group VPN_RG --address-prefix 10.10.0.0/16 --location japaneast --subnet-name MySubnet --subnet-prefix 10.10.0.0/24

Gateway Subnet作成
az network vnet subnet create --address-prefix 10.10.255.0/27 --name GatewaySubnet --resource-group VPN_RG --vnet-name MyVNet

ローカル ネットワーク ゲートウェイ作成
az network local-gateway create --gateway-ip-address 35.221.65.0 --name GCPGW --resource-group VPN_RG --local-address-prefixes 10.1.0.0/16

パブリックIPの取得
az network public-ip create --name AzurePubIP --resource-group VPN_RG --allocation-method Dynamic
※AzurePublicIPは付与されるまで時間がかかる。1時間位まったほうがいい。

仮想ネットワーク ゲートウェイ作成
az network vnet-gateway create --name VNetGW --public-ip-address AzurePubIP --resource-group VPN_RG --vnet MyVNet --gateway-type Vpn --vpn-type RouteBased --sku VpnGw1 --no-wait

VPN接続作成
az network vpn-connection create -n GCPTunnel --vnet-gateway1 /subscriptions/c3099676-6a37-4ce0-810d-111281d00cfb/resourceGroups/VPN_RG/providers/Microsoft.Network/virtualNetworkGateways/VNetGW \
--local-gateway2 /subscriptions/c3099676-6a37-4ce0-810d-111281d00cfb/resourceGroups/VPN_RG/providers/Microsoft.Network/localNetworkGateways/GCPGW \
--shared-key abcd1234 \
-g VPN_RG -l japaneast

⑥GCP側でVPNの設定をする
Cloud VPNトンネル作成
gcloud compute vpn-tunnels create ${GCP_TUNNEL_NAME} \
--peer-address ${AZURE_PUBLIC_IP} \
--target-vpn-gateway ${GCP_GW_NAME} \
--shared-secret ${IKE_PRE_SHARED_KEY} \
--local-traffic-selector=0.0.0.0/0 \
--remote-traffic-selector=0.0.0.0/0 \
--ike-version 2 \
--region ${GCP_REGION} \
--project ${GCP_PROJECT}

ルートテーブル設定
gcloud compute routes create ${GCP_GW_ROUTE} \
--destination-range ${AZURE_VNET_PREFIX} \
--next-hop-vpn-tunnel ${GCP_TUNNEL_NAME} \
--network ${GCP_VPC_NAME} \
--next-hop-vpn-tunnel-region ${GCP_REGION} \
--project ${GCP_PROJECT}

⑦GCP側、Azure側にFWの設定をする
Azure側に130.211.0.0/22 35.191.0.0/16 を許可するTCPのFWルールを受信側に設定
GCP側に下りの許可を設定する

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