AWS Client VPN을 조심스럽게 세우고 떨어 뜨릴 수 있습니다.

경위



회사 네트워크의 공용 IP 기반 연결을 허용하는 것이 있지만,
빌딩 점검이나 사무실 이전 등에 의해 일시적으로 IP를 사용할 수 없는 상황이 발생해도 VPN을 통해 대응을 할 수 있도록 해두고 싶은 경우를 상정

그러나 대기 상태로 두면 연결되어 있지 않아도
0.15USD x 24h x 31day x 2 서브넷(접속처)에서 약 232USD (약 2만 5천엔) 월액 걸리므로,
사용하지 않을 때는 중지하고 싶습니다.

이번 전제


  • 도쿄 지역에서 사용하기 전제
  • 이번 VPN 라우팅의 CIDR은 0.0.0.0/0으로 모든 요청 VPN을 통해
  • 본래는 IP 허락이 필요한 CIDR에만 짜는 것이 대역에 의한 과금도 줄일 수 있으므로 추천

  • VPN이 부팅 상태가 될 때까지 10 분에서 15 분까지는 허용됩니다
  • AD는 사용하지 않고 인증서의 인증 방법으로 사용됩니다.

    요구사항


  • 일시적이기 때문에 사용하지 않는 동안은 요금이 들지 않게 하고 싶다
  • AWS에 대한 지식이 많지 않더라도 VPN을 쉽게 사용할 수 있고 사용하지 않는 상태로 만들고 싶습니다
  • 사무실 이전이 일어날 수 있지만 항상 변하지 않는 IP를 확보하고 허락하고 싶습니다.

    서버 구성도(가동 시)





    서버 구성도 (정지시)





    절차



    준비



    고정 IP 획득


    $ aws ec2 allocate-address --domain vpc
    
    // 以下のように表示されるので、 IP と AllocationId をメモしておく
    {
        "PublicIp": "xx.xx.xx.xx",
        "PublicIpv4Pool": "amazon",
        "Domain": "vpc",
        "AllocationId": "eipalloc-00000000000000"
    }
    

    루트 인증서, 서버 인증서 및 서버 비밀 키를 AWS Certificate Manager(ACM)에 등록


    $ git clone https://github.com/OpenVPN/easy-rsa.git
    $ cd easy-rsa/easyrsa3
    
    $ echo 'set_var EASYRSA_KEY_SIZE 16384' > vars # 鍵長を 16384bit とする
    $ echo 'set_var EASYRSA_CERT_EXPIRE 365' >> vars # 有効期限は 365日とする
    
    $ ./easyrsa init-pki # 初期化
    $ ls pki # pki フォルダ配下に必要なデータが生成される
    
    $ ./easyrsa build-ca nopass # Common Name を入力 (ex. vpn.hapitas.jp)
    $ ls -l pki/ca.crt # ルート証明書が生成される
    
    $ ./easyrsa build-server-full server nopass # サーバ証明書・サーバ秘密鍵作成
    $ ls -l pki/issued/server.crt # サーバ証明書が存在
    $ ls -l pki/private/server.key # サーバ秘密鍵が存在
    
    # pki フォルダに生成されたファイルは厳重に管理しておく
    
    # ACM に鍵を登録
    $ aws acm import-certificate \
      --certificate file://pki/issued/server.crt \
      --private-key file://pki/private/server.key \
      --certificate-chain file://pki/ca.crt \
      --region ap-northeast-1
    
    # 以下のように表示されるのでメモしておく
    {
        "CertificateArn": "arn:aws:acm:ap-northeast-1:111111111:certificate/11111-1111-1111-1111-1111111111"
    }
    

    클라이언트 인증서, 비공개 키


    # 先程のサーバ証明書を作ったあとの手順 (接続するメンバー分だけ作成)
    
    $ USER=s-urabe
    $ ./easyrsa build-client-full ${USER} nopass
    $ mkdir -p keys/$USER
    $ mv -v pki/issued/$USER.crt keys/$USER/client.crt
    $ mv -v pki/private/$USER.key keys/$USER/private.key
    

    Nat 인스턴스 접속용 SSH 키 작성 (평상시 접속하지 않는다고 생각합니다만)



    다음 명령의 경우 키 이름은 vpn_nat
    $ aws ec2 create-key-pair \
        --key-name vpn_nat \
        --query 'KeyMaterial' \
        --output text > ~/.ssh/vpn_nat.pem
    

    VPN 시작



    서버측 구축



    gist에있는 vpn-start-cloudformation.yml를 다운로드합니다.

    yaml 파일 안에 EIPAllocationId
    aws cloudformation deploy \
      --template-file vpn-start-cloudformation.ym \
      --stack-name my-vpn
    

    15분~20분 정도로 기동합니다.

    클라이언트측 설정



    htps : // 아 p의 r ぇ아 st-1. 안녕하세요. 아 ws. 아마존. 이 m/vpc/칭찬? 레기온 = 아 p의 r ぇ 아 st-1 # C 엔 tVP 넨 d 포인 ts : 그 rt = c ぃ 엔 tVp 넨 d 포인치 d 에서 ACMArn 를 눌러 ovpn 파일을 다운로드합니다.



    ovpn 파일의 끝에 다음을 추가합니다.
    echo "cert client.crt" >> downloaded-client-config.ovpn
    echo "key private.key" >> downloaded-client-config.ovpn
    

    downloaded-client-config.ovpn 파일을 이전에 클라이언트 인증서가 있는 keys/$USER 와 동일한 디렉토리에 배치합니다. (복수 만든 경우는 복수분)
    이 디렉토리 구성 그대로 접속하는 멤버에게 공유해 갑니다.

    macOS의 경우 Tunnelblick Windows의 경우 OpenVPN GUI 설치 프로그램을 사용하여 설치합니다.

    연결하고 htps : //이 f 곤푸 g. 메

    VPN 중지



    gist에있는 vpn-stop-cloudformation.yml를 다운로드합니다.

    yaml 파일에서 SSHKeyName의 Default 값은 적절한 값을 설정하므로 준비된 값을 설정하고 다음 명령을 실행합니다.
    aws cloudformation deploy \
      --template-file vpn-stop-cloudformation.yml \
      --stack-name my-vpn
    

    10분 정도에 끝납니다.
    VPN 부팅이 필요한 경우 서버측 구축의 단계를 수행합니다. (2회째의 기동은 10분 정도 걸립니다)
  • 좋은 웹페이지 즐겨찾기