无法从 EKS EC2 实例上运行的应用程序访问 s3,IAM 代入角色权限问题



注意:这里提出了类似的问题,但没有提供适当的解决方案。

我通过 eksctl 工具设置了一个具有单个 EC2 节点的 EKS 集群。在 EC2 节点内部署一个 Pod,该 Pod 会将日志写入 s3 存储桶。当我使用带有密钥和密钥的 IAM 用户时,一切正常。但是现在我希望这个 Pod 改用 IAM 角色。此 Pod 使用新创建的角色,具有AmazonS3FullAccess权限,名为prod-airflow-logs。根据文档,我还在此角色的信任关系中添加了"ec2.amazonaws.com",如下所示;

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"s3.amazonaws.com",
"ec2.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}

EC2 节点有自己的角色,名为eksctl-prod-eks-nod-NodeInstanceRole-D4JQ2Q6D9GDA。如果我理解正确,这个角色必须承担角色prod-airflow-logs,以允许容器 Pod 访问和存储 s3 中的日志。根据相同的文档,我在此节点角色中附加了一个内联策略,如下所示;

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"iam:GetRole",
"iam:PassRole",
"ec2:*",
"iam:ListInstanceProfiles",
"iam:GetRolePolicy"
],
"Resource": "*"
}
]
}

但是当 kubernetes pod 尝试在 s3 上存储日志时,我仍然在 kubernetes pod 中收到以下错误;

botocore.exceptions.ClientError:调用 AssumeRole 操作时发生错误(访问被拒绝(:用户:arn:aws:sts::XXXXXXX:assumed-role/eksctl-prod-eks-nod-NodeInstanceRole-D4JQ2Q6D9GDA/i-0254e5b5b36e58f79 无权执行:sts:AssumeResource 上的角色:arn:aws:iam::XXXXXX:role/prod-airflow-logs

我从这个错误中唯一不明白的是,它指的是哪个用户? 这个用户到底在哪里User: arn:aws:sts::XXXXXXX:assumed-role/eksctl-prod-eks-nod-NodeInstanceRole-D4JQ2Q6D9GDA/i-0254e5b5b36e58f79?如果有人能指出我在这里到底错过了什么,将不胜感激。

还没有答案...这是我完成这项工作的方式,我必须将节点角色的 arn 添加到 Pod 执行角色的信任策略中。 就我而言,Pod 执行角色是prod-airflow-logs,节点角色是eksctl-prod-eks-nod-NodeInstanceRole-D4JQ2Q6D9GDA.

Pod 执行的信任关系必须如下;

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::XXXXXXX:role/eksctl-prod-eks-nod-NodeInstanceRole-D4JQ2Q6D9GDA"
},
"Action": "sts:AssumeRole"
}
]
}

相关内容

  • 没有找到相关文章

最新更新