27.2. S3_PING 設定オプション

Red Hat JBoss Data Grid は Amazon Web Services と 2 とおりの方法で連動します。
  • ライブラリーモードでは、JGroups の default-configs/default-jgroups-ec2.xml ファイル (詳細については、「default-jgroups-ec2.xml」を参照) または S3_PING プロトコルを使用します。
  • リモートクライアントサーバーモードでは、JGroups の S3_PING プロトコルを使用します。
ライブラリーおよびリモートクライアントサーバーモードでは、Amazon AWS で機能するようにクラスター化するために S3_PING プロトコルを設定する方法として 3 つの方法があります。
  • プライベート S3 バケットを使用します。これらのバケットは Amazon AWS の認証情報を使用します。
  • 事前署名付き URL を使用します。これらの事前に割り当てられる URL は、プライベートの書き込みアクセスとパブリックの読み取りアクセスを持つバケットに割り当てられます。
  • パブリック S3 バケットを使用します。これらのバケットには認証情報がありません。

27.2.1. プライベート S3 バケットの使用

この設定には、適切な AWS 認定情報によってのみアクセスできるプライベートバケットへのアクセスが必要です。適切な権限が利用できることを確認するには、ユーザーにバケットの以下の権限があることを確認してください。
  • List
  • Upload/Delete
  • View Permissions
  • Edit Permissions
S3_PING 設定には以下のプロパティーが含まれることを確認してください。
  • バケットを指定するための location または prefix プロパティー (両方ではない)。prefix プロパティーが設定されている場合、S3_PING はプレフィックス値で始まる名前のバケットを検索します。名前の先頭がプレフィックスのバケットが見つかった場合、S3_PING はそのバケットを使用します。このプレフィックスを持つバケットが見つからない場合、S3_PING は、AWS クレデンシャルを使用してバケットを作成し、そのプレフィックスと UUID に基いて名前を指定します (名前の形式は {prefix value}-{UUID})。
  • AWS ユーザーには access_keysecret_access_key プロパティー。

注記

この設定の使用時に 403 エラーが表示される場合、プロパティーに正しい値があることを検証してください。問題が存続する場合、EC2 ノードのシステム時間が正しいことを確認してください。Amazon S3 は、セキュリティー上の理由により、サーバーの時間よりも 15 分を超える遅れがあるタイムスタンプを持つ要求を拒否します。

例27.1 プライベートバケットの使用による Red Hat JBoss Data Grid サーバーの起動

サーバーディレクトリーの上位レベルから次のコマンドを実行して、プライベート S3 バケットを使用して Red Hat JBoss Data Grid サーバーを起動します。
bin/clustered.sh -Djboss.bind.address={server_ip_address} -Djboss.bind.address.management={server_ip_address} -Djboss.default.jgroups.stack=s3 -Djgroups.s3.bucket={s3_bucket_name} -Djgroups.s3.access_key={access_key} -Djgroups.s3.secret_access_key={secret_access_key}
  1. {server_ip_address} をサーバーの IP アドレスに置き換えます。
  2. {s3_bucket_name} を適切なバケット名に置き換えます。
  3. {access_key} をユーザーのアクセスキーに置き換えます。
  4. {secret_access_key} をユーザーの秘密アクセスキーに置き換えます。

27.2.2. 事前署名付き URL の使用

この設定では、List 権限を Everyone に設定し、パブリックの読み取りアクセスを許可することにより、S3 の一般に読み取り可能なバケットを作成します。クラスター内の各ノードは、S3_PING プロトコルで要求される場合に、put および delete 操作用に事前署名付き URL を生成します。この URL は固有のファイルを参照し、バケット内のフォルダーパスを組み込むことができます。

注記

パスが長くなると、S3_PING にエラーが発生します。たとえば、my_bucket/DemoCluster/node1 のようなパスは機能しますが、my_bucket/Demo/Cluster/node1 のようにパスが長くなると機能しません。

27.2.2.1. 事前署名付き URL の生成

