1
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 3 years have passed since last update.

[OCI]GCPのサービスアカウントを使用してAutonomous DatabaseからGoogle Cloud Storageにアクセスしてデータ連携してみた

Last updated at Posted at 2022-10-13

はじめに

Autonomous Databaseの機能アップデートで、Google Cloud Platform(GCP)のサービスアカウントを用いたGCPリソースへのアクセスがサポートされたので試してみました。

今回は、GCPのサービスアカウントを利用してAutonomous DatabaseからGoogle Cloud Storageにアクセスし、バケットの内のオブジェクトの表示と、バケット内のオブジェクト(ファイル)をもとにした外部表の作成を試してみました。

1. Autonomous DatabaseでGCPのサービスアカウントを有効化

adminユーザとして、Autonomous Databaseに接続します。

[opc@swingbench ~]$ sqlplus admin/Demo#1Demo#1@atp1_medium

SQL*Plus: Release 21.0.0.0.0 - Production on 木 10月 13 10:26:57 2022
Version 21.7.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

最終正常ログイン時間: 水 10月 12 2022 14:38:22 +09:00


Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.17.0.1.0
に接続されました。
SQL> 

Autonomous DatabaseでGCPのサービスアカウントを有効化するには、providerに'GCP'を指定して、DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTHプロシージャを実行します。

SQL> BEGIN
  2      DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
  3          provider => 'GCP' );
  4  END;
  5  /

PL/SQLプロシージャが正常に完了しました。

SQL>

cloud_integrationsビューを検索してGCPのサービスアカウント名を確認し、メモしておきます。

SQL> SELECT * FROM cloud_integrations WHERE param_name = 'gcp_service_account';

PARAM_NAME
--------------------------------------------------------------------------------
PARAM_VALUE
--------------------------------------------------------------------------------
gcp_service_account
GCP-SA-16231-46794@gcp-pa-project1.iam.gserviceaccount.com


SQL> 

2. Google Cloudのロールの作成

Autonomous Databaseのサービスアカウントに付与する、Google Cloud Storageへのアクセスを許可するロールを作成します。

Goole Cloudコンソールにサインインします。
スクリーンショット 2022-10-13 10.48.54.png
左側のメニューの「IAMと管理」を選択し、「ロール」をクリックします。
スクリーンショット 2022-10-13 10.51.17.png
ロールの画面に移動します。
スクリーンショット 2022-10-13 10.52.25.png
「ロールの作成」をクリックします。
スクリーンショット 2022-10-13 10.52.25のコピー.png
タイトルとIDに任意の文字列を入力し、「権限の追加」をクリックします。
ここでは、
タイトル:Object Store Read and Write for ADB
ID:ObjectStoreReadandWriteforADB
としました。
スクリーンショット 2022-10-13 10.54.01.png
「フィルタ」の横をクリックすると、プロパティのリストが表示されるので、「権限」を選択します。
スクリーンショット 2022-10-13 10.58.50.png
検索条件として「storage.objects」を入力してEnterキーを押します。
表示された権限の中から、
・storage.objects.create
・storage.objects.get
・storage.objects.list
・storage.objects.update
にチェックを入れ、「追加」をクリックします。
スクリーンショット 2022-10-13 11.02.04.png
権限が正しく追加されているか確認し、「作成」をクリックします。
スクリーンショット 2022-10-13 11.03.58.png
Google Cloud Storageへのアクセスを許可するロール(ここでは「Object Store Read and Write for ADB」)が作成されました。
スクリーンショット 2022-10-13 11.04.31.png

3. Google Cloud Storageの準備

Google Cloudコンソールで「Cloud Storage」の「バケット」に移動します。
スクリーンショット 2022-10-13 11.07.02.png
「作成」をクリックします。
スクリーンショット 2022-10-13 11.07.54.png
任意のバケット名(ここでは「gcp-cloud-storage-bucket-for-adb」)を入力し、「続行」をクリックします。
こちらのマニュアルに記載があるように、バケット名に_(アンダースコア)が含まれていると、Autonomous Databaseから参照できませんのでご注意ください。
スクリーンショット 2022-10-13 11.29.29.png
任意のロケーションタイプを選択し、「続行」をクリックします。
スクリーンショット 2022-10-13 11.29.55.png
ストレージクラスはデフォルトの「Standard」のままで「続行」をクリックします。
スクリーンショット 2022-10-13 11.30.03.png
オブジェクトへのアクセスを制御する方法もデフォルトのままで「続行」をクリックします。
スクリーンショット 2022-10-13 11.30.12.png
オブジェクトを保護する方法を選択し、「作成」をクリックします。
スクリーンショット 2022-10-13 11.30.22.png
バケット「gcp-cloud-storage-bucket-for-adb」が作成されました。
スクリーンショット 2022-10-13 11.31.02.png
「権限」をクリックします。
スクリーンショット 2022-10-13 11.31.02.png
「アクセス権を付与」をクリックします。
スクリーンショット 2022-10-13 11.31.20.png
アクセス権付与のウインドウが表示されます。
スクリーンショット 2022-10-13 11.31.46.png
「プリンシパルの追加」セクションの「新しいプリンシパル」に、1.でコピーしたAutonomous Databaseのサービスアカウントを入力し、Enterキーを押します。
スクリーンショット 2022-10-13 11.32.43.png
「ロールを割り当てる」セクションの「ロールの選択」をクリックします。
スクリーンショット 2022-10-13 12.51.22.png
クイックアクセスの「カスタム」を選択し、2.で作成したロール(ここでは「Object Store Read and Write for ADB」)をクリックします。
スクリーンショット 2022-10-13 11.32.59.png
入力が完了したら、「作成」をクリックします。
スクリーンショット 2022-10-13 12.55.49.png
Autonomous Databaseのサービスアカウントに対して、ロール「Object Store Read and Write for ADB」に基づくバケット「gcp-cloud-storage-bucket-for-adb」へのアクセス権が付与されました。
スクリーンショット 2022-10-13 11.33.24.png

