0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

HULFTクラウドストレージオプションでGoogle Cloud Storageの複数アカウントにつないでみた

Last updated at Posted at 2023-04-07

はじめに

こんにちは!すぎもんです:grinning:

DXを積極的に推進する企業が増える中、様々な形式のデータを扱う企業間のデータ連携では、複数のクラウドストレージ間での連携も多くなっています。

クラウドストレージ内でも同一アカウントで全てが完結するわけではなく、異なるアカウントへのデータ連携が発生する場合もあります。

今回やること

今回は、HULFT クラウドストレージオプションを使って、Google Cloud Storageの複数アカウント(アカウント01、アカウント02)に対して、ファイル転送をします。

簡易的に、自分のホスト名に対して自分に配信する「ループバック」という方法を使い転送します。

image.png

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つのアカウントを作成し、自分のバケットのみにアクセスできることを確認します。

サービスアカウント名・・・account01account02

まずはaccount01から作成していきます。

1. Google Cloud コンソールから[サインイン]します。
2. [IAMと管理]から、[サービスアカウント]を選択します。
3. [サービスアカウントを作成]からサービスアカウントを作成します。

サービスアカウント発行時に表示されるメールアドレスは、
「アカウント名」+「@」+「<プロジェクトID>iam.gserviceaccount.com」で表示されます。
後ほど、「③バケット権限の付与」する際に使います。

image.png

作成されたサービスアカウントaccount01を選択します。
サービスアカウントから「キー」を選択し、「鍵を追加」>「新しい鍵作成」を選択します。
image.png

キーのタイプをJSONにして作成します。作成を押下します。
JSONファイルは作成後、ダウンロードされるため任意の場所に保存してください。

このJSONファイルはGoogle Cloud Storageのアカウントにアクセスに必要な情報をもっているので「⑥Google Cloud Storageと接続設定」で使用します。

image.png

②バケットの作成

今回は2つのアカウントを作成し、アクセス権限を持つそれぞれのバケットのみにアクセスできることを確認します。下記の通り、2つのバケットをつくります。

バケット名・・・test01test02

まずはtest01から作成します。

1. [Cloud Storage] - [バケット]を選択します。
2. [バケットを作成]から、バケット名を入力します。

image.png

バケットの名前に「test01」と指定し、
データの保存場所の選択で[Region]>[asia-northeast1(東京)]を選択します。
それ以外の項目「オブジェクトへのアクセスを制御する方法を選択する」「オブジェクトデータを保護する方法を選択する」等の項目は任意で指定出来ますが、今回は初期のままで作成します。

image.png

③バケット権限の付与

バケット権限の付与します。
1. 作成されたバケットを選択し「権限」を選択します。
2. 「アクセス権を付与」に「①サービスアカウント作成」時に作成されたメール「account01@<プロジェクトID>.iam.gserviceaccount.com」を指定します。
3. [ロールを割り当てる]から、付与する権限を選択し[追加]します。
 ※選択項目から cloud Storage > 付与したい権限を選択します。

image.png

今回はこのように設定しました。
  ・新しいプリンシパル     
        : account01@<プロジェクトID>.iam.gserviceaccount.com
  ・ロールを割り当てる  : ストレージ管理者

プリンシパル設定は、アカウント作成時に発行されるメールアドレスを指定。

設定出来たら「保存」を押すと、バケットのプリンシバルにサービスアカウントが登録されていることを確認できます。
(account01@<プロジェクトID>iam.gserviceaccount.com)
image.png

1つ目のアカウントとバケットを作成完了

1つ目のアカウントは、下記の通りです。

項目
サービスアカウント account01
バケット test01
プリンシパル account01@<プロジェクトID>.iam.gserviceaccount.com

(※test01のバケットにaccount01のサービスアカウントがプリンシバルに登録されていることが確認出来ます。)

image.png

2つ目のアカウントとバケットを作成
同じ方法で、2つ目の「サービスアカウント」、「バケット」を作成しバケット権限を付与します。

項目
サービスアカウント account02
バケット test02
プリンシバル account02@<プロジェクトID>.iam.gserviceaccount.com

 ※プリンシバルにサービスアカウントが登録されていることを確認する。

image.png

ここまでで、Google Cloud 側の設定が完了です。

環境準備(HULFT側の設定)

HULFT側での設定
今回は以下のバージョンを使います。
・HULFTVer8.5.2
・クラウドストレージオプションVer8.5.6

④HULFT8 インストール

ここからはHULFTのインストールをしますが、インストール方法については、公式マニュアルでも取り上げておりますので、下記内容を参考にインストールしてください。

■公式マニュアル
HULFT8 のインストール方法について詳しくはこちらを参照ください。

⑤クラウドストレージオプションインストール

クラウドストレージオプションをインストールします。
インストーラ(setup.exe)を実行し、セットアップウィザードに従ってインストールします。
※オプションを付けたいHULFTがデフォルトの値と違う場合は、対象のパスを指定して実行してください。
image.png

