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文件的内容。
Nvm,我们可以配置一个帐户的角色来从另一个帐户访问特定存储桶。 Access Bucket from another account