説明
AWS::ECS::ServiceのRoleは、サービスがロードバランサーにアクセスするためのIAMロールを指定する属性です。AWS::IAM::Policyリソースを参照しても、ロールの指定にはなりません。
想定される影響
ポリシーをロールとして指定すると、サービスの作成やロードバランサー連携が失敗するおそれがあります。
対処方法
構成に適したサービスリンクロールを使うか、別のロールが許可される構成では実際のIAMロールを指定してください。awsvpcネットワークモードではサービスリンクロールを使い、Roleは指定しません。
例
不正なポリシー参照を削除し、サービスリンクロールを使う抜粋です。必要なロール、クラスター、リスナー、ターゲットグループ、タスク定義は省略しています。変更前の広範なポリシーは使用しないでください。
変更前
yaml
Resources:
InlinePolicy:
Type: AWS::ECS::Service
DependsOn:
- Listener
Properties:
Role:
Ref: IAMPolicy
LoadBalancers:
- TargetGroupArn:
Ref: TargetGroup
ContainerPort: 80
ContainerName: sample-app
Cluster:
Ref: ECSCluster
IAMPolicy:
Type: 'AWS::IAM::Policy'
Properties:
PolicyName: root
Roles:
- !Ref ECSServiceRole
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action: '*'
Resource: '*'
変更後
yaml
Resources:
InlinePolicy:
Type: AWS::ECS::Service
DependsOn:
- Listener
Properties:
LoadBalancers:
- TargetGroupArn:
Ref: TargetGroup
ContainerPort: 80
ContainerName: sample-app
Cluster:
Ref: ECSCluster