2
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.

[Oracle Cloud] Resource Principalを使用して、Autonomous DBからObject Storageにアクセスする

Posted at

はじめに

Autonomous DBは、OSレイヤにアクセスできないPaaSのサービスであるため、外部ファイルと連携するためにObject Storageが使われることがよくあります。

Object Storageへのアクセスには認証・認可が必要です。以前まで、認証方法として「認証トークン」または「APIキー」のみがサポートされており、Computeインスタンスのようにインスタンス・プリンシパルを使用した認証ができませんでした。

参考Blog: Autonomous Database Now Supports Accessing the Object Storage with OCI Native Authentication

2021年4月ごろから、Autonomous DBやDBCSでもリソース・プリンシパルという機能により、インスタンス・プリンシパルと同様に動的グループによる認証が可能になりました。
(何で区別するのでしょうね。インスタンス・プリンシパルはComputeのみで、それ以外がリソース・プリンシパル?)

参考Blog: Accessing Oracle Cloud Infrastructure Resources from Your Autonomous Database using Resource Principal

この記事では、リソース・プリンシパルを使用して、Autonomous DBの認証を試してみます。なお、リソース・プリンシパルによる動的グループの設定は、DBCSでも可能です。

Autonomous DBのリソース・プリンシパルに関するマニュアルは、こちらです

前提

・Autonomous DBは、Free Tierのものを使用します

手順

Autonomous DBの作成

  • [メニュー]⇒[Oracle Database]⇒[Autonomous Database]に遷移します
  • 「Autonomous Databaseの作成」ボタンを押下します。
  • Always Freeのインスタンスを作成します (詳細説明は割愛)

image.png

作成完了後、動的グループの指定に使用するため、Autonomous DBのOCIDをコピーしてメモします

image.png

動的グループによる認証設定

動的グループを作成して、作成したAutnomous DBを識別できるようにします。

  • [メニュー]⇒[アイデンティティとセキュリティ]⇒[動的グループ]に遷移します
  • 「動的グループの作成」ボタンを押下します
  • 一致ルールとして、「resource.id = '<上述手順でコピーした、Autonomous DBのOCID>'」を入力します。これ以外の指定方法はマニュアルを参照ください

image.png

ポリシー

ポリシーを設定して、認可の設定をします。

  • [メニュー]⇒[アイデンティティとセキュリティ]⇒[ポリシー]に遷移します
  • 「ポリシーの作成」ボタンを押下します
  • バケットを作成したコンパートメント内のバケット・オブジェクトに対して読み取り権限を与えてあげます
Allow dynamic-group <作成した動的グループ名> to read buckets in compartment <バケットを作成したコンパートメント名>
Allow dynamic-group <作成した動的グループ名> to read objects in compartment <バケットを作成したコンパートメント名>

image.png

DB接続用Walletのダウンロード

Autonomous DB作成後、「DB接続」ボタンを押下して、インスタンス・ウォレットをダウンロードします

image.png

バケットの作成

Object Storageにバケットを作成します

  • [メニュー]⇒[ストレージ]⇒[バケット]のリンクを押下します
  • 「バケットの作成」ボタンを押下します
  • 設定値はすべてデフォルトにして、バケットを作成します
  • 以下のCSVファイルを作成して、"names.csv"というオブジェクト名で作成したバケットにアップロードします
id,last_name,first_name
1,Yamada,Taro
2,Suzuki,Jiro
3,Sato,Saburo

アップロードしたオブジェクト(nams.csv)の右端メニューを押下し、オブジェクト詳細の表示を選択します
image.png

オブジェクトのURLパスをメモします。後述の手順で、外部表作成時に指定します
image.png

Resource Principalの有効化

ADBにアクセス

ADBにsqlplusを使用してアクセスします。接続方法の詳細は記載しませんが、以下のように、Linuxホストからsqlplusでアクセスしました

$ sqlplus admin@adb01_low

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jun 23 19:59:24 2021
Version 19.10.0.0.0

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

Enter password:

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.5.0.0.0

SQL>

Resource Principalの有効化

Objectにアクセスするユーザが、ADMINユーザの場合は以下のSQLを実行します。
※検証では、ADMINユーザを使用しました。

SQL> EXEC DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL();

PL/SQL procedure successfully completed.

SQL> SELECT owner, credential_name FROM dba_credentials 
     WHERE credential_name = 'OCI$RESOURCE_PRINCIPAL' AND owner = 'ADMIN'; 

OWNER  CREDENTIAL_NAME
-----  ----------------------
ADMIN  OCI$RESOURCE_PRINCIPAL 

⇒ OCI$RESOURCE_PRINCIPAL という名前で、資格証明が作成されていることを確認します。

[参考] ADMINユーザ以外のユーザからアクセスする場合は、以下のSQLを実行します。

SQL> EXEC DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL(username => '<ADB_USER名>');

外部表の作成

Object(csvファイル)を参照する外部表を作成して、Objectにアクセスできることを確認します

SQL> BEGIN
   DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
     table_name      => 'SAMPLE_EXTERNAL_TABLE',
     credential_name => 'OCI$RESOURCE_PRINCIPAL',
     file_uri_list   => '<上述の手順で確認した、オブジェクトのURLパス>',
     format          => '{"type": "CSV", "skipheaders": "1"}' ,
     column_list     => 'ID NUMBER, LAST_NAME VARCHAR2(50), FIRST_NAME VARCHAR2(50)'
   );
END;
/

PL/SQL procedure successfully completed.

* 今回は、CSVファイルにヘッダーがついているので、skipheadersを指定して1行目を読み飛ばしています

参照してみます。

SQL> select * from SAMPLE_EXTERNAL_TABLE;
        ID LAST_NAME  FIRST_NAME
---------- ---------- ----------
         1 Yamada     Taro
         2 Suzuki     Jiro
         3 Sato       Saburo

参照できました!

なお、DBCSもリソース・プリンシパルをサポートしているそうで、oci cliの実行時の認証に利用できるようになっているそうです。

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