■公式マニュアル
クラウドストレージオプションのインストール方法について詳しくはこちらを参照ください。

⑥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に設定する各設定の違いと設定をするのに必要な情報は以下になります。
image.png

個別設定の補足説明
image.png

両アカウントとも「個別設定」で接続することは可能ですが、接続の仕方の違いが分かるように今回は、「デフォルト設定」と「個別設定」の2つの方法で登録します。
image.png

クラウドストレージDBへ接続に必要な情報を設定します。
test01」をデフォルト設定で登録し、「test02」を個別設定で登録します。

コマンドプロンプトでplugins_utlsがあるファイルに移動します
今回はc:\HULFT Family\hulft8\bin\plugins_utlsのファイルパスにインストールされているのでそこへ移動します。

デフォルト設定」は個別設定を行わなかった場合に共通で使用される認証情報(アカウント)を設定することが出来ます。
登録出来るアカウントは1つです。
使用するコマンドは以下になります。

デフォルト設定
utlgsinfoadd -t auth --default --app-credentials "<account01の秘密鍵のJSONファイル>"

コマンドの補足説明
image.png

個別設定」は転送先ごとにアカウントを登録することが出来ます。
使用するコマンドは以下の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>	 ⇒配信ストレージ管理情報を登録出来るコマンド

コマンドの補足説明
image.png

クラウドストレージDBに「ID」(バケット名)とGoogle Cloud Storageで出力した「JSONファイルのパス」を指定します。

IDは、ストレージ管理情報IDを指定します。ストレージ管理情報IDは転送先を区別するための識別子になります。運用管理の利便性の理由でIDにバケット名を指定することを強くお勧めします。ID=バケット名とすることで、HULFTの集配信履歴にもバケット名で集配信先が記録されるため運用がしやすくなります。

 

実際に設定します
test01の設定は「デフォルト設定」で登録するので使用したコマンドは1つ、test02は「個別設定」で登録するので使用したコマンドは3つになります。
実行したコマンドは以下になります。

デフォルト設定
account01を登録します
image.png

個別設定
account02を登録します
image.png

account01account02のJSONファイルは共に"C:\HULFT Family\hulft8の配下にGCSフォルダを作成してその中に入れました。
test02のバケットは個別設定で登録する為、クラウドストレージDBに登録するIDはtest02を指定しました。

HULFTの設定(ファイル転送するために)

⑦ファイル転送するためのHULFTの設定

配信するファイルを用意します。今回はテスト用に「test.txt」というファイルを作成しました。

 ・転送ファイル:C:\HULFT Family\test.txt

image.png

HULFTの管理画面から以下の情報を登録します。
 ・詳細ホスト情報:自ホスト名 (※今回はループバックで実行のため)
 ・転送グループID:testgrp

⑧配信管理情報と集信管理情報

HULFTの配信管理情報と、集信管理情報を登録していきます。

HULFTの集信管理情報に登録するファイルパスは「デフォルト設定」「個別設定」で設定の仕方が変わります。

GoogleCloudStorageの場合、ファイルパスは、gs://で記載します。

デフォルト設定の場合・・・gs://バケット名/オブジェクト名
個別設定の場合・・・gs://集信ストレージ管理情報ID/オブジェクト名

※集信ストレージ管理情報ID=バケット名にすることで、どちらの設定方法でも実質的に同じ意味をもつことで運用の混乱を避けられるメリットがあります。

ファイル名の指定の仕方について詳しくはこちらを参照ください。

実際に設定内容を確認してみます。

・転送先バケット:test01

バケットtest01へファイル転送するためのHULFTの設定は以下の通りです。
image.png
デフォルト設定の場合、ファイルパスにバケット名で指定します。
今回はバケット名がtest01なのでgs://test01/test1.txtと指定しました。
実際にHULFT管理画面で、配信管理情報を下記の通り設定します。
image.png
集信管理情報を下記の通り設定します。
image.png

・転送先バケット:test02

バケットtest02へファイル転送するためのHULFTの設定は以下の通りです。
image.png
個別設定の場合、ファイルパスは集信ストレージ管理情報IDで登録します。
今回は集信ストレージ管理情報IDをバケット名と同じくtest02と設定したのでgs://test02/test2.txtと指定しました。

HULFT管理画面で、配信管理情報を下記の通り設定します。
image.png
集信管理情報を下記の通り設定します。
image.png

Cloud Storageにファイル転送してみる

⑨account01のみアクセス可能なtest01のバケットにファイル転送を実施。

先程、クラウドストレージDBにデフォルト設定で登録していたaccount01のアカウントを使って、実際にaccount01しかアクセス権がないtest01のバケットにファイル転送してみます。

HULFTで「配信要求」を実施
実際にHULFTでCloud Storageにファイル転送してみます。
対象のファイルID:GCS01を選択し「配信要求」を選択します。
image.png

「ファイルID:GCS01」の配信要求を実行します。
image.png

「要求発行は正常に終了しました。」と表示されました。
image.png

