Hitachi

Cosminexus V11 BPM/ESB基盤 サービスプラットフォーム 解説


2.16.18 署名付きAWS APIリクエストの署名情報付与

HTTPアダプタのリクエスト処理時に,署名付きAWS APIリクエストに必要な署名情報をリクエストヘッダに付与します。

図2‒186 署名付きAWS APIリクエストの署名情報付与の概要

[図データ]

HTTPアダプタは,生成した署名情報をリクエストヘッダに付与します。認証情報として,アクセスキーID,およびシークレットアクセスキーを用いて,署名付きAWS APIリクエストの署名を生成します。

署名付きAWS APIリクエストの署名情報付与を設定できるサポート範囲を,次に示します。

〈この項の構成〉

(1) リクエストボディの送信データ種別

署名付きAWS APIリクエストの署名情報付与で使用できる,リクエストボディの送信データ種別を次に示します。これ以外のデータ種別で送信した場合は,エラーを出力し,リクエストに失敗します。

表2‒121 リクエストボディの送信データ種別

送信データ種別

説明

リクエストボディの例

データなし

リクエストボディを指定しません。

データあり

ボディ要求電文(パススルーモード)

ボディ要求電文で指定されたデータをリクエストボディとして設定します。

<body>

<element>AAA</element>

</body>

ファイル

ファイルの内容をリクエストボディとして設定します。

hitachi.txt

−:該当しない。

(2) 署名付きAWS APIリクエストの署名情報付与の設定

署名付きAWS APIリクエストの署名情報付与は,HTTPアダプタのヘッダ要求電文,またはHTTPアダプタ実行環境プロパティファイルで設定します。HTTPアダプタのヘッダ要求電文とHTTPアダプタ実行環境プロパティファイルの両方が設定されている場合は,ヘッダ要求電文の設定が優先されます。

ヘッダ要求電文の詳細については,マニュアル「サービスプラットフォーム 開発ガイド 受付・アダプタ定義編」の「3.3.13(2) 電文フォーマットの作成」を,HTTPアダプタ実行環境プロパティファイルの詳細については,マニュアル「サービスプラットフォーム リファレンス」の「6.14.2 HTTPアダプタ実行環境プロパティファイル」を参照してください。

署名付きAWS APIリクエストの署名情報付与で設定する項目を次に示します。

表2‒122 署名付きAWS APIリクエストの署名情報付与の設定項目

ヘッダ要求電文

HTTPアダプタ実行環境プロパティファイル

説明

/http-header-request/http-header-signed-aws-api-request/@type属性

adphttp.request.header.signed.aws.api.request.type

署名付きAWS APIリクエストの認証方法を指定します。

/http-header-request/http-header-signed-aws-api-request要素

adphttp.request.header.signed.aws.api.request

署名付きAWS APIリクエストで使用するアクセスキーペアIDを指定します。

/http-header-request/http-header-signed-aws-api-request/@version属性

adphttp.request.header.signed.aws.api.request.version

署名バージョンを指定します。

/http-header-request/http-header-signed-aws-api-request/@service属性

adphttp.request.header.signed.aws.api.request.service

接続先AWSサービスを指定します。

/http-header-request/http-header-signed-aws-api-request/@region属性

adphttp.request.header.signed.aws.api.request.region

接続先AWSリージョンを指定します。

(3) HTTPリクエストに付与されるリクエストヘッダ情報

署名付きAWS APIリクエストの署名情報付与が有効な場合,HTTPリクエスト処理時に,リクエストヘッダに次の署名付きAWS APIリクエストの署名情報が付与されます。

HTTPリクエストに付与されるリクエストヘッダ情報を次に示します。

表2‒123 HTTPリクエストに付与されるリクエストヘッダ情報

ヘッダ名※1

付与する値

x-amz-date

HTTPリクエスト発行時の日時情報(ISO 8601形式のUTC時刻)です。

