はじめに
こんにちは!すぎもんです
DXを積極的に推進する企業が増える中、様々な形式のデータを扱う企業間のデータ連携では、複数のクラウドストレージ間での連携も多くなっています。
クラウドストレージ内でも同一アカウントで全てが完結するわけではなく、異なるアカウントへのデータ連携が発生する場合もあります。
今回やること
今回は、HULFT クラウドストレージオプションを使って、Google Cloud Storageの複数アカウント(アカウント01、アカウント02)に対して、ファイル転送をします。
簡易的に、自分のホスト名に対して自分に配信する「ループバック」という方法を使い転送します。
HULFT クラウドストレージオプションVer.8.5.1から、マルチユーザアカウントに対応し、クラウドストレージの認証情報はクラウドストレージDBという設定情報を保管するデータベースに保持可能になりました。これにより、転送先毎にクラウドストレージの利用アカウントを切り替えることが可能になります。
因みに、Ver.8.5.0以前のクラウドストレージの認証情報の設定方法はVer.8.5.1以降では「下位互換設定」という位置付けになりました。「下位互換設定」の設定手順については「HULFTクラウドストレージオプションでGoogle Cloud Storageにファイル転送してみた」という記事を過去に投稿していますので、こちらの記事も参照してください。
接続手順
Cloud Storageにファイル転送するには、Google Cloud 側での設定が必要です。
<Google Cloud 側の設定>
①サービスアカウントの作成
②バケットの作成
③バケット権限の付与
<HULFT側の設定>
④HULFT8 インストール
⑤クラウドストレージオプションインストール
⑥Google Cloud Storageとの接続設定
⑦ファイル転送するためのHULFTの設定
⑧配信管理情報と集信管理情報
Cloud Storageにファイル転送してみる
⑨account01のみアクセス可能なtest01のバケットにファイル転送を実施。
⑩account02のみアクセス可能なtest02のバケットにファイル転送を実施。
⑪アクセス権が正しく設定されなかった場合の動作(+α)
環境準備(Google Cloud 側の設定)
①サービスアカウントの作成
今回は2つのアカウントを作成し、自分のバケットのみにアクセスできることを確認します。
サービスアカウント名・・・account01
、account02
まずはaccount01
から作成していきます。
1. Google Cloud コンソールから[サインイン]します。
2. [IAMと管理]から、[サービスアカウント]を選択します。
3. [サービスアカウントを作成]からサービスアカウントを作成します。
サービスアカウント発行時に表示されるメールアドレスは、
「アカウント名」+「@」+「<プロジェクトID>iam.gserviceaccount.com」で表示されます。
後ほど、「③バケット権限の付与」する際に使います。
作成されたサービスアカウントaccount01
を選択します。
サービスアカウントから「キー」を選択し、「鍵を追加」>「新しい鍵作成」を選択します。
キーのタイプをJSONにして作成します。作成を押下します。
JSONファイルは作成後、ダウンロードされるため任意の場所に保存してください。
このJSONファイルはGoogle Cloud Storageのアカウントにアクセスに必要な情報をもっているので「⑥Google Cloud Storageと接続設定」で使用します。
②バケットの作成
今回は2つのアカウントを作成し、アクセス権限を持つそれぞれのバケットのみにアクセスできることを確認します。下記の通り、2つのバケットをつくります。
バケット名・・・test01
、test02
まずはtest01
から作成します。
1. [Cloud Storage] - [バケット]を選択します。
2. [バケットを作成]から、バケット名を入力します。
バケットの名前に「test01
」と指定し、
データの保存場所の選択で[Region]>[asia-northeast1(東京)]を選択します。
それ以外の項目「オブジェクトへのアクセスを制御する方法を選択する」「オブジェクトデータを保護する方法を選択する」等の項目は任意で指定出来ますが、今回は初期のままで作成します。
③バケット権限の付与
バケット権限の付与します。
1. 作成されたバケットを選択し「権限」を選択します。
2. 「アクセス権を付与」に「①サービスアカウント作成」時に作成されたメール「account01@<プロジェクトID>.iam.gserviceaccount.com」を指定します。
3. [ロールを割り当てる]から、付与する権限を選択し[追加]します。
※選択項目から cloud Storage > 付与したい権限を選択します。
今回はこのように設定しました。
・新しいプリンシパル
: account01@<プロジェクトID>.iam.gserviceaccount.com
・ロールを割り当てる : ストレージ管理者
プリンシパル設定は、アカウント作成時に発行されるメールアドレスを指定。
設定出来たら「保存」を押すと、バケットのプリンシバルにサービスアカウントが登録されていることを確認できます。
(account01@<プロジェクトID>iam.gserviceaccount.com
)
1つ目のアカウントとバケットを作成完了
1つ目のアカウントは、下記の通りです。
項目 | 値 |
---|---|
サービスアカウント | account01 |
バケット | test01 |
プリンシパル | account01@<プロジェクトID>.iam.gserviceaccount.com |
(※test01
のバケットにaccount01
のサービスアカウントがプリンシバルに登録されていることが確認出来ます。)
2つ目のアカウントとバケットを作成
同じ方法で、2つ目の「サービスアカウント」、「バケット」を作成しバケット権限を付与します。
項目 | 値 |
---|---|
サービスアカウント | account02 |
バケット | test02 |
プリンシバル | account02@<プロジェクトID>.iam.gserviceaccount.com |
※プリンシバルにサービスアカウントが登録されていることを確認する。
ここまでで、Google Cloud 側の設定が完了です。
環境準備(HULFT側の設定)
HULFT側での設定
今回は以下のバージョンを使います。
・HULFTVer8.5.2
・クラウドストレージオプションVer8.5.6
④HULFT8 インストール
ここからはHULFTのインストールをしますが、インストール方法については、公式マニュアルでも取り上げておりますので、下記内容を参考にインストールしてください。
■公式マニュアル
HULFT8 のインストール方法について詳しくはこちらを参照ください。
⑤クラウドストレージオプションインストール
クラウドストレージオプションをインストールします。
インストーラ(setup.exe)を実行し、セットアップウィザードに従ってインストールします。
※オプションを付けたいHULFTがデフォルトの値と違う場合は、対象のパスを指定して実行してください。
■公式マニュアル
クラウドストレージオプションのインストール方法について詳しくはこちらを参照ください。
⑥Google Cloud Storageとの接続設定
Google Cloud Storageとの接続に必要な情報を設定していきます。
++++++++++++++++++++++++++++++++++++++++++++++++++++++
【Ver8.5.0以前】HULFTクラウドストレージオプションの設定
過去に投稿した記事(下位互換設定)では、認証情報が記載されたjsonファイルの指定はWindowsのシステム環境変数に設定していた為、設定を反映させる為にWindowsの再起動が必要でした。
++++++++++++++++++++++++++++++++++++++++++++++++++++++
【Ver.8.5.1】HULFTクラウドストレージオプションの設定
しかし、HULFTクラウドストレージオプション Ver.8.5.1以降は、接続に必要なjsonファイルをコマンドを使ってクラウドストレージDBに登録することで接続が可能になったため、認証情報を環境変数に設定する必要がなくなりました。そのため、環境変数の設定を反映させるためにWindowsを再起動するという動作が不要になりました。
++++++++++++++++++++++++++++++++++++++++++++++++++++++
コマンドによるjsonファイルの指定は、"デフォルト設定" と "個別設定" の2つの方法があります。この2つの方法があることにより、個別に転送ごとに情報を設定したり、個別設定を行わなかった場合に共通で使用される認証情報(アカウント)を設定したりする運用ができるので、複数の認証情報(アカウント)を切り替えることができます。
クラウドストレージDBに設定する各設定の違いと設定をするのに必要な情報は以下になります。
両アカウントとも「個別設定」で接続することは可能ですが、接続の仕方の違いが分かるように今回は、「デフォルト設定」と「個別設定」の2つの方法で登録します。
クラウドストレージDBへ接続に必要な情報を設定します。
「test01
」をデフォルト設定で登録し、「test02
」を個別設定で登録します。
コマンドプロンプトでplugins_utls
があるファイルに移動します
今回はc:\HULFT Family\hulft8\bin\plugins_utls
のファイルパスにインストールされているのでそこへ移動します。
「デフォルト設定」は個別設定を行わなかった場合に共通で使用される認証情報(アカウント)を設定することが出来ます。
登録出来るアカウントは1つです。
使用するコマンドは以下になります。
utlgsinfoadd -t auth --default --app-credentials "<account01の秘密鍵のJSONファイル>"
「個別設定」は転送先ごとにアカウントを登録することが出来ます。
使用するコマンドは以下の3つになります。
utlgsinfoadd -t auth --id "<IDを指定>" --app-credentials "<account02の秘密鍵のJSONファイル>"
utlgsinfoadd -t rcv --id <指定したID> --auth-id <指定したID> ⇒集信ストレージ管理情報を登録出来るコマンド
utlgsinfoadd -t snd --id <指定したID> --auth-id <指定したID> ⇒配信ストレージ管理情報を登録出来るコマンド
クラウドストレージDBに「ID
」(バケット名)とGoogle Cloud Storageで出力した「JSONファイルのパス
」を指定します。
IDは、ストレージ管理情報IDを指定します。ストレージ管理情報IDは転送先を区別するための識別子になります。運用管理の利便性の理由でIDにバケット名を指定することを強くお勧めします。ID=バケット名とすることで、HULFTの集配信履歴にもバケット名で集配信先が記録されるため運用がしやすくなります。
実際に設定します
test01
の設定は「デフォルト設定」で登録するので使用したコマンドは1つ、test02
は「個別設定」で登録するので使用したコマンドは3つになります。
実行したコマンドは以下になります。
※account01
、account02
のJSONファイルは共に"C:\HULFT Family\hulft8の配下にGCSフォルダを作成してその中に入れました。
test02
のバケットは個別設定で登録する為、クラウドストレージDBに登録するIDはtest02
を指定しました。
HULFTの設定(ファイル転送するために)
⑦ファイル転送するためのHULFTの設定
配信するファイルを用意します。今回はテスト用に「test.txt
」というファイルを作成しました。
・転送ファイル:C:\HULFT Family\test.txt
HULFTの管理画面から以下の情報を登録します。
・詳細ホスト情報:自ホスト名
(※今回はループバックで実行のため)
・転送グループID:testgrp
⑧配信管理情報と集信管理情報
HULFTの配信管理情報と、集信管理情報を登録していきます。
HULFTの集信管理情報に登録するファイルパスは「デフォルト設定」と「個別設定」で設定の仕方が変わります。
GoogleCloudStorageの場合、ファイルパスは、gs://で記載します。
デフォルト設定の場合・・・gs://バケット名/オブジェクト名
個別設定の場合・・・gs://集信ストレージ管理情報ID/オブジェクト名
※集信ストレージ管理情報ID=バケット名にすることで、どちらの設定方法でも実質的に同じ意味をもつことで運用の混乱を避けられるメリットがあります。
ファイル名の指定の仕方について詳しくはこちらを参照ください。
実際に設定内容を確認してみます。
・転送先バケット:test01
バケットtest01
へファイル転送するためのHULFTの設定は以下の通りです。
デフォルト設定の場合、ファイルパスにバケット名で指定します。
今回はバケット名がtest01
なのでgs://test01/test1.txt
と指定しました。
実際にHULFT管理画面で、配信管理情報を下記の通り設定します。
集信管理情報を下記の通り設定します。
・転送先バケット:test02
バケットtest02
へファイル転送するためのHULFTの設定は以下の通りです。
個別設定の場合、ファイルパスは集信ストレージ管理情報IDで登録します。
今回は集信ストレージ管理情報IDをバケット名と同じくtest02
と設定したのでgs://test02/test2.txt
と指定しました。
HULFT管理画面で、配信管理情報を下記の通り設定します。
集信管理情報を下記の通り設定します。
Cloud Storageにファイル転送してみる
⑨account01のみアクセス可能なtest01のバケットにファイル転送を実施。
先程、クラウドストレージDBにデフォルト設定で登録していたaccount01
のアカウントを使って、実際にaccount01
しかアクセス権がないtest01
のバケットにファイル転送してみます。
HULFTで「配信要求」を実施
実際にHULFTでCloud Storageにファイル転送してみます。
対象のファイルID:GCS01
を選択し「配信要求」を選択します。
「集信状況一覧」でも転送出来たことが確認出来ます。
「GCS01
」の「完了コード」が「000000(00000)」と表示されているのが確認できます。これは、処理が正常終了したことを意味するので、問題なく正常にファイル転送出来たことが確認できました。
Google Cloud Storageの「test01
」のバケットを確認
「test01
」のバケットにtest1.txt
が正常に格納されているか確認します。
「test01
」のバケットに正常にファイルが格納されているのが確認できました。
このバケットはクラウドストレージDBにデフォルト設定で登録していた「account01
」のアカウントしかアクセス権がないバケットです。(バケットにアカウントが紐づいているかは「③バケット権限の付与」の項目でも確認出来ます。)
これで、account01
のみアクセス可能なtest01
のバケットに、HULFTクラウドストレージオプションを使って問題なくファイル転送出来ることがわかりました。
⑩account02のみアクセス可能なtest02のバケットにファイル転送を実施。
先程、クラウドストレージDBに個別設定で登録していたaccount02
のアカウントを使って、実際にaccount02
しかアクセス権がないtest02
のバケットにファイル転送してみます。
HULFTで「配信要求」を実施
実際にHULFTでCloud Storageにファイル転送してみます。
対象のファイルID:GCS02
を選択し「配信要求」を選択します。
「集信状況一覧」でも転送出来たことが確認出来ます。
「GCS02
」の「完了コード」が「000000(00000)」と表示されているのが確認できます。
これは、処理が正常終了したことを意味するので、問題なく正常にファイル転送出来たことが確認できました。
Google Cloud Storageの 「test02
」のバケットを確認
「test02
」のバケットにtest2.txt
が正常に格納されているか確認します。
「test02
」のバケットに正常にファイルが格納されているのが確認できました。
このバケットはクラウドストレージDBに個別設定で登録していた「account02
」のアカウントしかアクセス権がないバケットです。(バケットにアカウントが紐づいているかは「③バケット権限の付与」の項目でも確認出来ます。)
これで、account02
のみアクセス可能なtest02
のバケットにHULFTクラウドストレージオプションを使って問題なくファイル転送出来ることがわかりました。
また、以前のバージョン(Ver.8.5.0以前)だと2つのアカウント(account01
、account02
)にファイル転送することは出来ませんでしたので、HULFT クラウドストレージオプションに正常に2つのアカウントが設定出来たことも確認出来ました。
⑪アクセス権が正しく設定されなかった場合の動作(+α)
ここからは+αの番外編です!
仮に、HULFTクラウドストレージオプションにアクセス権を登録していないバケットにファイル転送した場合、どのような動きになるのか確認してみます。
<確認方法>
クラウドストレージDBに登録をしていないGoogle Cloud Storageのアカウント(account03)を作成し、そのアカウントでしかアクセスできないバケット(test03)を用意。クラウドストレージDBにアカウント(account03)を登録しないで、作成したバケット(test03)にファイル転送した場合どうなるかを確認します。
■Google Cloud Storage側の設定
Google Cloud Storage側に下記の通り、新しくアカウントとバケットを作成します。
項目 | 値 |
---|---|
サービスアカウント | account03 |
バケット | test03 |
プリンシパル | account03@<プロジェクトID>.iam.gserviceaccount.com |
これで、test03
のバケットにはaccount03
しかアクセス権がないので、HULFTクラウドストレージオプションにaccount03
を登録しないとtest03
にファイルが転送できないことになります。
■HULFT側の設定
クラウドストレージDBにaccount03
を登録しないでHULFTの集信管理情報のファイルパスにtest03
のバケットを指定してファイル転送してみます。「個別設定」で登録しなかった場合は「デフォルト設定」が適用されるので、account01
の権限でアクセスされることになります。
アクセス許可されていないアカウントを使って、バケットにファイル転送した場合どのような動きになるか確認します。
実施にファイル転送してみます。
すると、集信側の履歴にエラーが出ていることが確認できました。
エラーの内容を見ると「クラウドストレージとの接続もしくは通信処理で何らかのエラーが発生しました。」と表示されています。登録していないアカウントに紐づいたバケットにはファイル転送出来ないようになっています。
・完了コード[149560]は、下3桁を見ると「560」。
「560」は、「クラウドストレージ側のエラー」を表します。
・詳細コード[(03102)]は、3000番台なので、GoogleのCloud Storage側のエラーコードになります。
クラウドストレージ側に問題ある場合は、そのようにエラーコードで区別するようになっているようですね。HULFTの実行履歴情報のエラーコードはこちらをご参照ください。
因みにHULFTのコンソールも確認するとより詳細に確認出来ます。
HULFTのエラーを見てみると「Permission」に問題があることがわかります。
「Storage.buckets.get」は「バケットのメタデータ(IAM ポリシーを除く)を読み取る。バケットの Pub/Sub 通知構成の一覧表示または読み取る。」ということなので権限周りに問題がありバケットのデータが読み取れないことがわかります。
改めて、HULFTクラウドストレージオプションは、事前にクラウドストレージDBに設定していないアカウントに対してファイル転送は出来ないようになっていることがわかります。
一方で、事前にクラウドストレージDBにアカウントを設定することで、複数の異なるアクセス権限をもつバケットに対してファイル転送が可能になるので、利用アカウントを切り替えるような業務の運用も実現可能になります。
最後に
今回は、HULFTのクラウドストレージオプションを使って、GoogleのCloud Storageへ転送をしてみましたが、いかがでしたでしょうか。
バケット権限でプリンシパルに指定する項目で多少迷いましたが、比較的少ない工数で接続出来ました。異なる2つのアカウントにファイル転送することで、異なる部署や拠点にファイル転送するなどの業務運用が可能になりそうです。
ここまで読んでいただきありがとうございました。それでは、また!