Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 AWS SQS из PL/SQL  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10177
Пытаюсь достучаться до AWS SQS из UTL_HTTP. Все работает прекрасно через orapki wallet c сертификатом. Но AWS SQS поверх сертификата имеет еще и access key с secret key. Хотелось бы их тоже воткнуть в wallet и использовать

    UTL_HTTP.SET_AUTHENTICATION_FROM_WALLET(
                                            r      => v_req,
                                            alias  => 'aws_sqs',
                                            scheme => 'AQS SQS' 
                                           );


Однако orapki wallet не поддерживает credentials (типа mkstore -wrl wallet_location -createCredential alias 'access_key' 'secret_key'). Создал mkstore wallet но mkstore не поддерживает сертификаты - в общем похоже на catch 22 ибо UTL_HTTP с двумя wallet работать не умеет. Кто-нибудь сталкивался? Хотелось-бы через wallet а не хранить 'access_key', 'secret_key' в encrypted/RLS/VPD таблице.

SY.
21 апр 21, 01:31    [22311712]     Ответить | Цитировать Сообщить модератору
 Re: AWS SQS из PL/SQL  [new]
SeaGate
Member

Откуда: Новосибирск
Сообщений: 1701
SY,

SY
Однако orapki wallet не поддерживает credentials (типа mkstore -wrl wallet_location -createCredential alias 'access_key' 'secret_key').


Это заблуждение.
Создается orapki. Поверх делается mkstore.
[oracle@rac1 wallet]$ orapki wallet display -wallet /u01/app/oracle/wallet
Oracle PKI Tool : Version 11.2.0.4.0 - Production
Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.

Requested Certificates:
User Certificates:
Oracle Secret Store entries:
oracle.security.client.connect_string1
oracle.security.client.password1
oracle.security.client.username1
Trusted Certificates:
Subject:        OU=Class 3 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
Subject:        CN=GTE CyberTrust Global Root,OU=GTE CyberTrust Solutions\, Inc.,O=GTE Corporation,C=US
Subject:        CN=DigiCert Baltimore CA-2 G2,OU=www.digicert.com,O=DigiCert Inc,C=US
Subject:        OU=Class 2 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
Subject:        OU=Class 1 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
Subject:        CN=s3.amazonaws.com,O=Amazon.com\, Inc.,L=Seattle,ST=Washington,C=US
Subject:        OU=Secure Server Certification Authority,O=RSA Data Security\, Inc.,C=US
[oracle@rac1 wallet]$ mkstore -wrl /u01/app/oracle/wallet -listCredential
Oracle Secret Store Tool : Version 11.2.0.4.0 - Production
Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.

Enter wallet password:
List credential (index: connect_string username)
1: aws_s3 A<redacted>

В примере ниже вызов для S3:
SQL> declare
  2    req      utl_http.req;
  3    resp     utl_http.resp;
  4    value varchar2(1024);
  5    url constant varchar2(128) := 'https://redacted.s3.amazonaws.com/sales_2020.csv';
  6  begin
  7    -- create a request context with its wallet and cookie table
  8    utl_http.set_wallet('file:/u01/app/oracle/wallet');
  9    req := utl_http.begin_request(url);
 10    utl_http.set_header(req, 'x-amz-date', to_char(sysdate, 'yyyymmdd"T"hh24miss"Z"'));
 11    utl_http.set_authentication_from_wallet(req, 'aws_s3', 'aws');
 12    resp := utl_http.get_response(req);
 13    loop
 14      utl_http.read_line(resp, value, true);
 15      dbms_output.put_line(value);
 16    end loop;
 17    utl_http.end_response(resp);
 18  exception
 19    when utl_http.end_of_body then
 20      utl_http.end_response(resp);
 21  end;
 22  /
2020-01-01,1,10,100
2020-02-01,2,5,200
2020-03-01,2,10,400

PL/SQL procedure successfully completed.


SY
    UTL_HTTP.SET_AUTHENTICATION_FROM_WALLET(
                                            r      => v_req,
                                            alias  => 'aws_sqs',
                                            scheme => 'AQS SQS' 
                                           );

Такой схемы нет.
21 апр 21, 15:21    [22311994]     Ответить | Цитировать Сообщить модератору
 Re: AWS SQS из PL/SQL  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10177
SeaGate

Это заблуждение.
Создается orapki. Поверх делается mkstore.


Спасибо. Делал наоборот.

SY.
21 апр 21, 15:47    [22312006]     Ответить | Цитировать Сообщить модератору
 Re: AWS SQS из PL/SQL  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10177
SeaGate
Такой схемы нет.


Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production

