てんこ

ブログ名は愛猫(てん)の愛称です。中身は個人のIT系学習記録です。

Ansible自動化の実践記事一覧

Ansible自動化の実践記事インデックスです。

まだ記事ないものも、枠だけ作っておきます。

Windows

AnsibleでWindowsUpdateをやってみた。 - てんこ

AnsibleでのWindowsUpdateその2 - てんこ

AnsibleからのWindows操作をSSHにしてみた - てんこ

Linux

AnsibleでMineMeldをインストールしてみた - てんこ

AnsibleでHinemosをインストールしてみた。 - てんこ

Network系

A10 Neworks

AnsibleでA10のvThunderをいじってみた - てんこ

Fortios

AnsibleでFortigate(Fortiosモジュール)を触りはじめてみた - てんこ

AnsibleでFortigateのポリシーを設定してみた(その1) - てんこ

AnsibleでFortigateのポリシーを設定してみた(その2) - てんこ

AnsibleでFortigateの情報取得モジュール(fortios_facts)を試してみた。 - てんこ

AnsibleでFortigateのhttpapi利用がうまくいっていない話→Python3に上げたら解消! - てんこ

AnsibleでFortigateのポリシー情報をGETしてみた - てんこ

AnsibleでFortigateのオブジェクト情報をGETしてみた(汎用版) - てんこ

AnsibleでFortigateのConfigをバックアップしてみた。 - てんこ

AnsibleでFortigateをファームアップしてみた - てんこ

AnsibleでFortigateのHA構成を組んでみた。 - てんこ

AnsibleでFortigateのLB機能を使ってみた - てんこ

AnsibleでFortigateのSSL/SSHプロファイルを設定してみた【不具合あり】 - てんこ

ハイパーバイザー(Esxi)などIaaS寄り系

クラウド

Ansible本体系

ansible 2.10.0b1を #tekunabe で触ってみたメモ - てんこ

CI/CD系

その他(ラボ環境やら雑多なもの)

自宅ラボ用にNUCを買いました。 - てんこ

Ansibleもくもく会リモート参加の手引き - てんこ

Ansiblejpネットワーク部でLTをしてきました。 - てんこ

【最新】Ansibleもくもく会リモート参加の手引き_20200609_v2.xlsx - てんこ

Ansible Night オンライン!2020.06に参加しました。 - てんこ

AnsibleでWindowsUpdateをやってみた。

Ansible解禁して一発目はこれ、と決めていたので、WindowsUpdateをやってみたお話を書きます。

Ansible関連の実践記事一覧はこちら。

Ansible自動化の実践記事一覧 - てんこ


目的

Windowsのセットアップや運用で必ず通る、アップデートをAnsibleで実施する方法を理解するため

環境

共通

下記のホストはすべてVirtual Box上の仮想マシンで実施。

Ansible側

項目
OS CentOS Linux release 7.6.1810 (Core)
ansible 2.8.5
python 2.7.5

Pythonのサポートの話は認識はしてますが、とりあえず手元にあった環境で実験。

Ansibleのインストールは、まずはyumで導入しました。

ansible.cfgについては、-vを付けた時の出力形式が好みだったので、以下の設定だけ実施しています。

stdout_callback = unixy

操作対象側Windows

両方とも、評価版でISOから手動でポチポチとインストール。

接続方法

今回は、実績も文献も多いWinRMを選択しています。

Windowsを操作するための初期設定

Ansible側

セットアップは以下のサイト(以下公式ガイド)を参照しながら実施。

Windows Remote Management — Ansible Documentation

WinRMのPython用のモジュールの導入

公式ガイド通り、pipにてpywinrmをインストール。

pip install "pywinrm>=0.3.0"

関連モジュールがいろいろと入りましたが、モジュールそのものはpywinrm-0.3.0が入りました。

f:id:tatematsu_san:20191014203136p:plain

インベントリの定義

過去のもくもく会や書籍などの情報から、インベントリはシンプルに、というのは理解していますが、まず動かしたかったのでインベントリに認証情報などを入力。

[win_2016]
192.168.10.233

[win_2012]
192.168.10.248

[windows:children]
win_2016
win_2012

