ごった煮

色々な事を書いてます

Chromium Edge のプレビュー機能を使う方法について

Chromium Edge の完成度が大分上がってきましたが、まだデフォルトでオンになっていない便利機能が結構あります。

自分のメモ代わりにそれの有効化についてまとめます。

今回の環境

今回は、以下の環境での話になります。 f:id:papemk2:20191031183213p:plain

プレビュー機能を有効化する

以下をアドレスバーに打ち込みます。

edge://flags/

これによってプレビュー機能の管理画面にジャンプします。

f:id:papemk2:20191031183255p:plain

検索窓に適当に何か入れてみると色々出てきます。 例えば通知周りだと以下のような感じ

f:id:papemk2:20191031183743p:plain

他にも、Microsoft Edge blog で紹介された Collections なども f:id:papemk2:20191031183904p:plain

Enable にして再起動すると使えるようになります。

まとめ

いち早く試してみたい人は、使ってみましょう。(自己責任で)

Office 365 の MFA を有効にする

Admin Center にアクセスできない権限で、Office 365 に MFA を有効化しようとすると、画面のリンクを辿ってもどこにもリンクが見当たらない等いろいろあれなのでメモとして残します。

やり方

とりあえず Google に聞いてみます。

office365 mfa setup link

これで検索します。 リンクが見つかります。

f:id:papemk2:20191015181143p:plain

account.activedirectory.windowsazure.com

このページで画面の手順に従うと MFA が有効化できます。

まとめ

MFA は、セキュリティを向上させるうえでかなり重要なので出来るだけ有効化しておきましょう。

それにしてもこれはひどい

AAD のゲストユーザでも SQL Database の AAD 認証を使う話

SQL Database は、 AAD ユーザを使ったログインが出来ますが、外部の AAD からのゲストユーザの場合、直接権限付与が出来ないので、外部ユーザでもログイン出来るようにする方法をまとめます。

仕組み

これを実現するための仕組みは、以下のような形です。

  1. AAD にグループを作成する
  2. 作成したグループにゲストユーザを追加する
  3. グループを DB ユーザとして登録する

この流れで実現が可能です。

グループを作成して、ゲストユーザを追加までは、今回の本質ではないので省略です。

権限付与は、以下の SQL を流すだけで OK です。

GO

CREATE USER [グループ名] FROM EXTERNAL PROVIDER;

ALTER ROLE db_owner ADD MEMBER [グループ名];

GO

これを実行するとユーザ作成完了です。

CREATE USER [グループ名] に FROM EXTERNAL PROVIDER を付けると、AAD のユーザを DB のユーザとして追加するという構文になります。

グループ名に、作成したグループの名前を入れて実行すると、そのグループを DB のユーザとして登録できます。

ゲストユーザ以外なら、ユーザ名にメールアドレスを入れてやると AAD のユーザを DB ユーザに追加できます。

ログインする際、master 以外の DB にユーザを作成した場合は、SSMS などで接続する際に DB 名を指定してやる必要があるので気を付けましょう。

まとめ

SQL Database に繋ぎに行く場合、AAD を使ってセキュアに繋ぐことが自分たちのデータを保護する上でとても重要です。

ゲストユーザ以外を追加する場合でも、グループ単位でまとめてユーザ作成をしておけば、権限の付与やはく奪という作業の手間を省くことが出来るので、ぜひ使ってみてください。

Azure CLI で Azure Monitor に登録されているアラートの情報を取得する

Azure を使っていると監視で Azure Monitor を使うと思いますが、毎回似たようなことを手動でやるのもしんどいので CLI でいい感じにした方が色々楽ですよね

ということで今回は、Azure CLI でAzure Monitor を触るための第一歩をまとめます。

Azure CLI でメトリックアラートの情報を取得する

とりあえず az コマンドを使えるように Azure CLI を入れるか Windows Terminal で Cloud Shell に繋ぎましょう

以下のコマンドで Azure Monitor に登録されているメトリックアラートの情報が取得できます。

az monitor metrics alert list

このコマンドで、現在選択しているサブスクリプションのすべてのアラートが表示されます。(デフォルトだとJson形式)

[
  {
    "actions": [
      {
        "actionGroupId": "アクショングループid",
        "webhookProperties": null
      }
    ],
    "autoMitigate": null,
    "criteria": {
      "additionalProperties": null,
      "allOf": [
        {
          "criterionType": "StaticThresholdCriterion",
          "dimensions": [],
          "metricName": "Http5xx",
          "metricNamespace": "microsoft.web/sites",
          "name": "cond0",
          "operator": "GreaterThan",
          "threshold": 0.0,
          "timeAggregation": "Count"
        }
      ],
      "odatatype": "Microsoft.Azure.Monitor.SingleResourceMultipleMetricCriteria"
    },
    "description": "High CPU",
    "enabled": true,
    "evaluationFrequency": "0:01:00",
    "id": "リソースid",
    "lastUpdatedTime": null,
    "location": "global",
    "name": "CLI_Test",
    "resourceGroup": "Staging",
    "scopes": [
      "監視ターゲットid"
    ],
    "severity": 2,
    "tags": null,
    "type": "Microsoft.Insights/metricAlerts",
    "windowSize": "0:05:00"
  }
]

結果は、上のような感じです。

az monitor alert list

というコマンドもありますが、将来的に廃止されるようなので

az monitor metrics alert list

を使用しましょう。

結果をフィルタする

単純に json でデータをドカンと落としても、ほとんどの情報は、必要のないデータなので必要なデータだけ出すようにフィルタを掛けましょう。 Azure CLI では、結果を jmespath 方式でフィルタ出来ます。

az monitor alert list --query "jmespathのクエリ"

という形でフィルタが出来ます。

アラート自体のリソースid と名前だけを表示するようにするクエリは、以下のような感じです。

az monitor alert list --query "[*].[id,name]"

これを実行すると以下のような結果が返されます。

[
  [
    "リソースid",
    "リソース名"
  ]
]

まとめ

Azure CLI で簡単にAzure Monitor の情報を取得できました。

CLI からアラートの作成なども行えるので、よくある VM のリソース監視や DB のリソース監視などのように大体みんな同じようなアラートを設定するような場合に、一つテンプレートを作っておけば簡単に同じようなアラートを展開できるためミスも減らせて非常に有意義です。

積極的に使っていきましょう。

Windows10がスリープした直後に復帰を繰り返す件に対応した話

タイトルの通り、ここ最近自宅のWindows10マシンがスリープした直後にすぐ復帰を繰り返しスリープ機能が実質死んでしまったので、その時に行った対処法をまとめます。

発生している事象

  • Windowsのスリープ機能でスリープモードに入る → 5秒程ですぐ復帰する

いつぐらいから

  • Windows 10を1903に更新した直後から

原因の調査

  • Event Viewerを見てみましょう

Event Viewerでの調査

Event Viewer > Windows Logs > System に電源関連などシステム周りのログが残っているのでそれを開きます。 SourceがPower-Troubleshooter を見るとそれっぽいログが残っていました。

f:id:papemk2:20190831112733p:plain

イベントのログを見ると、Wake Source: Device - Realtek PCIe GbE Family Controller とありました。

f:id:papemk2:20190831112841p:plain

マザーボードのネットワークコントローラが悪さをしているようです。

とりあえずこのデバイスがスリープ復帰出来ないように設定を変えます。

バイスの設定を変える

Device Managerから設定を変更します。

今回の場合は、ネットワークコントローラなのでNetwork adaptersの下にいました

f:id:papemk2:20190831113411p:plain

このプロパティを変更します。

Power Managementタブにこの設定があります。

f:id:papemk2:20190831113552p:plain

