Amazon s3 来自一个AWS子帐户的流S3文件,Flink部署在另一个AWS帐户的Kubernetes群集上 我有两个AWS帐户,帐户A和帐户B 帐户A有一个EKS群集运行,上面有一个flink群集运行。为了管理IAM角色,我们使用Kube2iam 集群上的所有POD都分配了特定的角色。为简单起见,假设其中一个Pod的角色是Pod角色 K8s工作节点具有角色工作节点角色 Kube2iam已正确配置,可在需要时进行适当的EC2元数据调用 Account B有一个S3存储桶,托管在Account a工作节点中的Pod需要读取该存储桶

Amazon s3 来自一个AWS子帐户的流S3文件,Flink部署在另一个AWS帐户的Kubernetes群集上 我有两个AWS帐户,帐户A和帐户B 帐户A有一个EKS群集运行,上面有一个flink群集运行。为了管理IAM角色,我们使用Kube2iam 集群上的所有POD都分配了特定的角色。为简单起见,假设其中一个Pod的角色是Pod角色 K8s工作节点具有角色工作节点角色 Kube2iam已正确配置,可在需要时进行适当的EC2元数据调用 Account B有一个S3存储桶,托管在Account a工作节点中的Pod需要读取该存储桶,amazon-s3,kubernetes,apache-flink,amazon-iam,flink-streaming,Amazon S3,Kubernetes,Apache Flink,Amazon Iam,Flink Streaming,可能的解决办法: 在Account B中创建一个角色,比如说,AccountB\u Bucket\u access\u role,策略允许读取Bucket。将Pod角色作为受信任的实体添加到其中 在Pod role中添加一个策略,允许切换到AccountB\u Bucket\u access\u role,基本上就是STS AssumeRole操作 在Pod中创建AWS配置文件,例如,custom\u profile,将role\u arn设置为AccountB\u Bucket\u acces

可能的解决办法:

  • Account B
    中创建一个角色,比如说,
    AccountB\u Bucket\u access\u role
    ,策略允许读取Bucket。将
    Pod角色
    作为受信任的实体添加到其中
  • Pod role
    中添加一个策略,允许切换到
    AccountB\u Bucket\u access\u role
    ,基本上就是
    STS AssumeRole
    操作
  • 在Pod中创建AWS配置文件,例如,
    custom\u profile
    ,将
    role\u arn
    设置为
    AccountB\u Bucket\u access\u role
    role's arn
  • 部署flink吊舱时,设置AWS\u PROFILE=AccountB\u Bucket\u access\u角色 问题:上文给出,每当flink应用程序需要与S3 bucket对话时,它首先承担
    AccountB\u bucket\u access\u角色,并且能够读取S3 bucket。但是设置
    AWS_PROFILE
    实际上会切换flink app的角色,因此所有
    POD-role
    权限都会丢失,并且它们是flink app正常运行所必需的

    有没有办法,这个AWS
    自定义_配置文件只能在读取S3 bucket时使用,然后切换到
    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 job中用来读取S3文件的内容。

    Nvm,我们可以配置一个帐户的角色,从另一个帐户访问特定的bucket