例:20240415T000000Z

x-amz-content-sha256

HTTPリクエストボディのハッシュ値です。

HTTPボディが空の場合は,空の文字列のハッシュを指定します。

Amazon S3に署名付きAWS APIリクエストを発行する場合に付与します。

Authorization※2

認証情報です。次の形式で,値を設定します。△は空白文字を示します。

AWS4-HMAC-SHA256△Credential=<Credentialの値>,△SignedHeaders=<SignedHeadersの値>,△Signature=<Signatureの値>

注※1

x-amz-dateおよびx-amz-content-sha256を,ユーザがヘッダ要求電文(/http-header-request/http-headerの直下),またはHTTPアダプタ実行環境プロパティファイル(adphttp.request.header.userdef.<追番>)に設定した場合,HTTPリクエスト処理時にユーザが設定した値が優先されます。

Authorizationは,ユーザが設定した値は無視されます。

上記のヘッダ以外のAWS APIリクエストで必要なリクエストヘッダを設定する場合は,ヘッダ要求電文(/http-header-request/http-headerの直下),またはHTTPアダプタ実行環境プロパティファイル(adphttp.request.header.userdef.<追番>)に個別に設定項目を追加してください。

注※2

Authorizationヘッダの構成要素を次に示します。

表2‒124 Authorizationヘッダの構成要素

構成要素

付与する値

Credential

次の形式で構成されたスコープ情報です。

<your-access-key-id>/<date>/<aws-region>/<aws-service>/aws4_request

  • <your-access-key-id>:アクセスキーID

  • <date>:HTTPリクエスト発行時の日時情報(YYYYMMDD形式)

  • <aws-region>:接続先AWSリージョン名

    例:ap-northeast-1

  • <aws-service>:接続先AWSサービス名

    例:s3(Amazon S3にリクエストを送信する場合)

SignedHeaders

署名の計算に使用したリクエストヘッダをセミコロンで区切ったリストです。

例:host;x-amz-date

Signature

64個の小文字の16進数文字で表現される256ビットの署名です。

例:fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024

(4) 認証情報の管理

署名付きAWS APIリクエストの認証で使用する認証情報(アクセスキーID,シークレットアクセスキー)は,HTTPアダプタがサポートするアカウント情報管理コマンドを使用して管理します。

アカウント情報管理コマンドを使用して設定したアクセスキーIDやシークレットアクセスキーの認証情報は,アカウント情報としてHTTPアダプタアカウント定義ファイルに出力されます。

アカウント情報管理コマンドの詳細については,マニュアル「サービスプラットフォーム リファレンス」の「5.4 サービスプラットフォームの運用環境および実行環境で使用するコマンド」を参照してください。

HTTPアダプタの認証情報管理で使用するコマンドを,次に示します。

表2‒125 認証情報管理で使用するコマンド

コマンド

説明

csahttpuseradd

署名付きAWS APIリクエストの署名生成を行うときに必要となるアクセスキーID,シークレットアクセスキーを登録するためのコマンドです。

csahttpuserdel

HTTPアダプタアカウント定義ファイルに登録されているアクセスキーIDとシークレットアクセスキーを削除するコマンドです。

csahttpuserls

HTTPアダプタアカウント定義ファイルに登録されているアクセスキーペアIDを表示するコマンドです。

第三者によるファイルの閲覧を抑止するため,管理者だけがHTTPアダプタアカウント定義ファイルを閲覧できるようにアクセス権限を設定してください。

HTTPアダプタアカウント定義ファイルに,ヘッダ要求電文,またはHTTPアダプタ実行環境プロパティファイルで指定されたアクセスキーペアIDが存在しないなど,送信する認証情報が取得できない場合はエラーとなります。

HTTPアダプタアカウント定義ファイルは,HTTPアダプタ実行環境プロパティファイルの「adphttp.config.account-inf-filepath」に設定します。

