对象存储
- 更新时间2026-08-03
- 阅读时长24分钟
部分SystemLink Enterprise服务需要对象存储提供程序。
- Amazon S3存储
- Amazon S3兼容存储
- Azure Blob存储
下表中列出的Amazon S3存储和Azure Blob存储参数通常可在多种配置之间共享。该共享通过Helm值文件中的YAML锁定语法实现。该语法为值文件提供了便捷的通用配置共享方式,同时支持通过自定义值重写单独引用项。
Amazon S3和Amazon S3兼容存储提供程序
在aws-supplemental-values.yaml Helm配置文件或storage-values.yaml Helm配置文件中设置以下配置。
可在aws-secrets.yaml文件、storage-secrete.yaml文件或直接在簇上配置密钥引用。
| 2025-07版本之前的参数 | 2025-07版本之后的参数 | 详细信息 |
|---|---|---|
| 不适用 |
|
该值表示服务存储类型。设置值为s3。 |
|
|
该值表示存储提供程序服务端口号。 |
|
|
该值表示存储提供程序服务的主机名。 |
|
|
该值表示存储提供程序服务的方案。该值通常为https。 |
|
|
该值表示S3 bucket所在的AWS区域。 |
|
未改变 |
处理<ATTENTION>标记。 这些设置可配置DataFrame服务所需的分布式存储。 |
|
未改变 | 用于连接存储提供程序服务的凭据的密钥名称。 |
从2025-11版本开始,fileingestioncdc增加了以下参数。
| 参数 | 详细信息 |
|---|---|
| fileingestioncdc.highAvailability.storage.s3.port | 该值表示存储提供程序服务的端口号。 |
| fileingestioncdc.highAvailability.storage.s3.scheme | 该值表示存储提供程序服务的方案。该值通常为https。 |
通过IAM将服务连接到S3
分配IAM角色以将服务连接到Amazon S3。在Helm Value文件中配置服务帐户和IAM角色注释。
-
为每个服务创建一个服务账户,方法是设置以下Helm值:serviceAccount.create: true。备注 Flink服务不需要该配置。因其服务账户由Flink Operator管理。
- 创建一个包含以下声明的IAM策略:
"Action": [ "s3:PutObject", "s3:ListBucket", "s3:GetObject", "s3:DeleteObject", "s3:AbortMultipartUpload" ], "Effect": "Allow", "Resource": [ "<s3_bucket_ARN>/*", "<s3_bucket_ARN>" ]
备注 <s3_bucket_ARN>占位符表示该服务的S3 bucket的Amazon资源名称。 - 创建一个应用IAM策略的IAM角色。备注 大多数IAM角色使用以下命名规范:<release-name>-<service-name>-role。例如,systemlink-feedservice-role。Flink服务与Flink操作员具有相同的配置,并使用:<release-name>-flink-role。
| 服务 | 配置 |
|---|---|
| 设备服务CDC |
assetservicecdc:
highAvailability:
storage:
s3:
authType: "AWS_IAM"
flinkoperator:
flink-kubernetes-operator:
jobServiceAccount:
annotations:
eks.amazonaws.com/role-arn: "arn:aws:iam::<account-id>:role/<release-name>-flink-role"
|
| DataFrame服务 | dataframeservice:
storage:
s3:
authType: "AWS_IAM"
serviceAccount:
annotations:
eks.amazonaws.com/role-arn: "arn:aws:iam::<account-id>:role/<release-name>-dataframeservice-role"dataframeservice:
sldremio:
distStorage:
aws:
authentication: "metadata"备注 从2026-05版本开始,Dremio支持用于分布式存储的EKS Pod身份。如需使用pod身份,请将sldremio.distStorage.aws.authentication设置为podIdentity而不是metadata。 dataframeservice:
sldremio:
storage:
s3:
authType: "EC2_METADATA"
roleArn: "arn:aws:iam::<account-id>:role/<release-name>-dataframeservice-role"关于其他Dremio IAM配置步骤,见配置S3的Dremio认证。 |
| 订阅源服务 |
feedservice:
storage:
s3:
authType: "AWS_IAM"
serviceAccount:
annotations:
eks.amazonaws.com/role-arn: "arn:aws:iam::<account-id>:role/<release-name>-feedservice-role"
|
| 文件引入服务 |
fileingestion:
storage:
s3:
authType: "AWS_IAM"
serviceAccount:
annotations:
eks.amazonaws.com/role-arn: "arn:aws:iam::<account-id>:role/<release-name>-fileingestion-role"
|
| 文件引入CDC |
fileingestioncdc:
highAvailability:
storage:
s3:
authType: "AWS_IAM"
flinkoperator:
flink-kubernetes-operator:
jobServiceAccount:
annotations:
eks.amazonaws.com/role-arn: "arn:aws:iam::<account-id>:role/<release-name>-flink-role"
|
| Notebook执行服务 |
nbexecservice:
storage:
s3:
authType: "AWS_IAM"
serviceAccount:
annotations:
eks.amazonaws.com/role-arn: "arn:aws:iam::<account-id>:role/<release-name>-executions-role"
|
| 系统服务CDC |
systemscdc:
highAvailability:
storage:
s3:
authType: "AWS_IAM"
flinkoperator:
flink-kubernetes-operator:
jobServiceAccount:
annotations:
eks.amazonaws.com/role-arn: "arn:aws:iam::<account-id>:role/<release-name>-flink-role"
|
配置S3的Dremio身份验证
Dremio需要两个S3存储路径的身份验证。
- 数据存储 - 存储表格数据的DataFrame Service S3 bucket。Dremio通过承担DataFrame Service IAM角色访问EC2实例元数据。
- 分布式存储 - Dremio用于查询协调和缓存的独立S3存储桶。从2026-05版本开始,NI建议通过EKS Pod身份验证分布式存储。对于早期版本或Pod身份不可用时,请使用EC2元数据身份验证。
按照下列步骤,配置Dremio身份验证。
- 确保DataFrame Service IAM角色的信任策略允许以下两个主体。
- EKS Pod ID代理(pods.eks.amazonaws.com)必须具有sts:AssumeRole权限和sts:TagSession权限。
- 运行Dremio Pod的EC2节点组角色必须具有sts:AssumeRole权限。
备注 DataFrame Service角色需要EC2节点组角色作为受信任的主体。Dremio通过EC2元数据认证承担该角色,访问DataFrame Service S3 bucket。如果在通过IAM连接服务至S3之后创建了DataFrame Service角色,请更新信任策略以包含EC2节点组角色ARN。 - 为运行Dremio Pod的EC2节点组授予IAM角色权限,以承担DataFrame Service IAM角色。如需授予该权限,可在节点组的角色策略中添加以下声明。
{ "Action": [ "sts:AssumeRole" ], "Effect": "Allow", "Resource": "<dataframeservice_role_ARN>" } - 将dataframeservice.storage.s3.authType设置为AWS_IAM。
- 将dataframeservice.sldremio.storage.s3.authType设置为EC2_METADATA。
- 将dataframeservice.sldremio.storage.s3.roleArn设置为DataFrame Service IAM role ARN。
- 使用下列选项之一配置分布式存储身份验证。
表 36. 配置分布式存储身份验证的选项 选项 步骤 EKS Pod Identity 备注 NI建议使用该选项- 创建Dremio分布式存储IAM角色。
- 创建一个包含以下声明的IAM策略。
添加允许全局S3 bucket发现的语句。
{ "Action": [ "s3:GetBucketLocation", "s3:ListAllMyBuckets" ], "Effect": "Allow", "Resource": "arn:aws:s3:::*" }添加允许访问分布式存储桶的语句。
{ "Action": [ "s3:ListBucket", "s3:ListMultipartUploadParts", "s3:ListBucketMultipartUploads", "s3:AbortMultipartUpload", "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Effect": "Allow", "Resource": [ "<distributed_storage_bucket_ARN>", "<distributed_storage_bucket_ARN>/*" ] } - 使用信任策略创建IAM角色,允许具有sts:AssumeRole和sts:TagSession权限的EKS Pod身份代理(pods.eks.amazonaws.com)。
- 将IAM策略附加到角色。
- 创建一个包含以下声明的IAM策略。
- 在Dremio分布式存储角色、dremio-coordator服务帐户和dremio-executor服务帐户之间创建EKS Pod身份关联。
- 将dataframeservice.sldremio.distStorage.aws.authentication设置为podIdentity。
EC2元数据 备注 Pod身份不可用时使用此选项- 添加声明至EC2节点组的角色策略以允许全局S3bucket发现。
{ "Action": [ "s3:GetBucketLocation", "s3:ListAllMyBuckets" ], "Effect": "Allow", "Resource": "arn:aws:s3:::*" } 添加声明至EC2节点组角色策略以允许访问分布式存储桶。
{ "Action": [ "s3:ListBucket", "s3:ListMultipartUploadParts", "s3:ListBucketMultipartUploads", "s3:AbortMultipartUpload", "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Effect": "Allow", "Resource": [ "<distributed_storage_bucket_ARN>", "<distributed_storage_bucket_ARN>/*" ] }备注 如果DataFrame Service S3存储桶和Dremio分布式存储桶相同,请在下列区域使用相同的存储桶ARN。- DataFrame服务的角色策略。
- 上述语句。
- 将dataframeservice.sldremio.distStorage.aws.authentication设置为metadata。
- 创建Dremio分布式存储IAM角色。
- 如S3 bucket使用SSE-KMS加密,请确保以下角色具有kms:GenerateDataKey和kms:Decrypt权限,以便访问KMS密钥。
- DataFrame Service IAM角色
- Dremio分布式存储角色备注 如分布式存储身份验证使用EC2元数据,请设置EC2节点组角色。
- 使用基于IAM身份验证时,从密钥中删除Dremio S3访问密钥配置。
出于安全考虑,NI建议在专用节点组上运行Dremio。
要使用Pod的EC2元数据身份验证,实例元数据服务(IMDS)的跳数限制必须大于1。大于等于2的跳数限制允许pod获取节点之外的凭证。
使用访问密钥连接服务至S3
在下列情况下,通过访问密钥将服务连接至S3。
- S3兼容存储提供程序 - 只有Amazon S3支持基于IAM角色的身份验证。对于其他S3兼容提供程序,请使用访问密钥身份验证。
- 无IAM角色配置的AWS部署-如Pod Identity和IRSA不可用,可使用访问密钥身份验证。
| 配置 | 说明 |
|---|---|
| 值文件 |
在SystemLink-values.yaml或aws-supplemental-values.yaml文件中,指定S3连接参数和秘密引用。 feedservice:
storage:
s3:
secretName: "feeds-s3-credentials"
accessKeyIdName: "aws-access-key-id"
accessKeyName: "aws-secret-access-key"
authType: "ACCESS_KEY"
bucket: "systemlink-feeds"
scheme: "https://"
host: "s3.amazonaws.com"
port: 443
region: "us-east-1"
|
| 密钥文件 |
在SystemLink-secrets.yaml或aws-secrets.yaml文件中,提供访问凭证。 feedservice:
secrets:
s3:
accessKeyId: "<your-access-key-id>"
accessKey: "<your-secret-access-key>"
|
当IAM身份验证不可用时,该模式同样适用于其他服务。
Azure Blob存储提供程序
在azure-supplemental-values.yaml Helm配置文件或storage-values.yaml Helm配置文件中设置以下配置。
可在azure-secrets.yaml文件、storage-secrets.yaml文件或直接在簇上配置密钥引用。
| 从2025-07版本开始的参数 | 详细信息 |
|---|---|
|
该值表示服务存储类型。设置值为azure。 |
|
该值表示Azure Blob存储的主机(不含帐户名称)。例如,可将值设置为blob.core.windows.net或blob.core.usgovcloudapi.net。 如果存储未使用默认端口,请将端口添加至主机的末尾。例如,blob.core.windows.net:1234。 |
|
该值表示要连接的Azure Data Lake Storage主机和端口(不含帐户名称)。例如,可将值设置为dfs.core.windows.net。 如果存储未使用默认端口,请将端口添加至主机的末尾。例如:dfs.core.windows.net:1234。 |
|
该值表示服务的存储帐户。NI建议对于不同的服务使用不同的存储帐户。 |
连接服务至Azure Blob存储
要配置Azure Blob Storage身份验证,必须同时配置values文件和secrets文件。
使用values文件和secrets文件配置Azure Blob Storage身份验证。
在azure-supplemental-values.yaml或storage-values.yaml文件中,指定Azure存储参数。
feedservice:
storage:
type: "azure"
azure:
accountName: "<your-azure-storage-account-name>"
blobApiHost: "blob.core.windows.net"在azure-secrets.yaml文件中,提供访问凭证。
feedservice:
secrets:
azure:
accessKey: "<your-azure-storage-access-key>"其他服务也是如此。
文件存储的限制和成本注意事项
如需调整文件存储服务的限制和成本注意事项,请参阅下列配置。
| 注意事项 | 配置 |
|---|---|
| 降低存储成本。 |
如需清理未完成的分段上传,请配置服务。如果您使用的是Amazon S3,请在S3 bucket上配置AbortIncompleteMultipartUpload值。
备注 Azure存储将在七天后自动删除未提交的数据块。有关其他S3兼容提供程序的信息,请参阅提供程序文档。 |
| 调整单个用户每秒可上传的文件数量。 |
配置fileingestion.rateLimits.upload值。 默认值为每个用户每秒3个文件。通过跨副本的负载平衡,有效速率高于指定速率。 |
| 调整用户可上传的最大文件大小。 |
配置fileingestion.uploadLimitGB值。 默认情况下,值为2 GB。 |
| 调整单个副本用于获取数据的并发请求数量。 |
配置dataframeservice.rateLimits.ingestion.requestLimit值。 |
相关内容
- AWS EKS中的SystemLink Enterprise
Amazon Elastic Kubernetes Service (EKS) 是一种受管的 Kubernetes 服务,可简化在 AWS 上运行 Kubernetes 的过程,而无需安装和操作自己的 Kubernetes 控制平面。
- Azure AKS中的SystemLink Enterprise
Azure Kubernetes服务(AKS)是一种受管的Kubernetes服务,简化了在Azure上运行Kubernetes的过程,无需安装和操作自己的Kubernetes控制平面。
- systemlink-values.yaml
- azure-supplemental-values.yaml
- aws-supplemental-values.yaml
- systemlink-secrets.yaml
- azure-secrets.yaml
- aws-secrets.yaml
- Amazon S3 API参考
- 利用加密保护Amazon S3数据
- 配置桶生命周期策略以删除未完成的分段上传
- Blob的软删除功能
- Azure Data Lake Storage的分层命名空间
- IMDS访问注意事项
- Dremio配置
SystemLink DataFrame服务使用Dremio存储和索引表格数据。
- 旋转密钥
SystemLink Enterprise密钥可能需要根据环境、组织安全策略或其他操作要求的变化进行修改或轮换。不同的密钥需要不同的程序,以确保修改后正常运行。