17
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IAM Identity CenterのユーザーでClientVPN接続後に、非公開サーバーへssh接続する環境構築

Last updated at Posted at 2024-03-11

概要

AWS Identity Centerに登録したユーザーを利用して、AWS Client VPNでSAML2.0ベースの認証を行い、外部から接続できないサブネットに起動させた非公開サーバーへSSH接続するところまで行います。
上述した非公開サーバーとは、踏み台サーバーや、デプロイ用のサーバー、社内でのみ利用するようなサーバーを想定しています。

記事を書こうと思った経緯

社内でIAMIdenitityCenter+ClientVPNを利用しているので、個人的に気になって構築を始めてみたのですが、なかなか大変だったので、社内の技術共有も兼ねて構築手順を全部見れる記事を作ろうと考えました。

対象読者

以下のような方にはメリットがあるかもしれません。
・IAMIdenitityCenter+ClientVPNってどんな感じで構築するのかざっと全体を知りたい方
・踏み台サーバーなどの接続を安全に行いたい方法を検討中の方(※ClientVPN以外にも安全な方法はあると思いますので1つの手段として捉えていただければ幸いです)

構築後のイメージ

全体をイメージしやすいように、本記事内で構築するイメージを以下に示します。
※白い矢印はVPN接続時の通信の流れとなります。
全体図.png

本記事はハンズオンに近い形で記載しているため、基本的には同じ手順で進められます。
また、作成後に料金が発生するAWSリソースがいくつか利用します。事前に記事内のリソースがいくらかかるのか確認しておくことを推奨します。

それでは、構築を始めていきましょう。

IAM Identity Center ユーザーを準備

事前にIAM Identity Centerを利用できるようにしておきます。参考

認証を行うユーザーを準備します。

赤枠の「ユーザーを追加」を押下します。
001_(access)identity_user_create.png

今回は「sample-qiita」というユーザーを作ることにします。
002_user_create.png

「sample-qiita」が所属するグループを作成します。
003_user_create_to_group.png

グループ名は「SampleQiitaGroup」とします。
004_group_create.png

「グループを作成」の左にある更新ボタン押下後、上記で作成したグループを選択します。
005_select_group.png

内容を確認して、「ユーザーを追加」を押下します。
006_user_create_confirm.png

ユーザーが追加されました。メールアドレスは未検証の状態です。
007_作成したユーザーのプライマリEメールが未検証.png

招待メールが来るので、「Accept Invitation」を押下します。
008_メールが来るので承認する.png

メールアドレスが検証済となり、パスワードの設定画面が表示されますので、そのままパスワードの設定を行います。
009_accept_invitation_click後パスワード設定.png

許可セットを作成していきます。
014_ユーザーがログインできるように許可セットを作成していく.png

今回は、PowerUserAccessを設定したいので、カスタム許可セットを選択します。
015_今回はカスタム.png

PowerUserAccessを選択します。
016_PoweerUserAccessを選択.png

許可セット名は任意ですが、今回は「SampleQiitaPermissionSet」とし、セッション時間は12時間を選択します。
017_create_permission_set.png

内容を確認後、「作成」を押下します。
018_create_confirm.png

許可セット「SampleQiitaPermissionSet」が作成されます。
019_許可セットが作成された.png

ここから、「SampleQiitaGroup」グループに所属する「sample-qiita」ユーザーは、SSOログイン後、管理アカウントのマネージメントコンソールにログインできるように設定していきます。

IAM Identity Center の AWS アカウントにアクセスし、管理アカウントのリンク(赤矢印部分)を押下します。
020_AWSアカウント.png

このアカウントに、アクセスできるグループと許可セットを割り当てたいので、赤枠の「ユーザーまたはグループを割り当て」を押下します。
021_AWSアカウントにグループと許可セットを設定.png

「sample-qiita」ユーザーの所属する「SampleQiitaGroup」グループを選択して「次へ」を押下します。
022_AWSアカウントにグループと許可セットを設定2.png

「SampleQiitaGroup」グループには、先ほど作成した許可セット「SampleQiitaPermissionSet」を設定したいので、「SampleQiitaPermissionSet」を選択します。
023_許可セットを選択.png

内容を確認して「送信」します。
024_送信.png

正常に割り当てられました。
ここまでで、「SampleQiitaGroup」グループに所属する「sample-qiita」ユーザーは、「SampleQiitaPermissionSet」で許可された操作ができる状態で、SSOログインできるようになっています。実際にこれからログインを行なってみます。
025_アカウントにアクセスSSOアクセス可能なグループと許可セットが設定された.png

IAM Identity Centerのダッシュボードから赤枠の「AWSアクセスポータルのURL」に記載されたリンクへ飛びます。
026_ダッシュボードのAWSアクセスポータルから再度ログインを試してみましょう.png

ログインを行い、MFAの設定後以下のような画面になります。
管理アカウントに、割り当てた許可セットを利用して、マネージメントコンソールに入れるようになりました。
032_SSOログインOK.png

ネットワーク関連の構築

これから行う大まかな流れとしては、VPC作成後に、パブリックサブネットとプロテクトサブネット、プライベートサブネットの三つを作成します。プライベートサブネットは今回利用せず、パブリックサブネットはローカル通信とインターネットゲートウェイへの通信を確保させ、プロテクトサブネットはローカル通信とNATゲートウェイへの通信経路を確保させます。
操作はroot権限でマネージメントコンソールから行い、東京リージョンで作業します。

「qiita-vpc」という名称のVPCを作成します。
030_東京リージョンにVPCを作成.png

作成されたVPCを確認
※ローカル通信の経路が設定されたメインルートテーブルは自動作成されています。
031_作成されたVPC.png

サブネットを作成します。VPC IDは先ほど作成した「qiita-vpc」を選択します。
032_サブネットを作成1.png

パブリックサブネットとプロテクトサブネット、プライベートサブネットを作成します。
033_サブネット作成2.png
034_サブネット作成3.png

作成されたサブネットを確認します。
「qiita-public-1a」「qiita-protect-1a」「qiita-private-1a」が作成されています。用途別に用意しているだけで冗長性などは考慮していません。
035_作成されたサブネット確認.png

VPCを選択後、赤枠のメインルートテーブルのリンクを押下します。
036_VPC作成時に作成されたVPCのルートテーブルに名前をつける.png

名称が設定されていないので、「qiita-vpc-main-rtb」と名称を変更しておきます。
037_main_rtb_name_alter.png

インターネットゲートウェイを作成します。
NATゲートウェイ構築時にVPCにインターネットゲートウェイがアタッチされている必要があるため事前に作成します。
038_IGW作成.png

「qiita-igw」という名前でインターネットゲートウェイを作成します。
039_IGW2.png

作成したインターネットゲートウェイをqiita-vpcにアタッチさせます。
039-2_作成したIGWをVPCにアタッチ.png

「qiita-vpc」を選択して、「インターネットゲートウェイのアタッチ」を押下します。
039-3_IGWをVPCにアタッチ.png

ルートテーブルの作成
各サブネットに関連づける用途で3つルートテーブルを作成します。
040_各サブネットに紐づけるためのルートテーブル作成.png

パブリックサブネットに関連づけるためのルートテーブル「qiita-vpc-public-rtb」を作成
041_PUBLIC_RTB作成.png

プロテクトサブネットに関連づけるためのルートテーブル「qiita-vpc-protect-rtb」を作成
042_protect_rtb作成.png

プライベートサブネットに関連づけるためのルートテーブル「qiita-vpc-private-rtb」を作成
043_private_rtb作成.png

「qiita-vpc-public-rtb」のルート編集へ向かいます。
044_パブリックサブネットルート編集へ.png

「qiita-vpc-public-rtb」にインターネットゲートウェイへの通信経路を追加します。
045_パブリックRTBにIGWへの経路を追加.png

NATゲートウェイの作成へ向かいます。
046_NATG作成へ.png

NATゲートウェイを作成します。
※今回はVPN経由の通信を行う際に、NATゲートウェイを経由して固定IPを利用したいので「ElasticIPを割り当て」を押下して固定IPを取得します。
047_NATG作成.png

作成後、3分くらいでAvaillableに切り替わります。
※切り替わらない場合は、VPNにインターネットゲートウェイがアタッチされているか確認してみると良いかもしれません。
048_作成したNATGがAvailableに切り替わる.png

