tag:crieit.net,2005:https://crieit.net/users/yogoreba/feed ANAの投稿 - Crieit CrieitでユーザーANAによる最近の投稿 2020-12-26T13:03:48+09:00 https://crieit.net/users/yogoreba/feed tag:crieit.net,2005:PublicArticle/16438 2020-12-26T13:03:48+09:00 2020-12-26T13:03:48+09:00 https://crieit.net/posts/Azure-Administrator-6-AzureAD Azure Administratorへの道(6回:AzureAD周辺) <p>Qrunchからお引越しした記事です : created_at: 2019-09-02 21:16:06 +0900</p> <p>知識が薄ぼんやりとしているAzureADのおさらい。</p> <h1 id="0. スキルの評価対応"><a href="#0.+%E3%82%B9%E3%82%AD%E3%83%AB%E3%81%AE%E8%A9%95%E4%BE%A1%E5%AF%BE%E5%BF%9C">0. スキルの評価対応</a></h1> <p>アイデンティティの管理<br />  > Azure Active Directory (AD) を管理する<br />  > Azure AD オブジェクト (ユーザー、グループ、およびデバイス) の管理<br />  > ハイブリッド アイデンティティの実装と管理</p> <h1 id="1. AzureAD"><a href="#1.+AzureAD">1. AzureAD</a></h1> <p>・Office365やAzureの管理に利用する。<br /> ・カスタムドメインの登録が可能。<br /> ・AzureにはAADのユーザに対してRBACで権限を割り振る。<br /> ・ユーザの種類<br />  >AADで作成したユーザ OR ドメコンから連携されたユーザ<br />  >メンバー OR ゲスト<br /> ・ユーザの属性<br />  通常のドメコンと違うような属性は次の2つ。<br />  ①利用場所<br />   国を指定。これを指定しないとライセンス(Premiumライセンスなど)が割り振れない。<br />  ②ユーザープリンシパルネーム<br />   ユーザーのインターネット形式のログイン名<br />   [email protected]みたいな形式<br />   AzureやOffice365へログインする際のユーザ名の名前<br /> ・グループ<br />  動的にグループ割り当てができる<br />  →開発部所属のメンバーは開発部グループに自動所属のような感じか<br />  グループに有効期限を設け、破棄したりもできる<br />  グループの所有権があるユーザは、グループにユーザを追加できる。<br /> ・セルフパスワードリセット<br />  SMS、メール、秘密の質問、いずれかで変更。<br /> ・外部アクセス<br />  外部のメールアカウントを登録することで外部アクセスさせることが可能<br /> ・デバイス管理<br />  デバイスもAADに参加させ管理できる。<br /> ・アプリケーション<br />  3rd Partyのアプリとも統合できるケースがある。<br />  →Boxとか。<br /> ・条件付アクセス<br />  条件付アクセスポリシーにより設定。<br />  条件:ユーザ、グループ、デバイス、場所、などなど。<br />  制御:MFA、準拠デバイス指定、アプリ利用、利用規約を読ませる、などなど。<br /> ・アクセスレビュー<br />  現在のアクセス状況をレビュアが参照し、アクセス権を引き続き付与するか、<br />  破棄するか、などの判断・処理を実施できる。<br /> ・アイデンティティ保護(identiry Protection)<br />  脆弱性、リスクイベント、リスクを出しているユーザ、などが分かる。<br />  →Torブラウザで接近しているユーザは誰、MFAの設定をしない人がいる、とかが分かる。<br />  リスクイベントのレベルはポリシー(ユーザリスクポリシー、サインインリスクポリシー)で設定できる。<br />  →ポリシーに準拠しない場合はアクセスブロック、もできる。</p> <h1 id="2.ハイブリッド アイデンティティ"><a href="#2.%E3%83%8F%E3%82%A4%E3%83%96%E3%83%AA%E3%83%83%E3%83%89+%E3%82%A2%E3%82%A4%E3%83%87%E3%83%B3%E3%83%86%E3%82%A3%E3%83%86%E3%82%A3">2.ハイブリッド アイデンティティ</a></h1> <p>・オンプレミスドメコンとの同期。<br /> ・セットアップの流れ<br /> ★前提<br />  AzureAD:plazazurecontoso.onmicrosoft.com<br />  ドメコン:consoto.local<br />  →これをplazcontoso.comとして統一連携する。</p> <p> ①AzureADの作成<br />  ②AADでカスタムドメインの設定(plazcontoso.com)<br />  ③ドメコンにUPN Suffix追加(plazcontoso.com)<br />  ④同期対象ユーザのUPNを[user]@plazcontoso.comに変更<br />   →powershellで一括変更<br />  ⑤AzureADコネクトのデプロイ<br />   →オンプレミス側にAADコネクト専用のドメコンを用意し、そこにデプロイする<br />    インターネットへ接続できる環境に存在する必要がある。<br />  ⑥連携対象を指定(ドメインやOUなどで指定)<br />  ⑦AzureADのごみ箱を有効にする</p> <p>・ドメインフォレスト、AADコネクト、AzureAD<br />  ①ドメインフォレスト:AADコネクト = N:1<br />   複数フォレストの情報を1つのAADコネクトに集約はできる<br />  ②AADコネクト:AzureAD = 1:1<br />   AzureADとAADコネクトは1つに対して1つ<br />   なので、もしAフォレストはAzureAD1、BフォレストはAzueAD2に連携、<br />   という場合はAADコネクトは2台必要。<br /> ・AADコネクトの3つのSSO(シングルサインオン)認証<br />  ①パスワードハッシュ同期<br />   ドメコン→AADコネクト→AzureADの流れでハッシュ化したパスワードを連携し、<br />   その内容を元にAzureADは認証を行う方式。<br />   AzureADアカウントの有効期限は「無期限」になる。<br />  ②パススルー認証<br />   (流れ)<br />   AzureADの認証情報をAADコネクトに暗号化して引き渡す<br />   →AADコネクトは認証情報を解号してドメコンに引き渡す<br />   →ドメコンは認証結果をAADコネクトに返す<br />   →AADコネクトは認証結果をAzureADへ返す<br />  ③フェデレーション認証<br />   ドメコンに参加しているPCから、「追加の認証情報入力なし(シームレス)」で<br />   AzureADの認証をする場合はコレ。(…くそダルイ構成だな)<br />   【前提1】ADFSとWebアプリケーションプロキシ(WAP)が必要<br />   【前提2】ドメコン⇔AzureAD間はAzureADコネクトでディレクトリを同期している</p> <p>  (流れ)<br />   ユーザはドメイン参加PCからサービス(例:Office365)へ接近する。<br />   →Office365はADFSに認証トークンを要求<br />   →ドメイン参加PCはADFSから認証トークンを受領<br />   →ドメイン参加PCはWAPを経由してAzureADへトークンを連携<br />   →AzureADはトークンを受領し、Office365アクセストークンを発行<br />   →ユーザはOffice365へアクセスできる<br /> ・パスワードライトバック<br />  AzureAD側でパスワードを変更した場合、それをドメコン側にも反映させる。<br />  通常、同期方向はドメコン→AzureADだが、この機能をオンにしていると<br />  パスワードの変更だけは双方同期になるような感じ。(かな?)<br /> ・同期間隔<br />  最短で30分間隔。間隔は変更可能。<br /> ・同期内容のフィルタ<br />  AD情報で何を同期するかをフィルタできる。<br />  勤務地は連携しない、とか。通常はデフォルト設定で十分らしい。</p> <h1 id="3.所感"><a href="#3.%E6%89%80%E6%84%9F">3.所感</a></h1> <p>・他にも色々あったけど、AZ-103の枠から外れるので飛ばした。<br /> ・「AzureAD」だけで覚えることありすぎでしょ…<br />  Azureの試験範囲にいれないでよ…<br />  (Azureと密接な関係にあるのは分かるけど)<br /> ・ハイブリッド連携はなんとなく理解していたけど、良いおさらいになりました。</p> ANA tag:crieit.net,2005:PublicArticle/16437 2020-12-26T13:01:33+09:00 2020-12-26T13:01:33+09:00 https://crieit.net/posts/Azure-Administrator-5-Load-Balancer Azure Administratorへの道(5回:Load Balancer) <p>Qrunchからお引越しした記事です : created_at: 2019-09-02 21:16:06 +0900</p> <p>ネットワーク周辺は業務でしっかりやったので概ね割愛。<br /> ロードバランサだけ知識不足なため、そこだけは学習する。</p> <h1 id="0. スキルの評価対応"><a href="#0.+%E3%82%B9%E3%82%AD%E3%83%AB%E3%81%AE%E8%A9%95%E4%BE%A1%E5%AF%BE%E5%BF%9C">0. スキルの評価対応</a></h1> <p>仮想ネットワークの構成と管理<br />  > Azure 負荷分散の実装</p> <h1 id="1. ロードバランサ(全体)"><a href="#1.+%E3%83%AD%E3%83%BC%E3%83%89%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B5%EF%BC%88%E5%85%A8%E4%BD%93%EF%BC%89">1. ロードバランサ(全体)</a></h1> <p>・Azureの負荷分散は大きく次の4つ<br />  ①Public Load Balancer<br />   OSI参照モデル4層(Tranceport層:TCP/UDP)の制御。<br />   インターネットに接している。(パブリックIPアドレスが必要)<br />  ②Internal Load Balancer<br />   OSI参照モデル4層(Tranceport層:TCP/UDP)の制御。<br />   VNet内の制御。⇒パブリックIPは不要。<br />  ③Application Gateway<br />   OSI参照モデル7層(Application層)の制御。<br />   SSLオフロードやWAF(WebApplicationFirewall)の機能もある。<br />  ④Traffic Manager<br />   OSI参照モデル7層(Application層)の制御。<br />   厳密にはロードバランサではない。<br />   DNSレベルでの地理的負荷分散(?)を行う。</p> <h1 id="2. パブリックロードバランサ"><a href="#2.+%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%89%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B5">2. パブリックロードバランサ</a></h1> <p>・SKUはBasicとStandardの2種類 : <a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/load-balancer/load-balancer-overview#skus">詳細</a><br />  ⇒機能差、性能差の面でStandardにすることが望ましい。<br /> ・バックエンドプール<br />  ロードバランサにより負荷分散している同一構成のマシン達のことを指す。<br /> ・正常性プルーブ(Health Probe)<br />  負荷分散対象のマシンのうち、どれが正常でどれが死んでいるかを検査する方法。<br />  プルーブ(Probe)は「調べる、精査する」の意味なので、「健康診断」くらい雑に訳しておくと覚えやすい。<br /> ・SNAT(送信元NAT)<br />  SNATの機能を持つ。(中から外へのNAT)<br />  DNATとSNATがよくわからなくなるので以下まとめを記載しておく。(我ながらへっぽこ)</p> <blockquote> <p>SNAT はプライベートアドレスから発生した通信をグローバルアドレスに届ける技術。<br /> プライベートアドレス(S)をグローバルアドレスに書き換えて通信を実現している。<br /> ホームネットワークから外部サービスへの通信等がこれ。</p> <p>DNAT はグローバルアドレスから発生した通信をプライベートアドレスに届ける技術。<br /> グローバルアドレス(D)をプライベートアドレスに書き換えて実現している。<br /> ホームネットワークで web/mail 等のサーバ等を複数台構築してアドレスを一つに見せて外部に公開する場合がこれ。</p> </blockquote> <p> <a target="_blank" rel="nofollow noopener" href="https://yoru9zine.hatenablog.com/entry/2015/12/19/072304">引用元サイト</a><br />  <a target="_blank" rel="nofollow noopener" href="https://blog.adachin.me/archives/3837">他参考サイト</a></p> <p> この機能があるので、Load BalancerのNAT規則を整理すればバックエンドにいる任意のVMにRDPで接近できる。<br />  (<a target="_blank" rel="nofollow noopener" href="https://blogs.technet.microsoft.com/jpaztech/2016/11/23/loadbalancer-troubleshooting/">3389ポートで接近した場合はVM1、3390ポートで接近した場合はVM2、みたいな制御</a>)<br />  受信NAT規則(Inbound Nat Rule)として構成する。</p> <p> ちなみに、VM自体にパブリックIPがひもづけられている場合、SNATはしない。<br />  →VMに付いているパブリックIPでの通信を優先する。</p> <p>・分散モード<br />  ①ハッシュベースの分散モード<br />   5要素(送信元IP、送信元ポート、あて先IP、あて先ポート、プロトコル)を元に<br />   ハッシュ値を作成する。そのハッシュ値を元にバックエンドのVMへ分散していく。<br />   →なので、クライントPCの利用ポートが変わるとあて先VMが変わったりする。<br />  ②ソース IP アフィニティ モード<br />   2要素(送信元IP、あて先IP)を元にハッシュ値を作成し、その値を元に分散する。<br />   ①と違って、クライアントPCのIPアドレスが変わらない限りあて先VMは変わらない。<br />   →処理途中で通信先VMが変わると困るこまる場合はこっち。<br />    リモート デスクトップ ゲートウェイの構成に使うそうな。</p> <h1 id="3. インターナルロードバランサ"><a href="#3.+%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8A%E3%83%AB%E3%83%AD%E3%83%BC%E3%83%89%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B5">3. インターナルロードバランサ</a></h1> <p>・VNet内の負荷分散に使う。FrontEndにPublicロードバランサを置いてWEBアクセスを負荷分散している裏で、<br />  WEBサーバ→複数DBサーバへのアクセス負荷分散を実施するのに使う、など。<br /> ・Vnet内で使う、パブリックIPアドレスがない、などを除いて、基本パブリックロードバランサとできることは同じ。</p> <h1 id="4. Application Gateway"><a href="#4.+Application+Gateway">4. Application Gateway</a></h1> <p>・Web Traffic load Balancer。(なので、WEBアクセスのトラフィック制御での利用しかできない)<br /> ・URLベースのルーティングができる。<br />  →例えばURLが<br />   ①https:\//xxx/imagesの場合、画像を保管するWEBサーバへ転送<br />   ②https:\//xxx/videosの場合、動画を保管するWEBサーバへ転送。<br />   という制御ができる。(すごい)<br /> ・SSLオフロードの機能。<br />  →SSL/TLSのエンコード、デコードをサーバから肩代わり。<br /> ・複数サイトのホスティングへも対応。<br />  →http:\//contoso.comはcontosoサーバプールへ転送、http:\//fabrikam.comはfabrikamサーバプールへ転送、など。<br /> ・WAF(Web Application Firewall)の役割ができる。<br />  →Webサーバへのアクセスにおいて不正な通信内容<br />   (SQLインジェクション、クロスサイトスクリプティングなどの恐れがある通信)を遮断する。</p> <h1 id="5. Traffic Manager"><a href="#5.+Traffic+Manager">5. Traffic Manager</a></h1> <p>・「DNS ベースのトラフィック ロード バランサー」<br />  というのが、どういうことか全然分からなかったけど<a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/traffic-manager/traffic-manager-routing-methods#%E5%84%AA%E5%85%88%E9%A0%86%E4%BD%8D%E3%83%88%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF-%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E6%96%B9%E6%B3%95priority-traffic-routing-method">この図</a>を見てやっと分かった。<br />  ①クライアントがDNSサーバに問い合わせる。<br />  ②DNSサーバはTraffic Managerへ問い合わせる。<br />  ③Traffic Managerは定められた分散規則にしたがって、いずれかのエンドポイントのパブリックIPを返す。<br />  ④取得したIPアドレスで直接エンドポイントへ接近する。<br /> ・この手法をとることで、地理的負荷分散もできる。<br />  →例えば、東日本リージョン、西日本リージョンにそれぞれWEBサーバを配置した構成も実現できる。<br /> ・分散方法(ルーティング方法)は次の通り。<br />  ①優先順位<br />   基本、プライマリサイトへアクセスさせ、障害時だけセカンダリを使うときはコレ。<br />  ②重み付け<br />   均等に分散したりするときはコレ。例えば、本番環境A、本番環境B、トライアル環境Cがある場合。<br />   A:50、B:50、C:1としたときはAかBにアクセスし、Cにはアクセスしない。Aが障害時はBにアクセスする。<br />   Cのトライアルが終了し、一般公開するときはCも50にするだけでよい。<br />  ③パフォーマンス<br />   地理冗長しているような構成のとき、「ユーザから最も近いエンドポイント」を指定させるときはコレ。<br />   この後の「地理的」とはちょっと違う。こちらはあくまで「ネットワーク待ち時間」が最も短いルートをいく。<br />  ④Geographic(地理的)<br />   DNS クエリの発信元の地理的な場所に基づいて分散させるときはコレ。<br />   アメリカ本社はUSリージョン、日本支社は東日本リージョンへアクセス!という使い方かな。<br />  ⑤複数値<br />   エンドポイントがオンプレしかない(IPv4、v6のアドレス指定しかない)場合につかう。<br />   この場合、正常なエンドポイントのアドレスを全て返答してくる。<br />  ⑥サブネット<br />   クライアントのIPレンジによってアクセス先を変更したい場合はコレ。<br />   x.y.a.0/24はA環境、x.y.b.0/24はB環境へ行け、ということができる。<br /> ・Azure(IaaS、PaaS)以外にオンプレミスのエンドポイントも指定できる。<br /> ・Traffic Managerのネスト(入れ子)もできる。<br />  この場合エンドポイントにTraffic Managerを指定する。<br />  →<a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/traffic-manager/traffic-manager-nested-profiles">複雑</a>。<br /> ・イントラ内では使えないのではないか?</p> <blockquote> <p>「Traffic Manager のしくみ」で説明したとおり、Traffic Manager エンドポイントとして、Azure の内部または外部でホストされているインターネット接続サービスを指定することができます。 したがって、Traffic Manager は、インターネットに接続されている一連のエンドポイントにパブリック インターネットからのトラフィックをルーティングすることができます。 エンドポイントがプライベート ネットワーク内にある場合 (内部バージョンの Azure Load Balancer など)、またはユーザーが内部ネットワークから DNS 要求を行う場合、Traffic Manager をこのトラフックのルーティングに使用することはできません。 </p> </blockquote> <p><a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/traffic-manager/traffic-manager-faqs#what-types-of-traffic-can-be-routed-using-traffic-manager">引用元</a></p> <h1 id="6. 所感"><a href="#6.+%E6%89%80%E6%84%9F">6. 所感</a></h1> <p>・「軽くさらっておこう」くらいの気持ちで始めたら、大分奥が深い。<br /> ・ApplicationGatewayとTrafficManagerの概要が理解できたのは良かった。(何にも分かってなかった)</p> ANA tag:crieit.net,2005:PublicArticle/16436 2020-12-26T12:59:58+09:00 2020-12-26T12:59:58+09:00 https://crieit.net/posts/Azure-Administrator-4 Azure Administratorへの道(4回:仮想マシン) <p>Qrunchからお引越しした記事です : created_at: 2019-08-31 10:56:03 +0900</p> <p>仮想マシン周りは概ね理解しているので、微妙に知識が足りないところだけ補足学習。</p> <h1 id="0. スキルの評価対応"><a href="#0.+%E3%82%B9%E3%82%AD%E3%83%AB%E3%81%AE%E8%A9%95%E4%BE%A1%E5%AF%BE%E5%BF%9C">0. スキルの評価対応</a></h1> <p>仮想マシン (VM) のデプロイと管理</p> <h1 id="1. 仮想マシンの複数展開"><a href="#1.+%E4%BB%AE%E6%83%B3%E3%83%9E%E3%82%B7%E3%83%B3%E3%81%AE%E8%A4%87%E6%95%B0%E5%B1%95%E9%96%8B">1. 仮想マシンの複数展開</a></h1> <h2 id="1.1 イメージからの作成"><a href="#1.1+%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%81%8B%E3%82%89%E3%81%AE%E4%BD%9C%E6%88%90">1.1 イメージからの作成</a></h2> <p>イメージを作成するVMはSysprepを使う。<br /> Linuxの場合waagent -deprovision+userでAzureのエージェントを初期化する。</p> <h2 id="1.2 ARMテンプレートでの展開"><a href="#1.2+ARM%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%A7%E3%81%AE%E5%B1%95%E9%96%8B">1.2 ARMテンプレートでの展開</a></h2> <p>CopyオブジェクトやCopyIndexを利用するとよい。<br /> 複数の名前や値を生成できる。<br /> 例)次の場合、storage0、storage1、storage2の名前が生成される。<br />  名前<br />  <code>"name": "[concat('storage', copyIndex())]",</code><br />  Copyオブジェクト<br />  <code>  "copy": { "name": "storagecopy", "count": 3 }  </code><br /> なお、ARMテンプレートの編集はVisual Studioで実施するとやりやすいらしい。</p> <h2 id="1.3 仮想マシンスケールセット"><a href="#1.3+%E4%BB%AE%E6%83%B3%E3%83%9E%E3%82%B7%E3%83%B3%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%AB%E3%82%BB%E3%83%83%E3%83%88">1.3 仮想マシンスケールセット</a></h2> <p>可用性セットとは別物。<br /> この機能でVMを作成すると</p> <blockquote> <p>すべての VM インスタンスが同一のベース OS イメージと構成から作成されます。<br />  というようにVMとして同一内容を保持した状態で自動スケールが実行できる。</p> </blockquote> <p>基本、LoadBalancerを通してアクセスすることになる。<br /> スケール方法は3つ<br /> ①手動<br /> ②スケジュール指定(スケールアウトするVM数も指定可能)<br /> ③メトリクス(CPU利用率など)の数値で自動スケールアウト</p> <p>「え、すごい便利じゃん」と思ったが、下記情報あり。</p> <blockquote> <p>※仮想マシン内にデータの保存はできますが、スケールインされるため、大切なデータは保存しない方が良いです。また、仮想マシン間でデータを共有する事もありません。</p> </blockquote> <p>参考:https://www.cloudou.net/virtual-machine-scale-sets/vmss001/</p> <p>…使えるケースが限られますね。(ログファイルとか消失するじゃん)<br /> 保存が必要なファイル(ログファイルなど)は別場所保管に設計すればいけるか。</p> <h1 id="2. 仮想マシン移行(オンプレミス to Azure)"><a href="#2.+%E4%BB%AE%E6%83%B3%E3%83%9E%E3%82%B7%E3%83%B3%E7%A7%BB%E8%A1%8C%EF%BC%88%E3%82%AA%E3%83%B3%E3%83%97%E3%83%AC%E3%83%9F%E3%82%B9+to+Azure%EF%BC%89">2. 仮想マシン移行(オンプレミス to Azure)</a></h1> <h2 id="2.1 Azure Site Rocovery"><a href="#2.1+Azure+Site+Rocovery">2.1 Azure Site Rocovery</a></h2> <p>・実施前にDeploy Planner Toolを実行して情報収集をした方が良い。<br />  ⇒ASR利用にあたるオンプレミスの情報がEXCELで出力される。<br />   移行に必要な帯域幅や時間の情報を把握できる。<br /> ・構成サーバ、および移行元ホストはそれぞれHTTPSでAzureと通信し移行する。<br />  ⇒443ポートで行うが、データ転送は9443ポートで行う。注意。<br /> ・Azure側ではリカバリーサービスコンテナ、ストレージアカウントが必要。</p> <h3 id="2.1.1 From Hyper-V"><a href="#2.1.1+From+Hyper-V">2.1.1 From Hyper-V</a></h3> <p>Hyper-VがSystem Center VMMで管理されている場合VMMが必要なケースあり。<br /> 移行元ホストにはAgentを導入する。<br />  </p> <h3 id="2.1.2 From Physical Server "><a href="#2.1.2+From+Physical+Server%E3%80%80">2.1.2 From Physical Server </a></h3> <p>・構成サーバが必要。構成サーバがレプリケーション調整などを実施。<br />  ⇒ちなみに構成サーバはSQL ServerでなくMySQLで稼動するらしい。<br />  ⇒データ転送ポートを9443から変更することもできる模様。<br /> ・レプリケーション対象のサーバにはモビリティサービスエージェントを導入する。<br /> ・ASR自体はフェールバックも考慮したサービスだが、P2C移行になると<br />  フェールバックは難しい。物理サーバからの移行についてはP⇒Cへの一方向で考えたほうがよい。<br />  ⇒<a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/site-recovery/physical-azure-architecture">ドキュメント</a>を参照するかぎりできなくはないと思うが、あまり推奨しないということだろう。</p> <h3 id="2.1.3 From VMware"><a href="#2.1.3+From+VMware">2.1.3 From VMware</a></h3> <p>構成サーバーが必要。⇒OVFファイルがあるため、VMware上にデプロイするとよい。</p> <h2 id="2.2 Azure Migrate"><a href="#2.2+Azure+Migrate">2.2 Azure Migrate</a></h2> <p>・オンプレミスで稼働しているVMware上の仮想マシンを、Azureに移行した場合の<br />  「構成」や「費用」の確認ができるサービス(らしい)<br /> ・あくまでレポート情報を作成するだけであり、移行はASRで行う。<br /> ・VMware環境の情報収集に利用できる。(現在はHyper-Vも利用できる?)<br />  OVAファイル経由で収集用VMをデプロイし、収集結果をAzureへ送信し、その結果をレポートにまとめる、という流れか。<br />  (参考)https://www.cloudou.net/azure-migrate/mig001/</p> <h2 id="2.3 Data Migration Assistant"><a href="#2.3+Data+Migration+Assistant">2.3 Data Migration Assistant</a></h2> <p>SQL Serverの移行などに利用。割愛。(おそらくAZ-103の範囲外)</p> <h2 id="2.4 ASRを利用しない移行"><a href="#2.4+ASR%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%AA%E3%81%84%E7%A7%BB%E8%A1%8C">2.4 ASRを利用しない移行</a></h2> <p>長期間のダウンタイムが許されるのであれば、下記方法もある。<br /> ①Hypre-VのVHDファイルをアップロードして使う<br /> ②Azure DataBoxでVHDファイルを移送して使う</p> <h1 id="3. カスタムスクリプト拡張、PowerShell DSC"><a href="#3.+%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E6%8B%A1%E5%BC%B5%E3%80%81PowerShell+DSC">3. カスタムスクリプト拡張、PowerShell DSC</a></h1> <p>Azureのカスタムスクリプト拡張機能と、DSCを使って、<br /> デプロイした直後のVM 構成(エージェントやアプリ導入)を整理しましょう、という話のはず…(自信ない)</p> <h2 id="3.1 カスタムスクリプト拡張"><a href="#3.1+%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E6%8B%A1%E5%BC%B5">3.1 カスタムスクリプト拡張</a></h2> <p>・仮想マシンを作成したタイミングで、スクリプトを流せる機能。<br /> ・Win2008R2以上で利用可能。</p> <h2 id="3.2 PowerShell DSC拡張"><a href="#3.2+PowerShell+DSC%E6%8B%A1%E5%BC%B5">3.2 PowerShell DSC拡張</a></h2> <p>・(Azureは直接関係ない)<br /> ・構成管理用の拡張機能。<br /> ・役割の有効化や環境変数の設定、ソフトウェアインストールなど構成に関することが色々できる。<br /> ・参考サイト:https://www.slideshare.net/kazukitakai/dsc-88799528</p> <h2 id="3.3 組み合わせてできること"><a href="#3.3+%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%81%A6%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%93%E3%81%A8">3.3 組み合わせてできること</a></h2> <p>・VMを作成した直後にウィルスソフトウェアインストール<br /> ・VM作成後のエージェント導入状態を同じくなるように管理<br /> ・その他いろいろ</p> <h1 id="4. 所感"><a href="#4.+%E6%89%80%E6%84%9F">4. 所感</a></h1> <p>・カスタムスクリプト拡張、PowerShell DSC あたりがPlurasightになかったので独学。<br />  ⇒内容および範囲があっているのかどうか不安。<br /> ・ASRは業務で抑えていたのでおさらいレベル。<br /> ・スケールセットは可用性セットのことかな、と完全に勘違いをしていたので、把握できてよかった。</p> ANA tag:crieit.net,2005:PublicArticle/16435 2020-12-26T12:58:15+09:00 2020-12-26T12:58:15+09:00 https://crieit.net/posts/Azure-Administrator-5fe6b4d744f9b Azure Administratorへの道(3回:ストレージ関連) <p>Qrunchからお引越しした記事です : created_at: 2019-08-24 15:55:30 +0900</p> <p>備忘録的に覚えておきたい箇所を列挙メモ。</p> <h1 id="スキルの評価対応"><a href="#%E3%82%B9%E3%82%AD%E3%83%AB%E3%81%AE%E8%A9%95%E4%BE%A1%E5%AF%BE%E5%BF%9C">スキルの評価対応</a></h1> <p>ストレージの作成と管理</p> <h1 id="Azure バックアップの実装"><a href="#Azure+%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E3%81%AE%E5%AE%9F%E8%A3%85">Azure バックアップの実装</a></h1> <p>・Recovery Service Vault ⇒ 日本語だとリカバリーサービス<strong>「コンテナ」</strong>になる。<br />  (日本語もボルトに統一してくれよ…最初Valutって書かれていてピンとこなかったよ…)<br /> ・File単位のリストア<br />  ⇒リストア結果をディスクとして一時マウントする仕組み。<br /> ・Azure Backup Agent(MARS:Microsoft Azure Recovery Services)<br />  オンプレ側のマシンに導入。ファイルなどのバックアップができる。<br />  こちらもリストア時は一時マウントになる。<br /> ・Azure Backup Server (MABS:Microsoft Azure Backup Server)<br />  MARSでカバーできない範囲をバックアップしたいときに導入が必要。<br />  マシン全体のバックアップやアプリケーションのバックアップなど。</p> <h1 id="ストレージアカウント"><a href="#%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88">ストレージアカウント</a></h1> <p>・レプリケーション<br />  LRS(ローカル冗長)、ZRS(ゾーン冗長)、GRS(地理冗長)に加えて、「RA-GRS」(読み取り可能な地理冗長)がある。<br />  GRSは通常、レプリケート先のサイトの情報はMSしかアクセスできない(MSが復旧処理するまで使えない)が、<br />  RA-GRSは平常時でもアクセス可能。<br /> ・アカウントの種類<br />  BLOB、Storage(V1)、StorageV2がある。<br />  ①BLOB:BLOBしか使えない。<br />  ②V1:ページ、キュー、テーブル、BLOB全部使える。クラシックのリソース管理用。<br />  ③V2:ページ、キュー、テーブル、BLOB全部使える。リソースマネージャでの管理。<br />  通常、V2一択。<br /> ・アクセスキー<br />  このキーを渡すとストレージに対してフルアクセスできる。<br />  (何でもできるので取り扱い注意)<br />  キーの値はリフレッシュ(更新)でき、定期的な更新が推奨される。<br /> ・SAS:Shared Access Signature<br />  アクセスキーとは違い、アクセス内容を制限できるアクセス署名。<br />  読み取りのみ許可、アクセス元IPレンジの制限、プロトコルの制限、期間の制限、などなど。<br /> ・Stored Access Policy<br />  期間を決めてアクセス許可を設定できるポリシー。<br />  SASより大雑把なサービス(BLOB、キュー、テーブル、Files)レベルの制御。<br /> ・Azure Key Vault<br />  日本語だと「キーコンテナ」。<br />  色々なキーを管理するサービスだが、ストレージアカウントキーの自動管理もやろうと思えばできるらしい。<br /> ・AzureAD&RBACを利用したアクセス制御<br />  BLOBとキューのみ制御可能。<br />  AureAppServiceからストレージコンテナへのログファイル書き出し、などに有効。<br />  IAM制御にてAppServiceに対して必要なロールを割り当ててやればいい。<br />  (IAM制御でユーザだけでなくAppにも権限を割り当てできるのは初耳だった)<br /> ・暗号化<br />  デフォルトでMSのキーによって暗号化されている。<br />  独自のキーで暗号化することも可能。その場合、暗号化のキーをAzure Key Vaultで管理する必要がある。<br /> ・ネットワークアクセス<br />  デフォルトでインターネット上のどこからでも接近できる。<br />  設定変更によりアクセス可能なバプリックIPを指定したり、VNet内からアクセス可能にできる。<br />  ⇒Vnet側のほうにもサービスエンドポイントの設定が必要。<br /> ・StorageExplorer<br />  ストレージの中身を参照するツール。Desktop版とWeb版があり、Web版はPortalから使える。<br /> ・診断ログ<br />  診断設定をオンにしている場合は「$logs」というBLOBコンテナにログが格納される。<br />  StorageExplorerでファイルを取得できるらしい(が、WEB版のStorageExplorerで参照しても該当コンテナが無かった)<br />  取得したログはMicrosoft Message Analyzerで解析すると見やすい。<br /> ・メトリック<br />  メトリックも診断設定をオンにしているとテーブルに出力される模様。<br />  メトリック情報からアラートを作成したりできる。</p> <h1 id="BLOB Storage"><a href="#BLOB+Storage">BLOB Storage</a></h1> <p>・ストレージアカウントのうち、「BLOB」に該当する箇所の補足追記。<br /> ・BLOBの形式は3種類。<br />  ①Block Blob<br />   複数ブロックに分けられたBLOB。ファイル追加、削除など普通に使う場合はこれ。4.7TBまで。<br />  ②Append Blob<br />   追加のみのBLOB。ログ保管など、ファイルの変更や削除をしない場合に使う。<br />  ③Page Blob<br />   VMのディスク(VHD)を置く。最大8TBまで。<br /> ・ストレージ層<br />  StorageV2のアカウントでのみサポート。次の3種類。<br />  ①ホット:データ保存のコストが高く、データアクセスのコストが低い(頻繁に更新する場合に推奨)<br />  ②クール:データ保存のコストが低く、データアクセスのコストが高い(保管メインの場合に推奨)<br />  ③アーカイブ:最もデータ保存のコストが低いが、データ取り出しに数時間単位でかかる(長期保管用)<br />  ※注意:ストレージ層を変更(移動)するとその移動量に対して課金される。(データアクセス分の課金がかかる)<br />  既定でホットにするかクールにするかをストレージアカウントで設定できる。<br /> ・コンテナ<br />  BLOBサービス内に無制限に作成できる。<br />  外部からのアクセスレベルを設定できる。<br />  ①Private Access Level(デフォルト)<br />   認証が必要。匿名アクセス不可。<br />  ②Blob Access Level<br />   BLOBへ読み取りアクセスはできるが、コンテナの内容をリスト化して閲覧することはできない。<br />   ⇒URLを知っている特定ファイルにしかアクセスできない<br />  ③Container Access Level<br />   指定のコンテナの内容をリスト化して閲覧できる。<br /> ・コンテナには不変ストレージの設定ができる。(WORM:Write Once Read Many ともいう)<br />  この設定をするとアップロードしたデータの更新・削除ができない。<br />  ⇒更新してはならないケース(金融、医療、法律、保険分野など)で利用する。<br />  一定期間は削除不可、またはホールド(Legal Hold)解除するまでは削除不可のどちらかを指定できる。<br /> ・Lifecycle Management<br />  ファイルのライフサイクルを指定できる。<br />  N日経過後にクール層へ移動、M日経過後にアーカイブ層へ移動、X日経過後に削除、のような指定ができる。<br />  ⇒削除のポリシーはBLOBスナップショットごと削除してくれる。<br /> ・静的Webサイトホスティング<br />  有効にし、HTMLやCSS、Javascript、画像ファイルなどをアップロードするとWEBサイトとして使える。<br />  カスタムドメインの設定も可能。<br /> ・AzCopy<br />  BLOBにファイルをアップロードするコマンドラインツール。バッチ処理向き。<br />  どことなくrobocopyチック。指定オプションも沢山ある。<br /> ・ストレージ操作の.NETのライブラリもあるため、PGに組み込みで使える。<br /> ・Azure Search<br />  Azure Searchでストレージ内検索ができる。<br />  Azure Search自体はAzureのクラウド検索システム。<br />  前文検索的な動きをして、呼び出しもとに結果を返してくれる。<br />  プログラムに組み込んで使う。コグニティブのオプションで画像内検索とかもできるらしい。<br />  BLOB内のファイルにメタデータをつけていればメタデータでの検索も可能。</p> <h1 id="Azure CDN"><a href="#Azure+CDN">Azure CDN</a></h1> <p>・ユーザにコンテンツを分散して配信するサービス。(書いててもよく分からない…)<br /> ・BLOBストレージに置いて展開したいファイルへのアクセスについて、<br />  ユーザは世界中に存在するエッジサーバからファイルを取得できるようになる。<br /> ・なので「ゲームの新作トレーラーを0時に世界同時公開!」とかそういう時に利用することで、<br />  ユーザがすばやくアクセスできたり、中央サーバへの負荷やトラフィックが抑えられる、という感じか。<br />  (現状、業務で使うことはなさそうだな…)<br /> ・製品(価格帯)が4つある。<br />  Azure CDN Standard from Microsoft<br />  Azure CDN Standard from Akamai<br />  Azure CDN Standard from Verizon<br />  Azure CDN Premium from Verizon<br /> ・プロファイルを作成し、ストレージアカウントに割り当てる。<br />  その際にエンドポイント名称(グローバルで一意)を決める。<br /> ・CDNには次のURLでアクセスする。<br />  http://(EndpointName).azureedge.net/(myPublicContainer)/(BlobName)<br /> ・基本、CDNを使うときBLOBストレージのアクセスレベルはBLOBかContainer(外部アクセス可)である。<br />  これをPrivateのままにしたい場合はSASトークンを利用してアクセスする。<br />  この場合、URLの後ろにSASトークンを付与する。<br /> ・「URLの後ろにSASトークンつけると結局SASトークンが公開されていることになる!困る!」と言うときは<br />  「Premium from Verizon」であればURL書き換え機能で対応できる。<br />  これで、指定のURLにアクセスした際に自動でURL末尾にSASトークンを付与するようにできる。<br /> ・利用の際、CORS(クロスオリジンリソース共有)を考慮する必要があるらしい。(何だそれは…)<br />  通常下記の通りらしい。</p> <blockquote> <p>クロスサイト スクリプティング攻撃の可能性を低減させるために、すべての最新の Web ブラウザーには<br /> 同一オリジン ポリシーと呼ばれるセキュリティ制限が実装されています。<br /> これにより、Web ページは他のドメイン内の API を呼び出すことができません。</p> </blockquote> <p> これをなんとかするための話らしい。</p> <blockquote> <p>CORS (クロス オリジン リソース共有) は、あるドメインで実行されている Web アプリケーションが<br /> 別のドメイン内にあるリソースにアクセスできるようにする HTTP 機能です。</p> </blockquote> <p> CSNのCORSの欄で設定可能。</p> <h1 id="Azure Files"><a href="#Azure+Files">Azure Files</a></h1> <p>・ストレージアカウントのうち、「File」に該当する箇所の補足追記。<br /> ・SMBプロトコルを介してアクセスできるのがBLOBとの最大の違い。<br />  ⇒ファイル共有をクライアントPCでマウントできる。<br /> ・ファイル共有で利用する場合、SMB(2.1 or 3.0)でやりとりする。3.0は通信が暗号化されている。<br /> ・クライアントが445ポート(SMB)が空いていてインターネットと疎通できないと使えない。<br />  ⇒REST API経由でやりとりする分にはHTTPS(443)で通信できればよい。<br />   なのでPowershell経由やCLI経由であれば443でいける。<br /> ・クライアントのOSがSMB3.0をサポートしていないと使えない。(Win8.1以降)<br />  ⇒ストレージアカウントと同一リージョン内のAzure VMならWin2008R2でも接近できる模様。<br />   (おそらく:同一リージョン内の通信はイントラ扱いになっているから○という感じか)<br /> ・AzureAD認証をサポート。<br />  …しているが、アクセスするにはクライアントマシンがAzureAD DomainService(AADDS)に参加している必要がある。<br />  また、ADDSドメイン(オンプレやVMのドメコン)に参加しているマシンはAADDSに参加できないため使えない。<br />  AADDSに参加できるのはAzureのマシンなので、オンプレにいるクライアントPCでも使えない。(使える範囲が狭すぎるよ…)<br />  ⇒後述のAzure File Syncを使え、とのこと。<br />  ⇒また、完全な管理者権限が必要な場合はアクセスキーでアクセスする。(AADDSで管理者権限を割り振っても完全でない)<br /> ・ファイル共有の最大割り当てサイズは5TBまで。(ストレージアカウント全体では500TB)<br />  最大ファイルサイズは1TB。<br /> ・スナップショットバックアップの取得が可能。<br />  取得している場合、ファイル共有でファイルのプロパティ「以前のバージョン」より過去ファイルの閲覧・取得が可能。<br /> ・AzureBackupを利用した定期的なスナップショット取得もできる。<br />  ⇒1日1個までらしい。</p> <h1 id="Azure File Sync"><a href="#Azure+File+Sync">Azure File Sync</a></h1> <p>・以下、参考サイト。<br />  https://cloud.nissho-ele.co.jp/blog/azure-file-sharing/<br /> ・Azure Filesとファイルサーバの内容を同期するサービス。<br />  ファイルサーバは複数台立てることができるため、複数のファイルサーバがAzure Filesを通してファイル内容を同期することができる。<br /> ・ファイルサーバを「サーバエンドポイント」、Azure Fileを「クラウドエンドポイント」と呼ぶ。<br />  1つの同期グループにおいて、クラウンドエンドポイントとサーバエンドポイントは1:Nの関係。<br /> ・Azure FilesのバックアップがAzureBackupでできるため、それをもってファイルバックアップとすることができる。<br /> ・障害発生時もAzure Filesからファイル復旧できる。<br /> ・実ファイルはFilesに保持させ、ファイルサーバ上ではポインタ(ショートカットのようなもの)のみ配置することもできる。<br />  これをすることによりファイルサーバのディスク容量を節約できる。<br /> ・ファイルサーバにエージェントを導入する必要がある。<br /> ・Azure File Syncはストレージアカウントと同一リージョンにデプロイする必要がある。<br /> ・同期で帯域を食う場合にはQoSをかけられる。(powershell経由)<br /> ・ファイルサーバはAzure Filesのファイル共有の要件(SMBのバージョン、ポート445解放)を満たす必要がある。<br /> ・ファイルサーバ側にファイルを置くと速やかにAzure Filesに連携される。<br />  が、Azure Filesに直接ファイルを置くとファイルサーバへの連携に1日かかることもある。(らしい)<br /> ・DFS名前空間と組み合わせて使うことができる。</p> <h1 id="インポートジョブ"><a href="#%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%82%B8%E3%83%A7%E3%83%96">インポートジョブ</a></h1> <p>・HDDの内容をBLOBコンテナに移動することができる。<br /> ・最初に、対象HDDをNTFSフォーマットした後、BitLockerで暗号化する。<br /> ・その後、waimportexportツールを使用し、インポート準備ファイル(jrnファイル)を作成する。<br />  ⇒V1とV2がある。ストレージアカウントがStorageV1、V2の時はV2ツール、BLOBストレージの時はV1を使う。<br />  ⇒V2では定義(対象ファイルやドライブ情報)などをCSVに記載して管理する。<br />   Dataset用CSVに対象ファイルを列挙すれば、自動で対象HDDにファイルを収集してくれる。<br /> ・その後、AzurePortalからインポートジョブを作成。<br />  この際、作成したjrnファイルやインポート先のストレージアカウントを指定する。また、配送に関する情報もあわせて入力する。<br /> ・ジョブ作成後、ディスクを指定の住所に発送する。だいたいMSの準備が済むまで7~10日くらいかかる。(SLAはない)<br />  ⇒すぐインポートしなければならない、という要件がある場合はマッチしない。<br /> ・発送後、追跡情報の更新(おそらく発送連絡)をする必要がある。<br />  これを2週間以内に実施しないと自動的にジョブがキャンセルになってしまう。<br /> ・到着後、自動的にストレージアカウント内にファイルが追加されている。</p> <h1 id="エクスポートジョブ"><a href="#%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88%E3%82%B8%E3%83%A7%E3%83%96">エクスポートジョブ</a></h1> <p>・Azureストレージの内容をHDDに移すことができる。<br /> ・まず、エクスポートジョブを作成する。(配送会社や住所の設定、対象ストレージアカウントの設定)<br /> ・NTFSフォーマットしたHDDを発送。<br />  ⇒返送時はBitLockerで暗号化された状態で帰ってくる。<br /> ・インポートと同様に配送状況の更新は必須。<br /> ・届いたディスクを接続し、BitLockerのキーを入力しデータにアクセスできることを確認。</p> <h1 id="Azure Data Box"><a href="#Azure+Data+Box">Azure Data Box</a></h1> <p>・こちらはAzure側でデータ格納デバイスを用意してくれるデータインポートサービス。<br /> ・注文⇒デバイスが届く⇒データを入れる⇒返送⇒データが反映される</p> <h1 id="所感"><a href="#%E6%89%80%E6%84%9F">所感</a></h1> <p>・全然業務で使わないような箇所も勉強できて、いい機会にはなった。<br /> ・ストレージアカウント周辺は「なんとなく」から「ややしっかり」の理解になった。よかった。<br /> ・インポート、エクスポート、DataBoxは仕組みを把握しておくと将来役に立つ日がくるかもしれない。<br /> ・Filesは便利だけど使う日がくるかな…<br /> ・CDNはたぶう使う日はこない。(転職か異動がないかぎり)</p> ANA tag:crieit.net,2005:PublicArticle/16434 2020-12-26T12:56:04+09:00 2020-12-26T12:56:04+09:00 https://crieit.net/posts/Azure-Administrator-Azure-MFA Azure Administratorへの道(2回:Azure MFA) <p>Qrunchからお引越しした記事です : created_at: 2019-07-13 16:30:22 +0900</p> <h1 id="スキルの評価対応"><a href="#%E3%82%B9%E3%82%AD%E3%83%AB%E3%81%AE%E8%A9%95%E4%BE%A1%E5%AF%BE%E5%BF%9C">スキルの評価対応</a></h1> <p>アイデンティティの管理<br />  > Multi-Factor Authentication (MFA) の実装</p> <h1 id="MFAとは"><a href="#MFA%E3%81%A8%E3%81%AF">MFAとは</a></h1> <p>Multi-Factor Authentication<br /> 多要素認証のこと。</p> <p>「アカウント + パスワード」より強固なセキュリティを担保しないといけない時に使う。</p> <h1 id="適用範囲"><a href="#%E9%81%A9%E7%94%A8%E7%AF%84%E5%9B%B2">適用範囲</a></h1> <ul> <li>AzureのSaaS</li> <li>AzureのPaaS</li> <li>AzureのIaaS上に構築したアプリケーション</li> <li>Azureとつながっているオンプレミス上のアプリケーション</li> <li>Office 365</li> </ul> <p>などなど</p> <h1 id="認証方法"><a href="#%E8%AA%8D%E8%A8%BC%E6%96%B9%E6%B3%95">認証方法</a></h1> <ul> <li><p>電話<br /> 電話がかかってくるので、それに出て「#」をプッシュ。<br /> PINの入力を要求するモードもあり。</p></li> <li><p>SMS<br /> 1Way:SMSで通知したパスワードを画面に入力。<br /> 2Way:SMSでパスワードが通知されるので、同じ番号をSMSで返答する。<br /> どちらもPINコードの追記を要求するモードあり。</p></li> <li><p>アプリ認証<br /> MSのアプリを起動して、アプリから認証する。<br /> PINコードの追記を要求するモードあり。</p></li> <li><p>OATH<br /> MSのアプリから発行されるセキュリティトークン(6桁数字)を求められる。<br /> MSのアプリでないOATHトークンアプリ(Googleのやつとか)でも利用できる。</p></li> </ul> <h1 id="認証情報の保管"><a href="#%E8%AA%8D%E8%A8%BC%E6%83%85%E5%A0%B1%E3%81%AE%E4%BF%9D%E7%AE%A1">認証情報の保管</a></h1> <p>Azure Active Directoryに保管。なのでAADがある環境が前提。</p> <h1 id="MFA Server"><a href="#MFA+Server">MFA Server</a></h1> <p>・認証方法によっては必要。<br /> ・オンプレミス上のアプリからMFAを利用する際に必要?<br /> ・オンプレミス上のサーバに構築する。<br /> ・オンプレミスのADやLDAPなどとユーザ情報を同期できる。<br />  AzureMFA⇔MFA Server⇔オンプレのドメコン<br /> ・複数台構築し、内容を同期することが可能。<br />  ⇒冗長性担保。<br /> ・ドメコンにインストールするのは不可。</p> <h1 id="所感、感想"><a href="#%E6%89%80%E6%84%9F%E3%80%81%E6%84%9F%E6%83%B3">所感、感想</a></h1> <p>・多要素認証。7 Payの事件で一躍有名になったね。<br /> ・今の仕事だと使わなそうだなー。<br /> ・銀行系(ネットバンキング)とかだと必須ですね。</p> ANA tag:crieit.net,2005:PublicArticle/16433 2020-12-26T12:53:17+09:00 2020-12-26T12:53:17+09:00 https://crieit.net/posts/Azure-Administrator-Azure-Policy Azure Administratorへの道(1回:Azure Policy) <p>Qrunchからお引越しした記事です : created_at: 2019-07-03 22:35:48 +0900</p> <h1 id="スキルの評価対応"><a href="#%E3%82%B9%E3%82%AD%E3%83%AB%E3%81%AE%E8%A9%95%E4%BE%A1%E5%AF%BE%E5%BF%9C">スキルの評価対応</a></h1> <p>Azure サブスクリプションおよびリソースを管理する。<br /> タグでできることはなんとなくわかるので、使ったことの無いAzure Policyを勉強。</p> <h1 id="Azure Policyとは"><a href="#Azure+Policy%E3%81%A8%E3%81%AF">Azure Policyとは</a></h1> <p>・Azureの利用者にできることを制限する統制の仕組み。<br /> ・RBACによる権限制御はあくまでリソースへのアクセスレベルの話だが、Policyはもっと細かい制御ができる。<br />  ⇒たとえば、「タグ付けのルール」、「LinuxのVMはデプロイさせない」、「Win2008R2は使わせない」などなど。<br /> ・制御する以外にも、ルールが守られているかのチェックにも使える。<br />  ⇒「ルール」に大して「守られているかチェックする」、「ルールを強制する」などのレベルが選べる。</p> <h1 id="定義と割り当て"><a href="#%E5%AE%9A%E7%BE%A9%E3%81%A8%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6">定義と割り当て</a></h1> <p>・イニシアチブ定義とポリシー定義がある。<br /> ・ポリシー定義は1つのルール。イニシアチブ定義はポリシー定義を束ねたもの。グループみたいなものか。<br /> ・割り当てのスコープも指定できる。<br />  ⇒リソースグループ単位や、サブスクリプション単位、管理グループ(サブスクリプションの集まり)単位、など。<br /> ・割り当てたスコープについて、ある特定リソースやリソースグループは除外することができる。</p> <h1 id="ポリシーの作り方"><a href="#%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9">ポリシーの作り方</a></h1> <p>・デフォルトで使えるビルトインの定義がある。<br /> ・ビルトインの定義でやりたいことができない場合は自分で定義を作成する。<br /> ・定義はJSON形式で記述。<br /> ・GitHubに色々ポリシーが公開されている。<br /> ・定めたルールが守られない場合に実施される効果を次の中から選べる。</p> <blockquote> <p>Deny はアクティビティ ログでイベントを生成し、要求は失敗します<br /> Audit: アクティビティ ログ内に警告イベントを生成しますが、要求は失敗しません。<br /> append は定義済みのフィールド セットを要求に追加します。<br /> AuditIfNotExists: リソースが存在しない場合に監査を有効にします。<br /> DeployIfNotExists: リソースが存在しない場合にリソースをデプロイします。<br /> Disabled: リソースがポリシー規則に準拠しているかどうかを評価しません。</p> </blockquote> <p><a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/governance/policy/concepts/definition-structure">引用元</a></p> <h1 id="実践"><a href="#%E5%AE%9F%E8%B7%B5">実践</a></h1> <p>デプロイしたリソースにタグ付けをするPolicyを作ってみる。</p> <p>・ビルトインポリシー「タグとその既定値の追加」の割り当てを実行。<br />  リソースグループに対して割り当て。<br /> ・タグ「env:test」を付与するように設定。<br /> ・VNetをデプロイ。<br /> ・デプロイされたVNetにタグ「env:test」が付与されていることを確認。</p> <h1 id="所感"><a href="#%E6%89%80%E6%84%9F">所感</a></h1> <p>・タグの強制は便利。タグでのコスト管理を実施する際に活かしたい。<br /> ・大きい組織でAzureの利用者が沢山いるときにはとても有用そうな機能。</p> ANA tag:crieit.net,2005:PublicArticle/16432 2020-12-26T12:52:04+09:00 2020-12-26T12:52:04+09:00 https://crieit.net/posts/Azure-Administrator Azure Administratorへの道(0回:受験申し込み) <p>Qrunchからお引越しした記事です : created_at: 2019-06-27 22:52:22 +0900</p> <h1 id="経緯"><a href="#%E7%B5%8C%E7%B7%AF">経緯</a></h1> <p>遠まわしにAzureの資格を取るように上司に言われたので頑張って取る。</p> <h1 id="取得する資格の選定"><a href="#%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E8%B3%87%E6%A0%BC%E3%81%AE%E9%81%B8%E5%AE%9A">取得する資格の選定</a></h1> <p>とりあえず基礎知識はある(はず)なので、Azure Administratorの取得を目指す。<br /> AZ-103</p> <h1 id="参考にした情報"><a href="#%E5%8F%82%E8%80%83%E3%81%AB%E3%81%97%E3%81%9F%E6%83%85%E5%A0%B1">参考にした情報</a></h1> <p>こちらの方のSlideshare<br /> <a target="_blank" rel="nofollow noopener" href="https://www.slideshare.net/AkiraMidouchi/azure-142750519">https://www.slideshare.net/AkiraMidouchi/azure-142750519</a></p> <h1 id="申し込み"><a href="#%E7%94%B3%E3%81%97%E8%BE%BC%E3%81%BF">申し込み</a></h1> <p>Microsoftの資格試験初申し込み。</p> <p>ExamReplayという落ちても1回だけ再受験できる制度があるらしい。<br /> mindhubでバウチャーを購入し、そのコードで申し込み。<br /> ⇒最初良く制度が分からなく、バウチャーなしで申し込みしてしまった。<br />  1回で受かる自身がないので、キャンセルしてバウチャー購入⇒再申し込みした。</p> <h1 id="今後の勉強方針"><a href="#%E4%BB%8A%E5%BE%8C%E3%81%AE%E5%8B%89%E5%BC%B7%E6%96%B9%E9%87%9D">今後の勉強方針</a></h1> <ul> <li>Pluralsightでスキルチェック⇒動画視聴⇒再スキルチェック</li> <li>azure環境で実際に操作してみる</li> <li>Qrunchで学習内容をまとめる。(アウトプット)</li> </ul> <h1 id="所感(と言う名の愚痴)"><a href="#%E6%89%80%E6%84%9F%EF%BC%88%E3%81%A8%E8%A8%80%E3%81%86%E5%90%8D%E3%81%AE%E6%84%9A%E7%97%B4%EF%BC%89">所感(と言う名の愚痴)</a></h1> <p>・Azureの試験は頻繁に更新されていて、正直あまり取る気がしない…<br />  ⇒取得してもまた資格体系が更新されたりするのでは<br /> ・9月までに合格するように目標をたてたが、正直受かる気がしない。がんばろ。<br /> ・ベンダ資格は費用が高いなぁ…自腹はきつい。</p> ANA tag:crieit.net,2005:PublicArticle/16431 2020-12-26T12:48:40+09:00 2020-12-26T12:48:40+09:00 https://crieit.net/posts/Docker-5-Wordpress-Wordpress Dockerの学習 #5 (Wordpressを使おう その2:Wordpressセットアップ) <p>Qrunchからお引越しした記事です : created_at: 2019-05-19 15:22:58 +0900</p> <p>前回MySQLをセットアップしたので、今回はWordpress本体の設定をしていく。<br /> Web公開するのであればApacheも必要だが、今回は割愛。</p> <p>成功するまでだいぶ試行錯誤したので、その流れを記載。</p> <h1 id="Wordpressセットアップ"><a href="#Wordpress%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97">Wordpressセットアップ</a></h1> <h2 id="1回目の失敗:ポートフォワーディング設定漏れ"><a href="#%EF%BC%91%E5%9B%9E%E7%9B%AE%E3%81%AE%E5%A4%B1%E6%95%97%EF%BC%9A%E3%83%9D%E3%83%BC%E3%83%88%E3%83%95%E3%82%A9%E3%83%AF%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E8%A8%AD%E5%AE%9A%E6%BC%8F%E3%82%8C">1回目の失敗:ポートフォワーディング設定漏れ</a></h2> <p>コマンド実行してコンテナ作成。(最初はこれだけで終わると思っていた)<br /> <code>docker run --name wp_con01 wordpress</code></p> <p>作成自体は正常に終了。psコマンドで確認するとポートは80番。<br /> http://192.168.99.100(DockerのIP)へブラウザから接続。<br /> ⇒接続できない。</p> <p>色々調べてみると、ホスト側とコンテナ側でポートフォワーディングの設定を実施しないと接続できない様子。</p> <p>というわけで、stopでコンテナ停止、rmでコンテナ削除を実施した後に、再度コンテナ作成。<br /> <code>docker run --name -p 8080:80 wp_con01 wordpress</code></p> <p>これでホスト側の8080番ポートとコンテナ側の80番ポートのフォワーディング設定が実施された。<br /> psで参照するとこんな感じ。</p> <pre><code>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES eb276daaee38 wordpress "docker-entrypoint.s" 3 hours ago Up 3 hours 0.0.0.0:8080->80/tcp wp_con01 </code></pre> <p>この状態でhttp://192.168.99.100(Docker VMのIP):8080へブラウザから接続。<br /> ⇒無事接続完了!</p> <h2 id="2回目の失敗:コンテナ間のネットワーク設定"><a href="#2%E5%9B%9E%E7%9B%AE%E3%81%AE%E5%A4%B1%E6%95%97%EF%BC%9A%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E9%96%93%E3%81%AE%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E8%A8%AD%E5%AE%9A">2回目の失敗:コンテナ間のネットワーク設定</a></h2> <p>無事Wordpressの設定も完了したので、ブラウザから設定を進める。<br /> が、MySQLの設定内容を埋めて先に進もうとするとDB接続エラーが発生する。</p> <p>「そもそもコンテナとコンテナってNW接続って許可されているんだろうか?」<br /> と、思い色々調査すると、接続させるには設定が必要なことが判明。</p> <p>方法としては--linkでつなげるか、ネットワークを作成しそのネットワークにコンテナを所属させるか、の2通り。<br /> --linkは今後使われなくなる非推奨オプションらしいので、ネットワーク参加の方で設定を実施。</p> <p>まず、ネットワークを作成。<br /> <code>docker network create my_network</code><br /> 作成後、確認。</p> <pre><code>$ docker network ls NETWORK ID NAME DRIVER SCOPE 83102481c8be bridge bridge local 0568528ca361 host host local ef68ec9b2ee9 my_network bridge local d00080a53d5d none null local $ </code></pre> <p>基本、何も指定していないとデフォルトの「bridge」ネットワークに所属するらしいのだが、<br /> このネットワークはDNSの設定がなく、コンテナ名で名前解決ができないらしい。</p> <p>ネットワークを作成したので、そのネットワークに所属させる形でコンテナ再作成。<br /> 前回作成したMySQLのコンテナも作り直す。</p> <p>また、接続に必要な情報を全部環境変数指定してやる方向に変更した。<br /> <code>docker run --name mysql -p 3306:3306 --network my_network -e MYSQL_ROOT_PASSWORD=password -e MYSQL_USER=wp_user -e MYSQL_PASSWORD=password -e MYSQL_DATABASE=wordpress mysql</code></p> <p>--networkで所属ネットワークを作成したmy_networkに指定。</p> <p>(環境変数の補足)<br /> ・MYSQL_ROOT_PASSWORD:管理者パスワード<br /> ・MYSQL_USER:ユーザ名<br /> ・MYSQL_PASSWORD:ユーザのパスワード<br /> ・MYSQL_DATABASE:データベース名</p> <p>続けてWordpressのコンテナ。こちらも接続に必要な情報を環境変数で指定。<br /> <code>docker run --name wp_con01 --link mysql_con01:mysql -p 8080:80 -e WORDPRESS_DB_USER=wp_user -e WORDPRESS_DB_PASSWORD=password wordpress</code></p> <p>こちらも所属ネットワークをmy_networkに指定。</p> <p>(環境変数の補足)<br /> ・WORDPRESS_DB_USER:接続ユーザ<br /> ・WORDPRESS_DB_PASSWORD:接続ユーザのパスワード</p> <p>これでうまくいくはず、と思いきや、再度エラー。</p> <h2 id="3回目の失敗:MySQLのコンテナ名"><a href="#3%E5%9B%9E%E7%9B%AE%E3%81%AE%E5%A4%B1%E6%95%97%EF%BC%9AMySQL%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E5%90%8D">3回目の失敗:MySQLのコンテナ名</a></h2> <p>Wordpress側で次のエラーが発生。mysqlのサービスがない旨のメッセージ。<br /> <code>MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known</code></p> <p>ネットで調査してみると「コンテナ名をmysqlにしないとエラーになる」旨の情報あり。</p> <p>※--linkで(--link test-mysql:mysql)と指定すれば問題なさそうだった。<br />  ただし、今回は--linkを利用しない方向にしたので、コンテナ名を泣く泣くmysqlに変更。<br />  また、docker-composeでの構築であればコンテナ名はmysqlでなくとも問題なさそう?<br />  ほかに何かよい方法があるのかもしれない。</p> <p>この状態で再度Wordpressのコンテナを作成したところ、再度エラー。(orz)</p> <h2 id="4回目の失敗:MySQLの認証設定"><a href="#4%E5%9B%9E%E7%9B%AE%E3%81%AE%E5%A4%B1%E6%95%97%EF%BC%9AMySQL%E3%81%AE%E8%AA%8D%E8%A8%BC%E8%A8%AD%E5%AE%9A">4回目の失敗:MySQLの認証設定</a></h2> <p>Wordpress側で次のエラーが発生。どうも認証周りで失敗している模様。<br /> <code>MySQL Connection Error: (2054) The server requested authentication method unknown to the client</code></p> <p>エラーメッセージで調べてみると、MySQL内ユーザの認証方式を弄ってやらないといけなそうなことが判明。<br /> EXECでMySQLのコンテナに接近し、ALTER文を発行。</p> <pre><code>$ docker exec -it mysql mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 18 Server version: 8.0.16 MySQL Community Server - GPL Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> alter user wp_user identified WITH mysql_native_password by 'password'; Query OK, 0 rows affected (0.13 sec) </code></pre> <p>※ALTER文:<code>alter user [wordpress接続ユーザ] identified WITH mysql_native_password by '[wordpress接続ユーザのパスワード]';</code></p> <p>実行後、再度Wordpressコンテナ作成。<br /> ⇒今度はエラーなし!!!!!!</p> <p>http://192.168.99.100:8080から、ようやく初期設定画面に遷移できた。(つかれた・・・)</p> <h1 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h1> <p>まとめると、次の流れが必要だった。<br /> - 1.ネットワークの作成<br /> <code>docker network create my_network</code><br /> ・コンテナを所属させるネットワークの作成。</p> <ul> <li><p>2.MySQLコンテナの作成<br /> <code>docker run --name mysql -p 3306:3306 --network my_network -e MYSQL_ROOT_PASSWORD=password -e MYSQL_USER=wp_user -e MYSQL_PASSWORD=password -e MYSQL_DATABASE=wordpress mysql</code><br /> ・名前は「mysql」で作成。<br /> ・作成したネットワークに所属させる。<br /> ・環境変数にてユーザやデータベース情報の設定もしてしまう。</p></li> <li><p>3.MySQLの設定変更<br /> <code>docker exec -it mysql mysql -u root -p</code><br /> <code>mysql> alter user wp_user identified WITH mysql_native_password by 'password';</code><br /> ・MySQLにて、Wordpress用のユーザの認証方式をNativeに変更してやる。</p></li> <li><p>4.Wordpressコンテナの作成<br /> <code>docker run --name wp --network my_network -p 8080:80 -e WORDPRESS_DB_USER=wp_user -e WORDPRESS_DB_PASSWORD=password wordpress</code><br /> ・ホストからアクセスするにはポートフォワーディングの設定が必要。<br /> ・作成したネットワークに所属させる。<br /> ・環境変数にて接続情報の設定もしてしまう。</p></li> </ul> <h1 id="所感"><a href="#%E6%89%80%E6%84%9F">所感</a></h1> <p>・すごい苦労したが、ネットワーク等含めてコンテナの考え方を学べてよかった。<br /> ・実際に手を動かすのがやっぱり大事。<br /> ・途中で心が折れそうだったけど、無事作成できてよかった。<br /> ・ネット上はだいたい「--link」でつなげてる情報ばっかりだった。<br /> ・Dockerに限らずそうだけど、問題が基盤(コンテナ)、ミドルウェア、アプリのどれにあるのかの切り分けが大事、かつ難しい。</p> ANA tag:crieit.net,2005:PublicArticle/16430 2020-12-26T12:46:08+09:00 2020-12-26T12:46:08+09:00 https://crieit.net/posts/Docker-4-Wordpress-Mysql Dockerの学習 #4 (Wordpressを使おう その1:Mysqlセットアップ) <p>Qrunchからお引越しした記事です : created_at: 2019-05-19 15:15:39 +0900</p> <p>今回から実際に手を動かして行こうと思う。<br /> とりあえず小さな目標として、ローカル環境でWordpressの利用ができるところまでをやってみる。</p> <h1 id="参考URL"><a href="#%E5%8F%82%E8%80%83URL">参考URL</a></h1> <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/ymstshinichiro/items/01f6a4c299fdb4b832a2">https://qiita.com/ymstshinichiro/items/01f6a4c299fdb4b832a2</a><br /> MYSQLへのログイン。</p> <h1 id="MySqlのセットアップ"><a href="#MySql%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97">MySqlのセットアップ</a></h1> <p>Wordpress自体あまり詳しくないが、どうやらMySQLが必要みたいとの情報をどこかでみた。<br /> MySQLのセットアップをやっていく。</p> <p>まずイメージファイルの有無を確認。</p> <pre><code>$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.7 2f52e94d8acb 3 weeks ago 373MB mysql latest d72169616e20 3 weeks ago 443MB wordpress latest 837092bc87de 5 weeks ago 421MB php latest 750fb3e3d6ef 6 weeks ago 367MB httpd latest d4a07e6ce470 6 weeks ago 132MB hello-world latest fce289e99eb9 4 months ago 1.84kB php 7.0-apache aa67a9c9814f 4 months ago 368MB docker/whalesay latest 6b362a9f73eb 3 years ago 247MB </code></pre> <p>以前落としていたのがあるっぽい。<br /> なければそのまま次でRUNを実行すれば自動でイメージも取得してくるはず。</p> <p>ではrunを実行。コンテナに「--name」オプションで名前をつけて実行。</p> <pre><code>$ docker run --name mysql_con01 mysql error: database is uninitialized and password option is not specified You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD </code></pre> <p>「MYSQL_ROOT_PASSWORD」、「MYSQL_ALLOW_EMPTY_PASSWORD 」、「MYSQL_RANDOM_ROOT_PASSWORD」<br /> のどれかを指定しろとのこと。環境変数を「-e」で指定。</p> <pre><code>$ docker run --name mysql_con01 -e MYSQL_ROOT_PASSWORD=password mysql F:\Docker Toolbox\docker.exe: Error response from daemon: Conflict. The containe r name "/mysql_con01" is already in use by container "a72e4d4a02636be1f3c73722e8 9b0a1d2ab66a55abffb31b3c18a87de5586b4f". You have to remove (or rename) that con tainer to be able to reuse that name. See 'F:\Docker Toolbox\docker.exe run --help'. </code></pre> <p>・・・どうやらERRORが発生していてもコンテナ自体は作成されているようで、<br /> 同一名称が存在する旨のエラーが表示された。削除していく。</p> <pre><code>$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES </code></pre> <p>psコマンドで見てもコンテナは出てこないな・・・。<br /> あ、オプションは無しだと実行中のコンテナしか出ないからか。</p> <pre><code>$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a72e4d4a0263 mysql "docker-entrypoint.s" 3 minutes ago Exited (1) 3 minutes ago mysql_con01 8adaae58b85c docker/whalesay "cowsay Hello World!" 2 weeks ago Exited (0) 2 weeks ago heuristic_torvalds e2d544b0e813 docker/whalesay "Hello-World!" 2 weeks ago Created hardcore_pasteur 64cc887485f4 docker/whalesay "Hello World!" 2 weeks ago Created gifted_robinson 223951c34db3 hello-world "/hello" 2 weeks ago Exited (0) 2 weeks ago laughing_antonelli </code></pre> <p>やはりあるみたいね。消します。</p> <pre><code>$ docker rm mysql_con01 mysql_con01 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8adaae58b85c docker/whalesay "cowsay Hello World!" 2 weeks ago Exited (0) 2 weeks ago heuristic_torvalds e2d544b0e813 docker/whalesay "Hello-World!" 2 weeks ago Created hardcore_pasteur 64cc887485f4 docker/whalesay "Hello World!" 2 weeks ago Created gifted_robinson 223951c34db3 hello-world "/hello" 2 weeks ago Exited (0) 2 weeks ago laughing_antonelli </code></pre> <p>無事消えました。気を取り直して再実行。</p> <pre><code>$ docker run --name mysql_con01 -e MYSQL_ROOT_PASSWORD=password mysql Initializing database 2019-05-19T05:39:10.121840Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release. 2019-05-19T05:39:10.122801Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (my sqld 8.0.16) initializing of server in progress as process 27 2019-05-19T05:39:59.746085Z 5 [Warning] [MY-010453] [Server] root@localhost is c reated with an empty password ! Please consider switching off the --initialize-i nsecure option. 2019-05-19T05:40:25.020508Z 0 [System] [MY-013170] [Server] /usr/sbin/mysqld (my sqld 8.0.16) initializing of server has completed Database initialized MySQL init process in progress... MySQL init process in progress... MySQL init process in progress... 2019-05-19T05:40:29.693459Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release. 2019-05-19T05:40:29.693540Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (my sqld 8.0.16) starting as process 78 2019-05-19T05:40:32.312165Z 0 [Warning] [MY-010068] [Server] CA certificate ca.p em is self signed. 2019-05-19T05:40:32.389363Z 0 [Warning] [MY-011810] [Server] Insecure configurat ion for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory. 2019-05-19T05:40:32.432437Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: re ady for connections. Version: '8.0.16' socket: '/var/run/mysqld/mysqld.sock' p ort: 0 MySQL Community Server - GPL. 2019-05-19T05:40:32.713605Z 0 [System] [MY-011323] [Server] X Plugin ready for c onnections. Socket: '/var/run/mysqld/mysqlx.sock' Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it. Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Sk ipping it. Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it . Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skippin g it. 2019-05-19T05:40:49.327025Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Sh utdown complete (mysqld 8.0.16) MySQL Community Server - GPL. MySQL init process done. Ready for start up. 2019-05-19T05:40:49.617494Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release. 2019-05-19T05:40:49.617603Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (my sqld 8.0.16) starting as process 1 2019-05-19T05:40:52.265763Z 0 [Warning] [MY-010068] [Server] CA certificate ca.p em is self signed. 2019-05-19T05:40:53.604994Z 0 [Warning] [MY-011810] [Server] Insecure configurat ion for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory. 2019-05-19T05:40:53.648528Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: re ady for connections. Version: '8.0.16' socket: '/var/run/mysqld/mysqld.sock' p ort: 3306 MySQL Community Server - GPL. 2019-05-19T05:40:53.921685Z 0 [System] [MY-011323] [Server] X Plugin ready for c onnections. Socket: '/var/run/mysqld/mysqlx.sock' bind-address: '::' port: 33060 </code></pre> <p>ここで出力がStop。どうやら、この状態で待機し続けるらしい。<br /> <code>Ctrl + C</code>で一度抜ける。</p> <p>MySQLへの接続を別プロセスで試行する。というわけでEXECコマンドを使用。</p> <pre><code>$ docker exec -it mysql_con01 mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.16 MySQL Community Server - GPL Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. </code></pre> <p>無事接続できた!せっかくなので適当にSQL発行をして動作確認。</p> <pre><code>mysql> select Host,User from mysql.user; +-----------+------------------+ | Host | User | +-----------+------------------+ | % | root | | localhost | mysql.infoschema | | localhost | mysql.session | | localhost | mysql.sys | | localhost | root | +-----------+------------------+ 5 rows in set (0.00 sec) mysql> exit Bye </code></pre> <p>問題なさそう。</p> <h1 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h1> <p>長々と記載したが、以下コマンドでコンテナ作っただけである。<br /> <code>docker run --name [コンテナ名] -e MYSQL_ROOT_PASSWORD=[パスワード] mysql</code></p> ANA tag:crieit.net,2005:PublicArticle/16429 2020-12-26T12:44:43+09:00 2020-12-26T12:44:43+09:00 https://crieit.net/posts/Docker-3-PS-IMAGES-COMMIT-PUSH-RM-RMI-BUILD Dockerの学習 #3 (PS、IMAGES、COMMIT、PUSH、RM、RMI、(BUILD)) <p>Qrunchからお引越しした記事です : created_at: 2019-05-14 22:08:42 +0900</p> <p>ゴールデンウィークが終わり仕事が始まったため、ログを書く習慣が消えてしまった・・・<br /> あわせて学習も止まってしまいそうだった。危ない危ない。<br /> ちょっとずつでも前に進めていきたい。</p> <p>今回は基本コマンドで学習してないとこの残りをさらっていく。</p> <h1 id="参考URL"><a href="#%E5%8F%82%E8%80%83URL">参考URL</a></h1> <p>1.とても分かりやすいサイト<br /> <a target="_blank" rel="nofollow noopener" href="https://morizyun.github.io/docker/about-docker-command.html">https://morizyun.github.io/docker/about-docker-command.html</a><br /> 2.ドキュメント日本語化プロジェクト(主にコマンドリファレンスを参照)<br /> <a target="_blank" rel="nofollow noopener" href="http://docs.docker.jp/index.html">http://docs.docker.jp/index.html</a><br /> 3.イメージのレイヤ構造について<br /> <a target="_blank" rel="nofollow noopener" href="http://enakai00.hatenablog.com/entry/20140802/1406958412">http://enakai00.hatenablog.com/entry/20140802/1406958412</a></p> <h1 id="PS"><a href="#PS">PS</a></h1> <p>コンテナの状況確認。</p> <ul> <li>コマンド<br /> <code>docker ps [オプション]</code></li> <li>表示例</li> </ul> <pre><code>$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4c01db0b339c ubuntu:12.04 bash 17 seconds ago Up 16 seconds 3300-3310/tcp webapp d7886598dbe2 crosbymichael/redis:latest /redis-server --dir 33 minutes ago Up 33 minutes 6379/tcp redis,webapp/db </code></pre> <ul> <li>例1:実行中のコンテナのみ表示<br /> <code>docker ps</code><br /> オプション無しで実行中のみ表示。</li> <li>例2:全コンテナ表示<br /> <code>docker ps -a</code></li> <li>例3:条件を満たすもののみ表示<br /> <code>docker ps --filter "name=nostalgic"</code><br /> "key=value"の形式で条件指定する。<br /> この例の場合、コンテナ名にnostalgicを含むものを表示する。<br /> keyに指定できるのは次の通り。コマンドリファレンスより引用。<br /> > id(コンテナの ID)<br /> > label( label= か label== )<br /> > name(コンテナの名前)<br /> > exited(整数値 - コンテナの終了コード。実用的なのは --all)<br /> > status(created|restarting|running|paused|exited|dead)<br /> > ancestor( [:] 、 、 ) - 特定のイメージから作られた子コンテナを作成します。<br /> > before(コンテナ ID か名前) - 指定した ID か名前よりも前に作成したコンテナでフィルタ<br /> > since(コンテナ ID か名前) - 指定した ID か名前よりも後に作成したコンテナでフィルタ<br /> > isolation (default|process|hyperv)(Windows デーモンのみ)<br /> > volume(ボリューム名かマウントポイント) - コンテナがマウントしているボリュームでフィルタ<br /> > network(ネットワーク ID か名前)- コンテナが接続しているネットワークでフィルタ</li> <li>例4:GOテンプレートを利用した整形<br /> <code>docker ps --format "table <span>{</span><span>{</span>.ID<span>}</span><span>}</span>\t<span>{</span><span>{</span>.Labels<span>}</span><span>}</span>"</code><br /> (GO言語のテンプレートのことらしいが、使い道がよく分からない・・・)</li> </ul> <h1 id="IMAGES"><a href="#IMAGES">IMAGES</a></h1> <p>イメージの一覧を表示。<br /> Dockerのイメージファイルは元のイメージから修正箇所を層(レイヤ)として重ねていくようなものらしい。<br /> オプション指定でそのレイヤ構造を把握することもできる模様。<br /> 基本的な使い方をする場合はあまり気にしなくてよいところか。<br /> (レイヤの確認は<code>docker history</code>でもできる?)</p> <ul> <li>コマンド<br /> <code>docker images [オプション] [リポジトリ[:タグ]]</code></li> <li>表示例</li> </ul> <pre><code>$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 77af4d6b9913 19 hours ago 1.089 GB committ latest b6fa739cedf5 19 hours ago 1.089 GB <none> <none> 78a85c484f71 19 hours ago 1.089 GB docker latest 30557a29d5ab 20 hours ago 1.089 GB <none> <none> 5ed6274db6ce 24 hours ago 1.089 GB postgres 9 746b819f315e 4 days ago 213.4 MB postgres 9.3 746b819f315e 4 days ago 213.4 MB postgres 9.3.5 746b819f315e 4 days ago 213.4 MB postgres latest 746b819f315e 4 days ago 213.4 MB </code></pre> <ul> <li>例1:イメージファイルを表示<br /> <code>docker images</code><br /> 何も指定しない場合。この場合、中間レイヤと呼ばれる細かいイメージの内容は表示されない。</li> <li>例2:中間レイヤを含めてイメージ表示<br /> <code>docker images -a</code></li> <li>例3:ダイジェスト値を表示<br /> <code>docker images -digest</code></li> <li>例4:javaリポジトリのイメージを表示<br /> <code>docker images java</code><br /> リポジトリ名称は完全一致。javとかでは×。</li> </ul> <h1 id="COMMIT"><a href="#COMMIT">COMMIT</a></h1> <p>停止させたコンテナをイメージファイルにする。<br /> 基本、イメージファイルの管理はDockerfileを利用するのが望ましいため、<br /> COMMITはデバッグやサーバ移動などの時に使うものらしい。<br /> - コマンド<br /> <code>docker commit [オプション] コンテナ [リポジトリ[:タグ]]</code><br /> - 例:コンテナ「c3f279d17e0a」をコミット<br /> <code>docker commit c3f279d17e0a svendowideit/testimage:version3</code></p> <h1 id="PUSH"><a href="#PUSH">PUSH</a></h1> <p>レジストリへイメージへ送信する。PULLの逆。<br /> - コマンド<br /> <code>docker push [オプション] 名前[:タグ]</code></p> <h1 id="RM"><a href="#RM">RM</a></h1> <p>コンテナの削除。<br /> - コマンド<br /> <code>docker rm [オプション] コンテナ [コンテナ...]</code><br /> - 例1:コンテナ「redis」の削除<br /> <code>docker rm redis</code><br /> - 例2:コンテナを強制停止させ削除<br /> <code>docker rm --force redis</code><br /> SIGKILLシグナルを送信し、強制停止させる。</p> <h1 id="RMI"><a href="#RMI">RMI</a></h1> <p>イメージの削除。<br /> ショート ID かロング ID、タグ、digest を指定。<br /> - コマンド<br /> <code>docker rmi [オプション] イメージ [イメージ...]</code><br /> - 例1:test1の削除<br /> <code>docker rmi test1</code><br /> - 例2:イメージIDが「fd484f19954f」のものを強制削除<br /> <code>docker rmi -f fd484f19954f</code><br /> 削除時にコンフリクトを起こす場合は<code>-f</code>か<code>--force</code>指定で強制削除できる。</p> <h1 id="BUILD"><a href="#BUILD">BUILD</a></h1> <p>指定したソースコードからのコンテナ作成。<br /> Dockerfileからの作成などで使う。<br /> DockerfileおよびBUILDについてはその存在のみ確認して、今回は割愛。<br /> (調査していると深みにはまりそうなので)</p> <ul> <li>コマンド<br /> <code>docker build [オプション] パス | URL | -</code></li> </ul> <h1 id="所感"><a href="#%E6%89%80%E6%84%9F">所感</a></h1> <p>・これで一通り基本的なものはおさえた(はず)。<br /> ・DockerFileとBUILDに関しては後でしっかり時間を割いて理解する必要あり。<br />  ただ、DockerFileからは深い沼の香りがする・・・<br /> ・次回こそ色々触ってみるぞ!!!</p> ANA tag:crieit.net,2005:PublicArticle/16428 2020-12-26T12:43:06+09:00 2020-12-26T12:43:06+09:00 https://crieit.net/posts/Docker-2-RUN-EXEC-ATTACH-STOP-KILL-START Dockerの学習 #2 (コンテナの起動・操作コマンド RUN、EXEC、ATTACH、STOP・KILL・START) <p>Qrunchからお引越しした記事です : created_at: 2019-05-04 19:00:26 +0900</p> <p>前回イメージファイルの取得まで勉強したので、今回は起動・操作・停止系の基本コマンドを勉強していく。</p> <h1 id="参考URL"><a href="#%E5%8F%82%E8%80%83URL">参考URL</a></h1> <p>1.とても分かりやすいサイト<br /> <a target="_blank" rel="nofollow noopener" href="https://morizyun.github.io/docker/about-docker-command.html">https://morizyun.github.io/docker/about-docker-command.html</a><br /> 2.ドキュメント日本語化プロジェクト(主にコマンドリファレンスを参照)<br /> <a target="_blank" rel="nofollow noopener" href="http://docs.docker.jp/index.html">http://docs.docker.jp/index.html</a><br /> 3.シグナルについて<br /> <a target="_blank" rel="nofollow noopener" href="https://qiita.com/hoto17296/items/07206f25d8cdfad4d358">https://qiita.com/hoto17296/items/07206f25d8cdfad4d358</a></p> <h1 id="RUN"><a href="#RUN">RUN</a></h1> <p>イメージファイルを元にコンテナを起動する。<br /> このコマンドでコンテナのディスク作成・メインプロセス(アプリケーションのプロセス)開始が実行される。<br /> (RUNというコマンドなのに起動だけでなくMAKEまでするのか・・・)</p> <ul> <li><p>コマンド<br /> <code>docker run [オプション] イメージ[:タグ|@ダイジェスト値] [コマンド] [引数...]</code></p></li> <li><p>例1:イメージファイル「mysql」を元にコンテナ起動<br /> <code>docker run mysql</code><br /> イメージファイルが無いときはイメージのダウンロードも自動実行される。</p></li> <li><p>例2:イメージファイル・タグ指定でコンテナ起動<br /> <code>docker run ubuntu:14.04</code><br /> タグの指定、ダイジェスト値の指定も可能な様子。</p></li> <li><p>例3:コンテナに名前を付ける<br /> <code>docker run --name sql01 mysql</code><br /> 「--name」で任意の名前を付与。<br /> 付けない場合は自動で命名される。</p></li> <li><p>例4:ポートのひも付け(ホスト⇔コンテナ)<br /> <code>docker run -p 8080:80 nginx</code><br /> 「-p ホストのポート:コンテナのポート」で指定。<br /> 上の例の場合、ホストの8080ポートへの通信はコンテナの80ポートへつながっている。<br /> (NAPTみたいな動きをしてくれるってことかな?)</p></li> <li><p>例5:起動したコンテナでBashを使う(既定のアプリでなくBashを起動する)<br /> <code>docker run -it --entrypoint /bin/bash mysql</code><br /> Bashを使いたい今回のケースでは「--entrypoint」を指定する必要がある。<br /> イメージファイルには「ENTRYPOINT」という「起動後に一番最初に実行するコマンド」が<br /> 定義されており、通常はそれが実行される。<br /> ⇒メインプロセスの実行コマンド、という解釈でよいはず。<br /> このケースでは、まずBashを使いたいので、ENTRYPOINTをBashの実行(/bin/bash)で上書きしてやる。<br /> ⇒メインプロセスをBashにしてやる。<br /> 「-i」が「ホストの入力をコンテナの標準出力へつなげる」、<br /> 「-t」が「コンテナの標準出力とホストの出力をつなげる」。<br /> 大抵の場合IO両方を指定すると思うので「-it」とセットで使う模様。<br /> 「アプリケーションのプロセスは起動するけど、それとは別にBashを使いたい」というケースは<br /> 後述のEXECコマンドを使う。</p></li> <li><p>例6:終了時にコンテナ削除<br /> <code>docker run -rm mysql</code><br /> 「-rm」でコンテナの終了時にコンテナを自動で削除してくれる。</p></li> <li><p>補足<br /> リファレンスによると、イメージファイルに定義された次の情報をRUN実行時に上書きできるとのこと。</p> <blockquote> <p>・デタッチドあるいはフォアグラウンドで実行<br /> ・コンテナの識別<br /> ・ネットワーク設定<br /> ・実行時の CPU とメモリの制限<br /> ・権限と LXC 設定</p> </blockquote></li> </ul> <p> コンテナのリソース設定やネットワーク周りの詳細設定もできる模様。<br />  このあたりまで深く理解しようとすると頭がパンクしそうなので、後回し。<br />  ⇒ただ、実運用するとなったら避けては通れなそう。</p> <h1 id="EXEC"><a href="#EXEC">EXEC</a></h1> <p>コンテナに追加のプロセス(メインプロセスとは別のプロセス)を実行させる。<br /> ターミナルアクセスなどに使う。</p> <ul> <li><p>コマンド<br /> <code>docker exec [オプション] コンテナ名 コマンド [引数...]</code></p></li> <li><p>例1:メインプロセスとは別にBashプロセスを起動<br /> <code>docker exec -it web01 /bin/bash</code><br /> 「web01」というコンテナのBashを起動。<br /> RUNの時と同様に「-it」をオプションにつける。<br /> 「-i」は「標準入力(STDIN)を開いたままにする」<br /> 「-t」は「擬似デバイス(ディスプレイ)へ接続」みたいな感じ。</p></li> </ul> <h1 id="ATTACH"><a href="#ATTACH">ATTACH</a></h1> <p>実行中のコンテナのメインプロセスの標準入力、標準出力へ接続する。<br /> ちなみに、接続後「exit」でメインプロセスを終了するとコンテナが停止する模様。</p> <p>なお、コマンドの定義としては<br /> 「メインプロセス 」=「PIDが1のプロセス」として扱っているらしい。</p> <ul> <li><p>コマンド<br /> <code>docker attach [オプション] コンテナ名</code></p></li> <li><p>例1:コンテナ「web01」のプロセスへ接近<br /> <code>docker attach web01</code></p></li> </ul> <h1 id="STOP・KILL・START"><a href="#STOP%E3%83%BBKILL%E3%83%BBSTART">STOP・KILL・START</a></h1> <p>コンテナの停止と開始ができる。<br /> 「コンテナの停止」⇒「コンテナのメインプロセスの停止」<br /> 「コンテナの開始」⇒「コンテナのメインプロセスの開始」<br /> という感じか。</p> <ul> <li><p>コマンド<br /> <code>docker stop [オプション] コンテナ名</code><br /> <code>docker kill [オプション] コンテナ名</code><br /> <code>docker start [オプション] コンテナ名</code></p></li> <li><p>STOPとKILLの違い<br /> STOPは終了信号(SIGTERM)を送信し、一定時間経過後に強制終了信号(SIGKILL)を送信する。<br /> KILLは強制終了信号(SIGKILL)を送信する。<br /> 強制停止の要否によって使い分けか。(シャットダウンとパワーオフ(電源オフ)の関係な様なものか)</p></li> <li><p>例1:コンテナ「web01」を通常停止<br /> <code>docker stop web01</code><br /> オプションなしでstopコマンドを利用した場合、<br /> 終了信号を送って10秒(デフォルト値)経過した後に、強制終了信号を送信する。</p></li> <li><p>例2:コンテナ「web01」を通常停止、ただし強制停止までに1分まつ<br /> <code>docker stop -t 60 web01</code><br /> 「-t」または「--time」で強制終了信号送信までの時間を秒単位で指定することも可能。</p></li> <li><p>例3:コンテナ「web01」を強制停止<br /> <code>docker kill web01</code><br /> メインプロセスの強制終了時はKILL。</p></li> <li><p>例4:コンテナ「web01」を開始<br /> <code>docker start web01</code><br /> メインプロセスの開始。</p></li> </ul> <h1 id="所感"><a href="#%E6%89%80%E6%84%9F">所感</a></h1> <p>・RUNは奥が深そうだ・・・<br />  イメージファイルに定義されていることと違うことがしたい!って<br />  時は色々指定してやらないといけない、って感じか。<br /> ・今回の勉強内容でDockerの概念がだいぶ分かってきた。<br />  参考URL1に記載されているイメージ、コンテナ、プロセスの関係性の図が大分理解できた(気がする)。<br /> ・色んなサイトを見たときのコマンド例で、RUN時にポート番号指定している意味が全然分からなかった。<br />  けど、やっとわかった。<br /> ・次は残りの基本コマンドをサラッとさらって、その次は色々実践してみよう。</p> ANA tag:crieit.net,2005:PublicArticle/16427 2020-12-26T12:39:59+09:00 2020-12-26T12:39:59+09:00 https://crieit.net/posts/Docker-1-PULL Dockerの学習 #1 (イメージファイルとPULLコマンド) <p>Qrunchからお引越しした記事です : created_at: 2019-05-01 17:22:36 +0900</p> <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p>Dockerコマンドの考え方がぼんやりしているので、簡単にまとめておく。<br /> 今回は「そもそもイメージファイルとは」という点とイメージファイルの取得(PULL)についてまとめる。</p> <h1 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h1> <p><a target="_blank" rel="nofollow noopener" href="https://morizyun.github.io/docker/about-docker-command.html">https://morizyun.github.io/docker/about-docker-command.html</a><br /> ↑分かりやすい図がついている分かりやすいサイト。<br /> <a target="_blank" rel="nofollow noopener" href="https://hkdnet.hatenablog.com/entry/2017/06/18/190000#fn:1">https://hkdnet.hatenablog.com/entry/2017/06/18/190000#fn:1</a><br /> ↑イメージとタグの関係性について。<br /> <a target="_blank" rel="nofollow noopener" href="http://docs.docker.jp/index.html">http://docs.docker.jp/index.html</a><br /> ↑ドキュメント日本語化プロジェクト(主にコマンドリファレンスを参照)</p> <h1 id="イメージファイルについて"><a href="#%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">イメージファイルについて</a></h1> <p>・イメージファイル⇒コンテナを作るもと(みたいな解釈であってるはず・・・)<br /> ・イメージファイルはDocker Hub上で名前とタグで管理する。<br /> ・イメージファイル名は次のように管理されることが多い。(参考URLから引用)</p> <blockquote> <p>例: nginx → Docker Hub にある nginx という公式イメージ<br /> 例: hkdnet/app → Docker Hub にある hkdnet さんの app というイメージ<br /> 例: hkdnet.net/nginx → hkdnet.net という Docker registry の nginx# PULL</p> </blockquote> <p>・タグはイメージファイル1つにつき複数保持できる。<br />  ただし、イメージ内で一意である必要があり。大体バージョンや作成タイムスタンプなどを保持する様子。<br /> ・公開されているイメージファイルの中身は変動することがある。<br />  ⇒バージョン値しか書いていないものなどはイメージ内容が変動することがあるらしい。<br />  そのため、当時のイメージ内容がほしい場合はタイムスタンプ指定、細かいリビジョン指定、<br />  または後述のダイジェスト値指定での取得をする必要がある。</p> <h1 id="PULL"><a href="#PULL">PULL</a></h1> <p>レポジトリからイメージを持ってくる。<br /> イメージファイルのダウンロードみたいな感じ。</p> <ul> <li><p>コマンド<br /> <code>docker pull [オプション] 名前[:タグ] | [レジストリ・ホスト[:レジストリ・ポート]/]名前[:タグ]</code></p></li> <li><p>例1:mysqlのイメージを取得<br /> <code>docker pull mysql</code><br /> タグ指定がなしで最新版の公式イメージを取得。</p></li> <li><p>例2:タグによるバージョン指定<br /> <code>docker pull ubuntu:14.04</code><br /> 前述の通り、バージョン14.04の最新リビジョンを取得する様子。<br /> リビジョン単位で取得内容を固定したいのであれば、別のタグを使うほうが良さそう。</p></li> <li><p>例3:関連するタグすべて取得<br /> <code>docker -a pull mysql</code><br /> -a の代わりに --all-tagsでも良いとのこと。</p></li> <li><p>例4:ダイジェスト値指定<br /> そもそもダイジェスト値とは?<br /> ⇒Dockerイメージをリポジトリに登録(PUSH)したときに表示されるキーの様なもの。<br /> PULLした時にも表示されるので、「以前PULLした時とまったく同じイメージがほしい!」というときは、<br /> ダイジェスト値を控えておくとよいのでは。<br /> <code>docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2</code><br /> ⇒「sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2」がDigest値</p></li> <li><p>レポジトリ<br /> 何も指定しないとDocker Hubから取得する。<br /> ⇒なのでインターネットに接続できるように考慮が必要。プロキシ設定とか。<br /> 自分で管理しているレポジトリから取得する場合は、ホスト名やポート番号などを指定。<br /> <code>docker pull myregistry.local:5000/testing/test-image</code><br /> ⇒myregistry.localから5000番ポート経由でtest-imageファイルを取得<br /> レポジトリの指定についてはプロトコルの指示(https://)は不要。<br /> なお、認証が必要な場合はDocker Loginコマンドにて指定が必要な様子。</p></li> </ul> <h1 id="所感"><a href="#%E6%89%80%E6%84%9F">所感</a></h1> <p>・PULLの勉強だけで数時間つかってしまった・・・<br /> ・イメージファイルの概念が漠然としていたので、良い勉強にはなった。<br /> ・ローカルレポジトリも指定できるのは勉強になった。<br />  実際に企業で運用するときはどうしているのかが気になる。GitLab管理とかなのだろうか。</p> ANA tag:crieit.net,2005:PublicArticle/16426 2020-12-26T12:13:58+09:00 2020-12-26T12:13:58+09:00 https://crieit.net/posts/AzureFirewall-SNI-TLS-extension-was-missing AzureFirewall [SNI TLS extension was missing]の理由 <h1 id="前提"><a href="#%E5%89%8D%E6%8F%90">前提</a></h1> <ul> <li>この記事は2019/6/4時点の内容です。(かつ、Qrunchからの移管記事です)</li> <li>筆者の知識不足が著しいため、内容に誤り等ありましたらコメント欄にて指摘お願いします。</li> </ul> <h1 id="記事の目的"><a href="#%E8%A8%98%E4%BA%8B%E3%81%AE%E7%9B%AE%E7%9A%84">記事の目的</a></h1> <ul> <li>AzureFirewallのログを参照して<br /> 「[SNI TLS extension was missing]のメッセージとともに通信が拒否されている!<br /> だけど何のことだかよくわからない!」という感じになっている人向けの内容です。</li> <li>「メッセージの通りじゃん」となる有知識者はお帰りください。</li> </ul> <h1 id="結論"><a href="#%E7%B5%90%E8%AB%96">結論</a></h1> <ul> <li>AzureFirewallを介するTLSで暗号された通信については、<br /> Client Hello時にTLS拡張「server_name」が存在しない場合、通信が許可されない。</li> <li>これはAzureFirewallの意図的な動作であり、仕様である。</li> </ul> <h1 id="経緯"><a href="#%E7%B5%8C%E7%B7%AF">経緯</a></h1> <p>Azure上のVMにソフトウェアをインストールし、そのソフトウェアのライセンス認証を<br /> オンラインで実施しようとしたところ失敗した。<br /> ↓<br /> VMがインターネットへでる際は<br /> 「VM⇒AzureFirewall⇒インターネット」の経路を通るため、AzureFirewallのログを確認。<br /> ↓<br /> ライセンスサーバとの通信が拒否されたログを確認。<br /> そこに[SNI TLS extension was missing]のメッセージが出力されているが、よくわからない。<br /> (意味もよく分からないし、何で出ているのかもよく分からない)<br /> ↓<br /> 問い合わせした結果、上述の通り仕様であることが判明。<br /> 解決策としては「ライセンス認証に関するクライアント⇔サーバ間の通信内容の設定を変える」か、<br /> 「AzureFirewallを介さないで通信する」かのどちらかになる、とのこと。</p> <p>ソフトウェアのサポートと話をしたところ、<br /> 「IPアドレス単位でFirewallの許可設定をしても同事象が発生するか確認してほしい」<br /> といわれたのでNetworkRuleコレクションのほうで認証サーバのIPアドレスを許可したところ、<br /> 事象が解消しました。<br /> (ApplicationRuleのみ発生する事象なのだろうか)</p> <h1 id="SNI、TLS拡張「server_name」とは"><a href="#SNI%E3%80%81TLS%E6%8B%A1%E5%BC%B5%E3%80%8Cserver_name%E3%80%8D%E3%81%A8%E3%81%AF">SNI、TLS拡張「server_name」とは</a></h1> <ul> <li>SNI(Server Name Indication)<br /> 1つのグローバルIPアドレスで、複数の証明書を利用できるようにする仕組み。</li> <li>server_name<br /> SNIを実現するためにのTLS拡張。<br /> TLS通信を行う際のクライアント⇔サーバ間の手続き(TLSハンドシェイク)において、<br /> 最初にクライアント⇒サーバへ「Client Hello」の要求をした際、クライアントが希望するドメイン名を平文で伝える。<br /> それによってサーバがドメインに対応する証明書を使えるようになる。</li> <li>今回AzureFirewallは、クライアントからのリクエストについて、宛先ドメイン名をTLS拡張「server_name」で指定していない場合、その通信はAzureFirewallで破棄します、と言っているわけですね。</li> <li>詳細はWikipedia参照<br /> <a target="_blank" rel="nofollow noopener" href="https://ja.wikipedia.org/wiki/Server_Name_Indication">https://ja.wikipedia.org/wiki/Server_Name_Indication</a></li> </ul> <h1 id="所感"><a href="#%E6%89%80%E6%84%9F">所感</a></h1> <ul> <li>そもそもSSL/TLS周りの知識が無さすぎて、何のことだか全然分からなかった。</li> <li>問い合わせまでしてしまった。</li> <li>知識がある人ならログを見ただけで「そういうことね」となる事象なのでしょう・・・</li> <li>勉強が足りないなぁ・・・</li> </ul> ANA tag:crieit.net,2005:PublicArticle/16425 2020-12-26T12:11:54+09:00 2020-12-26T12:11:54+09:00 https://crieit.net/posts/EXCEL-VBA-SendGrid-WebAPI EXCEL VBAからSendGrid WebAPI経由でメール送信 <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p>(Qrunch からの移管記事です)</p> <p>タイトルの通り、EXCEL VBAからSendGridのWebAPI経由でメール送信をする方法を記載。<br /> 「WebAPIとか全然わからない」の状態から頑張って送信までできるようにしました。</p> <p>普通はCDO.MessageでSendGridへSMTP通信すればいいだけですが、<br /> ネットワーク構成の都合上「外部へのSMTP通信は不許可、HTTP/HTTPSはOK(ただし認証プロキシあり)」という環境化だったので、WebAPIを利用せざるをえませんでした。<br /> ⇒むしろSendGridにWebAPIがあってよかった。</p> <p>同じような境遇の人がいたら参考にしてください。(いるか?)</p> <h1 id="参考URL"><a href="#%E5%8F%82%E8%80%83URL">参考URL</a></h1> <p>1.VBAでのWEB API<br /> <a target="_blank" rel="nofollow noopener" href="https://qiita.com/haseshin/items/4acf31db9a672ed691df">https://qiita.com/haseshin/items/4acf31db9a672ed691df</a><br /> 2.VBAでのWEB API & JSON<br /> <a target="_blank" rel="nofollow noopener" href="https://qiita.com/MakotoIshikawa/items/be902e6bd3fa2e5c5fe5">https://qiita.com/MakotoIshikawa/items/be902e6bd3fa2e5c5fe5</a><br /> 3.SendGridのリファレンス<br /> <a target="_blank" rel="nofollow noopener" href="https://sendgrid.kke.co.jp/docs/API_Reference/index.html">https://sendgrid.kke.co.jp/docs/API_Reference/index.html</a></p> <h1 id="事前作業(SendGridの認証について)"><a href="#%E4%BA%8B%E5%89%8D%E4%BD%9C%E6%A5%AD%EF%BC%88SendGrid%E3%81%AE%E8%AA%8D%E8%A8%BC%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%EF%BC%89">事前作業(SendGridの認証について)</a></h1> <p>「SendGirdのユーザ名とパスワードをどこかで指定するんだろうなぁ」<br /> と思ってたのですが、不要でした。</p> <p>SendGridのポータルサイトからAPIキーを発行してください。<br /> 発行したAPIキーが認証情報になります。</p> <h1 id="実装コード"><a href="#%E5%AE%9F%E8%A3%85%E3%82%B3%E3%83%BC%E3%83%89">実装コード</a></h1> <ul> <li>Sample</li> </ul> <pre><code>Private Sub SendMail() Dim objHTTP As Object Dim json As Variant json = "{""personalizations"":" _ "[{""to"": [{""email"": ""[email protected]""}],""subject"": ""Mail Title""}]," _ """from"": {""email"": ""[email protected]""}," _ """content"": [{""type"": ""text/plain"",""value"": ""Mail Body""}]}" Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0") With objHTTP .Open "POST", "https://api.sendgrid.com/v3/mail/send", False .setRequestHeader "Content-Type", "application/json; charset=UTF-8" .setRequestHeader "Authorization", "Bearer xxxxYourApiKeyxxxxxxxxxxxxxx" .setProxy 2, "proxyhost.com:9293" .setProxyCredentials "proxyUser", "ProxyPassword" .setOption 2, 13056 .send json If .ResponseText <> "" Then MsgBox .ResponseText Else MsgBox "OK" End If End With End Sub </code></pre> <ul> <li><p>流れ<br /> ・JSON形式でメール設定を定義(細かい内容はリファレンスの「V3 Mail Send API概要」参照)<br /> ・MSXML2.ServerXMLHTTP.6.0オブジェクトの生成<br /> ・POSTメソッドでSendGridのMail Send APIをオープン<br /> ・ヘッダ設定。Content-TypeにJsonの指定。<br />  AuthorizationヘッダにAPIキーをセット。Bearerの指定をお忘れなく。<br /> ・プロキシ設定。setOptionの記述はSSL認証に関するエラー回避。<br /> ・送信。エラーの際にはResponseTextにエラー内容が入っているはず。</p></li> <li><p>補足<br /> ・「xxxxYourApiKeyxxxxxxxxxxxxxx」がAPIキーです。<br /> ・プロキシを経由しない環境であれば「setProxy」、「setProxyCredentials」、「setOption」は省略してください。</p></li> </ul> <h1 id="VBAでのJSONファイルの取り扱い"><a href="#VBA%E3%81%A7%E3%81%AEJSON%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%8F%96%E3%82%8A%E6%89%B1%E3%81%84">VBAでのJSONファイルの取り扱い</a></h1> <p>JSONファイルをVBAでまじめに取り扱うのであれば「VBA-JSON」の利用なども検討してください。<br /> ⇒参考URL3の記事に詳しく記載されています。</p> <h1 id="所感"><a href="#%E6%89%80%E6%84%9F">所感</a></h1> <p>・VBAでのWebAPI利用なんてサッパリだ、の状態からなんとか実現できました。<br /> ・以外にVBA&REST APIの情報がネットに転がっていて助かった…</p> ANA tag:crieit.net,2005:PublicArticle/16424 2020-12-26T12:08:41+09:00 2020-12-26T12:08:41+09:00 https://crieit.net/posts/Docker-Toolbox-Windows-7-64bit Docker Toolbox 導入手順メモ(Windows 7 64bit版) <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/yogoreba/items/1aa5311e2f76eb6b4a99">Qiita記事</a>からQrunchへ移管したものを、Crieit に移管。<br /> 自己学習用にWindows 7へDocker toolboxをインストールした際の構築メモ。</p> <h1 id="参考記事"><a href="#%E5%8F%82%E8%80%83%E8%A8%98%E4%BA%8B">参考記事</a></h1> <p>インストールまで<br /> <a target="_blank" rel="nofollow noopener" href="https://qiita.com/witchy/items/99235291a6bd5fdee054">https://qiita.com/witchy/items/99235291a6bd5fdee054</a></p> <h1 id="環境"><a href="#%E7%92%B0%E5%A2%83">環境</a></h1> <p>Windows 7 Professional Edition (64bit)</p> <h1 id="事前作業"><a href="#%E4%BA%8B%E5%89%8D%E4%BD%9C%E6%A5%AD">事前作業</a></h1> <p><strong>BIOSの仮想化支援機構を有効にしておく。</strong><br /> BIOS⇒CPU⇒intel virtualization technology</p> <p>最初から有効になっているのであれば問題なし。</p> <p>VirtualBoxを使う前の事前準備。<br /> (これを設定しなかったため、後続作業でエラーになりました・・・)</p> <h1 id="ダウンロード"><a href="#%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89">ダウンロード</a></h1> <p>ダウンロード<br /> <a target="_blank" rel="nofollow noopener" href="https://docs.docker.com/toolbox/overview/#ready-to-get-started">https://docs.docker.com/toolbox/overview/#ready-to-get-started</a></p> <p>Windows用のインストーラを取得</p> <h1 id="インストール"><a href="#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">インストール</a></h1> <p>1.DockerToolbox.exeを起動<br /> 2.すべて初期設定のままインストールまで実行<br />   このあたりはお好みで設定変更もOK。<br />   VirtualBox環境もなかったのでFULLインストール。<br /> 3.参考記事の内容にしたがって、VMDKファイルの移動<br />   および、vboxファイル内のVMDK参照先修正。<br /> 4.正常終了</p> <h1 id="起動"><a href="#%E8%B5%B7%E5%8B%95">起動</a></h1> <p>Docker Quickstart Terminalを起動<br /> ⇒正常に起動したらOK</p> <h1 id="HELLO WORLD"><a href="#HELLO+WORLD">HELLO WORLD</a></h1> <ul> <li><p>通常版<br /> <code>$ docker run hello-world</code></p></li> <li><p>くじらに言わせる版<br /> <code>$ docker run docker/whalesay cowsay Hello World!</code></p></li> </ul> <p>それぞれimageのダウンロード⇒実行まで実施</p> <h1 id="詰まったところ、操作ログ"><a href="#%E8%A9%B0%E3%81%BE%E3%81%A3%E3%81%9F%E3%81%A8%E3%81%93%E3%82%8D%E3%80%81%E6%93%8D%E4%BD%9C%E3%83%AD%E3%82%B0">詰まったところ、操作ログ</a></h1> <p>・Docker Quickstart Terminalを起動したが、エラー<br />  ⇒64bit版のCPUがみあたらない、みたいな感じの内容<br /> ・Virtual Boxを起動して再度試行<br />  ⇒VERR_VD_IMAGE_READ_ONLYのエラーが出る。<br />  ⇒ログの内容的には「VMDKファイルへの更新権限が無い」みたいな感じなのに、<br />   フォルダのアクセス権変更等でも上手くいかない<br /> ・BIOSの仮想化支援機構をオン、GUI(kitematic)経由でVM作り直し<br />  ⇒うまくいった!</p> <h1 id="所感"><a href="#%E6%89%80%E6%84%9F">所感</a></h1> <p>・インストールからつまづいたなぁ…<br /> ・エラー「VERR_VD_IMAGE_READ_ONLY」が出る理由がよくわからない。<br />  ⇒色々検索してみたらVMの展開にそもそも失敗していると出力されたりするらしい。<br /> ・VirtualBoxを始めてみたけど、良さそうな仮想化ソフトですね。<br />  (今までVMware、Hyper-Vあたりしか触ってなかったので新鮮)</p> ANA