SG исходящие правила
Похоже, для групп безопасности (SG) не определено правило выхода. И ALB, и EC2.
LoadBalancerSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: !Sub ${EnvironmentName}-loadbalancer
GroupDescription: Access to the load balancer that sits in front of ECS
VpcId: !Ref VPC
SecurityGroupIngress:
# Allow access from anywhere to our ECS services
- CidrIp: 0.0.0.0/0
IpProtocol: -1
Я полагаю, что если вы посмотрите на исходящие правила SG в консоли EC2, правила не будет. Если это так, то причиной может быть то, что трафик c может войти в порт 80 ALB, но он не может go из ALB,
Это моя теория. Поэтому, пожалуйста, добавьте выходное правило для проверки?
LoadBalancerSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: !Sub ${EnvironmentName}-loadbalancer
GroupDescription: Access to the load balancer that sits in front of ECS
VpcId: !Ref VPC
SecurityGroupIngress:
# Allow access from anywhere to our ECS services
- CidrIp: 0.0.0.0/0
IpProtocol: -1
SecurityGroupEgress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0 # <--- Maybe better change to VPC CIDR or ECS/EC2 subnet CIDR rather than any IP.
Относительно EC2, поскольку SG находится в состоянии с состоянием, traffi c может go через порт 80 достигнуть порта 8080 контейнера docker и ответ может go вернуться через SG, поскольку SG знает, что это ответ входящего соединения.
Принимая во внимание, что для ALB входящее соединение от Inte rnet завершается на порте 80 ALB, затем новое исходящее соединение должно быть установлено с портом 80 экземпляра (ов) EC2, поэтому, если я прав, необходимо определить выходное правило.
ECSHostSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: !Sub ${EnvironmentName}-ecs-hosts
GroupDescription: Access to the ECS hosts and the tasks/containers that run on them
VpcId: !Ref VPC
SecurityGroupIngress:
# Only allow inbound access to ECS from the ELB
- SourceSecurityGroupId: !Ref LoadBalancerSecurityGroup
IpProtocol: -1
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
Однако, если экземплярам EC2 необходимо установить пакеты или создать исходящее соединение, тогда SG EC2 также нужны выходные правила.
IAM
Что касается роли IAM для службы ECS, то здесь есть заранее определенная AWS управляемая роль, поэтому я полагаю, что лучше их использовать?
"Role": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Version": "2008-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ecs.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
},
"ManagedPolicyArns": ["arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceRole"]
}
}
Поскольку AWS ввел роль, связанную с сервисом, теперь , это должно быть еще лучше использовать.
- Роль, связанная с сервисом, для Amazon ECS
До введения роли, связанной с сервисом, для Amazon ECS, вам необходимо было создать роль IAM для сервисы Amazon ECS, которые предоставили Amazon ECS необходимое разрешение. Эта роль больше не требуется, однако она доступна при необходимости. Дополнительную информацию смотрите в разделе Роли старых версий IAM для Amazon ECS.
"arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS"