创建Spot Datafeed订阅时S3桶配置报错InaccessibleStorageLocation求助
解决Spot数据订阅S3桶权限配置问题
一、先确认S3桶的基础要求
- 桶得和你创建Spot订阅的AWS账户在同一个区域,而且桶名必须全局唯一(跨区域的话直接就会报错)。
- 先确认桶真的存在,执行
aws s3 ls s3://my-bucket验证,能列出桶内内容就说明桶没问题。
二、给S3桶配置正确的Bucket Policy
核心是要允许EC2服务账户往桶里写入数据,同时你的IAM用户也得具备操作桶的权限。
1. 添加Bucket Policy
把下面JSON中的my-bucket替换成你的桶名,你的AWS账户ID换成12位数字的账户ID(可通过aws sts get-caller-identity查询),然后将策略粘贴到S3桶的权限设置中:
{ "Version": "2008-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-bucket/*", "Condition": { "StringEquals": { "aws:SourceAccount": "你的AWS账户ID" } } } ] }
2. 给你的IAM用户添加权限
你的IAM用户至少需要具备以下权限,可将下方策略附加到目标用户或角色上:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateSpotDatafeedSubscription", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::my-bucket", "arn:aws:s3:::my-bucket/*", "*" ] } ] }
三、检查桶的其他配置
- 不要给桶开启过于严格的阻止公共访问规则(Spot数据订阅不需要公共访问,仅需允许EC2服务账户写入即可)。
- 如果桶启用了加密(比如SSE-KMS),需确保EC2服务账户具备对应KMS密钥的访问权限,否则会触发权限报错。
四、重新执行创建命令
完成以上配置后,再次运行:
aws ec2 create-spot-datafeed-subscription --bucket my-bucket
如果需要给数据文件添加分类前缀,可追加--prefix spot-data参数。
内容的提问来源于stack exchange,提问作者Julia Bambie
相关产品推荐
相关产品推荐

