Account A
和Account B
。 Account A
具有运行的EKS集群和运行的flink集群。要管理IAM角色,我们使用Kube2iam
。Pod-Role
Worker-Node-role
角色Account B
有一个S3存储桶,在Pod
工作节点中托管的Account A
需要读取。可能的解决方案:
Account B
中创建一个角色,比方说,AccountB_Bucket_access_role
的策略允许读取存储桶。将Pod-Role
添加为可信实体。Pod-role
中添加一个策略,该策略允许切换到AccountB_Bucket_access_role
,基本上是STS AssumeRole
操作。custom_profile
,将role_arn
设置为AccountB_Bucket_access_role
角色的信息。AWS_PROFILE=AccountB_Bucket_access_role
。 问题:上面已给出,每当flink应用需要与S3存储桶对话时,它首先会扮演AccountB_Bucket_access_role
角色并能够读取S3存储桶。但是设置AWS_PROFILE
实际上会切换flink应用程序的角色,因此所有POD-ROLE
权限都会丢失,并且flink应用程序的正常运行需要它们。
有一种方法,只能在读取S3存储桶时使用此AWS custom_profile
,然后再切换到POD-ROLE
。
val flinkEnv: StreamExecutionEnvironment = AppUtils.setUpAndGetFlinkEnvRef(config.flink)
val textInputFormat = new TextInputFormat(new Path(config.path))
env
.readFile(
textInputFormat,
config.path,
FileProcessingMode.PROCESS_CONTINUOUSLY,
config.refreshDurationMs
)
这是我在flink作业中用来读取S3文件的东西。