我有两个aws账户, Account A
以及 Account B
. Account A
有一个eks集群在运行,一个flink集群在运行。为了管理iam角色,我们使用 Kube2iam
.
集群上的所有pod都分配了特定的角色。为了简单起见,我们假设其中一个pod的角色是 Pod-Role
k8s工作节点具有 Worker-Node-role
kube2iam配置正确,可以在需要时进行适当的ec2元数据调用。 Account B
有一个s3桶 Pod
主办地 Account A
工作节点需要读取。
可能的解决方案:
在中创建角色 Account B
,比方说, AccountB_Bucket_access_role
一个允许读取bucket的策略。添加 Pod-Role
作为受信任的实体。
在中添加策略 Pod-role
允许切换到 AccountB_Bucket_access_role
,基本上是 STS AssumeRole
行动。
在pod中创建一个aws配置文件, custom_profile
,与 role_arn
设置为 AccountB_Bucket_access_role
角色是阿恩。
在部署flink吊舱时,设置 AWS_PROFILE=AccountB_Bucket_access_role
.
问题:如上所述,每当flink应用程序需要与s3 bucket对话时,它首先假设 AccountB_Bucket_access_role
角色,并且能够读取s3 bucket。但是设置 AWS_PROFILE
实际上切换了flink应用程序的角色,因此 POD-ROLE
权限丢失,flink应用程序正常运行需要这些权限。
有没有办法,这是 custom_profile
只能在读取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
)
这是我在flinkjob中用来读取s3文件的。
1条答案
按热度按时间3hvapo4f1#
nvm,我们可以将一个帐户的角色配置为从另一个帐户访问特定的bucket。从其他帐户访问bucket