# Azure App Gateway (高度な設定)

<div data-full-width="true"><figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2Fz8OxTvYgVGNFlKs7mBGw%2FAzure%20Container%20Service.jpg?alt=media&#x26;token=4b089185-96f2-4117-ac64-cd5ecbc763b9" alt=""><figcaption></figcaption></figure></div>

## 概要

本ガイドでは、Azure Application Gatewayを使用して安全なVNetでKeeperオートメーターを公開するための手順を解説します。この方式は、Azureコンテナーアプリの設定よりも高度となりますので、Azure App Gatewayや暗号化されたSAMLリクエストを使用する必要がない場合は、[Azureコンテナーアプリ](https://docs.keeper.io/sso-connect-cloud/device-approvals/automator/azure-container-app)方式をご使用ください。

この方式では、すでにSSL証明書をお持ちであることを確かにしてください。お持ちでない場合は、[カスタムSSL証明書](https://docs.keeper.io/sso-connect-cloud/device-approvals/automator/custom-ssl-certificate)ページの手順をご参照ください。

## 手順 <a href="#prerequisites" id="prerequisites"></a>

1. **Azureクラウドシェルを開く**

portal.azure.comにログインし、クラウドシェルのアイコンをクリックします。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FzF8Bky4JB8EVN4VPh2Cx%2Faz%20cloudshell.png?alt=media&#x26;token=70b95ce4-34eb-44ee-b1d1-5636b6233df7" alt=""><figcaption><p>クラウドシェルを起動</p></figcaption></figure>

2. **ご希望の地域でリソースグループを作成**

Azureにリソースグループがまだ存在しない場合は作成します。こちらの例では`eastus`の地域を使用していますが、必ずお客様の地域をご使用ください。

```
az group create --name keeper_automator_rg --location eastus
```

3. **ストレージアカウントの作成**

ストレージアカウントがまだ存在しない場合は作成します。正しい地域 (useeast) と上のリソースグループ名を使用するようにします。**keeperautomatotorstorageを置き換えるのに選択する名前は、azureではグローバルで他に存在しないものである必要があります。**

<pre data-overflow="wrap"><code>az storage account create -n <a data-footnote-ref href="#user-content-fn-1">keeperautomatorstorage </a>-g keeper_automator_rg -l eastus --sku Standard_LRS
</code></pre>

4. **ファイルシェアの作成**

ファイルシェアが存在しない場合は作成します。

<pre data-overflow="wrap"><code>az storage share create --account-name <a data-footnote-ref href="#user-content-fn-2">keeperautomatorstorage </a>--name keeperautomatorfileshare
</code></pre>

現在のシェアを表示します。

<pre><code>az storage share list --account-name <a data-footnote-ref href="#user-content-fn-2">keeperautomatorstorage</a>
</code></pre>

5. **コンテナー用にバーチャルネットワーク (VNet) と１件のSubnetを作成**

{% code overflow="wrap" %}

```
az network vnet create --address-prefixes 10.100.0.0/16 --name keeper_automator_vnet --resource-group keeper_automator_rg --subnet-name keeper_automator_subnet --subnet-prefixes 10.100.2.0/24
```

{% endcode %}

6. **バーチャルネットワークをサービスエンドポイントで更新**

{% code overflow="wrap" %}

```
az network vnet subnet update -g keeper_automator_rg -n keeper_automator_subnet --vnet-name keeper_automator_vnet --service-endpoints Microsoft.Storage --delegations Microsoft.ContainerInstance/containerGroups
```

{% endcode %}

7. **ストレージキーの取得**

アカウントのストレージキーを見つけるには以下のコマンドを使用します。ストレージアカウント名は実際の名前に置き換えます。

<pre data-overflow="wrap"><code>az storage account keys list --resource-group keeper_automator_rg --account-name <a data-footnote-ref href="#user-content-fn-2">keeperautomatorstorage</a>
</code></pre>

以下のようなkey1の値をコピーします。

```powershell
"value": "zuVgm9xnQNnxCQzY=5n4Ec6kxhDn2xMZSfpwZnTeqsyGaHd5Abn584mpAP3xamg3rGns4=Fd7FeFsaR6AgtnqW=="
```

8. **サブネットIDの取得**

サブネットIDを見つけるには以下のコマンドを実行します。

{% code overflow="wrap" %}

```
az network vnet subnet list --resource-group keeper_automator_rg --vnet-name keeper_automator_vnet | grep "id"
```

{% endcode %}

サブネットIDのパスを \_subnetで終わるところまで全部コピーします。以下はその例です。

{% code overflow="wrap" %}

```powershell
"id": "/subscriptions/abc123-abc123-abc-123/resourceGroups/keeper_automator_rg/providers/Microsoft.Network/virtualNetworks/keeper_automator_vnet/subnets/keeperautomator_appgw_subnet"
```

{% endcode %}

9. YAMLコンテナーファイルの作成

ローカルで、`automator`などの名前でフォルダを作成します。

任意のエディタを使用して、そのフォルダー内に以下の内容を含む**automator.yml**というファイルを作成します。

<pre data-title="automator.yml" data-overflow="wrap"><code><strong>apiVersion: '2021-07-01'
</strong>location: eastus
name: keeperautomatorcontainer
properties:
  containers:
  - name: keeperautomatorcontainer
    properties:
      image: keeper/automator:latest
      ports:
      - port: 443
        protocol: TCP
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
      volumeMounts:
        - name: automatorvolume
          mountPath: /usr/mybin/config
  osType: Linux
  restartPolicy: Always
  sku: Standard
  volumes:
  - name: automatorvolume
    azureFile:
      shareName: keeperautomatorfileshare
      readOnly: false
      storageAccountName: <a data-footnote-ref href="#user-content-fn-3">keeperautomatorstorage</a>
      storageAccountKey: <a data-footnote-ref href="#user-content-fn-4">XXX-YOUR-KEY-XXX</a>
  subnetids:
    - id: /subscriptions/<a data-footnote-ref href="#user-content-fn-5">XXX-YOUR-SUBNET</a>/path/to/subnets/keeper_automator_subnet
      name: keeper_automator_subnet
tags: null
type: Microsoft.ContainerInstance/containerGroups
</code></pre>

前の手順の設定に基づいて文字列の値を変更する必要がある箇所が複数あります。

* サブネットIDは、手順8で取得したIDのフルパスと一致する必要があります。
* storageAccountNameは手順3の値と一致する必要があります。
* storageAccountKeyは手順7の値と一致する必要があります。

10. SSL証明書とSSLパスワードファイルのアップロード

Azureインターフェイスから、\[リソースグループ] > \[ストレージアカウント] > \[ファイルシェア]に移動し、作成したオートメーターファイルシェアに移動します。ここから、automator.ymlファイル、SSL証明書ファイル、SSL証明書パスワードファイルをアップロードします。

{% hint style="info" %}
ファイルの名前が automator.yml ssl-certificate.pfx および ssl-certificate-password.txt であることを確認してください。
{% endhint %}

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FcvlNeJtARKj7ASAJq2mU%2FScreenshot%202022-11-11%20at%204.03.20%20PM.png?alt=media&#x26;token=ac47734a-781e-4808-9775-1759adfc5a46" alt=""><figcaption><p>ファイルのアップロード</p></figcaption></figure>

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FWWMhLO4wBI8tG1bGuP7l%2FScreenshot%202022-11-11%20at%204.05.11%20PM.png?alt=media&#x26;token=680fe886-afaf-453b-a465-6b13195e5a6a" alt=""><figcaption></figcaption></figure>

11. **3つのファイルをローカルのCLIワークスペースにコピーします**

{% code overflow="wrap" %}

```
az storage copy -s https://keeperautomatorstorage.file.core.windows.net/keeperautomatorfileshare/automator.yml -d .

az storage copy -s https://keeperautomatorstorage.file.core.windows.net/keeperautomatorfileshare/ssl-certificate.pfx -d .

az storage copy -s https://keeperautomatorstorage.file.core.windows.net/keeperautomatorfileshare/ssl-certificate-password.txt -d .
```

{% endcode %}

12. **コンテナーインスタンスの作成**

`automator.yml`の設定を使用してコンテナーを作成します。

```
az container create -g keeper_automator_rg -f automator.yml
```

応答でコンテナの**内部IP**を取得します。

<pre data-overflow="wrap"><code><strong>az container show --name keeperautomatorcontainer --resource-group keeper_automator_rg --query ipAddress.ip --output tsv
</strong></code></pre>

後で使用するために、このIPの変数を設定します。以下はその例となります。

{% tabs %}
{% tab title="PowerShell" %}

<pre><code><strong>$aciPrivateIp=10.100.2.4
</strong></code></pre>

{% endtab %}

{% tab title="Bash" %}

<pre><code><strong>aciPrivateIp=10.100.2.4
</strong></code></pre>

{% endtab %}
{% endtabs %}

13. **アプリケーションゲートウェイサブネットの作成**

<pre data-overflow="wrap"><code><strong>az network vnet subnet create --name keeperautomator_appgw_subnet --resource-group keeper_automator_rg --vnet-name keeper_automator_vnet --address-prefix 10.100.1.0/24
</strong></code></pre>

14. **アプリケーションゲートウェイの作成**

<pre data-overflow="wrap"><code>az network application-gateway create --name KeeperAutomatorAppGateway --location eastus --resource-group keeper_automator_rg --sku Standard_v2 --public-ip-address AGPublicIPAddress --cert-file ssl-certificate.pfx --cert-password <a data-footnote-ref href="#user-content-fn-6">XXXXXX </a>--vnet-name keeper_automator_vnet --subnet keeperautomator_appgw_subnet --frontend-port 443 --http-settings-port 443 --http-settings-protocol Https --servers 10.100.2.4 --priority 100
</code></pre>

XXXXXXの箇所でSSL証明書のパスワードが置き換えられていることを確かにします。

15. **パブリックIPを見つける**

Azure portalのインターフェイスで、\[リソースグループ] > \[アプリゲートウェイ]に移動し、パブリックIPアドレスをメモします。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FerUygxz7f6d7OO1OkCwE%2Fpublic_ip.jpg?alt=media&#x26;token=d7a6f9dc-16a6-4344-95bc-d53de1a65e6d" alt=""><figcaption><p>パブリックIPを取得</p></figcaption></figure>

16. **DNSのルーティング**

オートメーターサービスのDNS (例: automator.company.com) が、Azureコンテナーサービスが手順 15で生成したIPアドレスを指していることを確かにします。

{% hint style="warning" %}
DNS名はSSL証明書のサブジェクト名と一致する必要があります。一致しない場合、リクエストは失敗します。
{% endhint %}

17. **正常性プローブの作成**

正常性プローブは、オートメーターサービスが実行されていることをApp Gatewayに通知します。Azure portalのインターフェイスからAutomator App Gatewayを開き、左側のメニューから\[正常性プローブ]をクリックします。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2F1QFA3XvfeFMFrIFX6WZo%2FScreenshot%202022-11-11%20at%205.15.20%20PM.png?alt=media&#x26;token=d008b79e-bf7a-4d4f-aac9-dc557c697078" alt=""><figcaption><p>正常性プローブ</p></figcaption></figure>

次に、以下のスクリーンショットに見られる設定で新しい正常性プローブを作成します。必ずホストを手順16で設定したFQDNに置き換えます。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FdLCwh2FuwKxYYetPcEjJ%2FScreenshot%202022-11-11%20at%205.17.29%20PM.jpg?alt=media&#x26;token=e369cf64-51b0-48ab-872a-fb6a40a85347" alt=""><figcaption><p>正常性プローブの設定</p></figcaption></figure>

\[テスト]をクリックしてプローブを追加します。コンテナIPがホスト名に適切にアドレス指定されていれば、テストは成功します。

18. **ウェブアプリケーションファイアウォールの設定**

Azure portalのインターフェイスからAutomator App Gatewayを開き、左側の\[ウェブアプリケーションファイアウォール] をクリックします。 WAF V2を有効にして以下の画面のように設定します。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FceDRggjr6vfKIUJ5BOIZ%2FScreen%20Shot%202023-02-28%20at%202.31.27%20PM.png?alt=media&#x26;token=6e1a415f-23e2-440f-9fe1-13a4a1797032" alt=""><figcaption><p>ウェブアプリケーションファイアウォールの設定</p></figcaption></figure>

\[ルール]タブをクリックし、**\[OWASP 3.2]**&#x306B;設定されたルールを選択して、**\[有効]**&#x304A;よ&#x3073;**\[保存]**&#x3092;クリックします (重要な手順となります）。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FOJt2sCgbJtYVPccL6qMY%2Ffirewall2.jpg?alt=media&#x26;token=d47e2459-f4bc-4944-9e27-4ef757904746" alt=""><figcaption><p>ファイアウォールルールの設定</p></figcaption></figure>

:tada: Azure内でのインストールは完了です。

最後にKeeperコマンダーを使ってオートメーターの設定を行います。

19. **Keeperコマンダーのインストール**

この時点では、サービスは実行されていますがまだKeeperとは通信ができません。

ワークステーション、サーバー、コンピューターのどれかにKeeperコマンダーCLIをインストールします。初期設定にのみ使用します。バイナリインストーラーを含むインストール手順については[こちら](https://docs.keeper.io/keeperpam/commander-cli/commander-installation-setup)のページをご参照ください。\
\
コマンダーを開いた後、loginコマンドでログインします。オートメーターをセットアップするにはKeeper管理者、またはSSOノードを管理する権限を持つ管理者としてログインする必要があります。

```
My Vault> login admin@company.com
```

20. **コマンダーでの初期設定**

Keeperコマンダーにログインし、`automator create`で始まる一連のコマンドを使用してオートメーターを有効にします。

```
automator create --name="My Automator" --node="Azure Cloud"
```

ノード名 (この場合はAzure Cloud) は、以下のように管理コンソールのUIから取得します。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FC6oIjbtwyKbIUJp0MvcZ%2FScreen%20Shot%202021-09-10%20at%203.59.58%20PM.png?alt=media&#x26;token=d72376f6-f3ad-4d72-91a1-ea0d2d6079d6" alt=""><figcaption><p>オートメーター作成</p></figcaption></figure>

コマンドの出力には、IDプロバイダからのメタデータを含むオートメーター設定が表示されます。

```
                    Automator ID: 1477468749950
                            Name: My Automator
                             URL: 
                         Enabled: No
                     Initialized: No
                          Skills: Device Approval
```

URLはまだ入力されていません。選択したFQDNを使用してURLを編集します。

{% code overflow="wrap" %}

```
automator edit --url=https://automator.lurey.com --skill=team --skill=team_for_user --skill=device "My Automator"
```

{% endcode %}

次に、キーを交換します。オートメーター公開キーで暗号化されたエンタープライズ秘密キーがオートメーターに提供されます。

```
automator setup "My Automator"
```

新しい設定でオートメーターを初期化します。

```
automator init "My Automator"
```

サービスを有効にします。

```
automator enable "My Automator"
```

この時点で設定は完了です。

自動ヘルスチェックには以下のURLをご使用になれます。

https\://\<server>/health

以下は`curl`コマンドを使用した例です。

```
$ curl https://automator.lurey.com/health
OK
```

当URLはウェブブラウザでは開きません。

21. AD FSを使用した環境の場合

IDプロバイダとしてAD FSを使用してKeeperオートメーターを有効にする場合、以下の手順に従ってKeeper証明書を更新するまでログインできません。

* Keeper管理コンソールへログインします。
* \[管理] > \[SSOノード] > \[プロビジョニング]に移動し、SSOクラウド設定を見ます。
* \[Export SP Cert]をクリックします。
* AD FS管理コンソールで、Keeper Cloud SSO証明書利用者信頼プロパティを選択します。
* \[暗号化]タブで、古い証明書をこの新しい証明書に置き換えます。
* \[署名]タブで、新しいSP証明書をこの新しい証明書に置き換えます。

#### セットアップは完了です。

これでオートメーターサービスが実行された状態になりました。

## Azure Portal

Azure Portalの「コンテナーインスタンス」システムで、コンテナーが実行されているのを確認できます。 /bin/shを使用してコンテナーに接続し、実行ログを表示することもできます。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FRtYhWlAe9YLIrcZOblwk%2FScreenshot%202022-11-11%20at%205.31.41%20PM.jpg?alt=media&#x26;token=6fc0b401-6eda-49bb-a6cf-4e830b43350c" alt=""><figcaption><p>コンテナー</p></figcaption></figure>

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FlJdCmcODq0ybzgaehzvM%2FScreen%20Shot%202022-08-08%20at%2011.27.41%20PM.png?alt=media&#x26;token=88d5f10b-2578-49d2-86f5-54d1c8b4d18e" alt=""><figcaption><p>ログ</p></figcaption></figure>

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FvMD4kPK5HK8qYK6qe57Y%2FScreen%20Shot%202022-08-08%20at%2011.28.25%20PM.png?alt=media&#x26;token=40225c91-1421-46dc-97bb-5e849129ceee" alt=""><figcaption><p>/bin/shで接続</p></figcaption></figure>

## コンテナーの再起動時にIPを更新

この設定に基づいてコンテナーを再起動すると、/24サブネットから新しい IP アドレスが割り当てられることがあります。新しいIPをすばやく見つけて、正しいIPでApplication Gatewayバックエンドプールを更新するには、Azure CLIから以下のスクリプトを実行します。

{% code overflow="wrap" lineNumbers="true" %}

```
# change these 3 variables according to your setup
RESOURCE_GROUP="keeper_automator_rg"
GATEWAY_NAME="KeeperAutomatorAppGateway"
CONTAINER_NAME="keeperautomatorcontainer"

BACKEND_POOL_NAME="appGatewayBackendPool"

CONTAINER_IP=$(az container show --resource-group $RESOURCE_GROUP --name $CONTAINER_NAME --query 'ipAddress.ip' --output tsv)

az network application-gateway address-pool update --resource-group $RESOURCE_GROUP --gateway-name $GATEWAY_NAME --name $BACKEND_POOL_NAME --servers $CONTAINER_IP
```

{% endcode %}

## オートメーターサービスのテスト

Keeperオートメーターがデプロイされましたので、エンドユーザー体験のテストが可能です。ユーザーが SSO IDプロバイダーで認証した後は、承認を求めるプロンプトは必要ありません。

最も簡単なテスト方法は、ブラウザでシークレットモードのウィンドウを開いて[Keeperウェブボルト](https://keepersecurity.com/vault/)へアクセスし、SSOクラウドでログインすることとなります。**デバイスの承認を求めるプロンプトが表示されない場合、オートメーターが正常に機能しています。**

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2F6M47BZgNYXHJ6aTUtbc1%2FScreen%20Shot%202021-09-10%20at%205.17.42%20PM.png?alt=media&#x26;token=e642b030-fef5-45e2-bd69-31a69b4c17f2" alt=""><figcaption><p>ボルトへログイン</p></figcaption></figure>

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FbqTOKRYMbSo5HTGpHTQX%2FScreen%20Shot%202021-09-10%20at%205.18.15%20PM.png?alt=media&#x26;token=73817b67-9c8b-4e42-b585-3e73d0a6b437" alt=""><figcaption><p>SSOログイン</p></figcaption></figure>

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2F2ePvTbVgjp70enV5sTmc%2FScreen%20Shot%202021-09-10%20at%205.30.15%20PM.png?alt=media&#x26;token=ed4aff69-cdc9-494c-bcc3-29523f8cc65a" alt=""><figcaption><p>自動承認</p></figcaption></figure>

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FhKfNZnzP0MelaFgtnj7s%2FScreen%20Shot%202021-09-10%20at%205.32.12%20PM.png?alt=media&#x26;token=7fb689ee-343e-4117-825b-beaeff2e9409" alt=""><figcaption><p>ボルトの復号化</p></figcaption></figure>

[^1]: This name must be globally unique to azure.

[^2]: Make sure to use your storage account name.

[^3]: Make sure to enter your storage account name.

[^4]: Replace with your storage key.

[^5]: Replace this entire line with your subnet ID path.

[^6]: Put your PFX certificate password here.
