StarRocks AWS IAM 策略配置指南:为 S3 读写与 Glue 集成精准授权
StarRocks AWS IAM 策略配置指南为 S3 读写与 Glue 集成精准授权【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks本篇指南围绕 StarRocks 官方文档 docs/en/sql-reference/aws_iam_policies.md 展开系统讲解在 StarRocks 与 AWS 生态S3 对象存储、Glue Data Catalog集成时如何按业务场景配置 AWS IAMIdentity and Access Management策略。文章将完整继承原文档提供的三类策略模板并结合仓库中的认证方案文档与 BE 端源码说明这些策略背后的权限设计、认证机制与落地姿势。读完本文你可以独立完成从 S3 批量加载数据查询 / 写入 S3 数据接入 AWS Glue 元数据三类场景的 IAM 策略编写与挂载并理解其在 StarRocks 中的实际生效链路。在 AWS IAM 中策略Policy是对某个 AWS 资源声明的一组权限集合。创建策略后需要将其附加Attach到某个 IAM 角色Role或用户User上该角色或用户即获得策略中声明访问指定 AWS 资源的权限。StarRocks 的不同操作需要对不同 AWS 资源拥有访问权限因此在与 AWS 集成的各类业务场景中需要配置不同的 IAM 策略。当选择实例配置文件instance profile、代入角色assumed role或 IAM 用户IAM user认证方式时需要为 StarRocks 集成不同 AWS 资源配置相应的 IAM 策略。上图给出了实例配置文件认证、代入角色认证、IAM 用户认证三种方式在机制层面的差异IAM 策略正是这套认证体系中的授权文件——认证方式解决你是谁IAM 策略解决你能做什么。一、IAM 策略在 StarRocks 集成架构中的定位在动手配置策略之前先明确它处于集成链路中的哪一环。StarRocks 官方文档 Authenticate to AWS resources 将其归纳为如下准备流程找到 StarRocks 集群所在 EC2 实例关联的 IAM 角色下文称EC2 实例角色并获取该角色的 ARN。实例配置文件认证需要用到该角色代入角色认证需要该角色及其 ARN。根据要访问的 AWS 资源类型、以及 StarRocks 内的具体操作场景创建对应的 IAM 策略。将策略附加到 IAM 角色或用户上。注意完成上述准备你必须有权限登录 AWS IAM 控制台 并编辑 IAM 用户与角色。三类认证方式的准备动作各有侧重实例配置文件认证把访问 AWS 资源所需的 IAM 策略 直接附加到 EC2 实例角色上使 StarRocks 集群继承 EC2 实例的权限。该方式不提供集群内多用户之间的资源访问隔离适用于不需要集群内用户级 AWS 访问控制的场景。代入角色认证创建用于访问 AWS 资源的一个或多个 IAM 角色如s3_assumed_role、glue_assumed_role把相应策略附加到这些角色上再由 EC2 实例角色代入Assume它们去访问资源。需要为被代入角色配置信任关系并为 EC2 实例角色配置sts:AssumeRole内联策略。IAM 用户认证创建 IAM 用户将策略附加到该用户使用用户的 Access Key / Secret Key 访问资源。本指南的核心文档正是上述第 2 步的策略库按场景给出三份可直接套用的 JSON 模板。二、场景一从 AWS S3 批量加载数据的 IAM 策略当需要从 S3 桶向 StarRocks 加载数据例如使用 Broker Load、INSERT FILES()、Pipe 等方式导入时配置如下 IAM 策略注意请将下述 JSON 模板中的bucket_name替换为存放数据文件的 S3 桶名称。{ Version: 2012-10-17, Statement: [ { Sid: s3, Effect: Allow, Action: [ s3:GetObject ], Resource: [ arn:aws:s3:::bucket_name/* ] }, { Sid: s3list, Effect: Allow, Action: [ s3:ListBucket ], Resource: [ arn:aws:s3:::bucket_name ] } ] }策略解读语句SidActionResource作用第一条s3s3:GetObjectarn:aws:s3:::bucket_name/*读取桶内对象数据文件本身第二条s3lists3:ListBucketarn:aws:s3:::bucket_name枚举桶内对象定位数据文件列表加载场景是只读操作s3:GetObject覆盖对象级读取s3:ListBucket覆盖桶级列目录。注意两条语句的 Resource 粒度差异——对象级权限作用在桶名/*列桶权限作用在桶 ARN 本身这是 S3 权限模型的基本要求。该策略可应用于 StarRocks 从 S3 加载数据的典型命令例如 Broker Load详见 Load data from AWS S3 中的LOAD LABEL ... WITH BROKER语法LOAD LABEL test_s3_db.test_credential_instanceprofile_7 ( DATA INFILE(s3a://test-bucket/test_brokerload_ingestion/*) INTO TABLE test_ingestion_2 FORMAT AS parquet ) WITH BROKER ( aws.s3.use_instance_profile true, aws.s3.region us-west-1 ) PROPERTIES ( timeout 1200 );三、场景二读写 AWS S3 的 IAM 策略当需要查询读S3 中的数据或将数据写出写到 S3例如通过外部目录查询、文件外部表、备份恢复等场景时配置如下 IAM 策略注意请将下述 JSON 模板中的bucket_name替换为存放数据文件的 S3 桶名称。{ Version: 2012-10-17, Statement: [ { Sid: s3, Effect: Allow, Action: [ s3:PutObject, s3:GetObject, s3:DeleteObject ], Resource: [ arn:aws:s3:::bucket_name/* ] }, { Sid: s3list, Effect: Allow, Action: [ s3:ListBucket ], Resource: [ arn:aws:s3:::bucket_name ] } ] }与场景一的差异相比批量加载策略读写场景在对象级语句中增加了两个写操作Action说明s3:PutObject上传 / 覆盖对象用于向 S3 写入数据如备份、导出、INSERT 回写s3:GetObject读取对象用于查询 S3 上的数据文件s3:DeleteObject删除对象用于清理或覆盖场景Sid为s3list的s3:ListBucket语句与场景一保持一致。该策略覆盖查询 写出双向需求适合 StarRocks 与 S3 之间需要往返读写的集成场景。四、场景三集成 AWS Glue Data Catalog 的 IAM 策略当 StarRocks 需要集成 AWS Glue Data Catalog例如创建 Hive Catalog 时指定hive.metastore.type glue时配置如下 IAM 策略{ Version: 2012-10-17, Statement: [ { Effect: Allow, Action: [ glue:BatchCreatePartition, glue:UpdateDatabase, glue:GetConnections, glue:CreateTable, glue:DeleteDatabase, glue:BatchUpdatePartition, glue:GetTables, glue:GetTableVersions, glue:GetPartitions, glue:UpdateTable, glue:BatchGetPartition, glue:DeleteTable, glue:GetDatabases, glue:GetDevEndpoint, glue:GetTable, glue:GetDatabase, glue:GetPartition, glue:GetDevEndpoints, glue:GetConnection, glue:CreateDatabase, glue:CreatePartition, glue:DeletePartition, glue:UpdatePartition ], Resource: [ * ] } ] }策略解读Glue 是 StarRocks 的元数据服务Metastore策略中包含的 23 个glue:*Action 可归为三类类别Action用途库级操作glue:GetDatabases、glue:GetDatabase、glue:CreateDatabase、glue:UpdateDatabase、glue:DeleteDatabase读取 / 维护 Glue 中的数据库Database元数据表级操作glue:GetTables、glue:GetTable、glue:GetTableVersions、glue:CreateTable、glue:UpdateTable、glue:DeleteTable读取 / 维护表Table定义及版本分区与连接操作glue:GetPartitions、glue:GetPartition、glue:CreatePartition、glue:DeletePartition、glue:UpdatePartition、glue:BatchCreatePartition、glue:BatchUpdatePartition、glue:BatchGetPartition、glue:GetConnections、glue:GetConnection、glue:GetDevEndpoint、glue:GetDevEndpoints读写表分区元数据、查询连接与开发端点与 S3 策略把 Resource 精确收敛到桶 ARN 不同Glue 策略的Resource为*即授予对所有 Glue 资源的上述操作权限。实际生产中可按需进一步收紧到指定 Catalog / Database / Table 的 ARN。五、策略如何与认证方式配合信任关系与内联策略仅创建并附加策略还不够代入角色认证还依赖信任关系Trust Relationship的配置。以官方文档 Authenticate to AWS resources 中的s3_assumed_role为例为被代入角色配置信任策略在 AWS IAM 控制台的Access management Roles中找到该角色进入Trust relationships页签编辑信任策略将cluster_EC2_iam_role_ARN替换为 EC2 实例角色的 ARN{ Version: 2012-10-17, Statement: [ { Effect: Allow, Principal: { AWS: cluster_EC2_iam_role_ARN }, Action: sts:AssumeRole } ] }为 EC2 实例角色添加内联策略在 EC2 实例角色的Permissions policies中添加内联策略将s3_assumed_role_ARN替换为被代入角色s3_assumed_role的 ARN{ Version: 2012-10-17, Statement: [ { Effect: Allow, Action: [sts:AssumeRole], Resource: [ s3_assumed_role_ARN ] } ] }如果创建了多个被代入角色例如同时访问 S3 与 Glue 的s3_assumed_role和glue_assumed_role需要在 EC2 实例角色内联策略的Resource中填写全部 ARN 并用逗号分隔格式为s3_assumed_role_ARN,glue_assumed_role_ARN。六、从源码看参数解析IAM 策略的消费端IAM 策略决定了权限边界而 StarRocks 侧通过一组aws.*参数把认证方式与凭据传达到底层。BE 端的云凭据解析位于 be/src/fs/credential/cloud_configuration_factory.cppcreate_aws从属性集中读取凭据aws_cloud_credential.use_instance_profile get_or_default(properties, AWS_S3_USE_INSTANCE_PROFILE, false); aws_cloud_credential.access_key get_or_default(properties, AWS_S3_ACCESS_KEY, std::string()); aws_cloud_credential.secret_key get_or_default(properties, AWS_S3_SECRET_KEY, std::string()); aws_cloud_credential.iam_role_arn get_or_default(properties, AWS_S3_IAM_ROLE_ARN, std::string()); aws_cloud_credential.sts_region get_or_default(properties, AWS_S3_STS_REGION, std::string()); aws_cloud_credential.region get_or_default(properties, AWS_S3_REGION, std::string());可见aws.s3.use_instance_profile的默认值为false即默认走 IAM 用户认证只有显式开启实例配置文件认证或配置iam_role_arn时才会走实例配置文件 / 代入角色链路。S3 访问的完整凭据与配置组装在 be/src/fs/fs_s3.cpp 中完成。由此可以推断IAM 策略 StarRocks 侧aws.*参数是一体两面——策略决定能否访问aws.*参数决定以谁的身份访问两者必须匹配才能打通端到端链路。访问 S3 的认证参数速查参数是否必填说明aws.s3.use_instance_profile是是否启用实例配置文件 / 代入角色认证。取值true/false默认falseaws.s3.iam_role_arn否对 S3 桶有权限的 IAM 角色 ARN代入角色认证必填aws.s3.access_key否IAM 用户的 Access KeyIAM 用户认证必填aws.s3.secret_key否IAM 用户的 Secret KeyIAM 用户认证必填访问 Glue 的认证参数速查参数是否必填说明aws.glue.use_instance_profile是是否启用实例配置文件 / 代入角色认证。取值true/false默认falseaws.glue.iam_role_arn否对 Glue Data Catalog 有权限的 IAM 角色 ARN代入角色认证必填aws.glue.access_key否IAM 用户的 Access KeyIAM 用户认证必填aws.glue.secret_key否IAM 用户的 Secret KeyIAM 用户认证必填七、实战落地将策略与认证参数组合使用将前面三份策略与认证参数组合即可覆盖 StarRocks 最常见的 AWS 集成场景。以下示例均来自 Authenticate to AWS resources 与 Load data from AWS S3。7.1 创建 Hive Catalog元数据走 AWS GlueIAM 用户认证方式下创建同时访问 S3 与 Glue 的 Hive CatalogCREATE EXTERNAL CATALOG hive_catalog_glue PROPERTIES ( type hive, aws.s3.use_instance_profile false, aws.s3.access_key iam_user_access_key, aws.s3.secret_key iam_user_secret_key, aws.s3.region us-west-2, hive.metastore.type glue, aws.glue.use_instance_profile false, aws.glue.access_key iam_user_access_key, aws.glue.secret_key iam_user_secret_key, aws.glue.region us-west-2 );代入角色认证方式下将上述参数替换为CREATE EXTERNAL CATALOG hive_catalog_glue PROPERTIES ( type hive, aws.s3.use_instance_profile true, aws.s3.iam_role_arn arn:aws:iam::081976408565:role/s3_assumed_role, aws.s3.region us-west-2, hive.metastore.type glue, aws.glue.use_instance_profile true, aws.glue.iam_role_arn arn:aws:iam::081976408565:role/glue_assumed_role, aws.glue.region us-west-2 );这里分别使用了场景三Glue与场景二S3 读写的策略——查询外部表数据时 S3 侧需要读权限元数据访问需要 Glue 权限。7.2 创建文件外部表查询 S3 数据CREATE EXTERNAL TABLE test_s3_db.file_table ( id varchar(65500), attributes mapvarchar(100), varchar(2000) ) ENGINEFILE PROPERTIES ( path s3://starrocks-test/, format ORC, aws.s3.use_instance_profile false, aws.s3.access_key iam_user_access_key, aws.s3.secret_key iam_user_secret_key, aws.s3.region us-west-2 );该场景对应场景二策略s3:GetObjects3:ListBucket。7.3 使用 INSERT FILES() 查询 / 加载 S3 数据IAM 用户认证下直接用FILES()表函数读取 S3 上的 Parquet 文件s3:GetObjects3:ListBucket权限即可SELECT * FROM FILES ( path s3://starrocks-examples/user-behavior-10-million-rows.parquet, format parquet, aws.s3.region us-east-1, aws.s3.access_key AAAAAAAAAAAAAAAAAAAA, aws.s3.secret_key BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ) LIMIT 3;该样例数据集存放在公开桶s3://starrocks-examples/user-behavior-10-million-rows.parquet任意有效的 AWS 认证凭据都可读取可用于快速验证策略配置是否正确。八、最佳实践与排障要点按场景最小化授权批量加载场景只授予s3:GetObject与s3:ListBucket需要写出时再加s3:PutObject/s3:DeleteObject。避免直接授予s3:*全量权限。资源粒度要区分对象级操作s3:GetObject等作用在arn:aws:s3:::bucket_name/*列桶操作s3:ListBucket作用在arn:aws:s3:::bucket_name桶 ARN 上二者缺一不可。策略与认证方式对齐aws.s3.use_instance_profile默认false若策略挂在 EC2 实例角色上而参数未开启实例配置文件认证权限将无法生效。代入角色需配信任关系使用代入角色认证时被代入角色的信任策略sts:AssumeRole与 EC2 实例角色的内联策略允许 Assume 目标角色必须同时配置。先验证、后上线用公开样例数据集如s3://starrocks-examples/下的 Parquet 文件先行验证策略与凭据再切换到生产数据。相关文档StarRocks AWS IAM 策略参考本指南核心文档Authenticate to AWS resources三种认证方式的完整配置流程Load data from AWS S3INSERTFILES()、Broker Load、Pipe 三种 S3 加载方式实战Hive catalog外部目录的详细语法与参数be/src/fs/credential/cloud_configuration_factory.cppBE 端 AWS 凭据参数解析实现【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →