部分SystemLink Enterprise服务需要对象存储提供程序。

SystemLink Enterprise支持下列存储提供程序:
  • Amazon S3存储
  • Amazon S3兼容存储
  • Azure Blob存储
备注 Amazon S3兼容的对象存储提供程序必须实施完整的Amazon S3 API。详细信息请参阅Amazon S3 API参考。Data Frame服务不支持GCS Amazon S3互操作XML API。

下表中列出的Amazon S3存储和Azure Blob存储参数通常可在多种配置之间共享。该共享通过Helm值文件中的YAML锁定语法实现。该语法为值文件提供了便捷的通用配置共享方式,同时支持通过自定义值重写单独引用项。

Amazon S3和Amazon S3兼容存储提供程序

备注 可在Amazon S3存储中使用SSE-S3或SSE-KMS(配合存储桶密钥)对对象进行加密。有关详细信息,请参阅使用加密技术保护Amazon S3数据

aws-supplemental-values.yaml Helm配置文件或storage-values.yaml Helm配置文件中设置以下配置。

可在aws-secrets.yaml文件、storage-secrete.yaml文件或直接在簇上配置密钥引用。

表 33. 可配置参数
2025-07版本之前的参数 2025-07版本之后的参数 详细信息
不适用
  • dataframeservice.storage.type
  • fileingestion.storage.type
  • feedservice.storage.type
  • nbexecservice.storage.type
该值表示服务存储类型。设置值为s3
  • dataframeservice.s3.port
  • fileingestion.s3.port
  • feedservice.s3.端口
  • nbexecservice.s3.端口
  • dataframeservice.storage.s3.port
  • fileingestion.storage.s3.port
  • feedservice.storage.s3.port
  • nbexecservice.storage.s3.port
该值表示存储提供程序服务端口号。
  • dataframeservice.s3.host
  • fileingestion.s3.host
  • feedservice.s3.host
  • nbexecservice.s3.host
  • dataframeservice.storage.s3.host
  • fileingestion.storage.s3.host
  • feedservice.storage.s3.host
  • nbexecservice.storage.s3.host
该值表示存储提供程序服务的主机名。
  • dataframeservice.s3.schemeName
  • fileingestion.s3.scheme
  • feedservice.s3.scheme
  • nbexecservice.s3.scheme
  • dataframeservice.storage.s3.schemeName
  • fileingestion.storage.s3.scheme
  • feedservice.storage.s3.scheme
  • nbexecservice.storage.s3.scheme
该值表示存储提供程序服务的方案。该值通常为https
  • dataframeservice.s3.region
  • fileingestion.s3.region
  • feedservice.s3.region
  • nbexecservice.s3.region
  • dataframeservice.storage.s3.region
  • fileingestion.storage.s3.region
  • feedservice.storage.s3.region
  • nbexecservice.storage.s3.region
该值表示S3 bucket所在的AWS区域。
  • dataframeservice.sldremio.distStorage
未改变

处理<ATTENTION>标记。

这些设置可配置DataFrame服务所需的分布式存储。

  • dataframeservice.storage.s3.auth.secretName
  • fileingestion.storage.s3.secretName
  • feedservice.storage.s3.secretName
  • nbexecservice.storage.s3.secretName
未改变 用于连接存储提供程序服务的凭据的密钥名称。

从2025-11版本开始,fileingestioncdc增加了以下参数。

表 34. 2025-11版本参数
参数 详细信息
fileingestioncdc.highAvailability.storage.s3.port 该值表示存储提供程序服务的端口号。
fileingestioncdc.highAvailability.storage.s3.scheme 该值表示存储提供程序服务的方案。该值通常为https

通过IAM将服务连接到S3

分配IAM角色以将服务连接到Amazon S3。在Helm Value文件中配置服务帐户和IAM角色注释。

备注 从2026-03版本开始,SystemLink已停用AWS_WEB_IDENTITY_TOKEN。SystemLink保留了标记的功能,作为AWS_IAM的别名。使用AWS_IAM作为基于IAM角色的S3身份验证类型。
  • 为每个服务创建一个服务账户,方法是设置以下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
备注 仅在使用IRSA时包含下列服务帐户注释。Pod Identity不需要这些注释。
表 35. 服务配置
服务 配置
设备服务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元数据身份验证。
备注 NI建议在数据存储和分布式存储中使用单独的S3存储桶。NI建议为每个IAM角色设定狭义的访问范围。
备注 更改dataframeservice.sldremio.storage.s3.authType的值时,必须在应用更新后重置Dremio。该要求不适用于首次安装。详细信息见重置Dremio

