我在处理在 Fargate 容器中执行的 AWS Batch 作业时也有类似的经历,这些容器在分配角色和权限的范围内遵循与 ECS 相同的原则。
如果您要通过容器内执行的代码将消息发布到特定主题,那么您应该创建一个具有必要权限的角色,然后在您的作业定义的 JobRoleArn property 中使用其 ARN。
例如(下面的代码可能有小错误,但我只是想在这里解释一下这个概念):
角色云形成:
"roleresourceID": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"AWS": "*"
}
}
],
"Version": "2012-10-17"
},
"RoleName": "your-job-role"
}
}
附加到角色的策略:
"policyresourceid": {
"Type": "AWS::IAM::Policy",
"Properties": {
"PolicyDocument": {
"Statement": [
{
"Action": "sns:Publish",
"Effect": "Allow",
"Resource": "<arn of the specific SNS topic>"
}
],
"Version": "2012-10-17"
},
"PolicyName": "your-job-role-policy",
"Roles": [
{
"Ref": "roleresourceID"
}
]
}
}
最后将角色附加到工作定义:
....other job definition properties
"JobRoleArn": {
"Fn::GetAtt": [
"roleresourceID",
"Arn"
]
}
当然,您可以按照自己喜欢的方式构建和格式化角色和策略,这个解释的主要思想是您需要使用工作定义的JobRoleArn 属性附加适当的角色。