NATゲートウェイが利用可能になったので、「qiita-vpc-protect-rtb」のルートを編集しに向かいます。
049_protect_rtbのルートを編集へ.png

外向きの通信であれば、先ほど作成したNATゲートウェイに向かわせるように経路を追加します。
050_protect_rtbのルートにNATGへの経路を追加.png

「qiita-vpc-public-rtb」の「サブネットの関連づけを編集」に向かいます。
051_public_rtbでサブネットの関連づけ.png

「qiita-vpc-public-rtb」に、「qiita-public-1a」を関連づけます。
052_public_rtbにpublic_subnetを関連づけ(他のルートテーブルも同様に行うことを記事に書いておく).png

同様に、「qiita-vpc-protect-rtb」に、「qiita-protect-1a」を関連づけ、「qiita-vpc-private-rtb」に、「qiita-private-1a」を関連づけます。

ここまでの作業で以下のようなリソースマップになっていればOKです。
053_ここまででネットワーク経路の確認.png

図にすると以下のような状態となります。
054_kokomade.png

非公開サーバーの準備

非公開サーバー(EC2)を用意していきます。
これから作成する非公開サーバーの名前は「qiita-server」とします。

「qiita-server」に設定するセキュリティグループを作成します。
060_SG作成へ.png

今回以下のようなルールでセキュリティグループを作成します。
※名称は「qiita-server-sg」とします。
※ClientVPN経由でSSHするだけであれば、アウトバウンドルールのSSH,HTTP,HTTPSのルールは不要です。「qiita-server」にてyumやgithubの利用予定があるため今回設定しています。
061_SG作成.png

非公開サーバー「qiita-server」を作成していきます。

「インスタンスを起動」を押下します。
062_EC2作成へ.png

名前に「qiita-server」を入力後、AMIを選択
063_ec2_create1.png

今回は新しくキーペアを作成します。
※既存のキーペアがあればそちらを利用いただいても問題ありません。
※「.pem」ファイルはSSH接続の際に必要になるため、自分がわかる場所に保管しておいてください。
064_ec2_create2.png

キーペアを選択
065_ec2_create_3.png

VPCは作成した「qiita-vpc」を選択します。
サブネットは作成した「qiita-protect-1a」を選択します。
セキュリティグループは作成した「qiita-server-sg」を選択します。
066_ec2_create4.png

ストレージはデフォルトのまま進めます。
067_ec2_create5.png

内容を確認して、「インスタンスを起動」を押下します。
068_ec2_create6.png

非公開サーバー「qiita-server」が起動しました。
069_ec2_created.png

ここまでで、以下のようなイメージになっています。
ec2作成後.png

Route53でドメイン登録

ClientVPNでACMの証明書を利用するので、ACMのパブリック証明書を発行したいと思います。
ただ、自動更新してくれるAWSが発行する証明書を利用したいので、証明書をインポートするのではなく、今回はRoute53で独自ドメインを購入します。購入後、そのドメインでACMのパブリック証明書を発行します。

Route53から「ドメイン登録」を押下します。
070_route53-1.png

内容を確認して「次へ」を押下します。
071_Route53-2.png

必要な情報を入力して「次へ」を押下します。
072_Route53-3.png

内容に問題なければ「送信」を押下します。
073_Route53-4.png

まだ、ステータスが「進行中」なことを確認します。
※この時点では、ドメインの登録はできていません。
073_Route53-5.png

AWSからメールが来るので、メールアドレスの検証を行い
ステータスが「成功」になればOKです。
073_Route53-LAST.png

ACMでパブリック証明書を発行

ドメインが登録できたので、ACMでパブリック証明書を発行していきます。

Amazon Certificate Managerから、「リクエスト」を押下します。
080_ACMパブリック証明書をリクエストへ.png

パブリック証明書をリクエストが選択された状態で「次へ」
081_NEXT.png

登録したドメイン名を入力して「リクエスト」
082_REQUEST.png

リクエスト後、ステータスは「保留中の検証」となっています。
083_confirm_horyuutyuu.png

ACMの検証に必要なCNAMEレコードを作成するために、ドメイン名のリンク(赤枠部分)を押下します。
084_domain_link_click.png

赤枠の「Route53でレコードを作成」を押下します。
085_create_CNAME.png

レコードを作成を押下します。
086_create_CNAME_2.png

