メインコンテンツまでスキップ
に最終更新

S3

このドキュメントでは、AWS S3 にアクセスするために必要なパラメータについて説明します。これらのパラメータは以下に適用されます。

  • Catalog のプロパティ。
  • Table Valued Function のプロパティ。
  • Broker Load のプロパティ。
  • Export のプロパティ。
  • Outfile のプロパティ。

HTTPS 用の BE CA 証明書の設定​

Doris 2.1 以降では、Doris BE が HTTPS 経由で S3 にアクセスする際に、ca_cert_file_paths を be.conf で明示的に設定できます。

デフォルトでは、ca_cert_file_paths が設定されていない場合、Doris はオペレーティングシステムのデフォルトの CA 証明書を使用します。ほとんどの環境では、このパラメータを手動で設定する必要はありません。次の場合に設定してください。

  • BE ノードにシステムの CA 証明書がない、またはインストールされている CA バンドルが古すぎる場合。
  • BE ノードが、ca-certificates パッケージを含まない最小構成のコンテナまたはイメージで動作している場合。
  • BE ノードのデフォルトの CA ファイルパスが無効である、または Doris プロセスに CA ファイルの読み取り権限がない場合。
  • 環境で自己署名証明書、プライベート CA、または TLS トラフィックに再署名する企業のプロキシやゲートウェイを使用している場合。
  • S3 へのアクセス時に Problem with the SSL CA cert や curl 77: Problem with the SSL CA cert (path? access rights?) などのエラーが発生する場合。

ca_cert_file_paths がないバージョンの場合: ca_cert_file_paths パラメータは Doris 2.1 以降で使用できます。Doris 2.0.x 以前を使用していて SSL CA 証明書のエラーが発生する場合は、システムの CA 証明書が正しくインストールされ、CA バンドルが /etc/ssl/certs/ca-certificates.crt に存在することを確認してください。

  • RHEL / CentOS / RockyLinux:
    yum install -y ca-certificates
    update-ca-trust
    ln -s /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt /etc/ssl/certs/ca-certificates.crt
  • Debian / Ubuntu: apt-get install -y ca-certificates

その後、すべての BE ノードを再起動してください。証明書の問題について詳しくは、Lakehouse FAQ - 証明書の問題を参照してください。

例:

# be.conf
ca_cert_file_paths = /etc/ssl/certs/ca-certificates.crt

一般的な CA バンドルのパス:

  • Debian / Ubuntu: /etc/ssl/certs/ca-certificates.crt
  • CentOS / RockyLinux: /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt

S3 にアクセスする可能性があるすべての BE ノードでこの項目を設定し、証明書ファイルが存在して Doris プロセスから読み取れることを確認してください。be.conf を更新した後、変更を適用するために対象の BE ノードを再起動してください。

パラメータの概要​

プロパティ名従来の名前説明デフォルト必須
s3.endpointS3 サービスのアクセスエンドポイント(例:s3.us-east-1.amazonaws.com)なしいいえ
s3.access_key認証に使用する AWS Access Keyなしいいえ
s3.secret_key認証に使用する AWS Secret Keyなしいいえ
s3.regionS3 リージョン(例:us-east-1)。設定を強く推奨なしはい
s3.use_path_styleパス形式のアクセスを使用するかどうかFALSEいいえ
s3.connection.maximum同時接続数が多い場合の最大接続数50いいえ
s3.connection.request.timeoutリクエストのタイムアウト(ミリ秒)。接続の取得にかける時間を制御3000いいえ
s3.connection.timeout接続の確立にかける時間の上限(ミリ秒)1000いいえ
s3.role_arnAssume Role モードで使用する Role ARNなしいいえ
s3.external_ids3.role_arn とともに使用する External IDなしいいえ
s3.credentials_provider_typeAWS 認証に使用する認証情報プロバイダーの種類(AK/SK を使用しない場合に使用。IAM Role モードでは STS の元となる認証情報として使用)DEFAULTいいえ

バージョンに関する注記:s3.credentials_provider_type は 3.1.4 および 4.0.3 以降でサポートされています。

認証の設定​

Doris は、S3 にアクセスするための次の3つの方法をサポートしています。

1. Access Key と Secret Key(AK/SK)を直接指定する​

"s3.access_key"="your-access-key",
"s3.secret_key"="your-secret-key",
"s3.endpoint"="https://s3.us-east-1.amazonaws.com",
"s3.region"="us-east-1"

2. IAM Role(Assume Role)モード​

アカウント間のアクセスや一時的な認可によるアクセスに適しています。Doris はロール認可を通じて一時的な認証情報を自動的に取得します。

"s3.role_arn"="arn:aws:iam::123456789012:role/demo-role",
"s3.external_id"="external-identifier",
"s3.endpoint"="https://s3.us-east-1.amazonaws.com",
"s3.region"="us-east-1"

IAM Role モードでの s3.credentials_provider_type の設定​

s3.role_arn を設定した場合、s3.credentials_provider_type によって、STS AssumeRole に使用する元の認証情報のプロバイダーが決まります。

  1. s3.credentials_provider_type から元の認証情報を取得します。
  2. 元の認証情報を使用して STS AssumeRole を呼び出します。
  3. 返された一時的な認証情報を使用して S3 にアクセスします。

IAM Role と s3.credentials_provider_type の組み合わせ例​

例 1:EC2 Instance Profile を STS の元の認証情報として使用

"s3.role_arn"="arn:aws:iam::123456789012:role/demo-role",
"s3.external_id"="external-identifier",
"s3.credentials_provider_type"="INSTANCE_PROFILE",
"s3.endpoint"="https://s3.us-east-1.amazonaws.com",
"s3.region"="us-east-1"