(5) Developer's Kit for Javaの設定

AWSサービスと連携する場合,Java環境にドメインネームシステム(DNS)の名前解決結果のキャッシュ時間を設定する必要があります。

セキュリティマネージャが有効な場合,Developer's Kit for Javaに対してドメインネームシステム(DNS)の名前解決結果のキャッシュ時間(networkaddress.cache.ttl)を次の個所に設定します。

<Developer's Kit for Javaインストールディレクトリ>/conf/security/java.security

(6) 署名付きAWS APIリクエストの定義例

ここでは,HTTPアダプタで署名付きAWS APIリクエストを使用した,Amazon S3と連携する場合の定義例について説明します。

(a) 定義方法の前提条件

署名付きAWS APIリクエストの定義方法は次の前提条件を基に説明しています。

  • AWSで発行した,アクセスキーID,およびシークレットアクセスキーをcsahttpuseraddコマンドで登録済みとします。

  • HTTPアダプタで共通フォルダに保存されたファイルを取得し,署名付きAWS APIリクエスト(PutObjectアクション)を発行して,S3のバケットにアップロードする場合を想定しています。

(b) 定義の流れ

署名付きAWS APIリクエストの署名情報付与を使用する上で,定義が必要となる次の作業について説明します。

  • アクセスキーID,およびシークレットアクセスキーの登録

  • 電文フォーマットの定義

  • 定義ファイルの定義

  • データ変換の定義

それぞれの定義について説明します。

HTTPアダプタの基本的な定義の流れについては,マニュアル「サービスプラットフォーム 開発ガイド 受付・アダプタ定義編」の「3.3.13 HTTPアダプタを定義する」を参照してください。

●アクセスキーID,およびシークレットアクセスキーの登録

署名付きAWS APIリクエストの署名情報付与を使用する場合,アクセスキーID,およびシークレットアクセスキーを,csahttpuseraddコマンドを実行して登録します。

●電文フォーマットの定義

次の格納先にある要求電文,および応答電文の電文フォーマットにXMLスキーマを定義してください。

電文フォーマットの格納先

<サービスプラットフォームのインストールディレクトリ>\CSC\custom-adapter\HTTP\schema

XMLスキーマを定義する電文フォーマットを次に示します。

要求電文(ヘッダ)

adphttp_header_request1.xsd

要求電文(ボディ)

adphttp_body_empty.fdx

HTTPアダプタでファイルデータを送信する場合,アダプタに渡されたボディ要求電文の値は無視されるため,空のHTTPメッセージボディを表す電文フォーマットを使用します。

応答電文(ヘッダ)

adphttp_header_response1.xsd

応答電文(ボディ)

adphttp_body_empty.fdx

署名付きAWS APIリクエスト(PutObjectアクション)の正常応答は空のレスポンスボディが返却されるため,空のHTTPメッセージボディを表す電文フォーマットを使用します。

●定義ファイルの定義

署名付きAWS APIリクエストの署名情報付与をHTTPアダプタ実行環境プロパティファイルで設定する場合は,次の項目を設定します。

表2‒126 HTTPアダプタ実行環境プロパティファイルの設定項目

カテゴリ

項目名

設定値

リクエストライン

adphttp.request.method

PUT

adphttp.request.uri-scheme-authority

https://<バケット名>.s3.<リージョン名>.amazonaws.com

adphttp.request.uri-path

アップロード先のファイルパス

例:/sample.txt

署名付きAWS APIリクエストの署名情報付与

adphttp.request.header.signed.aws.api.request.type

header

adphttp.request.header.signed.aws.api.request

署名付きAWS APIリクエストで使用するアクセスキーペアID

例:TESTEXAMPLE

adphttp.request.header.signed.aws.api.request.version

aws4_request

adphttp.request.header.signed.aws.api.request.service

s3

adphttp.request.header.signed.aws.api.request.region

接続先AWSリージョン

例:ap-northeast-1

Amazon S3に送信するファイル

adphttp.config.account-inf-filepath

<HTTPアダプタアカウント定義ファイルのパス>

adphttp.request.part.file.1.input-folder-name

共通フォルダ定義名

例:test

adphttp.request.part.file.1.local-file-name

Amazon S3に送信するファイル名

例:sample.txt

●データ変換の定義

署名付きAWS APIリクエストの署名情報付与をデータ変換を使用して設定する場合は,要求電文(ヘッダ)に次の項目を設定します。

  • 要求電文(ヘッダ)

    カテゴリ

    項目名

    設定値

    リクエストライン

    /http-header-request/method

    PUT

    /http-header-request/uri-scheme-authority

    https://<バケット名>.s3.<リージョン名>.amazonaws.com

    /http-header-request/uri-path

    アップロード先のファイルパス

    例:/sample.txt

    署名付きAWS APIリクエストの署名情報付与

    /http-header-request/http-header-signed-aws-api-request/@type

    header

    /http-header-request/http-header-signed-aws-api-request

    署名付きAWS APIリクエストで使用するアクセスキーペアID

    /http-header-request/http-header-signed-aws-api-request/@version

    aws4_request

    /http-header-request/http-header-signed-aws-api-request/@service

    s3

    /http-header-request/http-header-signed-aws-api-request/@region

    接続先AWSリージョン

    Amazon S3に送信するファイル

    /http-header-request/http-part/files/file/input-folder-name/@common

    true

    /http-header-request/http-part/files/file/input-folder-name

    共通フォルダ定義名

    例:test

    /http-header-request/http-part/files/file/local-file-name

    Amazon S3に送信するファイル名

    例:sample.txt

  • 要求電文(ボディ)

    要求電文ボディを設定しない場合でも,変数の初期化を行う必要があるため,変換先変数に要求電文ボディの変数を指定し,マッピングを行わないで,データ変換を行う必要があります。

(7) HTTPアダプタのリダイレクト設定時の注意事項

HTTPアダプタのリダイレクトを有効にして,署名付きAWS APIリクエストを発行する場合,リダイレクト後の2回目のリクエストの署名情報は再計算されないため,署名認証はエラーとなります。

リダイレクト後の2回目のリクエストに,再計算した署名情報を付与したい場合は,1回目のリクエストで301,302,303,または307のレスポンスが返ってきたときに,再度別のサービス呼出アクティビティでHTTPアダプタを呼び出すようにビジネスプロセスで定義する必要があります。

リダイレクト後の2回目のリクエストに,再計算した署名情報を付与する場合の,ビジネスプロセスおよびHTTPアダプタの設定例について説明します。

(a) ビジネスプロセスの設定

1回目のリクエストで301,302,303,または307のレスポンスが返ってきた場合,レスポンスに含まれるLocationヘッダの値をリダイレクト後の2回目のリクエストの接続先としてヘッダ要求電文に設定し,再度別のサービス呼出アクティビティでHTTPアダプタを呼び出すように定義します。

リダイレクトに対応した署名付きAWS APIリクエストのビジネスプロセスの定義例を次に示します。

図2‒187 リダイレクトに対応した署名付きAWS APIリクエストのビジネスプロセスの定義例

[図データ]

(b) HTTPアダプタの設定

HTTPアダプタ定義ファイルの「adphttp.response-code.fault」プロパティに,301,302,303,または307のレスポンスを,フォルト応答として返すように設定します。

リダイレクトに対応した署名付きAWS APIリクエストのHTTPアダプタ定義ファイルの定義例を次に示します。

表2‒127 リダイレクトに対応した署名付きAWS APIリクエストのHTTPアダプタ定義ファイルの定義例

プロパティ

指定内容

設定値

adphttp.response-code.fault

フォルト処理するステータスコードを正規表現で指定します。

30[1237]