Route53で作成されたCNAMEレコードが確認可能です(赤枠部分)。
087_route53で確認するとCNAMEが作成されていることが確認可能.png

しばらくすると、ステータスが「発行済み」になります。
これでパブリック証明書の発行は完了です。
088_発行済みになったことを確認.png

Client VPN 利用準備

IAM Identity Center でアプリケーションを作成

IAM Identity Center の「アプリケーションを追加」を押下します。
100_IAMIdentityCenter-アプリケーションを追加he.png

「設定するアプリケーションがある」「SAML2.0」を選択します。
101_SAML.png

後ほど使うため「IAM Identity Center SAML メタデータファイル」のダウンロードリンクからXMLファイルをダウンロードしておきます。
102_application-2.png

「アプリケーションACS URL」にhttp://127.0.0.1:35001を入力し、
「アプリケーションSAML対象者」にurn:amazon:webservices:clientvpnを入力後、
「送信」を押下します。
103_application-3.png
※以下を参考に入力を行っています。
https://aws.amazon.com/jp/blogs/networking-and-content-delivery/using-aws-sso-with-aws-client-vpn-for-authentication-and-authorization/

正常にアプリケーションが作成されたことを確認します。
104_application-4.png

IAM IDプロバイダ 追加

「プロバイダを追加」を押下します。
150_IAMプロバイダ作成へ.png

先ほどダウンロードしたXMLファイル(SAML メタデータファイル)をファイル選択部分で選びます。他の項目はスクショを参考に入力後、「プロバイダを追加」を押下します。
151_idp.png

Client VPN Endpoint 作成

「クライアントVPNエンドポイントを作成」を押下します。
200_clientvpnエンドポイント作成へ.png

スクショを参考に入力を行います。
※クライアント IPv4 CIDR はVPN接続したユーザーに割り当てられるIPの範囲と思われます。今回はVPCのIPレンジと被らないように「172.26.0.0/22」を設定しています。
※接続ログ記録の部分で、選択しているロググループは記事外で作成したものです。同じようにしたい場合は、CloudWatchにて「client-vpn」というロググループを作成していただければ同じように進められます。
201_client_vpn_endpoint-1.png

スクショを参考に入力を行います。
入力完了後に、「クライアントVPNエンドポイントを作成」を押下します。
※「DNSサーバー1 IPアドレス」には、VPC「qiita-vpc」の「Amazon Route 53 Resolver」がある「172.25.0.2」を指定しています(参考)。今回の構築では、非公開サーバーへIPアドレスでSSH接続を行うので未指定でも問題ありません。
※VPCは「qiita-vpc」を、セキュリティグループはデフォルトのセキュリティグループを指定しています。
202_client_vpn_endpoint-2.png

クライアントVPNエンドポイントが作成されました。状態は「Pending associate」です。
203_client_vpn_endpointが作成された.png

状態をActiveにさせるために、赤枠を押下してサブネット「qiita-protect-1a」と紐付けします。
204_associate_target_networkへ.png

qiita-vpcとqiita-protect-1aを選択して、「ターゲットネットワークと関連づける」を押下します。しばらくすると状態がActiveになるはずです。
205_associate_target_network.png

次に、赤枠の「認証ルールを追加」を押下します。
206_承認ルールの追加.png

以下、IAM Identity Centerで作成したグループ「SampleQiitaGroup」のグループIDを、コピーしておきます。
207_IAMIdentityCenterのグループからグループIDをコピー.png

コピーしておいたグループIDをアクセスグループIDにペーストして、アクセスを有効にする送信先ネットワークに「0.0.0.0/0」を指定して、「認証ルールを追加」を押下します。
208_承認ルール作成.png

VPNに接続した状態で普通にGoogle検索なども行いたいので、ルートを作成します。
210_ルートの追加へ.png

以下の情報で「ルートを作成」を押下します。
211_ルートの追加.png

IAM Identity Center アプリケーション 追加作業

赤枠リンクを押下します。
220_IAMIdentityCenter-application-setting1.png

属性マッピングを編集
221_IAMIdentityCenter-setting2.png

以下のように入力を行い、「変更の保存」を押下します。
222_IAMIdentityCenter-setting3.png

次に、「ユーザーとグループを割り当てる」を押下します。
223_4.png

