【Azure Blob Storage】 異なる Azure Entra ID（旧Azure AD） テナント間でのオブジェクトレプリケーションを検証してみた

Azure Blob Storageを使う中で、ファイルの共有やバックアップ等の目的で異なるAzure Entra ID（旧Azure AD）テナントに紐付くサブスクリプションのAzure Blob Storageにオブジェクトを転送したいといった場面があるかと思います。そういった場合に、オブジェクト レプリケーションの機能を利用することで、マイクロソフトのバックボーンネットワーク経由でセキュアに目的を達成することができるのですが、同じAzure Entra IDテナント間での設定手順と異なり、レプリケーションルールを記載したjsonファイルの作成や、テナント間でのjsonファイルの連携が必要になるため、検証もかねて構築手順を整理してみようと思います。

オブジェクト レプリケーションの機能の概要については以下公開情報を参照ください。
https://learn.microsoft.com/ja-jp/azure/storage/blobs/object-replication-overview

# 構成図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/08992de2-3d1b-ee28-7015-f14c913e8a87.png)

# ソース側ストレージアカウントの作成
ソース側のサブスクリプションでストレージアカウントを作成します。
Azure Portalからストレージアカウントを選択し「＋作成」をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/bc73e5fc-9cf0-0a00-7d23-ba93e4e6c74a.png)

各パラメータについて、環境に合わせて設定をしますが、以下のパラメータについては必須で設定する必要があります。

詳細設定
・BLOBストレージのクロステナントレプリケーションを許可する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/6a62ae0f-afe3-c266-ea66-de7fc9276d6e.png)


データ保護
・BLOBのバージョン管理を有効にする
・BLOBの変更フィードを有効にする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/d0ad0392-d996-53ad-cbeb-9107e7685124.png)

今回はストレージアカウント「sourceblobstorage2023」を作成しました。

# ソース側BLOBコンテナーの作成

ソース側のストレージアカウントにBLOBコンテナーを作成します。

Azure Portalから作成したストレージアカウントにアクセスします。
左ペインから【データストレージ】-【コンテナー】を選択後、「+ コンテナー」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/66fb83f2-049c-e773-8f7d-c8636823f700.png)

ソースコンテナーの名前を入力し、「作成」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/31ff33cf-e40e-cccb-92f9-59061782b802.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/3b4604c6-c0ab-6240-1474-db59a4c5204a.png)

今回はコンテナー「source」を作成しました。

# 宛先側ストレージアカウントの作成

宛先側のサブスクリプションでストレージアカウントを作成します。
Azure portalからストレージアカウントを選択し「＋作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/bc73e5fc-9cf0-0a00-7d23-ba93e4e6c74a.png)

各パラメータについて、環境に合わせて設定をしますが、以下のパラメータについては必須で設定する必要があります。

詳細設定
・BLOBストレージのクロステナントレプリケーションを許可する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/6a62ae0f-afe3-c266-ea66-de7fc9276d6e.png)

データ保護
・BLOBのバージョン管理を有効にする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/53d51fdd-d5b3-23b4-5937-c40459e5dd01.png)

今回はストレージアカウント「destblobstorage2023」を作成しました。

# 宛先側BLOBコンテナーの作成

宛先側のストレージアカウントにBLOBコンテナーを作成します。

Azure Portalから作成したストレージアカウントにアクセスします。
左ペインから【データストレージ】-【コンテナー】を選択後、「+ コンテナー」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/644adb8a-e114-edca-2660-f4e357f81c9b.png)

宛先コンテナーの名前を入力し、「作成」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/0f204a3a-574b-5efb-26f5-dd814dde48c7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/3b4604c6-c0ab-6240-1474-db59a4c5204a.png)

今回はコンテナー「dest」を作成しました。

# 宛先側オブジェクト レプリケーション設定

blob storageについて作成ができたので、次にオブジェクト レプリケーションの設定をします。

以下のjsonファイルを作成します。

```
{
  "properties": {
    "policyId": "default",
    "sourceAccount": "/subscriptions/<ソース側サブスクリプションID>/resourceGroups/<リソースグループ名>/providers/Microsoft.Storage/storageAccounts/sourceblobstorage2023",
    "destinationAccount": "/subscriptions/<ソース側サブスクリプションID>/resourceGroups/<リソースグループ名>/providers/Microsoft.Storage/storageAccounts/destblobstorage2023",
    "rules": [
      {
        "ruleId": "",
        "sourceContainer": "source",
        "destinationContainer": "dest"
      }
    ]
  }
}
```
>※レプリ―ケーションのルールにフィルターを追加したい場合は"rules"に"filters"の項目を追加することで設定できます。
例：2023年9月12日0時（日本時間）より後に作成されたファイルをコピーする場合
>```
>   "rules": [
>      {
>        "ruleId": "",
>        "sourceContainer": "source",
>        "destinationContainer": "dest",
>        "filters": {
>          "minCreationTime": "2023-09-11T15:00:00Z"
>        }
>      }
>    ]
>```

作成したjsonファイルを利用してレプリケーション設定を作成します。

宛先側のストレージアカウント「destblobstorage2023」にAzure Portalからアクセスし、
左ペインから【データ管理】-【オブジェクト レプリケーション】を選択後します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/0f51f4eb-a6b2-bd0f-dce7-88a69dc1c7d3.png)
レプリケーション規則のアップロードを選択後、作成したjsonファイルをアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/432d2ddd-c37b-1471-9d29-bee00de86a0e.png)
設定内容について、問題ないことを確認して、「アップロード」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/76146d4d-4f4d-6ba4-fcc8-1256aaa7aa0f.png)

アップロードが完了すると、オブジェクト レプリケーションの「その他のアカウント」タブにレプリケーション規則が作成されているので、レプリケーション規則をダウンロードします。
※jsonファイルがダウンロードされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/a9cc1ceb-a737-2a15-c0da-94e13dc80782.png)

# ソース側オブジェクト レプリケーション設定
宛先側のストレージアカウント「sorceblobstorage2023」にAzure Portalからアクセスし、
左ペインから【データ管理】-【オブジェクト レプリケーション】を選択後します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/a1b7ae39-e695-e24a-66a9-108f84057801.png)
レプリケーション規則のアップロードを選択後、宛先側レプリケーション設定でダウンロードしたjsonファイルをアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/e94db504-f0cf-299a-a116-c623e38cf6cc.png)
設定内容について、問題ないことを確認して、「アップロード」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/508eafc5-eb43-01f6-95ad-82a15526a841.png)

アップロードが完了後、オブジェクト レプリケーションの「その他のアカウント」タブにレプリケーション規則が作成されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/ab0a5b5c-407c-6eb1-28e4-6b3ba3b8506f.png)

# 検証
ソース側のBLOB Storageにテキストファイルをアップロードしたところ、宛先に連携されていることを確認できました。変更日付を見るとおよそ3分弱で宛先側に連携されていることが確認できます。

ソース側
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/ae799012-6fb6-4ff5-4b09-674f4a42847d.png)

宛先側
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536682/642e7649-754a-d98d-ad6d-11d6cdc23ed7.png)


# おわりに
異なるAzure Entra IDテナント間でのオブジェクト レプリケーションを組むことができました。
途中にも記載しましたが、フィルタールールなども合わせて設定可能のため、本手順を参考にしていただければと思います。