ECSサービスのロールがポリシーを参照している

ECSサービスのRoleには、ポリシーではなく適切なロールを指定してください。

説明

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

参考資料