作成しておいた「SampleQiitaGroup」を選択して、「ユーザーを割り当て」を押下します。
224_5.png

割り当てられたユーザーとグループに「SampleQiitaGroup」が追加されていればOKです。
225_comp.png

AWS VPN Client のDLとセットアップ

以下URLから、VPN接続を行うためのクライアントアプリ(AWS VPN Client)をDLします。
当方はMacのため、Mac用のものをDLして進めます。
https://aws.amazon.com/jp/vpn/client-vpn-download/

AWS VPN Clientにて利用するため、赤枠の「クライアント設定をダウンロード」を押下して、「.ovpn」ファイルをダウンロードしておきます。
300_DL.png

AWS VPN Clientを起動して、赤枠のプロファイルを管理を選択します。
400_VPNClient1.png

「プロファイルを追加」を選択します。
401_CP.png

先ほどダウンロードした「.ovpn」ファイルを選択します。
402_CP.png

表示名を入力して、「プロファイルを追加」を押下します。
403.png

Client VPN 接続

プロファイルの追加完了後、「接続」を押下してVPN接続を試行します。
404.png

認証用の画面が開かれるので、「sample-qiita」ユーザーで認証を行います。
405.png

406.png

407.png

VPNの接続が完了します。
408.png

非公開サーバーへSSH接続

起動し直したので「qiita-server」のプライベートIPv4を確認しておきます。
500.png

sshの設定ファイルを編集しておきます。
HostNameのIPはqiita-severのプライベートIPアドレスを指定します。IdentityFileにはqiita-server作成時に指定したキーペアの「.pem」ファイルを指定します。
※「xx」及び「/xx/xx」の部分は各自の環境に合わせて変更してください。

~/.ssh/config
Host qiita-server
  HostName 172.25.xx.xx
  User ec2-user
  IdentityFile /xx/xx.pem

「.pem」ファイルのパーミッションを変更しておきます。
※「/xx/xx」の部分は各自の環境に合わせて変更してください。

chmod 0600 /xx/xx.pem

※SSH接続時に、以下のエラーが出るためです。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/xx/xx.pem' are too open.
It is required that your private key files are NOT accessible by others.

sshでqiita-server に接続してみましょう。

ssh qiita-server

インターネットの検索時はNATゲートウェイの固定IP「57.181.73.255」を利用していることが確認できました。またSSHを利用して非公開サーバーに接続ができています。
501.png

VPNの接続をOFFにすると、非公開サーバーである「qiita-server」への接続は失敗することを確認します。また、利用中のグローバルIPも当方の自宅のものに戻っています。
502.png

VPN接続時に、qiita-serverへの通信の流れと、インターネット検索時の通信の流れをイメージにすると以下のようになります。通信先が「0.0.0.0/0」の場合はNATゲートウェイを経由して外に出ることができ、通信先が「172.25.0.0/16」の場合は、local内からqiita-serverを見つけだすことができます。
503image.png

以上で、IAM Idenitity CenterでSSOできるユーザーを利用して、ClientVPN接続後、非公開サーバーへSSH接続できる環境構築完了です。

最後に

本記事で利用したリソースの中でいくつか作成したままだと料金がかかるものがありますので、削除忘れなどにご注意ください。
IAM Identity CenterとClientVPNを利用してみたい方への一助になれば幸いです。

参考文献

記事の作成にあたり、以下の情報が大変参考になりました。

・認証と認可に AWS SSO と AWS クライアント VPN を使用する
https://aws.amazon.com/jp/blogs/networking-and-content-delivery/using-aws-sso-with-aws-client-vpn-for-authentication-and-authorization/
・AWS SSO を用いた AWS Client VPN の認証と承認
https://aws.amazon.com/jp/blogs/news/using-aws-sso-with-aws-client-vpn-for-authentication-and-authorization/
・シングルサインオン (SAML 2.0 ベースのフェデレーション認証)
https://docs.aws.amazon.com/ja_jp/vpn/latest/clientvpn-admin/federated-authentication.html
・[AWS Client VPN] VPC を経由して固定のIPでインターネットへアクセスする
https://dev.classmethod.jp/articles/aws-client-vpn-with-static-ip/
・VPC の DNS 属性
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-dns.html#AmazonDNS

17
8
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
17
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?