Allow this device to wake the computer にチェックが入っているとそのデバイスからスリープ復帰が出来るようになるのでチェックを外します。 これで解決です。

まとめ

Windowsで何か困ったらEvent Viewerを見てみましょう。

OData用のPocoを生成する(C#)

ODataを使用する際、OData用ライブラリを使う場合などでPocoがあると何かと便利なので、Pocoを生成する簡単な方法についてメモを残します。

やってみる

ツールを入れる

odata2pocoという便利なツールがOSSで公開されているのでこちらを入れます。 dotnetコマンドが入っている前提なので、先にdotnetコマンドを入れておきましょう。(dotnetコマンドを使わない方法も一応あります。)

dotnetコマンド

dotnet tool install --global OData2Poco.dotnet.o2pgen  

何もエラーが出なければインストール完了です。

使ってみる

基本的なコマンドは、

dotnet o2pgen

です。

認証があるURLに対してのコマンドは、以下のような感じ

dotnet o2pgen -r "Url" -u "ユーザID" -p "パスワード" -o "認証方式"

認証方式は、none、basic、token、oauth2の4種類、デフォルトはnoneなので、basic認証が掛かっている対象に対してユーザIDとパスワードを設定しただけで 認証方式を指定しないと認証エラーが返ってくるので注意が必要です。

これを実行するとpoco.csというPocoが生成されます。 ファイル名を指定する場合などは、以下のような感じです。

dotnet o2pgen -r "Url" -f "ファイル名" -x "メタデータファイル名" -u "ユーザ名" -p "パスワード" -o "認証方式"

まとめ

生のODataもいいけどPocoがあると便利ですよね

ASP.NET Core Identityをシンプルに使うための実装方法

ASP.NET Core Identiyは、アプリケーションにメンバーシップ機能を実装する仕組みとしては、かなり優秀です。 テンプレートでそのまま普通のメンバーシップ機能を使用可能です。

ですが、ロール機能など場合によって使わない機能もデフォルトで付いてくるため、それらを削除して使えるようにしてみます。

実装方法

今回は、認証付きのASP.NET Core テンプレートを使用します。

実装に必要な全コードは、以下のものです。 startup.csのConfigureServicesに以下を実装します。

            services.AddIdentityCore<IdentityUser>()
                .AddDefaultUI(UIFramework.Bootstrap4)
                .AddEntityFrameworkStores<ApplicationDbContext>();

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = IdentityConstants.ApplicationScheme;
                options.DefaultChallengeScheme = IdentityConstants.ApplicationScheme;
                options.DefaultSignInScheme = IdentityConstants.ExternalScheme;
            })
            .AddCookie(IdentityConstants.ApplicationScheme, o =>
            {
                o.LoginPath = new PathString("/Account/Login");
                o.Events = new CookieAuthenticationEvents()
                {
                    OnValidatePrincipal = SecurityStampValidator.ValidatePrincipalAsync
                };
            })
            .AddCookie(IdentityConstants.ExternalScheme, o => 
            {
                o.Cookie.Name = IdentityConstants.ExternalScheme;
                o.ExpireTimeSpan = TimeSpan.FromMinutes(5.0);
            })
            .AddCookie(IdentityConstants.TwoFactorRememberMeScheme, o =>
            {
                o.Cookie.Name = IdentityConstants.TwoFactorRememberMeScheme;
            })
            .AddCookie(IdentityConstants.TwoFactorUserIdScheme, o =>
            {
                o.Cookie.Name = IdentityConstants.TwoFactorUserIdScheme;
                o.ExpireTimeSpan = TimeSpan.FromMinutes(5.0);
            });
            services.AddScoped<ISecurityStampValidator, SecurityStampValidator<IdentityUser>>();

AddIdentityCoreは、ユーザテーブルだけを指定可能なので、ユーザテーブルのみの実装でIdentityを使用可能です。

まとめ

無駄なコードがあると見通しが悪くなりがちなので、いらない機能は、削除してしまいましょう。