「集信状況一覧」でも転送出来たことが確認出来ます。

GCS01」の「完了コード」が「000000(00000)」と表示されているのが確認できます。これは、処理が正常終了したことを意味するので、問題なく正常にファイル転送出来たことが確認できました。
image.png

Google Cloud Storageの「test01」のバケットを確認
test01」のバケットにtest1.txtが正常に格納されているか確認します。

image.png

test01」のバケットに正常にファイルが格納されているのが確認できました。

このバケットはクラウドストレージDBにデフォルト設定で登録していた「account01」のアカウントしかアクセス権がないバケットです。(バケットにアカウントが紐づいているかは「③バケット権限の付与」の項目でも確認出来ます。)

これで、account01のみアクセス可能なtest01のバケットに、HULFTクラウドストレージオプションを使って問題なくファイル転送出来ることがわかりました。

⑩account02のみアクセス可能なtest02のバケットにファイル転送を実施。

先程、クラウドストレージDBに個別設定で登録していたaccount02のアカウントを使って、実際にaccount02しかアクセス権がないtest02のバケットにファイル転送してみます。

HULFTで「配信要求」を実施
実際にHULFTでCloud Storageにファイル転送してみます。
対象のファイルID:GCS02を選択し「配信要求」を選択します。
image.png

「ファイルID:GCS02」の配信要求を実行します。
image.png

「要求発行は正常に終了しました。」と表示されました。
image.png

「集信状況一覧」でも転送出来たことが確認出来ます。
image.png
GCS02」の「完了コード」が「000000(00000)」と表示されているのが確認できます。
これは、処理が正常終了したことを意味するので、問題なく正常にファイル転送出来たことが確認できました。

Google Cloud Storageの 「test02」のバケットを確認
test02」のバケットにtest2.txtが正常に格納されているか確認します。
image.png

test02」のバケットに正常にファイルが格納されているのが確認できました。

このバケットはクラウドストレージDBに個別設定で登録していた「account02」のアカウントしかアクセス権がないバケットです。(バケットにアカウントが紐づいているかは「③バケット権限の付与」の項目でも確認出来ます。)

これで、account02のみアクセス可能なtest02のバケットにHULFTクラウドストレージオプションを使って問題なくファイル転送出来ることがわかりました。

また、以前のバージョン(Ver.8.5.0以前)だと2つのアカウント(account01account02)にファイル転送することは出来ませんでしたので、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

image.png
これで、test03のバケットにはaccount03しかアクセス権がないので、HULFTクラウドストレージオプションにaccount03を登録しないとtest03にファイルが転送できないことになります。

■HULFT側の設定
クラウドストレージDBにaccount03を登録しないでHULFTの集信管理情報のファイルパスにtest03のバケットを指定してファイル転送してみます。「個別設定」で登録しなかった場合は「デフォルト設定」が適用されるので、account01の権限でアクセスされることになります。

アクセス許可されていないアカウントを使って、バケットにファイル転送した場合どのような動きになるか確認します。

設定内容は以下の通りです。
image.png

実施にファイル転送してみます。
すると、集信側の履歴にエラーが出ていることが確認できました。
image.png

エラーの内容を見ると「クラウドストレージとの接続もしくは通信処理で何らかのエラーが発生しました。」と表示されています。登録していないアカウントに紐づいたバケットにはファイル転送出来ないようになっています。

・完了コード[149560]は、下3桁を見ると「560」。
 「560」は、「クラウドストレージ側のエラー」を表します。
・詳細コード[(03102)]は、3000番台なので、GoogleのCloud Storage側のエラーコードになります。

クラウドストレージ側に問題ある場合は、そのようにエラーコードで区別するようになっているようですね。HULFTの実行履歴情報のエラーコードはこちらをご参照ください。

因みにHULFTのコンソールも確認するとより詳細に確認出来ます。
image.png

HULFTのエラーを見てみると「Permission」に問題があることがわかります。

「Storage.buckets.get」は「バケットのメタデータ(IAM ポリシーを除く)を読み取る。バケットの Pub/Sub 通知構成の一覧表示または読み取る。」ということなので権限周りに問題がありバケットのデータが読み取れないことがわかります。

改めて、HULFTクラウドストレージオプションは、事前にクラウドストレージDBに設定していないアカウントに対してファイル転送は出来ないようになっていることがわかります。

一方で、事前にクラウドストレージDBにアカウントを設定することで、複数の異なるアクセス権限をもつバケットに対してファイル転送が可能になるので、利用アカウントを切り替えるような業務の運用も実現可能になります。

最後に

今回は、HULFTのクラウドストレージオプションを使って、GoogleのCloud Storageへ転送をしてみましたが、いかがでしたでしょうか。
バケット権限でプリンシパルに指定する項目で多少迷いましたが、比較的少ない工数で接続出来ました。異なる2つのアカウントにファイル転送することで、異なる部署や拠点にファイル転送するなどの業務運用が可能になりそうです。

ここまで読んでいただきありがとうございました。それでは、また!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?