You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CloudFormation UserData复制S3文件到Apache失败提示无法找到凭证

问题定位

fatal error: Unable to locate credentials报错与AWS CLI本地profile配置无关,属于CloudFormation模板配置缺失导致的实例无权限问题,具体错误点有两处:

  • 核心配置缺失:你定义的WebAppLaunchConfig(AutoScaling启动配置)没有绑定提前创建的ProfileWithRolesForOurApp IAM实例配置文件,EC2实例启动后不会挂载你配置了S3只读权限的IAM角色,AWS CLI运行时自然找不到可用的访问凭证。
  • 权限语法错误:IAM角色的S3操作前缀大小写错误,IAM的服务操作命名要求全小写,你写的S3:List*、S3:Get*属于无效权限规则,就算绑定了实例角色,后续也会抛出权限不足错误。
修复方案

1. 修正IAM角色的权限语法

将S3相关操作的前缀改为全小写s3:,修正后的角色配置片段如下:

SRS3ReadOnlyEC2:
    Type: "AWS::IAM::Role"
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service: ec2.amazonaws.com
            Action: "sts:AssumeRole"
      Path: /
      Policies:
        - PolicyName: WebServersS3ReadRole
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action:
                  - "s3:List*"
                  - "s3:Get*"
                Resource: "*"

2. 给启动配置绑定实例配置文件

在WebAppLaunchConfig的Properties块中新增IamInstanceProfile属性,关联你创建的实例配置,同时给S3复制命令增加匿名访问参数兜底,避免实例角色权限生效延迟导致的执行失败,修正后的启动配置片段如下:

WebAppLaunchConfig:
    Type: AWS::AutoScaling::LaunchConfiguration
    Properties:
      # 新增:绑定包含S3访问权限的实例配置
      IamInstanceProfile: !Ref ProfileWithRolesForOurApp
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash
          apt-get update -y
          apt-get install -y unzip awscli apache2
          systemctl start apache2.service
          cd /var/www/html
          # 增加--no-sign-request参数,支持公开S3资源的匿名访问兜底
          aws s3 cp s3://my-mini-site/index.html . --no-sign-request
      ImageId: ami-0729e439b6769d6ab
      KeyName: keyname
      SecurityGroups:
        - !Ref WebServerSecGroup
      InstanceType: t3.medium
      BlockDeviceMappings:
        - DeviceName: "/dev/sdk"
          Ebs:
            VolumeSize: '10'

补充说明:默认配置下的AWS CLI执行S3操作时,会按优先级查找环境变量、本地配置文件、实例元数据服务上的角色凭证,找不到任何可用凭证时会直接抛出错误,不会自动以匿名身份访问公开S3资源,这也是你明明配置了公开桶依然报凭证错误的原因。

内容的提问来源于stack exchange,提问作者Abarugo Goodness

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:27:40