[windows:vars]
ansible_user=Administrator
ansible_password=P@ssw0rd
ansible_connection=winrm
ansible_winrm_transport=basic
ansible_winrm_server_cert_validation=ignore

実際には、最後の1行(cert_validation)は後から付け足しました。

この手順通りに実行した場合、操作対象のWindowsには自己証明書が導入されるのですが、そのままだと接続のときに証明書の確認エラーで弾かれてしまいました。(以下ログ)

Gathering Facts...
  192.168.10.233 unreachable: {
    "changed": false, 
    "msg": "basic: HTTPSConnectionPool(host='192.168.10.233', port=5986): Max retries exceeded with url: /wsman (Caused by SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:618)'),))", 
    "unreachable": true
}

そのため、もう一度公式ガイドを確認したら、cert_validationについて、しっかり書いてありました。ちゃんと読め自分。

Windows

インストール時のパラメータ

基本的に、Administratorのパスワードをインベントリに合わせたくらいです。

WinRMの設定

公式ガイドに、PowerShellでセットアップできる方法が記載があったため、そのまま実施。

Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.

PS C:\Users\Administrator>
PS C:\Users\Administrator> $url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"
PS C:\Users\Administrator> $file = "$env:temp\ConfigureRemotingForAnsible.ps1"
PS C:\Users\Administrator>
PS C:\Users\Administrator> (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)



PS C:\Users\Administrator> powershell.exe -ExecutionPolicy ByPass -File $file
Self-signed SSL certificate generated; thumbprint: 804F14E0FFED613185E8049AEF5AB79E578DC775


wxf                 : http://schemas.xmlsoap.org/ws/2004/09/transfer
a                   : http://schemas.xmlsoap.org/ws/2004/08/addressing
w                   : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd
lang                : ja-JP
Address             : http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
ReferenceParameters : ReferenceParameters

OK

設定されているかどうかの確認

こちらも、公式ガイドにあったとおりのコマンドでListenerの状態を確認。(ログはWin2016側のもの)

PS C:\Users\Administrator> winrm enumerate winrm/config/Listener
Listener
    Address = *
    Transport = HTTP
    Port = 5985
    Hostname
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint
    ListeningOn = 127.0.0.1, 192.168.10.233, ::1, 2001:0:348b:fb58:28d8:154a:3f57:f516, fe80::28d8:154a:3f57:f516%4, fe8
0::e572:d2e2:836a:bafe%3

Listener
    Address = *
    Transport = HTTPS
    Port = 5986
    Hostname = WIN-KPFBQSB4964
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint = 804F14E0FFED613185E8049AEF5AB79E578DC775
    ListeningOn = 127.0.0.1, 192.168.10.233, ::1, 2001:0:348b:fb58:28d8:154a:3f57:f516, fe80::28d8:154a:3f57:f516%4, fe8
0::e572:d2e2:836a:bafe%3

よくあるハマりで、Windows Firewallの設定があるなあと思ってそちらも確認してみたのですが、自動で接続許可設定が入っていました。(Win2016/Win2012いずれも)

行き届いている…

またPowerShellの中身そのものは確認しておきたいところです。

両方完了後の疎通試験

win_pingモジュールを使いました。

もくもく会では、sshでの疎通試験だったなあと思いつつ、WinRMではどうやってやるんだ?と思い、Windowsのモジュール一覧を確認していたら、win_pingなるものがあるのを見つけました。

モジュール一覧から、目的のもの見つけ出すのは楽しいですね。

win_ping.yaml

---
- name: Windows WinRM Ansible
  hosts: windows
  gather_facts: no

  tasks:
    - name: ping
      win_ping:

実行結果

ping...
  192.168.10.233 ok
  192.168.10.248 ok

Windows Updateの実施

まだやってる最中ですが、Win2012/Win2016いずれも1回は成功しました。

こんな感じのPlaybookにしています。

---
- name: Windows WinRM Ansible
  hosts: windows
    - name: Do Windows Update 
      win_updates:
        category_names:
        - CriticalUpdates
        - SecurityUpdates
        - UpdateRollups
        state: installed
