【发布时间】:2018-09-19 01:09:55
【问题描述】:
我有两个 AWS Cloudformation 堆栈,一个用于 IAM 角色,第二个用于创建 AWS 服务并使用 Cloudformation 将相应的角色导入其中。
当部署 10 多个服务时,以下错误随机出现在 1 或 2 个服务上 -
AWS::ECS::Service 服务无法承担角色并验证 在负载均衡器上配置的侦听器。请验证 ECS 传递的服务角色具有适当的权限。
如果所有的服务都被拆掉,服务重新部署到ECS集群,会出现错误,但针对不同的服务。
可以看到 AWS 对此的修复 here
如果 1 或 2 个损坏的服务被拆除并重新部署,则服务部署不会出现问题。因此,该问题似乎仅在同时部署许多服务时出现 - 这表明它可能是 Cloudformation 中的 IAM 传播时间问题。
我尝试在服务定义中添加依赖 -
"service" : {
"Type" : "AWS::ECS::Service",
"DependsOn" : [
"taskdefinition",
"ECSServiceRole"
],
"Properties" : {
"Cluster" : { "Ref": "ECSCluster"},
"Role" : {"Ref" : "ECSServiceRole"},
etc...
}
}
但这不起作用。
如您所见,我还删除了 ECSServiceRole 的 IAM 导入值,并将其替换为此处所示的内联资源策略 -
"ECSServiceRole" : {
"Type" : "AWS::IAM::Role",
"Properties" : {
"AssumeRolePolicyDocument" : {
"Statement" : [
{
"Sid": "",
"Effect" : "Allow",
"Principal" : {
"Service" : [
"ecs.amazonaws.com"
]
},
"Action" : [
"sts:AssumeRole"
]
}
]
},
"Path" : "/",
"Policies" : [
{
"PolicyName" : "ecs-service",
"PolicyDocument" : {
"Statement" : [
{
"Effect" : "Allow",
"Action" : [
"ec2:Describe*",
"ec2:AuthorizeSecurityGroupIngress",
"elasticloadbalancing:DeregisterInstancesFromLoadBalancer",
"elasticloadbalancing:DeregisterTargets",
"elasticloadbalancing:Describe*",
"elasticloadbalancing:RegisterInstancesWithLoadBalancer",
"elasticloadbalancing:RegisterTargets",
"sns:*"
],
"Resource" : "*"
}
]
}
}
]
}
}
但同样 - 内联策略也不能解决问题。
任何想法或指示将不胜感激!
回复答案 1。
谢谢 - 我不知道这个改进。
这是为 ECS 关联服务相关角色的正确方法吗?
"ECSServiceRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": [
"ecs.amazonaws.com"
]
},
"Action": [
"sts:AssumeRole"
]
}
]
},
"Path": "/",
"Policies": [
{
"PolicyName": "CreateServiceLinkedRoleForECS",
"PolicyDocument": {
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:CreateServiceLinkedRole",
"iam:PutRolePolicy",
"iam:UpdateRoleDescription",
"iam:DeleteServiceLinkedRole",
"iam:GetServiceLinkedRoleDeletionStatus"
],
"Resource": "arn:aws:iam::*:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS*",
"Condition": {
"StringLike": {
"iam:AWSServiceName": "ecs.amazonaws.com"
}
}
}
]
}
}
]
}
}
最终答案
在 AWS 就此事发生了几个月的间歇性持续问题之后,AWS 回来说他们在 ELB 的后台限制了我们。这就是为什么同时通过 Cloudformation 部署 3 个以上的 docker 服务时会出现随机和多变的问题的原因。解决方案与IAM权限无关,而是通过“AWS服务团队”提高ELB的速率限制。
【问题讨论】:
-
我想我看到的间歇性问题和你一样,但是使用 ALB 和目标组,所以我的错误略有不同:“
Unable to assume role and validate the specified targetGroupArn. Please verify that the ECS service role being passed has the proper permissions. (Service: AmazonECS; Status Code: 400; Error Code: InvalidParameterException; Request ID: ...)”。请问你们提高了哪个ELB服务速率限制?
标签: amazon-web-services amazon-cloudformation amazon-iam