例 2:Web Identity(IRSA など)を STS の元の認証情報として使用

"s3.role_arn"="arn:aws:iam::123456789012:role/demo-role",
"s3.credentials_provider_type"="WEB_IDENTITY",
"s3.endpoint"="https://s3.us-east-1.amazonaws.com",
"s3.region"="us-east-1"

例 3:コンテナのメタデータを STS の元の認証情報として使用

"s3.role_arn"="arn:aws:iam::123456789012:role/demo-role",
"s3.credentials_provider_type"="CONTAINER",
"s3.endpoint"="https://s3.us-east-1.amazonaws.com",
"s3.region"="us-east-1"

例 4:デフォルトのプロバイダーチェーンを STS の元の認証情報として使用

"s3.role_arn"="arn:aws:iam::123456789012:role/demo-role",
"s3.credentials_provider_type"="DEFAULT",
"s3.endpoint"="https://s3.us-east-1.amazonaws.com",
"s3.region"="us-east-1"

3. s3.credentials_provider_type で認証情報の取得元を指定する​

EC2 Instance Profile、コンテナのメタデータ、Web Identity など、AK/SK を明示的に指定しない場合に適しています。

"s3.credentials_provider_type"="INSTANCE_PROFILE",
"s3.endpoint"="https://s3.us-east-1.amazonaws.com",
"s3.region"="us-east-1"

s3.credentials_provider_type でサポートされる値​

値説明
DEFAULTデフォルトのプロバイダーチェーンを使用
ENV環境変数から認証情報を読み取る
SYSTEM_PROPERTIESシステムプロパティから認証情報を読み取る
WEB_IDENTITYWeb Identity Token の認証情報を使用
CONTAINERコンテナのメタデータにある認証情報を使用
INSTANCE_PROFILEEC2 Instance Profile の認証情報を使用
ANONYMOUS匿名アクセス(公開バケット向け)

組み合わせて設定した場合の適用ルール​

  1. s3.access_key と s3.secret_key の両方を設定した場合は、AK/SK が優先して使用されます。
  2. AK/SK が設定されておらず、s3.role_arn が設定されている場合は、IAM Role が使用されます。この場合、s3.credentials_provider_type を使用して STS の元の認証情報を選択します。
  3. AK/SK も s3.role_arn も設定されていない場合は、s3.credentials_provider_type によって、S3 クライアントが使用する認証情報プロバイダーが直接決まります。

注:s3.access_key と s3.secret_key は、必ず両方を設定してください。

AWS の認証と認可の設定方法については、AWS の認証と認可を参照してください。

EKS Pod Identity(4.1.5 以降)​

4.1.5 以降、BE および関連する C++ のストレージアクセス経路は、EKS Pod Identity のコンテナ認証情報エンドポイントと認可トークンファイルをサポートします。EKS によって AWS_CONTAINER_CREDENTIALS_FULL_URI と AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE が Pod に注入され、Doris プロセスがエンドポイントに接続してトークンファイルを読み取れる必要があります。コンテナ認証情報プロバイダー(s3.credentials_provider_type=CONTAINER、またはそれを選択するデフォルトチェーン)を使用する場合は、優先順位の高い AK/SK 認証情報を併せて設定しないでください。

プロバイダーは、トークンのローテーションに対応するため、認証情報を取得する際にトークンファイルを再読み込みします。ECS 互換の AWS_CONTAINER_CREDENTIALS_RELATIVE_URI と AWS_CONTAINER_AUTHORIZATION_TOKEN も引き続きサポートされます。相対 URI と完全 URI の両方が存在する場合は、相対 URI が優先されます。この変更は、FE の独立した Java 認証情報設定には適用されません。FE と BE のアクセスをそれぞれ確認してください。

S3 Directory Bucket へのアクセス​

この機能はバージョン 3.1.0 以降でサポートされています。

Amazon S3 Express One Zone(Directory Bucket とも呼ばれます)は、より高いパフォーマンスを提供しますが、エンドポイントの形式が異なります。

  • 通常のバケット: s3.us-east-1.amazonaws.com
  • Directory Bucket: s3express-usw2-az1.us-west-2.amazonaws.com

利用可能なその他のリージョンについては、AWS 公式ドキュメントを参照してください。

例:

"s3.access_key"="ak",
"s3.secret_key"="sk",
"s3.endpoint"="https://s3express-usw2-az1.us-west-2.amazonaws.com",
"s3.region"="us-west-2"

権限ポリシー​

用途に応じて、権限は読み取り専用ポリシーと読み書き可能ポリシーに分類できます。

1. 読み取り専用権限​

S3 からのオブジェクトの読み取りのみを許可します。LOAD、TVF、EXTERNAL CATALOG のクエリなどに適しています。

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
],
"Resource": "arn:aws:s3:::<your-bucket>/your-prefix/*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::<your-bucket>"
}
]
}

2. 読み書き権限​

読み取り専用権限に加え、オブジェクトの削除、作成、変更も許可します。EXPORT、OUTFILE、EXTERNAL CATALOG の書き戻しなどに適しています。

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:AbortMultipartUpload",
"s3:ListMultipartUploadParts"
],
"Resource": "arn:aws:s3:::<your-bucket>/<your-prefix>/*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:GetBucketVersioning",
"s3:GetLifecycleConfiguration"
],
"Resource": "arn:aws:s3:::<your-bucket>"
}
]
}

注記​

  1. プレースホルダーの置き換え

    • <bucket> → S3 バケット名。
    • <account-id> → AWS アカウント ID(12 桁の数字)。
  2. 最小権限の原則

    • クエリのみを実行する場合は、書き込み権限を付与しないでください。