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

S3

このドキュメントでは、AWS S3 へのアクセスに必要なパラメータを説明します。これらのパラメータは次の用途に適用されます。

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

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

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

デフォルトでは、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.comNoneいいえ
s3.access_key認証用の AWS Access KeyNoneいいえ
s3.secret_key認証用の AWS Secret KeyNoneいいえ
s3.regionS3 のリージョン。例:us-east-1。設定を強く推奨Noneはい
s3.use_path_styleパス形式のアクセスを使用するかどうかFALSEいいえ
s3.connection.maximum高い同時実行数に対応するための最大接続数50いいえ
s3.connection.request.timeoutリクエストのタイムアウト(ミリ秒)。接続の取得を待つ時間を制御3000いいえ
s3.connection.timeout接続確立のタイムアウト(ミリ秒)1000いいえ
s3.role_arnAssume Role モードで指定するロール ARNNoneいいえ
s3.external_ids3.role_arn とともに使用する外部 IDNoneいいえ
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. 最小権限の原則

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