SQL> DECLARE
  2      v_req UTL_HTTP.REQ;
  3  BEGIN
  4      UTL_HTTP.SET_WALLET(
  5                          path => 'file:/home/oracle/workarea/recon/aws_sqs'
  6                         );
  7      v_req := UTL_HTTP.BEGIN_REQUEST(
  8                                      url => 'https://vpce-0cb3b03a2d4204642-ojr760to.sqs.us-east-1.vpce.amazonaws.com/019725351547/APP-4714-dev-integration-svcs-NADBPolicyEventQueue-NJUMUX7T7DFJ'
  9                                     );
 10      UTL_HTTP.SET_HEADER(
 11                          r     => v_req,
 12                          name  => 'x-amz-date',
 13                          value => TO_CHAR(SYSDATE,'yyyymmdd"T"hh24miss"Z"')
 14                         );
 15      UTL_HTTP.SET_AUTHENTICATION_FROM_WALLET(
 16                                              r      => v_req,
 17                                              alias  => 'aws_sqs',
 18                                              scheme => 'aws'
 19                                             );
 20     EXCEPTION
 21       WHEN OTHERS
 22         THEN
 23           UTL_HTTP.END_REQUEST(
 24                                r => v_req
 25                               );
 26           RAISE;
 27  END;
 28  /
DECLARE
*
ERROR at line 1:
ORA-29273: HTTP request failed
ORA-06512: at line 26
ORA-29261: bad argument
ORA-06512: at "SYS.UTL_HTTP", line 450
ORA-06512: at "SYS.UTL_HTTP", line 1191
ORA-06512: at line 15


SQL>


Меняю на basic - UTL_HTTP.SET_AUTHENTICATION_FROM_WALLET работает.

SY.
21 апр 21, 16:23    [22312036]     Ответить | Цитировать Сообщить модератору
 Re: AWS SQS из PL/SQL  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10177
Похоже на баг в 18C. 19C aws хавает. Буду рыть дальше.

SY.
21 апр 21, 16:28    [22312039]     Ответить | Цитировать Сообщить модератору
 Re: AWS SQS из PL/SQL  [new]
SeaGate
Member

Откуда: Новосибирск
Сообщений: 1701
SY
Похоже на баг в 18C. 19C aws хавает. Буду рыть дальше.

SQL> declare
  2    req utl_http.req;
  3    resp utl_http.resp;
  4    value varchar2(32767);
  5    url varchar2(2000) := 'https://vpce-010f631ef8f1e24e7-8br55nv1.sqs.us-east-1.vpce.amazonaws.com/1283<redacted>/TestQueue/?Action=SendMessage&MessageBody=example';
  6  begin
  7    utl_http.set_wallet('file:/u01/app/oracle/wallet_sqs');
  8    req := utl_http.begin_request(url);
  9    utl_http.set_header(req, 'x-amz-date', TO_CHAR(sysdate,'yyyymmdd"T"hh24miss"Z"'));
 10    utl_http.set_property(req, 'aws-region', 'us-east-1');
 11    utl_http.set_property(req, 'aws-service', 'sqs');
 12    utl_http.set_authentication_from_wallet(req, 'aws_sqs', 'AWS4-HMAC-SHA256');
 13    resp := utl_http.get_response(req);
 14    loop
 15      utl_http.read_line(resp, value, true);
 16      dbms_output.put_line(value);
 17    end loop;
 18  exception
 19    when utl_http.end_of_body then
 20      utl_http.end_request(req);
 21      utl_http.end_response(resp);
 22    when others
 23    then
 24      utl_http.end_request(req);
 25      raise;
 26  end;
 27  /
<?xml version="1.0"?><SendMessageResponse
xmlns="http://queue.amazonaws.com/doc/2012-11-05/"><SendMessageResult><MessageId>15814c46-f9c2-43d9-8fcd-b4a450283612</M
essageId><MD5OfMessageBody>1a79a4d60de6718e8e5b326e338ae533</MD5OfMessageBody></SendMessageResult><ResponseMetadata><Req
uestId>01c695d8-9128-58d9-afb3-cd233f0b7340</RequestId></ResponseMetadata></SendMessageResponse>

PL/SQL procedure successfully completed.

SQL> select banner_full from v$version;

BANNER_FULL
------------------------------------------------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.11.0.0.0
22 апр 21, 20:02    [22312782]     Ответить | Цитировать Сообщить модератору
 Re: AWS SQS из PL/SQL  [new]
Sayan Malakshinov
Member

Откуда: Мск
Сообщений: 5873
SeaGate
Version 19.11.0.0.0
какие вы шустрые... только вчера ж вышло :)
22 апр 21, 20:06    [22312784]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить