2.16.18 署名付きAWS APIリクエストの署名情報付与
HTTPアダプタのリクエスト処理時に,署名付きAWS APIリクエストに必要な署名情報をリクエストヘッダに付与します。
|
|
HTTPアダプタは,生成した署名情報をリクエストヘッダに付与します。認証情報として,アクセスキーID,およびシークレットアクセスキーを用いて,署名付きAWS APIリクエストの署名を生成します。
署名付きAWS APIリクエストの署名情報付与を設定できるサポート範囲を,次に示します。
-
AWSサービスの連携先:Amazon S3
Amazon S3のマルチパートアップロードAPIを使用したオブジェクトのアップロード,またはコピーが使用できます。1回のリクエストでAmazon S3にアップロード,またはダウンロードできるオブジェクトサイズは,JAX-RS 2.1の制限に従います。
ただし,Amazon S3のチャンクアップロードを使用したオブジェクトのアップロードは使用できません。Amazon S3の詳細については,Amazon S3のマニュアルを参照してください。
-
署名バージョン:Signature Version 4(署名バージョン4)
- 〈この項の構成〉
(1) リクエストボディの送信データ種別
署名付きAWS APIリクエストの署名情報付与で使用できる,リクエストボディの送信データ種別を次に示します。これ以外のデータ種別で送信した場合は,エラーを出力し,リクエストに失敗します。
|
送信データ種別 |
説明 |
リクエストボディの例 |
|
|---|---|---|---|
|
データなし |
リクエストボディを指定しません。 |
− |
|
|
データあり |
ボディ要求電文(パススルーモード) |
ボディ要求電文で指定されたデータをリクエストボディとして設定します。 |
<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リクエストの署名情報付与で設定する項目を次に示します。
|
ヘッダ要求電文 |
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リクエストに付与されるリクエストヘッダ情報を次に示します。
|
ヘッダ名※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ヘッダの構成要素を次に示します。
|
構成要素 |
付与する値 |
|---|---|
|
Credential |
次の形式で構成されたスコープ情報です。 <your-access-key-id>/<date>/<aws-region>/<aws-service>/aws4_request
|
|
SignedHeaders |
署名の計算に使用したリクエストヘッダをセミコロンで区切ったリストです。 例:host;x-amz-date |
|
Signature |
64個の小文字の16進数文字で表現される256ビットの署名です。 例:fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024 |
(4) 認証情報の管理
署名付きAWS APIリクエストの認証で使用する認証情報(アクセスキーID,シークレットアクセスキー)は,HTTPアダプタがサポートするアカウント情報管理コマンドを使用して管理します。
アカウント情報管理コマンドを使用して設定したアクセスキーIDやシークレットアクセスキーの認証情報は,アカウント情報としてHTTPアダプタアカウント定義ファイルに出力されます。
アカウント情報管理コマンドの詳細については,マニュアル「サービスプラットフォーム リファレンス」の「5.4 サービスプラットフォームの運用環境および実行環境で使用するコマンド」を参照してください。
HTTPアダプタの認証情報管理で使用するコマンドを,次に示します。
|
コマンド |
説明 |
|---|---|
|
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リクエストのビジネスプロセスの定義例を次に示します。
|
|
(b) HTTPアダプタの設定
HTTPアダプタ定義ファイルの「adphttp.response-code.fault」プロパティに,301,302,303,または307のレスポンスを,フォルト応答として返すように設定します。
リダイレクトに対応した署名付きAWS APIリクエストのHTTPアダプタ定義ファイルの定義例を次に示します。
|
プロパティ |
指定内容 |
設定値 |
|---|---|---|
|
adphttp.response-code.fault |
フォルト処理するステータスコードを正規表現で指定します。 |
30[1237] |