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.endpoint | S3 サービスへのアクセス用エンドポイント。例:s3.us-east-1.amazonaws.com | None | いいえ | |
| s3.access_key | 認証用の AWS Access Key | None | いいえ | |
| s3.secret_key | 認証用の AWS Secret Key | None | いいえ | |
| s3.region | S3 のリージョン。例:us-east-1。設定を強く推奨 | None | はい | |
| s3.use_path_style | パス形式のアクセスを使用するかどうか | FALSE | いいえ | |
| s3.connection.maximum | 高い同時実行数に対応するための最大接続数 | 50 | いいえ | |
| s3.connection.request.timeout | リクエストのタイムアウト(ミリ秒)。接続の取得を待つ時間を制御 | 3000 | いいえ | |
| s3.connection.timeout | 接続確立のタイムアウト(ミリ秒) | 1000 | いいえ | |
| s3.role_arn | Assume Role モードで指定するロール ARN | None | いいえ | |
| s3.external_id | s3.role_arn とともに使用する外部 ID | None | いいえ | |
| s3.credentials_provider_type | AWS 認証用の認証情報プロバイダーの種類(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 に使用する元の認証情報プロバイダーが決まります。
s3.credentials_provider_typeから元の認証情報を取得します。- 元の認証情報を使用して STS
AssumeRoleを呼び出します。 - 返された一時的な認証情報で 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_IDENTITY | Web Identity Token の認証情報を使用 |
| CONTAINER | コンテナのメタデータに基づく認証情報を使用 |
| INSTANCE_PROFILE | EC2 Instance Profile の認証情報を使用 |
| ANONYMOUS | 匿名アクセス(公開バケット用) |
同時に設定した場合の適用ルール
s3.access_keyとs3.secret_keyの両方が設定されている場合は、AK/SK が優先して使用されます。- AK/SK が設定されておらず、
s3.role_arnが設定されている場合は、IAM Role が使用されます。この場合、s3.credentials_provider_typeを使用して STS の元の認証情報を選択します。 - 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>"
}
]
}
注意事項
-
プレースホルダーの置き換え
<bucket>→ S3 バケットの名前。<account-id>→ AWS アカウント ID(12 桁の数字)。
-
最小権限の原則
- クエリのみを行う場合は、書き込み権限を付与しないでください。