「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>AKSをセキュアに利用するためのテクニカルリファレンス]] * 目次 [#i6b72ad0] #contents *環境 [#w097879b] **シェル [#r96cf259] -[[Azure Cloud Shell]] (Bash) からの作業を想定 -20分でタイムアウトしてしまうため、 --タイムアウトで、変数が失われてしまう。 --これを避けるため、パラメタ設定スクリプトを、 --[[テキスト・ファイル>#ta06f8f8]]などにコピーして残しておく。 --再開の際は、[[テキスト・ファイル>#ta06f8f8]]のスクリプトを再実行する。 **操作者の権限 [#i2ca26f6] 以下の権限を持つユーザで作業 -Ownerロール権限 -[[Azure Active Directory]]に対して[[SPN>Azure サービス プリンシパル]]を作成する権限 **その他 [#h2858ed5] ***アカウント [#r64cf9f2] 以下で固定になってるので、必要に応じて変更する。 -admin-username --admin-username azrefadmin -admin-password --admin-password "p&ssw0rdp&ssw0rd" ***[[F/WへのFQDN追加>AKSをセキュアに利用する構築デモ(コピペ用)#t9e6d1e3]] [#fd9723b4] ***...見つけ次第、書く。 [#l2bf54bc] *構成 [#k241e08b] **全体構成図 [#hb722c2e] [[AKS_TechnicalReference_v0.14(ppt).zip>https://nakama.blob.core.windows.net/mskk/2020_04_25_AKS_TechnicalReference_v0.14(ppt).zip]]に同梱のPPTから引用 #ref(無題.png,left,nowrap,全体構成図,60%) **ネットワーク構成 [#j8e5bc60] ***構成概要 [#g52607bf] [[コチラ>AKSをセキュアに利用するためのテクニカルリファレンス#h6e5b109]]の推奨設定と少々異なる([[プライベートAKSクラスタ>Azure Kubernetes Service (AKS)#m0c88b4a]]にする)。 -Azure CNI プラグインを利用した分離型 [[VNET>Azureの仮想ネットワーク]] 構成 -ARM API はプライベート化しない。 -Master API はプライベート化する。~ ([[プライベートAKSクラスタ>Azure Kubernetes Service (AKS)#m0c88b4a]]) -実行ノードも既存の[[VNET>Azureの仮想ネットワーク]]に配置する。 ※ サマリすると -ARM API以外は、プライベート化し、 -実行ノードの公開は、 --[[Azure Private Endpoint]]経由(イントラ公開) --DMZ経由(インターネット公開) となる。 ***入力経路 [#rd647b7a] インバウンド(イングレス -アプリ --イントラ公開~ [[Azure Private Endpoint]] → [[ILB(Internal Load Balancer)>Azure Load Balancer#p2404f03]] --インターネット公開~ [[Azure Application Gateway]] (DMZ) → [[Azure Private Endpoint]] → [[ILB(Internal Load Balancer)>Azure Load Balancer#p2404f03]] -保守アクセス --イントラ公開~ [[Azure Private Endpoint]] 方式 --インターネット公開~ [[Azure Bastion]] 方式 ***出力経路 [#v71f3c20] アウトバウンド(エグレス 以下の併用 -[[Azure Firewall]]:インターネット・アクセス -[[Azure Private Endpoint]]:Azureの他のサービスへのアクセス ***[[VNET>Azureの仮想ネットワーク]]・[[サブネット>Azureのサブネッティング]] [#l6d4f0a2] -[[オンプレ模倣環境>#w3d31a84]] -[[AKS 配置環境>#s8b3bd20]] **認証・認可 [#taee4d4f] 保守用端末を [[VNET>Azureの仮想ネットワーク]] 内に設置する想定。 ***Azureポータル, Azure CLI (ARM API) [#hccf0a02] プライベート化しない(既存のアクセス制限機能を想定) ***[[制御プレーン>AKSをセキュアに利用するためのテクニカルリファレンス#gcac2445]]の実行アカウント ([[SPN>Azure サービス プリンシパル]]) [#b8d47c5d] [[Managed ID 方式>AKSクラスタ作成・操作に必要な権限#i3b0bd60]]で作成する。 ***ダッシュボード, Kubernetes CLI (Master API) [#z56fa98b] -クラスタ管理者の[[kube config>AKSをセキュアに利用するためのテクニカルリファレンス#p6cdc458]]を使って、 -必要なら、追加でIPアドレス制限を想定 ***AKSユーザ・アプリからのリソース・アクセス [#f379ef3c] [[Secret機能>AKSユーザ・アプリからのリソース・アクセス#b3245666]]を使用 **基盤保守 [#g4364425] ***日次パッチ [#g4bcd917] -ノード VM は日次パッチ適用(既定で自動) -Kured をインストールして自動再起動させる。 ***オンデマンド [#g297ed91] 必要に応じて -[[制御プレーン>AKSをセキュアに利用するためのテクニカルリファレンス#n7feb42c]] -[[ノードプール>AKSをセキュアに利用するためのテクニカルリファレンス#n7feb42c]] バージョンアップを手動で実施。 **開発~デプロイ [#wfd95a03] [[VNET>Azureの仮想ネットワーク]] 内に本番用コンテナ・レジストリを配置するのみ~ ([[ACR(コンテナ・レジストリ)をプライベート化する。>Azure Kubernetes Service (AKS)#ja9f4fdf]]) *手順 [#o59fa2c7] https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md **[[準備作業>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#0-%E6%BA%96%E5%82%99%E4%BD%9C%E6%A5%AD]] [#qc8143b1] ***[[サブスクリプションの選択>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#%E3%82%B5%E3%83%96%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E9%81%B8%E6%8A%9E]] [#n722891b] ※ 必要に応じて、サブスクリプションの選択を行う。 ※ 「SUBSCRIPTION_NAMEは各自で書き換え」とのこと。 ※ 再開の際は、再実行([[テキスト・ファイル>#ta06f8f8]]へ)。 ***[[パラメタの設定>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF-%E3%81%AE%E8%A8%AD%E5%AE%9A]] [#ybb4fcbb] ※ 「NAME_PREFIXは各自で書き換え」とのこと。 ※ 再開の際は、再実行([[テキスト・ファイル>#ta06f8f8]]へ)。 ***[[Azure CLI拡張機能のインストール>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#az-%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E6%8B%A1%E5%BC%B5%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB]] [#qcfe77c9] ***[[AKS プレビュー機能のインストール>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#aks-%E3%83%97%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%E6%A9%9F%E8%83%BD%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB]] [#t6577ca4] ※ 「時間かかるので注意(20 分ぐらい)」とのこと。 **[[共通準備>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#1-%E5%85%B1%E9%80%9A%E6%BA%96%E5%82%99]] [#mbf85f6c] ***パラメタの設定 [#i5b6da65] 以下のパートのスクリプトを実行して、パラメタを設定 # Parameters ※ 再開の際は、再実行([[テキスト・ファイル>#ta06f8f8]]へ)。 ***リソース・グループの作成 [#v6f53a61] 以下のパートのスクリプトを実行 # Create Resouce Group -ログ用 az group create --name $RG_OPS --location $LOCATION -AKS環境用 az group create --name $RG_AKS --location $LOCATION -DMZ環境用 az group create --name $RG_DMZ --location $LOCATION -オンプレ模倣環境用 az group create --name $RG_ONP --location $LOCATION ***[[診断ログ>Azureの監視と管理#lf757ca0]]・ストレージの作成 [#f35eaa64] 以下のパートのスクリプトを実行 # Create Diagnostics Storage ※ インターネット・アクセス禁止オプションあり。 ***[[Log Analytics]] & [[Application Insights]] の作成 [#rb0b0ae8] 以下のパートのスクリプトを実行 # Create Log Analytics & AppInsights ※ [[Log Analytics]] は 90日ログ保持オプションあり。 ***サブスクリプションのアクティビティ・ログの有効化 [#we77d08c] 以下のパートのスクリプトを実行 # Enable Subscription Activity Logging ※ だが、現時点では UI から実施とのこと(動画も参考になる)。 -参考 --Azure Monitor での Azure アクティビティ ログの収集と分析 | Microsoft Docs~ https://docs.microsoft.com/ja-jp/azure/azure-monitor/platform/activity-log-collect **[[オンプレ模倣環境の作成>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#2-%E3%82%AA%E3%83%B3%E3%83%97%E3%83%AC%E6%A8%A1%E5%80%A3%E7%92%B0%E5%A2%83%E3%81%AE%E4%BD%9C%E6%88%90]] [#s5c0518d] -[[VNET>Azureの仮想ネットワーク]]にVMを新設して、そこをオンプレに見立てるということらしい。 -[[全体構成図>#hb722c2e]]には「OA環境サブスクリプション」と~ あるが、別サブスクリプションでなくても良い。 -多分、後述の、[[Bastionの作成>#a74a73b8]]手順で代替できる~ (が、Private Link、Private Endpoint等を試したいのでコチラを優先したい)。 -あと、[[Azure Private Endpoint]] 引き込みを行うので、~ 正確には、「[[オンプレ延伸>FgCF (Financial-grade Cloud Fundamentals)#aed3c834]]模倣環境」ではないだろうか? ***パラメタの設定 [#e47ddc2e] 以下のパートのスクリプトを実行して、パラメタを設定 # Parameters ※ 再開の際は、再実行([[テキスト・ファイル>#ta06f8f8]]へ)。 ***[[VNET>Azureの仮想ネットワーク]]・[[サブネット>Azureのサブネッティング]]の作成 [#w3d31a84] 以下のパートのスクリプトを実行 # Create Onpremise VNET -[[VNET>Azureの仮想ネットワーク]] ONP_VNET_NAME="${NAME_PREFIX}-onprem-vnet" ONP_VNET_ADDRESS_PREFIXES=10.0.0.0/16 ※ [[全体構成図>#hb722c2e]]と突合して、&color(red){サブネット構成を理解しておくと良い。}; -[[サブネット>Azureのサブネッティング]] --デフォルトのサブネット(VM用) ONP_VNET_SUBNET_DEF_NAME=Default ONP_VNET_SUBNET_DEF_ADDRESS_PREFIX=10.0.0.0/24 --[[Azure Private Endpoint]]用~ 外部のAzureサービスに接続するため。 ONP_VNET_SUBNET_IES_NAME=InternalEndpointSubnet ONP_VNET_SUBNET_IES_ADDRESS_PREFIX=10.0.250.0/24 ※ &color(red){IESじゃなくて、PES(PrivateEndpointSubnet)だね。}; ***VMの作成 [#o3bafede] 以下のパートのスクリプトを実行 # Create uservm1 (Public IP + Open RDP Port) ※ VM生成の[[Azure CLI]]スクリプトとして参考になる。~ [[パブリックIP作成、NIC作成を別で行っている>Azure上に素早く環境を構築する#r34348fb]](が特に意味はない模様)。 ※ オンプレの模倣ということで、Windows 10 を選択している? ※ Visual Studio のアクティブ・サブスクライバでない場合は、~ Windows 10 ではなく Windows Server 2019 を利用(ライセンスの関係らしい)~ 既定のスクリプトは、Windows 10になっているので、必要に応じて変更。 ※ 最後に「az vm open-port」でRDPポートを開けるオマケが付いているので注意。 **[[AKS 配置環境の準備>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#3-aks-%E9%85%8D%E7%BD%AE%E7%92%B0%E5%A2%83%E3%81%AE%E6%BA%96%E5%82%99]] [#y8ef1a98] ***パラメタの設定 [#r2212fa2] 以下のパートのスクリプトを実行して、パラメタを設定 # Variables ※ 再開の際は、再実行([[テキスト・ファイル>#ta06f8f8]]へ)。 ***[[VNET>Azureの仮想ネットワーク]]・[[サブネット>Azureのサブネッティング]]の作成 [#s8b3bd20] 以下のパートのスクリプトを実行 #Create VNET & Subnets -[[VNET>Azureの仮想ネットワーク]] AKS_VNET_NAME="${NAME_PREFIX}-aks-vnet" AKS_VNET_ADDRESS_PREFIXES=10.0.0.0/8 ※ [[全体構成図>#hb722c2e]]と突合して、&color(red){サブネット構成を理解しておくと良い。}; -[[サブネット>Azureのサブネッティング]] --保守端末用 AKS_VNET_SUBNET_MMS_NAME=ManagementSubnet AKS_VNET_SUBNET_MMS_ADDRESS_PREFIX=10.16.0.0/16 --[[ノードプール>AKSをセキュアに利用するためのテクニカルリファレンス#n7feb42c]]用 AKS_VNET_SUBNET_NPS_NAME=NodepoolSubnet AKS_VNET_SUBNET_NPS_ADDRESS_PREFIX=10.1.0.0/16 --内部インバウンド用~ ノードプールの内部公開用 AKS_VNET_SUBNET_IES_NAME=InternalEndpointSubnet AKS_VNET_SUBNET_IES_ADDRESS_PREFIX=10.11.0.0/16 ※ &color(red){シェルではなく*.yamlから利用}; --[[Azure Private Endpoint]]用~ 外部のAzureサービスに接続するため。 AKS_VNET_SUBNET_PES_NAME=PrivateEndpointSubnet AKS_VNET_SUBNET_PES_ADDRESS_PREFIX=10.15.0.0/16 --[[Azure Private Link]]サービス用~ オンプレ模倣環境から接続するため。 AKS_VNET_SUBNET_PLS_NAME=PrivateLinkServiceNatSubnet AKS_VNET_SUBNET_PLS_ADDRESS_PREFIX=10.12.0.0/16 --[[Azure Firewall]]用(インターネット・アクセス) AKS_VNET_SUBNET_FWS_NAME=AzureFirewallSubnet AKS_VNET_SUBNET_FWS_ADDRESS_PREFIX=10.31.0.0/16 ※ &color(red){使っていない?}; --[[Azure Bastion]]用 AKS_VNET_SUBNET_BTS_NAME=AzureBastionSubnet AKS_VNET_SUBNET_BTS_ADDRESS_PREFIX=10.30.0.0/16 ※ &color(red){使っていない?}; >※ [[ノードプール>AKSをセキュアに利用するためのテクニカルリファレンス#n7feb42c]]のIP消費が多いので、~ /16でサブネッティングしているとの事。 >※ しれっと、VNETの「az monitor diagnostic-settings create」をしている。 ***周辺サービスの作成と引き込み [#nf0b7bbb] -[[ACR>AKSをセキュアに利用するためのテクニカルリファレンス#zbb28090]] の作成と [[Azure Private Endpoint]] 引き込み -[[ACR>Azure Container Registry]] の作成と [[Azure Private Endpoint]] 引き込み --[[ACR>AKSをセキュアに利用するためのテクニカルリファレンス#zbb28090]] の作成~ --[[ACR>Azure Container Registry]] の作成~ 以下のパートのスクリプトを実行 # Create ACR ※ [[Azure Private Endpoint]] 引き込みをサポートするPremiumのskuを使用。~ ※ インターネットアクセス禁止、[[Subscription Activity Logging>#we77d08c]]の出力先を指定 --[[Azure Private Endpoint]] 引き込み~ 以下のパートのスクリプトを実行 # Create PrivateLink to ACR ... # azrefarcacr... の A レコード作成 ※ ココのスクリプトはPreviewなので変更の可能性アリとのこと → 特にDNS弄る所。~ ※ 動画ではポータルから行っていると見せかけ、確定ボタン押下せず、スクリプトは流している。 -[[Azure SQL Database]] 作成と [[Azure Private Endpoint]] 引き込み --[[Azure SQL Database]] 作成~ ... ※ よくよく見ると、DBを作ってない(コロナ"COVID-19"の影響だということ)。~ 最終的には、以下の接続文字列でアクセス可能な[[SQL Server]]が必要になる。~ jdbc:sqlserver://azrefarc.database.windows.net:1433;databaseName=pubs --[[Azure Private Endpoint]] 引き込み~ 以下のパートのスクリプトを実行 # Service Endpoint for SQL DB ※ マネージド・インスタンスは、[[Azure Private Endpoint]] が使えない~ らしいので [[Azure Service Endpoint]] を利用する(と言うエクスキューズがある)。~ ※ 本来、[[コチラの手順>Azure Private Link#j1ec3c2f]]が参考になったハズ。~ -参考 --[[Azure SQL Databaseをプライベート化する。]] --[[ACR(コンテナ・レジストリ)をプライベート化する。]] ***[[Azure Firewall]]の作成 [#d721831d] -[[Azure Firewall]]の作成 # Create Azure Firewall -[[UDR>Azureの仮想ネットワーク#e8a3a7cc]]の設定~ 以下のパートのスクリプトを実行 # Create UDR and assign UDR ※ 既定の[[UDR>Azureの仮想ネットワーク#e8a3a7cc]]として、「AKS_UDR_NAME」を作成、~ インターネット(0.0.0.0/0)への通信を[[Azure Firewall]]にルーティング -ルールの作成~ 以下のパートのスクリプトを実行 # Create Firewall Rules --プライベートAKSクラスタの要件~ 以下のパートのスクリプトを実行 # Required for private AKS cluster az network firewall application-rule create... ※ 前述の既定の[[UDR>Azureの仮想ネットワーク#e8a3a7cc]](AKS_UDR_NAME)をノードプールのサブネットに適用する。~ ※ その他、[[MCR>AKSをセキュアに利用するためのテクニカルリファレンス#u4a1c468]]へのアクセスとか、云々、コレはMSに聞いたほうがいい感じやね。 --Azure での Linux VM の時刻同期~ 以下のパートのスクリプトを実行 # ntp.ubuntu.com -> * az network firewall network-rule create... --プライベートAKSクラスタのオプション~ 以下のパートのスクリプトを実行 # Optional for AKS cluster az network firewall application-rule create... --ContainersのAzure Monitor~ 以下のパートのスクリプトを実行 # Azure Monitor for containers az network firewall application-rule create... --AKSクラスタの[[Azure Policy]]~ 以下のパートのスクリプトを実行 # Azure Policy for AKS clusters (preview, subject to be changed) az network firewall application-rule create... >※ ルールの作成には、かなり時間がかかるらしい(10分ぐらい)。 ***他によく必要になる URL [#e9101111] -AKS ツール --download.opensuse.org --packages.microsoft.com --dc.services.visualstudio.com --*.opinsights.azure.com --*.monitoring.azure.com --gov-prod-policy-data.trafficmanager.net --apt.dockerproject.org --nvidia.github.io -OS update --download.opensuse.org --*.ubuntu.com --packages.microsoft.com --snapcraft.io,api.snapcraft.io **[[保守端末の準備>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#4-%E4%BF%9D%E5%AE%88%E7%AB%AF%E6%9C%AB%E3%81%AE%E6%BA%96%E5%82%99]] [#i3e20909] ***管理マシン(Windows)の作成 [#t74fd3eb] オンプレから接続する踏み台VM相当。 -パラメタの設定~ 以下のパートのスクリプトを実行して、パラメタを設定 # Parameters ※ 再開の際は、再実行([[テキスト・ファイル>#ta06f8f8]]へ)。 -[[UDR>Azureの仮想ネットワーク#e8a3a7cc]]の設定~ 以下のパートのスクリプトを実行 # UDR でルートを塞ぐ ※ 前述の既定の[[UDR>Azureの仮想ネットワーク#e8a3a7cc]](AKS_UDR_NAME)を指定。 -[[ILB, NIC>Azure Load Balancer#p2404f03]] の作成~ 以下のパートのスクリプトを実行 # ILB 配下に VM を作成 # NIC を先に作成(IP アドレスを確定させる) ※ 後で、[[Azure Private Link]]を作成するので、ILB → NICと作成するのがポイント。 -[[Azure Firewall]]の設定~ 以下のパートのスクリプトを実行 # Azure Firewall ルールで Windows Update などを許可 # Azure Firewall ルールで) Azureポータル(を許可 ※ 同様に、ルールの作成には、かなり時間がかかるらしい(10分ぐらい?)。 -VM の作成~ 以下のパートのスクリプトを実行 # VM 作成 (Windows 2019) # Create mgmt-win-vm1 ※ オンプレ(模倣)環境ではない、Azure環境ということで、コチラは、2019か。~ しかし、踏み台VMにサーバーOSって、やっぱり高額になるのでは?と、少々、心配。 -[[Azure Private Link]], [[Azure Private Endpoint]] の作成~ 以下のパートのスクリプトを実行 # Private Link Service 作成 # Create Private Endpoint to MgmtVM ILB ※ [[コチラの手順>Azure Private Link#j1ec3c2f]]が参考になる。 -ツールのインストール~ Windows上で環境を構築する。接続先のアドレスは、~ mgmt-win-vm1-ilb の [[Azure Private Endpoint]]で確認可能。 --AKSのバージョンを確認~ 以下のパートのスクリプトを実行 # Cloud Shell 上でインストールする aks バージョンを確認しておく --[[Azure CLIをインストールしてログイン>Azure CLI]] --先に取得したバージョン番号に対応する kubectl を ---az aks install-cliコマンドでバージョンを指定して実行すると、~ .azure-kubectl フォルダ下にダウンロードされるので、 >az aks install-cli --client-version=1.16.7 ・このファイルをコピーする。 >copy %HOMEPATH%\.azure-kubectl\kubectl.exe %HOMEPATH%\kubectl.exe ・または、フィアルへのパスを通す。 ... ---または、~ ・下記 URL からダウンロードし~ https://storage.googleapis.com/kubernetes-release/release/v1.16.8/bin/windows/amd64/kubectl.exe~ ・%HOMEPATH% 下へコピー~ https://v1-16.docs.kubernetes.io/ja/docs/tasks/tools/install-kubectl/~ https://v1-16.docs.kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-windows~ --Helm(v3 系列)をインストール ---下記 URL からダウンロード(持ち込み)~ https://get.helm.sh/helm-v3.1.2-windows-amd64.zip ---%HOMEPATH% 下へコピー~ helm.exe を mgmtvm1 の c:\users<username> にコピー --VS Code ---下記 URL からダウンロード(持ち込み)~ https://code.visualstudio.com/download ---オフラインインストーラでインストール --Microsoft Edge(Chromium 版) ---下記 URL からダウンロード(持ち込み)~ https://www.microsoft.com/en-us/edge/business/download ---オフラインインストーラでインストール >※ 「持ち込み」となっているモノは、[[Azure Firewall]]で設定していないもの。 ***管理マシン(Linux)の作成 [#v8603bfc] 踏み台VMから接続し、アプリのビルドや、Dockerコンテナ作業を行う。 -パラメタの設定~ 以下のパートのスクリプトを実行して、パラメタを設定 # Parameters ※ 再開の際は、再実行([[テキスト・ファイル>#ta06f8f8]]へ)。 -[[UDR>Azureの仮想ネットワーク#e8a3a7cc]]の設定~ 以下のパートのスクリプトを実行 # UDR でルートを塞ぐ ※ 前述の既定の[[UDR>Azureの仮想ネットワーク#e8a3a7cc]](AKS_UDR_NAME)を指定。 -NICの作成~ 以下のパートのスクリプトを実行 # NIC を先に作成(IP アドレスを確定させる) ※ こちらは、[[Azure Private Link]]を構成しないので、[[ILB>Azure Load Balancer#p2404f03]]は不要。 -[[Azure Firewall]]の設定~ 以下のパートのスクリプトを実行 # Azure Firewall ルールで通信を許可 ※ コチラは、JavaのビルドやDocker操作があるので、ソレ用に穴をあける。~ ※ 同様に、ルールの作成には、かなり時間がかかるらしい(10分ぐらい?)。 -VM の作成~ 以下のパートのスクリプトを実行 # Create mgmt-linux-vm1 (Ubuntu) -ツールのインストール~ Linux上で環境を構築する。 --0. VM にログイン~ Windows 保守端末 からログインする。 ssh mgmt-linux-vm1 --1. Azure CLIのインストール~ https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli-apt?view=azure-cli-latest curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash --2. kubectl インストール~ https://v1-16.docs.kubernetes.io/ja/docs/tasks/tools/install-kubectl/ sudo apt-get update && sudo apt-get install -y apt-transport-https curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubectl --3. Docker インストール sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update sudo apt-get install -y docker-ce sudo docker version --4. Helm インストール sudo apt-get update sudo apt-get install snapd sudo snap install helm --classic --[[Azure CLI]]の補足 ---ログイン、~ Windowsだと、 Loopback Interface Redirectionだが、~ SSH端末だと、OAuth 2.0 Device Authorization Grantになる。 ---必要に応じて、[[サブスクリプションの選択>#n722891b]]を行う。 ***[[Bastionの作成>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#4-c-%E5%8F%82%E8%80%83-bastion-%E4%BD%9C%E6%88%90-%E6%99%82%E9%96%93%E3%81%8C%E3%81%8B%E3%81%8B%E3%82%8B]] [#a74a73b8] [[オンプレ模倣環境の作成>#s5c0518d]]をスキップできる。 -パラメタの設定~ 以下のパートのスクリプトを実行して、パラメタを設定 BASTION_NAME="${NAME_PREFIX}-bastion" BASTION_PUBLIC_IP_NAME="${BASTION_NAME}-ip" ※ 再開の際は、再実行([[テキスト・ファイル>#ta06f8f8]]へ)。 -[[Azure Bastion]]の作成~ 以下のパートのスクリプトを実行 az network public-ip create --name $BASTION_PUBLIC_IP_NAME --resource-group $RG_AKS --sku Standard az network bastion create --name $BASTION_NAME --public-ip-address $BASTION_PUBLIC_IP_NAME --resource-group $RG_AKS --vnet-name $AKS_VNET_NAME --location $LOCATION >※ 結構、時間がかかる。 -利用方法は、VMの接続メニューに、RDP、SSHに加え、~ Bastionが追加されているのでコレを選択して利用する。 **[[AKS クラスタの作成と設定>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#5-aks-%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%81%AE%E4%BD%9C%E6%88%90]] [#f6298299] ***パラメタの設定 [#i3448515] 以下のパートのスクリプトを実行して、パラメタを設定 # Parameters ※ 再開の際は、再実行([[テキスト・ファイル>#ta06f8f8]]へ)。 ***AKS クラスタの作成 [#s0ea95d7] -(必要に応じて)サービスプリンシパル作成~ [[Managed ID>Azure Managed ID]]を選択するので実施しない(既定値)。 -(必要に応じて)非プライベートクラスタ用経路作成~ プライベート・クラスタを選択するので実施しない(既定値)。 -AKS クラスタの作成~ 以下のパートのスクリプトを実行 # Create AKS Cluster ============================================== ... # Prepare for creating cluster ... # Create AKS Cluster ※ 時間がかかる az aks create ...既定値なら、既定のオプションでOK... ... # VNET に対する Contributor 権限を与える(VNET が管理リソースグループの外にあるため) # Managed ID 方式の場合 ... # End of Create AKS Cluster ============================================== ※ コレは、[[ココ>AKSクラスタ作成・操作に必要な権限#db6b9d7e]]の話。 ***AKS の設定 [#t3e95a42] -ACR との接続~ -[[ACR>Azure Container Registry]] との接続~ 以下のパートのスクリプトを実行 # Configure ACR for connecting from AKS ※ コレは、[[ココ>Azure サービス プリンシパル#e9e4c0d9]]の話。~ ※ 2~3分かかるらしい。 -Azure Monitor の有効化~ 以下のパートのスクリプトを実行 # Azure Monitor for AKS 有効化 ... ※ 数分、時間がかかる。 -診断設定の有効化~ 以下のパートのスクリプトを実行 # AKS 診断設定の有効化 ... ※ 数分、時間がかかる。 **[[アプリのビルドとデプロイ>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#6-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E9%85%8D%E7%BD%AE]] [#f3b622a9] ***kubectl/kubeconfig の準備 [#jc45f7bc] -uservm1 > mgmt-win-vm1, mgmt-linux-vm1 へのログイン -~/.kube/config ファイルの取得とコピー(非 admin, admin の 2 種類) --[[6-a. mgmt-win-vm1 上で作業>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#6-b-mgmt-linux-vm1-%E4%B8%8A%E3%81%A7%E4%BD%9C%E6%A5%AD]] --[[6-b. mgmt-linux-vm1 上で作業>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#6-b-mgmt-linux-vm1-%E4%B8%8A%E3%81%A7%E4%BD%9C%E6%A5%AD]] ※ .kubeに、configとadmin-configファイルが作成される。~ 既定では、configが利用される(必要に応じて切り替える)。 ***コンテナ・イメージの作成 [#j8b4ecf1] [[AKS_TechnicalReference_v0.14(ppt).zip>https://nakama.blob.core.windows.net/mskk/2020_04_25_AKS_TechnicalReference_v0.14(ppt).zip]]に同梱の~ 構築サンプルアプリ.zipを mgmt-windows-vm1 に持ち込んで作業する。 -ビルドできるように[[Azure Firewall]]に穴をあける。 --[[6-d. Cloud Shell 上で実施>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#6-d-cloud-shell-%E4%B8%8A%E3%81%A7%E5%AE%9F%E6%96%BD]] -ファイルを mgmt-linux-vm1 に scp で転送し、~ mgmt-linux-vm1 でコンテナをビルドし、作成したコンテナ・イメージを~ コンテナ・レジストリにプッシュ(2 つのバージョンをプッシュ) --[[6-e. mgmt-windows-vm1 上で実施>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#6-e-mgmt-windows-vm1-%E4%B8%8A%E3%81%A7%E5%AE%9F%E6%96%BD]] ***アプリのデプロイ [#zdb0da67] YAML ファイルを作成し、kubectl apply を実行し、~ コンテナ・イメージのデプロイ展開を確認する。~ 最後に、コンテナ・イメージを切り替える。~ (ダッシュボードの表示も行う) -[[6-f. アプリの配置>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#6-f-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E9%85%8D%E7%BD%AE]] ※ コンテナ・イメージの~ レジストリ名(先頭)とタグ名(末尾)~ の部分は必要に応じて変更する。 ※ DBアクセスは動かなくても確認はできる。~ DBアクセスをテストするなら、[[コチラで言及されているSQL DB>#nf0b7bbb]]を作成。 手順としては、(...後でどこかに書くか) **[[オンプレ模倣環境から AKS アプリへの接続>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#7-%E3%82%AA%E3%83%B3%E3%83%97%E3%83%AC%E6%A8%A1%E5%80%A3%E7%92%B0%E5%A2%83%E3%81%8B%E3%82%89-aks-%E3%82%A2%E3%83%97%E3%83%AA%E3%81%B8%E3%81%AE%E6%8E%A5%E7%B6%9A]] [#u8505db2] ***AKS ILB に対する Private Link Service の作成 [#u85b7a55] 以下のパートのスクリプトを実行 # AKS ILB に対する Private Link Service の作成 ***AKS ILB への Private Endpoint の作成 [#g631313b] 以下のパートのスクリプトを実行 # Create Private Endpoint to AKS **[[インターネットからの接続>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#8-%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%8B%E3%82%89%E3%81%AE%E6%8E%A5%E7%B6%9A]] [#i43bee2c] ***パラメタの設定 [#xfbb1a53] 以下のパートのスクリプトを実行して、パラメタを設定 # Parameters ※ 再開の際は、再実行([[テキスト・ファイル>#ta06f8f8]]へ)。 ***DMZ VNET の作成 [#y114c9c2] 以下のパートのスクリプトを実行 # Create VNET and Subnets ***AKS ILB への Private Endpoint の作成 [#nbeddae0] 以下のパートのスクリプトを実行 # Create AKS Private Endpoint ***Application Gateway の作成 [#g4c99b7e] 以下のパートのスクリプトを実行 # Create AppGateway ... # Private Endpoint の IP アドレスを取得 ... # AppGw 作成 ※ 時間がかかる ***可用性テストの作成 [#qfae28c3] 「URL の Ping テスト」を構成する。 ※ 現時点では UI から実施とのこと(動画も参考になる)。~ ※ az コマンドではできない (ARM テンプレートのみ可) -参考 --Microsoft Docs ---Web サイトの可用性と応答性の監視~ https://docs.microsoft.com/ja-jp/azure/azure-monitor/app/monitor-web-app-availability ---Resource Manager テンプレートでのメトリック アラートの作成~ 可用性テスト用のテンプレートとメトリック アラート~ https://docs.microsoft.com/ja-jp/azure/azure-monitor/platform/alerts-metric-create-templates#template-for-an-availability-test-along-with-a-metric-alert **[[ノード自動再起動>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#9-%E3%83%8E%E3%83%BC%E3%83%89%E8%87%AA%E5%8B%95%E5%86%8D%E8%B5%B7%E5%8B%95]] [#l2b5181b] Kured による VM のリブートで自動更新を取り込むAKS のアップグレード ***経路の解放 [#id240e90] 以下のパートのスクリプトを実行 -VMからgcr(Google コンテナ・レジストリ) # Kured インストールに必要な FQDN の解放 ... -実行ノードからgcr(Google コンテナ・レジストリ) # AKS ノードがコンテナを取得するために必要な経路の解放 ... ※ Kured は、Helmを使用して、gcr経由で配布するらしい。~ ※ なお、この作業は、保守端末からではなく、~ [[Azure Cloud Shell]] (Bash) か、[[Azure CLI]]で行う。 ***Helmでインストール [#ieb33038] 以下のパートのスクリプトを実行 # mgmt-linux-vm1 または mgmt-win-vm1 上から Kured をインストール ※ この作業は、Windows or Linuxの保守端末上、どちらでもOK。 **[[モニタリング(監視)>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#10-%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%E7%9B%A3%E8%A6%96]] [#u74329e5] ***モニタリングツールの確認 [#h4d8334c] -[[Azure Monitor]] k8s Insights -k8s ダッシュボード~ live data は実行ノードと直接通信できるところ~ =mgmt-windows-vm1 上からでしか確認できない。 ***Pod 操作履歴 [#v72da782] kubectl rollout history で確認できる。 >kubectl rollout history deployment.v1.apps/web --namespace azrefarc-springboot deployment.apps/web REVISION CHANGE-CAUSE 1 <none> 3 <none> 4 <none> >kubectl rollout history deployment.v1.apps/web --namespace azrefarc-springboot --revision=4 deployment.apps/web with revision #4 Pod Template: *切り分け [#n60154f3] -うーん、動かないですね。 -色々、切り分けの戦略を立てよう。 **Javaアプリ [#l3c5f53f] -そもそもDB作ってないので、初期化でDB接続してコケてたりしないか?と。 -もっと簡単な、HTMLを表示するダケのコンテナ・イメージを作成して、 -それを、*.yamlの image: ***azrefarc7aksacr.azurecr.io/azrefarc.springboot:1*** と差し替えたら、良いのでは?と。 -手頃なモノを探していたら、以下を発見。 --docker+Node.js(Express)の最小構成プロジェクトを作成する - Qiita~ https://qiita.com/ryo-ohnishi/items/b54e649b14b51694ef77 >詳しい手順は[[コチラ>AKSをセキュアに利用する構築デモ(コピペ用)#lfb210f2]]に書く。 **Firewall外し [#ta823b80] -なんとなく、[[Azure Firewall]]が悪さしている気もした。 -実際、 --[[コチラ>AKSをセキュアに利用する構築デモ#fd9723b4]]の様なケースもあったし、 --[[Javaアプリ>#l3c5f53f]]を、[[voting-app>Azure Kubernetes Service (AKS)#c7683828]]に変更したときも、~ 「registry-1.docker.io」を別途、追加したりした。 -と言う事で、以下のように実行~ ...と言うのも、プライベートAKSクラスタ作成で、~ 「An existing route table has not been associated with NodepoolSubnet.~ Please update the route table association」などと言いよるので。 --実行方法 # Create UDR and assign UDR ---Firewallの作成は、通常通り実行する。 # Create Azure Firewall ---ルーティングの変更も、通常通り実行する。~ 良く解って無いが、以下が、AKS_VNET全体に適用される模様。 # Create UDR and assign UDR ... # UDR でルートを塞ぐ ... ---ルールの作成に関しては、[[ガバガバ版>AKSをセキュアに利用する構築デモ(コピペ用)#ce13e773]]に変更して実行する。 # Create Firewall Rules ... # Azure Firewall ルールで ... などを許可 ... **保守端末 [#o5cf99dd] -1つはゴリゴリのWindows開発環境([[Docker Desktop for Windows]])にしてしまう。 -[[Azure Firewall]]を作っても、ココだけ[[Firewallをガバガバに設定>#ta823b80]]可能。 -ローカルで、Dockerビルドして、動作確認したモノを、迅速に[[ACR>AKSをセキュアに利用するためのテクニカルリファレンス#zbb28090]]にプッシュ。 -ローカルで、Dockerビルドして、動作確認したモノを、迅速に[[ACR>Azure Container Registry]]にプッシュ。 *検討事項 [#p1fe10e0] 最後に >「コレ以外にも、下も検討が必要です」 と言う話があったが、 >「(疲れたので、)もうエエわ」 と言う感想(暫く休ませて下さい)。 **HTTPS化やWAFの導入 [#l0a54701] **[[Azure Active Directory]]認証統合 [#gbcd98d1] -[[AKS Master APIにAzAD認証を統合する。]] -...その他、アプリの認証の検討も必要... **[[K8s>Azure Kubernetes Service (AKS)#x4a72daa]]の機能活用 [#j94f00bd] **[[CI/CD]]のワークフロー化 [#la16e1f4] -[[CI/CD パイプライン]]と言われるが、 -実は、[[コンテナのチェーン]]だと思う。 *終わりに [#h989f86d] **結果 [#p70dd76f] 一部、未達があるが、~ 一通り動かすことが出来た。 **感想 [#b80fc51a] このハンズオン?をやってみた感想については、 -[[コチラ(検討事項)>#p1fe10e0]] -[[コンテナのチェーン]] -[[開発基盤部会 Blog>#g81e9e9e]] などを、ご参照下さい。 **未達部 [#x06340da] -以下、機会があればやりたいです。 --一部、アウトバウンドが[[ガバガバ設定>#ta823b80]] --アプリは結局、Javaではなく[[voting-appを>#l3c5f53f]]使った。 --外部RDBを使用するケースを試せていない。 -後は、シェル流をしながら「なるほど、冪等性」と思ったので、~ 「[[クラウド・インフラ自動化]]」の辺りにもチャレンジしたいと思っています。 *お土産のシェル [#a9ba18b6] **再開用のシェル [#ta06f8f8] 動画で「テキスト・ファイルに保持しておいて。」と言ってたアレ。 -&color(red){XXXXXXXXX};は置換して利用。 -★は、コピー後、消す行のマーカー ***★初期化パラメタ [#ecb71389] -★サブスクリプション --★BASH用 SUBSCRIPTION_NAME=XXXXXXXXX az account set -s "$SUBSCRIPTION_NAME" SUBSCRIPTION_ID=$(az account show -s "$SUBSCRIPTION_NAME" --query id -o tsv) --★CMD用 SET SUBSCRIPTION_NAME=XXXXXXXXX az account set -s %SUBSCRIPTION_NAME% FOR /F "usebackq" %i IN (`az account show -s "%SUBSCRIPTION_NAME%" --query id -o tsv`) DO SET SUBSCRIPTION_ID=%i -★プレフィックス、ロケーション --★BASH用 NAME_PREFIX=daisukenishino LOCATION=japaneast --★CMD用 SET NAME_PREFIX=daisukenishino SET LOCATION=japaneast ***★準備 [#x2449c83] -★リソースグループ準備 RG_OPS="${NAME_PREFIX}-ops-rg" RG_AKS="${NAME_PREFIX}-aks-rg" RG_DMZ="${NAME_PREFIX}-dmz-rg" RG_ONP="${NAME_PREFIX}-onprem-rg" -★ログの準備1 DIAG_STORAGE_NAME="${NAME_PREFIX}aksdiag" DIAG_LA_WS_NAME="${NAME_PREFIX}-aks-laws" DIAG_AI_APP_NAME="${NAME_PREFIX}-aks-ai" -★ログの準備2 DIAG_STORAGE_ID=$(az storage account show --name $DIAG_STORAGE_NAME --query id -o tsv) DIAG_LA_WS_GUID=$(az monitor log-analytics workspace show --workspace-name $DIAG_LA_WS_NAME --resource-group $RG_OPS --query customerId -o tsv) DIAG_LA_WS_ID=$(az monitor log-analytics workspace show --workspace-name $DIAG_LA_WS_NAME --resource-group $RG_OPS --query id -o tsv) DIAG_LA_WS_KEY=$(az monitor log-analytics workspace get-shared-keys --workspace-name $DIAG_LA_WS_NAME --resource-group $RG_OPS --query primarySharedKey -o tsv) ***★環境構築 [#b588803a] -★オンプレ模倣環境 ONP_VNET_NAME="${NAME_PREFIX}-onprem-vnet" ONP_VNET_ADDRESS_PREFIXES=10.0.0.0/16 ONP_VNET_SUBNET_DEF_NAME=Default ONP_VNET_SUBNET_DEF_ADDRESS_PREFIX=10.0.0.0/24 ONP_VNET_SUBNET_IES_NAME=InternalEndpointSubnet ONP_VNET_SUBNET_IES_ADDRESS_PREFIX=10.0.250.0/24 -★AKS環境 AKS_VNET_NAME="${NAME_PREFIX}-aks-vnet" AKS_VNET_ADDRESS_PREFIXES=10.0.0.0/8 AKS_VNET_SUBNET_PES_NAME=PrivateEndpointSubnet AKS_VNET_SUBNET_PES_ADDRESS_PREFIX=10.15.0.0/16 AKS_VNET_SUBNET_PLS_NAME=PrivateLinkServiceNatSubnet AKS_VNET_SUBNET_PLS_ADDRESS_PREFIX=10.12.0.0/16 AKS_VNET_SUBNET_IES_NAME=InternalEndpointSubnet AKS_VNET_SUBNET_IES_ADDRESS_PREFIX=10.11.0.0/16 AKS_VNET_SUBNET_NPS_NAME=NodepoolSubnet AKS_VNET_SUBNET_NPS_ADDRESS_PREFIX=10.1.0.0/16 AKS_VNET_SUBNET_FWS_NAME=AzureFirewallSubnet AKS_VNET_SUBNET_FWS_ADDRESS_PREFIX=10.31.0.0/16 AKS_VNET_SUBNET_BTS_NAME=AzureBastionSubnet AKS_VNET_SUBNET_BTS_ADDRESS_PREFIX=10.30.0.0/16 AKS_VNET_SUBNET_MMS_NAME=ManagementSubnet AKS_VNET_SUBNET_MMS_ADDRESS_PREFIX=10.16.0.0/16 ACR_NAME="${NAME_PREFIX}aksacr" FW_NAME="${NAME_PREFIX}-aks-fw" FW_PUBLIC_IP_NAME="${FW_NAME}-ip" FW_IP_CONFIG="${FW_NAME}-config" AKS_UDR_NAME="${NAME_PREFIX}-udr" -★保守環境 --★Windows端末 MGMT_WIN_VM_NAME=mgmt-win-vm1 MGMT_WIN_VM_NIC_NAME="${MGMT_WIN_VM_NAME}-nic" MGMT_WIN_VM_ILB_NAME="${MGMT_WIN_VM_NAME}-ilb" --★Linux端末 MGMT_LINUX_VM_NAME=mgmt-linux-vm1 MGMT_LINUX_VM_NIC_NAME="${MGMT_LINUX_VM_NAME}-nic" --★[[Azure Bastion]] BASTION_NAME="${NAME_PREFIX}-bastion" BASTION_PUBLIC_IP_NAME="${BASTION_NAME}-ip" -★AKSクラスタ AKS_SP_NAME="${NAME_PREFIX}-aks-sp" AKS_CLUSTER_NAME="${NAME_PREFIX}-aks" AKS_SERVICE_CIDR=10.10.0.0/16 AKS_DNS_SERVICE_IP=10.10.0.10 -★DMZ環境 DMZ_VNET_NAME="${NAME_PREFIX}-dmz-vnet" DMZ_VNET_ADDRESS_PREFIXES=10.0.0.0/16 DMZ_VNET_SUBNET_AGW_NAME=AppGwSubnet DMZ_VNET_SUBNET_AGW_ADDRESS_PREFIX=10.0.0.0/24 DMZ_VNET_SUBNET_IES_NAME=InternalEndpointSubnet DMZ_VNET_SUBNET_IES_ADDRESS_PREFIX=10.0.250.0/24 **[[コピペ用シェル>AKSをセキュアに利用する構築デモ(コピペ用)]] [#u2ebb941] *参考 [#r7d2f9fc] **[[テクニカルリファレンス中の...>AKSをセキュアに利用するためのテクニカルリファレンス#icc83da1]] [#g9f9b38f] -https://github.com/tsubasaxZZZ/aks-hardway --https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md **OSSC > 開発基盤部会 Blog [#g81e9e9e] -セキュアなプライベートAKS構築が出来たので報告。~ https://www.osscons.jp/jo64zcvfj-537/ ---- Tags: [[:クラウド]], [[:コンテナ]], [[:Azure]], [[:AKS]], [[:IaC]], [[:セキュリティ]], [[:通信技術]], [[:セキュリティ]], [[:認証基盤]]