按照下列步骤,配置Dremio身份验证。

  1. 确保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。
  2. 为运行Dremio Pod的EC2节点组授予IAM角色权限,以承担DataFrame Service IAM角色。如需授予该权限,可在节点组的角色策略中添加以下声明。
    {
      "Action": [
        "sts:AssumeRole"
      ],
      "Effect": "Allow",
      "Resource": "<dataframeservice_role_ARN>"
    }
  3. dataframeservice.storage.s3.authType设置为AWS_IAM
  4. dataframeservice.sldremio.storage.s3.authType设置为EC2_METADATA
  5. dataframeservice.sldremio.storage.s3.roleArn设置为DataFrame Service IAM role ARN。
  6. 使用下列选项之一配置分布式存储身份验证。
    表 36. 配置分布式存储身份验证的选项
    选项 步骤
    EKS Pod Identity
    备注 NI建议使用该选项
    1. 创建Dremio分布式存储IAM角色。
      1. 创建一个包含以下声明的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>/*"
          ]
        }
      2. 使用信任策略创建IAM角色,允许具有sts:AssumeRolests:TagSession权限的EKS Pod身份代理(pods.eks.amazonaws.com)。
      3. 将IAM策略附加到角色。
    2. 在Dremio分布式存储角色、dremio-coordator服务帐户和dremio-executor服务帐户之间创建EKS Pod身份关联。
    3. dataframeservice.sldremio.distStorage.aws.authentication设置为podIdentity
    EC2元数据
    备注 Pod身份不可用时使用此选项
    1. 添加声明至EC2节点组的角色策略以允许全局S3bucket发现。
      {
        "Action": [
          "s3:GetBucketLocation",
          "s3:ListAllMyBuckets"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::*"
      }
    2. 添加声明至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服务的角色策略。
      • 上述语句。
    3. dataframeservice.sldremio.distStorage.aws.authentication设置为metadata
  7. 如S3 bucket使用SSE-KMS加密,请确保以下角色具有kms:GenerateDataKeykms:Decrypt权限,以便访问KMS密钥。
    • DataFrame Service IAM角色
    • Dremio分布式存储角色
      备注 如分布式存储身份验证使用EC2元数据,请设置EC2节点组角色。
  8. 使用基于IAM身份验证时,从密钥中删除Dremio S3访问密钥配置。

出于安全考虑,NI建议在专用节点组上运行Dremio。

备注 Dremio是否与其他工作负载共享节点组。这些工作负载可通过节点元数据访问相同的EC2实例配置文件凭据。使用专用节点组限制对Dremio工作负载的凭据访问。

要使用Pod的EC2元数据身份验证,实例元数据服务(IMDS)的跳数限制必须大于1。大于等于2的跳数限制允许pod获取节点之外的凭证。

备注 该设置适用于使用AL2023的Amazon EKS节点,默认跳跃节点限制可能阻止Pod访问IMDS凭据。详细信息见IMDS访问注意事项

使用访问密钥连接服务至S3

在下列情况下,通过访问密钥将服务连接至S3。

备注 仅当系统需要静态凭据时使用访问密钥身份验证。
  • S3兼容存储提供程序 - 只有Amazon S3支持基于IAM角色的身份验证。对于其他S3兼容提供程序,请使用访问密钥身份验证。
  • 无IAM角色配置的AWS部署-如Pod Identity和IRSA不可用,可使用访问密钥身份验证。
表 37. 访问密钥的文件配置
配置 说明
值文件

SystemLink-values.yamlaws-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.yamlaws-secrets.yaml文件中,提供访问凭证。

feedservice:
  secrets:
    s3:
      accessKeyId: "<your-access-key-id>"
      accessKey: "<your-secret-access-key>"

当IAM身份验证不可用时,该模式同样适用于其他服务。

备注 在AWS和Amazon S3上部署时,NI建议在支持的情况下使用IAM身份验证,以增强安全性和凭证管理。

Azure Blob存储提供程序

备注 对于Data Frame服务的存储帐户,必须禁用blob软删除层次命名空间

azure-supplemental-values.yaml Helm配置文件或storage-values.yaml Helm配置文件中设置以下配置。

可在azure-secrets.yaml文件、storage-secrets.yaml文件或直接在簇上配置密钥引用。

表 38. 可配置参数
从2025-07版本开始的参数 详细信息
  • dataframeservice.storage.type
  • fileingestion.storage.type
  • fileingestioncdc.highAvailability.storage.type
  • feedservice.storage.type
  • nbexecservice.storage.type

该值表示服务存储类型。设置值为azure

  • dataframeservice.storage.azure.blobApiHost
  • fileingestion.storage.azure.blobApiHost
  • fileingestioncdc.highAvailability.storage.azure.blobApiHost
  • feedservice.storage.azure.blobApiHost
  • nbexecservice.storage.azure.blobApiHost

该值表示Azure Blob存储的主机(不含帐户名称)。例如,可将值设置为blob.core.windows.netblob.core.usgovcloudapi.net

如果存储未使用默认端口,请将端口添加至主机的末尾。例如,blob.core.windows.net:1234

  • dataframeservice.storage.azure.dataLakeApiHost

该值表示要连接的Azure Data Lake Storage主机和端口(不含帐户名称)。例如,可将值设置为dfs.core.windows.net

如果存储未使用默认端口,请将端口添加至主机的末尾。例如:dfs.core.windows.net:1234

  • dataframeservice.storage.azure.accountName
  • fileingestion.storage.azure.accountName
  • fileingestioncdc.highAvailability.storage.azure.accountName
  • feedservice.storage.azure.accountName
  • nbexecservice.storage.azure.accountName

该值表示服务的存储帐户。NI建议对于不同的服务使用不同的存储帐户。

连接服务至Azure Blob存储

要配置Azure Blob Storage身份验证,必须同时配置values文件和secrets文件。

使用values文件和secrets文件配置Azure Blob Storage身份验证。

azure-supplemental-values.yamlstorage-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>"

其他服务也是如此。

文件存储的限制和成本注意事项

如需调整文件存储服务的限制和成本注意事项,请参阅下列配置。

表 39. 文件存储注意事项
注意事项 配置
降低存储成本。
如需清理未完成的分段上传,请配置服务。如果您使用的是Amazon S3,请在S3 bucket上配置AbortIncompleteMultipartUpload值。
备注 Azure存储将在七天后自动删除未提交的数据块。有关其他S3兼容提供程序的信息,请参阅提供程序文档。
调整单个用户每秒可上传的文件数量。

配置fileingestion.rateLimits.upload值。

默认值为每个用户每秒3个文件。通过跨副本的负载平衡,有效速率高于指定速率。

调整用户可上传的最大文件大小。

配置fileingestion.uploadLimitGB值。

默认情况下,值为2 GB。

调整单个副本用于获取数据的并发请求数量。

配置dataframeservice.rateLimits.ingestion.requestLimit值。