简介
AWS Batch是一个托管式的批处理服务,可以轻松地在AWS云上运行批处理作业。我们可以用Docker镜像定义任务,Batch会自动调度任务运行。之前写过batch的使用教程,具体可以参考这篇文章。 使用AWS Batch运行Python脚本(保姆级教程)
但是,如果直接给Batch服务角色全 Administrator 权限,或者用我们自己的账号来制作镜像和上传的话,这会带来安全风险。攻击者可能利用Batch服务权限获取云上其它敏感资源。因此,最佳实践是遵循最小权限原则,限制Batch只能访问必要的资源。
这次将介绍如何通过IAM角色,将Batch对S3和ECR的访问权限限制到所需的最小范围。
IAM角色设置
第一步是创建一个IAM账户,设置下面的权限给他。策略中我们只允许s3:GetObject、s3:PutObject等权限,同时也允许ECR的docker镜像pull权限。{ "Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::mybucket/*"
},
{
"Effect": "Allow",
"Action": [
"ecr:CompleteLayerUpload",
"ecr:GetAuthorizationToken",
"ecr:UploadLayerPart",
"ecr:InitiateLayerUpload",
"ecr:BatchCheckLayerAvailability",
"ecr:PutImage"
],
"Resource": "*"
}
]
}
这样,我们就创建好一个只有受限S3和ECR权限的IAM账户。
每次要使用它的时候直接应用环境变量即可。
export AWS_ACCESS_KEY_ID=AKIAIxxxxxxxxx
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMxxxxxxxxx
每次需要更新镜像的内容我们只需要把需要替换的文件从指定的S3桶里下载到服务器里,然后编译镜像上传即可,限制权限是一个好习惯。
总结
通过为Batch设置最小权限的IAM角色,我们可以避免批任务获得了过多的云权限。这减小了安全风险,是一个好习惯,虽然设置这些很麻烦,但是如果是生产环境还是很有必要的。