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.endpoint | S3 サービスのアクセスエンドポイント(例:s3.us-east-1.amazonaws.com) | なし | いいえ | |
| s3.access_key | 認証に使用する AWS Access Key | なし | いいえ | |
| s3.secret_key | 認証に使用する AWS Secret Key | なし | いいえ | |
| s3.region | S3 リージョン(例:us-east-1)。設定を強く推奨 | なし | はい | |
| s3.use_path_style | パス形式のアクセスを使用するかどうか | FALSE | いいえ | |
| s3.connection.maximum | 同時接続数が多い場合の最大接続数 | 50 | いいえ | |
| s3.connection.request.timeout | リクエストのタイムアウト(ミリ秒)。接続の取得にかける時間を制御 | 3000 | いいえ | |
| s3.connection.timeout | 接続の確立にかける時間の上限(ミリ秒) | 1000 | いいえ | |
| s3.role_arn | Assume Role モードで使用する Role ARN | なし | いいえ | |
| s3.external_id | s3.role_arn とともに使用する External ID | なし | いいえ | |
| 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 桁の数字)。
-
最小権限の原則
- クエリのみを実行する場合は、書き込み権限を付与しないでください。