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

跨AWS账号AssumeRole访问S3的IAM配置及Laravel适配问题

1. IAM配置的问题

当前配置存在核心遗漏,同时有可优化的安全点:

  • 权限策略错误:账号A中角色的权限策略里,s3:GetObject的Resource仅指定了桶的ARN arn:aws:s3:::my_awesome_files,但该权限需要的是桶内对象的ARN,即arn:aws:s3:::my_awesome_files/*。原配置只能让用户获取桶的元数据,无法读取具体文件,这是导致访问失败的关键原因。
  • 信任实体可优化:虽然用账号B的root用户作为Principal是可行的,但从安全角度,建议限定为账号B中需要访问的特定用户/角色ARN,避免账号B内其他未授权用户也能Assume该角色。
  • 其余配置(账号B用户的AssumeRole权限、信任策略的sts:AssumeRole动作)是正确的。

2. Laravel Filesystem配置调整

默认配置使用长期访问密钥,无法直接实现AssumeRole,必须添加相关参数让Laravel自动获取临时凭证:
调整后的配置示例:

'my_awesome_files_bucket_config' => [
    'driver' => 's3',
    'key' => env('AWS_ACCESS_KEY_ID', 'xxxx'),
    'secret' => env('AWS_SECRET_ACCESS_KEY', 'xxxx'),
    'region' => env('DEFAULT_REGION', 'eu-central-1'),
    'bucket' => env('MY_AWESOME_FILES_BUCKET', 'xxxx'),
    'role_arn' => env('AWS_ASSUME_ROLE_ARN', 'arn:aws:iam::<account_id_account_a>:role/allow-account-b-access-s3-bucket-role'),
    'session_name' => env('AWS_ASSUME_ROLE_SESSION_NAME', 'laravel-s3-access'),
]
  • role_arn:填写账号A中创建的目标角色ARN
  • session_name:自定义会话名称,用于AWS审计日志区分不同访问会话

Laravel的Flysystem S3适配器会自动用账号B的密钥调用STS AssumeRole接口获取临时凭证,再用临时凭证访问目标S3桶,无需额外编写代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:17:04