来自一个AWS子账户的流S3文件,Flink部署在另一个AWS账户的Kubernetes集群上

问题描述 投票:0回答:1
  1. 我有2个AWS账户,Account AAccount B
  2. Account A具有运行的EKS集群和运行的flink集群。要管理IAM角色,我们使用Kube2iam
  3. 集群上的所有Pod具有分配给它们的特定角色。为了简单起见,假设其中一个广告连播的角色是Pod-Role
  4. K8s工作节点具有角色Worker-Node-role
  5. Kube2iam已正确配置为在需要时进行正确的EC2元数据调用。
  6. [Account B有一个S3存储桶,Pod工作节点中托管的Account A需要读取。

可能的解决方案:

  1. [在Account B中创建角色,比方说,AccountB_Bucket_access_role具有允许读取存储区的策略。将Pod-Role添加为可信实体。
  2. Pod-role中添加一个策略,该策略允许切换到AccountB_Bucket_access_role,基本上是STS AssumeRole操作。
  3. [在Pod中创建一个AWS配置文件,比方说,custom_profilerole_arn设置为AccountB_Bucket_access_role角色的地址。
  4. 部署Flink吊舱时,设置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文件的内容。

amazon-s3 kubernetes apache-flink amazon-iam flink-streaming
1个回答
0
投票

Nvm,我们可以配置一个帐户的角色来从另一个帐户访问特定存储桶。 Access Bucket from another account

© www.soinside.com 2019 - 2024. All rights reserved.