#        reboot: yes
#        reboot_timeout: 1800
      register: update_result

    - name: debug
      debug: 
        var: update_result
        verbosity: 0

    - name: reboot if needed
      win_reboot:
      when: update_result.reboot_required

最初はwin_updatesの中でリブートという流れにしていたんですが、初回Update後のリブート→再起動後のパッチ適用でreboot_timeoutの初期値1200秒を超えてしまい、最終結果がfailedになることがわかりました。 Timeout値を長くしようか悩んだ挙句、まずは結果の出力を優先し、アップデートを切り離すことに。

やってみて

とっかかりこそ苦労したものの、2台目のホスト(Windows2012 R2)のセットアップはとても簡単でした。

今まで業務でPoC環境作るのに手動でぽちぽちやってたのがウソみたいです。

まずは取り急ぎ動かしてみただけなので、実運用を考えた場合に修正すべき点はたくさんあると思いますが、便利さが実感できただけでもとても満足できました。

今後もこんな風に、小さな成功体験を積み上げていきたいと思います。

ただ、動かしている最中に、どの程度作業が進行しているのかがわからないのが、ドキドキしてしまいます。(%表示とかが出ないので)

この辺は何かうまい方法があるのか、また探してみたいなと思います。

追伸

(現在、Win2012の2回目で絶賛ハマり中です…)

Do Windows Update...
  192.168.10.248 failed: {
    "changed": false, 
    "filtered_updates": {}, 
    "msg": "Failed to search for updates: \"1\" 個の引数を指定して \"Search\" を呼び出し中に例外が発生しました: \"HRESULT からの例外:0x80072EFE\"", 
    "updates": {}
}

追伸の追伸

上記エラーは2回試して2回とも発生しました。

大型アップデートとかの初期処理がログイン後に走るのかな?と思ってコンソールでログインしてみましたが、特に動きはなく。

ただ、その後何もいじらずに再度WindowsaUpdateのPlaybook走らせてみたら、問題なく動きました。

ログインが功を奏したのか、時間が解決したのか、一体何なんだ…

またログなど確認して原因分かれば調べてみたいと思います。

DO280(OCP Administration I)&EX280(認定試験)の受講記録

先日、DO280(OpenShift Container Platform Administration I)の教育を受講してきました。

また、その翌日にEX280(認定試験)も受験してきました。

その際の記録を残しておきます。

DO280とは?

Red Hatさんの2020年度の事業戦略の3本の柱の一柱、「クラウドネイティブなアプリケーション開発」の基盤となる、OpenShiftのプラットフォーム管理者向けの教育コースです。

詳細については以下URLをご参照ください。

Red Hat OpenShift Administration I (DO280)

参加日程

以下日程で参加をしてきました。地方からの参加+翌日に同じ会場でEX280(認定資格試験)もあったので、3泊4日の出張となりました。

  • DO280 : 2019/9/24 - 9/26
  • EX280 : 2019/9/27

上記日程のうち、一番後ろの席の、左から三番目のおっさんが私です。

初日と最終日にカートを転がしてるのは自分くらいでした。
やはり、首都圏の受講者が多いのですね。

ちょうどニュースでRed Hatさんの親会社のIBMさんが自社ソフトウェアをOpenShiftに最適化~~というニュースが入ってきた時期だったこともあり、需要も増しているのかなと思いました。

教育(DO280)の内容について

OpenShiftの対象バージョンは3.9でした。

既に4.xがGAしていることや、メトリクスの標準が変わっていることもあり、少し前の内容という感じです。

基本的には、上記URLの「学習内容」に書いてある内容について、章ごとに以下の流れを繰り返す感じです。

  • 講師の方からの概念論の説明
  • 解説付きの実地演習
  • 解説無しで問題文だけの実地演習

初日は問題なくついていくことができていたのですが、二日目の実地演習あたりから途端にスピードが上がり、解説無しの実地演習を1つ全くクリアできない状態でその日が終わってしまうという失態を演じてしまいました。

新鮮だったのが、「後の章で詳細に解説します」という内容がわからないと前の章の解説無し問題が解けないような状況が、普通に発生していたことです。
実際には、さわりの解説は実施していただいていたので解けないこともなかったのだと思うのですが、油断していて初日の復習をサボったせいもあり、二日目はとても大変でした…

後は、教材がすべて英語だったのも少しつらいところでした。これは時期にもよると思います。講義そのものは日本語でした。

普段から慣れている自分の得意分野の英語マニュアルと違い、概念から勉強する内容も多かったため、講義中は読み取れない点もあり、割とアワアワしていました。

ホテルに帰って、日本語翻訳されたマニュアルを食い入るように読んでいました。とてもありがたかったです。RedHatさん、翻訳本当にありがとうございます。

認定試験(EX280)について

出張期間の間、割と夜遅くまで必死に復習した結果、最終日の認定試験(EX280)はなんとか合格することができました。祝。点数はギリギリでしたが。

Red Hatさんの認定試験は初めて受験したのですが、完全実技形式で3時間があっという間に過ぎていきました。

認定試験の内容は守秘義務もあるので書けないのですが、私の勉強方法としては以下の通りです。

  • 試験の学習ポイントに書かれている項目ごとに、DO280で学んだコマンド群を整理
  • よくわからなかったところは公式ドキュメントを見て解説を読む
  • 前提となっているコンテナ関連の知識も理解が怪しいところがあったので、OCP以外の部分もググって調べる

DO280を受講されてからEX280を受験される方は、講師の方がおっしゃることを素直に受け止めてやってみる、ということが大事だと思います。

試験についての学習ポイントなどの詳細な情報は、以下URLをご参照ください。

Red Hat Certified Specialist in OpenShift Administration exam (EX280)

動機はなんだったのか?

実は、会社での立ち位置としては、私はOpenShiftに関連するプロジェクトは一切関わっていなかったりします。本当、なんで受けたのと思われても仕方ない感じですが。

今回教育受講をした主な動機は、実は間接的な理由だったりします。

OpenShiftを業務で扱っている同僚がいるのですが、割とぼっちというか、上司も含めて周りには開発者しかおらず、インフラ面でいろいろと会話ができるメンバーが近くに居ないという状況があります。その同僚とは部門を超えて仲が良かったりするので、社内でOpenShiftの会話出来るメンバーが他にいるといいだろうな、というのが動機だったりします。

チャレンジングな事をやっていても、後ろを振り返ると誰もいない状態はつらい、というのは自分もよく経験してきましたので、周回遅れだったとしても会話できるメンバーが一人でも近くに居れば、前に進むモチベーションも維持できるかなと思ったからです。

先日一緒に飲んだのですが、OpenShiftについて嬉々として話をしてくれて、受講・受験してよかったなと思いました。機会を作ってくれた皆様に大変感謝です。

後は、単純にエンタープライズでコンテナ周りを活用するにはどんなことを考える必要があるのだろう、というベースの知識をいい機会なので一気に身に着ける、という動機もありましたが、それもなんとか達成できました。

今後、何かの形でエンタープライズでコンテナを活用する場面にも関わっていって、身に着けた知識を直接的に仕事で活用したいと考えています。

DO380(クラスタリングとかまで含んだ高度な内容)は…ちょっと間接的な理由ではつらいかもですが、またチャンスがあれば…

Ansibleもくもく会@Softbank(A10編)に参加しました。

2019/9/13(金)に開催された、Ansibleもくもく会に参加しました。

今回は、実業務でもかかわりのあるA10さんの機器が触れるとあって、とても楽しみにしていました。

今年の2月から初めて、通算6回目です。常連といっても過言ではない…?
いろいろな事情で、Ansibleちからは、ほとんど上がっておりませんが…!orz
来月から本気出す!

会場

普段のRedhatさん会場(目黒)ではなく、今回はソフトバンクさん(汐留)で開催!
以前、フェニックスプロジェクトの研修でお邪魔したビルと同じでした。
(とはいえ、ふだんからリモートばかりですが…)

コンテンツ

記憶だけでざっくりと書くとこんな感じの内容です。不足あったら申し訳ありません。
見ていただけるとわかりますが、とってもボリューミーな予感がしました。

  • VLANの作成
  • 物理ポートへのVLAN割り当て、VEへのIPの付与
  • インターフェースのEnable
  • Serverの宣言
  • ServiceGroup/Port/VirtualServerの作成にあわせたIPの設定、バランシングアルゴリズムの設定
  • NATプールの作成
  • 運用上必要となるServerのDisable/Enable
  • HTTPSの証明書のインポート→ClientSSLテンプレートへの展開→TCP443待ち受け

イメージとしては、A10さんの機器のスタンダードな使い方のハンズオントレーニングを、WebUI/CLIではなくAnsibleを使って実施する、という感じです。

詳細なコンテンツは、以下URLに掲載されています。これは永続で公開されるとのこと。大変ありがたいことです。

https://github.com/kishizuka4989/ansible_training_a10_thuner_adc/blob/master/README.ja.md

環境

環境面から普段とは大きく異なりました。

普段のもくもく会

  • SSH(接続先IPなどは一覧があるURLから探す。全環境に直接アクセス可能)
  • Towerをやる人はブラウザ
  • もくもく会での操作対象はAWS

今回

  • Ravelloによる統合管理Webコンソール
  • SSH(接続先IPはRavello上に記載。直接アクセスは最低限で、A10へはWindows経由でSSH接続)
  • RDP(接続先がWindowsのため、Macユーザの方は苦労されたのでは…)
  • もくもく会での操作対象はGCP上(名言無し、IPから推測)

私のメイン端末はWindows Homeなので「RDPできないじゃないか」と思ってWindowsストアなどで互換アプリを探してテストしたりしました。
結局、RDPクライアントはWindows Homeでも普通に使えて、RDPの待ち受けができないだけだというひどい思い違いをしており、顔から火が出る思いです。ぐふう。

自身の操作環境のカイゼン(未遂)

Twitter上で「Visual Studio Code remote便利」というのを見かけていたのでプラグインの導入だけはしていたのですが、SSH接続方法がパッとわからず普段通りTeraTermでポチポチ…

ちゃんと後で学習しました。これマジで便利ですね。
むしろ、これまでTeraTerm+Vimで手打ちしてたのをあまり疑問に思わなかったアホの子でした…

やったこと(Y)

用意されていたコンテンツは、時間ギリギリでしたがなんとか完走することができました。
コンテンツのGit見ていただけるとわかりますが、かなり丁寧に書いていただいていたので、とても分かりやすかったです。

わかったこと(W)

  • A10さんのモジュールは、対象ホストに対してSSH接続し処理を行う、という形ではなく、aXAPIをAnsibleホストから発行する。
  • そのため、aAXPIで実装されている機能はほとんどのものが利用可能。(ACOS4.1以降が必要)
    • つまり、会社で使ってるThunderのオペレーションはすべてAnsible化できるということ
      • つまり、Ansibleやらない理由がない。

つぎやること(T)

  • Visual Studio Code remoteを使えるようにする(済)
  • ブログに書く(済)
  • アンケートやる(済)
  • 昨日あがっていたサンプルをのぞいてみる(今月は控えめに)
  • assert調べてみる(控えめに)

成果共有についての感想

  • tomoさん(非NWエンジニア)も完走されていて、実際の利用想定まで考慮されたコメント(テスト部分とか)をされていた。
    自分はここまではまだ思い至らないので早く経験積みたい。
  • AzureをAnsibleで操作するスライドを用いた成果発表が突然はじまってびっくり。今回のも完走できているのもさらにびっくり。
  • みなさん、実業務の中で触れられていたりして、早く業務で使いたい気持ちが高まった。
  • @sky_jokerxx さんが証明書確認に使える仕組みと、自作モジュールのプルリク→マージされた話をされてていて、神だと思った。

全体的な感想

もくもく会参加したてのころは、どんなもんだろうと不安もありましたが、様々なコンテンツを体験するたび、Ansibleを早く仕事で使いたい気持ちがどんどん高まってきてます。

いつも貴重な体験の場を提供していただいているREDHATさん、今回のような貴重な場を提供いただいたソフトバンクさん、A10ネットワークスさんには感謝しかありません。

実績で恩返しができるように、頑張ります!

Ansibleはいいぞ。

A10はいいぞ。

技書博読書感想文_02 大事なセキュリティの話をしよう

"#技書博" 読書感想文第二弾です。