4. サービスアカウントを使用したAutonomous DatabaseからGoogle Cloud Storageへのアクセス

以下のようなファイル「testdata.txt」を作成します。

testdata.txt
1,Paul
2,John
3,George
4,Ringo

testdata.txtを3.で作成したバケット「gcp-cloud-storage-bucket-for-adb」にアップロードします。
スクリーンショット 2022-10-13 11.35.07.png

DBMS_CLOUD.LIST_OBJECTSファンクションで、Autonomous Databaseからバケット「gcp-cloud-storage-bucket-for-adb」内のオブジェクトのリストを取得してみます。

Google Cloud StorageにアクセスするためのクレデンシャルとしてGCPのサービスアカウントを使用する場合は、credential_nameに'GCP$PA'を指定します。
また、location_uriには、以下のような仮想ホスト形式でバケットを指定します。

https://バケット名.storage.googleapis.com/

SELECT * FROM 
DBMS_CLOUD.LIST_OBJECTS(
credential_name => 'GCP$PA',
location_uri => 'https://バケット名.storage.googleapis.com/' );

では、実行してみます。

SQL> SELECT object_name, bytes FROM DBMS_CLOUD.LIST_OBJECTS( 
  2  credential_name => 'GCP$PA', 
  3  location_uri => 'https://gcp-cloud-storage-bucket-for-adb.storage.googleapis.com/' 
  4  );

OBJECT_NAME			    BYTES
------------------------------ ----------
testdata.txt			       30

SQL>

サービスアカウントを使用して、Autonomous DatabaseからGoogle Cloud Storageにアクセスできました。

DBMS_CLOUD.CREATE_EXTERNAL_TABLEプロシージャでGoogle Cloud Storageのバケット「gcp-cloud-storage-bucket-for-adb」内にあるオブジェクト(ファイル)「testdata.txt」をもとにした外部表を作成し、testdata.txt内のデータをAutonomous Databaseから参照してみます。

Google Cloud StorageにアクセスするためのクレデンシャルとしてGCPのサービスアカウントを使用する場合は、credential_nameに'GCP$PA'を指定します。
また、file_uri_listには、以下のような仮想ホスト形式でバケット内のオブジェクト(ファイル)を指定します。

https://バケット名.storage.googleapis.com/オブジェクト名
では、実行してみます。

SQL> BEGIN
  2  	DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
  3  		table_name =>'member',
  4  		credential_name =>'GCP$PA',
  5  		file_uri_list =>'https://gcp-cloud-storage-bucket-for-adb.storage.googleapis.com/testdata.txt',
  6  		format => json_object('delimiter' value ','),
  7  		column_list => 'ID NUMBER, name VARCHAR2(20)' );
  8  END;
  9  /

PL/SQLプロシージャが正常に完了しました。

SQL>

Google Cloud Storageのバケット「gcp-cloud-storage-bucket-for-adb」内にあるオブジェクト(ファイル)「testdata.txt」をもとにした外部表「member」が作成できました。

外部表「member」の内容を確認してみます。

SQL> SELECT * FROM member;

        ID NAME
---------- --------------------
	     1 Paul
	     2 John
	     3 George
	     4 Ringo

SQL>

サービスアカウントを使用して作成した外部表「member」経由で、Google Cloud Storageのバケット「gcp-cloud-storage-bucket-for-adb」内にあるオブジェクト(ファイル)「testdata.txt」の内容を参照できることが確認できました。

5. Autonomous DatabaseでGCPのサービスアカウントを無効化

Autonomous DatabaseでGCPのサービスアカウントを無効にするには、providerに'GCP'を指定してDBMS_CLOUD_ADMIN.DISABLE_PRINCIPAL_AUTHプロシージャを実行します。

BEGIN
    DBMS_CLOUD_ADMIN.DISABLE_PRINCIPAL_AUTH(
        provider => 'GCP' );
END;
/

参考資料

Use Google Service Account to Access Google Cloud Platform Resources

1
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
1
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?