JGroup の S3_PING クラスには、事前署名付き URL を生成するためのユーティリティーメソッドが含まれます。このメソッドの最後の引数は、Unix epoch (1970 年 1 月 1 日) からの秒数で表される URL の有効期間です。
事前署名付き URL を生成する構文は次のようになります。
String Url = S3_PING.generatePreSignedUrl("{access_key}", "{secret_access_key}", "{operation}", "{bucket_name}", "{path}", {seconds});
  1. {operation}PUT または DELETE のいずれかに置き換えます。
  2. {access_key} をユーザーのアクセスキーに置き換えます。
  3. {secret_access_key} をユーザーの秘密アクセスキーに置き換えます。
  4. {bucket_name} をバケットの名前に置き換えます。
  5. {path} をバケット内のファイルへの必要なパスに置き換えます。
  6. {seconds} を、Unix epoch (1970 年 1 月 1 日) からのパスの有効期間を表す秒数に置き換えます。

例27.2 事前署名付き URL の生成

String putUrl = S3_PING.generatePreSignedUrl("access_key", "secret_access_key", "put", "my_bucket", "DemoCluster/node1", 1234567890);
S3_PING 設定に、S3_PING.generatePreSignedUrl() の呼び出しで生成された pre_signed_put_url および pre_signed_delete_url プロパティーが含まれていることを確認してください。この設定の場合、AWS 認証情報がクラスター内の各ノードに保存されないため、プライベート S3 バケットを使用する設定よりも安全度が高くなります。

注記

事前署名付き URL が XML ファイルに入力される場合、URL 内の & 文字をその XML エンティティー (&) に置き換える必要があります。

27.2.2.2. コマンドラインを使用した事前署名付き URL の設定

コマンドラインを使用して事前署名付き URL を設定するには、以下のガイドラインを使用します。
  • URL を二重引用符 ("") で囲みます。
  • URL では、アンパーサンド (&) 文字の各出現箇所はバックスラッシュ (\) でエスケープする必要があります。

例27.3 事前署名付き URL による JBoss Data Grid サーバーの起動

bin/clustered.sh -Djboss.bind.address={server_ip_address} -Djboss.bind.address.management={server_ip_address} -Djboss.default.jgroups.stack=s3 -Djgroups.s3.pre_signed_put_url="http://{s3_bucket_name}.s3.amazonaws.com/ node1?AWSAccessKeyId={access_key}\&Expires={expiration_time}\&Signature={signature}"-Djgroups.s3.pre_signed_delete_url="http://{s3_bucket_name}.s3.amazonaws.com/ node1?AWSAccessKeyId={access_key}\&Expires={expiration_time}\&Signature={signature}"
上記の例では、{signatures} 値は S3_PING.generatePreSignedUrl() メソッドによって生成されます。さらに、{expiration_time} 値は、S3_PING.generatePreSignedUrl() メソッドに渡される URL の有効期間です。

27.2.3. パブリック S3 バケットの使用

この設定には、パブリックの読み書き権限のある S3 バケットが関係します。つまり、Everyone には、バケットの ListUpload/Delete の権限、View Permissions、および Edit Permissions が設定されます。
location プロパティーは、この設定のバケット名で指定する必要があります。この設定メソッドは、バケットの名前を知っているいずれのユーザーもバケットにデータをアップロードしたり、保存したりでき、バケット作成者のアカウントはこのデータについてチャージされるため、安全度は最も低くなります。
Red Hat JBoss Data Grid サーバーを起動するには、以下のコマンドを使用します。
bin/clustered.sh -Djboss.bind.address={server_ip_address} -Djboss.bind.address.management={server_ip_address} -Djboss.default.jgroups.stack=s3 -Djgroups.s3.bucket={s3_bucket_name}

27.2.4. S3_PING 警告のトラブルシューティング

使用される S3_PING 設定タイプにより、以下の警告が JBoss Data Grid サーバーの起動時に表示される場合があります。
15:46:03,468 WARN  [org.jgroups.conf.ProtocolConfiguration] (MSC service thread 1-7) variable "${jgroups.s3.pre_signed_put_url}" in S3_PING could not be substituted; pre_signed_put_url is removed from properties
15:46:03,469 WARN  [org.jgroups.conf.ProtocolConfiguration] (MSC service thread 1-7) variable "${jgroups.s3.prefix}" in S3_PING could not be substituted; prefix is removed from properties
15:46:03,469 WARN  [org.jgroups.conf.ProtocolConfiguration] (MSC service thread 1-7) variable "${jgroups.s3.pre_signed_delete_url}" in S3_PING could not be substituted; pre_signed_delete_url is removed from properties
それぞれの場合に、警告により不足しているものとしてリストされるプロパティーが S3_PING 設定では不要であることを確認してください。