今回は @yuki476 さんの「大事なセキュリティの話をしよう」です。

◆BOOTHでの紹介はこちら

booth.pm

本の概要とか所感

セキュリティガチ勢向けのゴリゴリの技術書ではありません。

「セキュリティ」というものを考えるための導入として、可能な限り技術的な要素をカットしたうえで、検討すべき要素とその考え方を、満遍なく、わかりやすく記載していただいていました。

「セキュリティって難しいんでしょう?」という方にとって、包括的に必要性や検討事項を知るには非常に有用な本だと思います。

ご本人のコメントにも「セキュリティは技術や仕組みでなく文化(BOOTHサイトより引用)」という内容があります。

平成29年にIPAから「サイバーセキュリティ経営ガイドライン Ver2.0」が公開され、また世の中のセキュリティに関する需要もどんどん高まっています。

サイバーセキュリティ経営ガイドライン(METI/経済産業省)

ガイドラインの中にも「セキュリティ対策はコストではなく投資である」と記載があります。 でも、結局お金はかかるのは事実です。 でも、セキュリティインシデントを起こしたら一大事なので、失敗は許されない!なんていう風潮もあったりします。

そんな中、「セキュリティ対策」を突然任された、などの場合にお手に取ってみるのもいいのではないでしょうか。

私のとっての「セキュリティ」

私はセキュリティ関係のITシステムの設計構築運用保守などをやったりします。 ただ、CTFに出たりなどのガチ勢ではなく、ゆるふわ勢くらいなもんです。

そんな私にとっての「セキュリティ」とは…

沼です。

それに尽きます。

いくらでもコストがかけられます。でも、完璧なんてありません。 とはいえ、何かあると怒られます。

そのためには、どこかでボーダーラインを引いて、その状態でのリスクをアセスメントしたうえで、導き出されたスコアをもとに、そのリスクを「受容」するのか「回避」するのか、という合意形成が必要です。そうしなければ、ひたすら沼になります。

ここで、悪魔のフレーズとして「運用でカバーする」とかが出てくるともう最悪です。それやるための運用コストちゃんと見積もってますかといいたくなります。

このあたりの話を冒頭にしっかりと記載いただいていたため、とても共感できました。

沼の一例

例えば、以下のような非機能要件があったとします。

  • 監査ログを取得すること
  • 運用作業は、必ず個人が識別できる状況で実施し、関係者以外が操作できないことを担保すること

1個目は、Linuxで言えばsudo運用している場合のauditだったり、システムへのログインのログやコマンド実行履歴を取ったりと、なんとなくイメージがつきます。

問題は2つ目です。

これ、見方によってはどこまでも広がります。

  • 運用環境への入退室をIDカードで識別しているから、システム操作アカウントは共有でもいいのでは?
  • いやいや、操作アカウントまで全部分けなきゃダメでしょ
  • でもそうすると、担当変更によるアカウント追加削除とかPW変更とかいろいろな運用オペレーションが増えるんだけど…
  • 「関係者以外が操作できない」ってことは、運用ルームも専用にしなきゃいけないのか?
  • え?この運用金額で別室作るなんて無理ゲーなんだけど…
  • 個人識別ってIDカードだけでいいの?生体認証とかいらないの?

などなど。

こういうのに「できる限り安全な方法で!」とか言われてしまうと困ってしまいます。 なので、ちゃんとボーダーラインを引いて、そのボーダーでのリスクを明示したうえでジャッジ、合意形成する必要があるわけです。

アカウント共用はどうかなーと思いますが、でもそういう妥協をするケースもあると思います。

例を終えて

運用シーンをベースにセキュリティ関連の沼の例を書きましたが、こういう点だけでも材料がいっぱい出てきます。

なので、そういう要素を全く書かずにここまできれいな形でまとめられたのは、すごいと思いました。

結局、一つ例を出したとしても「それってうちの環境だと無理なんだよな…」という場合多いと思います。だからこそ、その組織や環境に応じて具体化するためにも、共通事項としての考え方を身につけるのは非常に重要で、そこをうまく表している本だなと思いました。

ISOごっこをやっている方々への啓蒙もかねて、会社で回し読みしてもらおうと思ってます。