问题描述: 当使用ActiveStorage将文件移动到S3时,出现了"Aws::S3::Errors::AccessDenied: 拒绝访问"的错误。
解决方法:
amazon:
service: S3
access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
region: <%= Rails.application.credentials.dig(:aws, :region) %>
bucket: <%= Rails.application.credentials.dig(:aws, :bucket) %>
注意:上述示例代码使用了Rails的Credentials来保存S3访问密钥和访问密钥ID,你也可以直接在文件中写入对应的值。
{
"Version": "2012-10-17",
"Id": "Policy1234567890",
"Statement": [
{
"Sid": "Stmt1234567890",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::1234567890:user/your-user"
},
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::your-bucket",
"arn:aws:s3:::your-bucket/*"
]
}
]
}
注意:上述示例代码中的"arn:aws:iam::1234567890:user/your-user"和"arn:aws:s3:::your-bucket"需要替换为你的实际用户ARN和存储桶名称。
确保S3存储桶名称正确: 确保你在config/storage.yml文件中正确配置了S3存储桶的名称。确保存储桶名称与你在AWS S3中创建的存储桶名称一致。
确保S3存储桶区域正确: 确保你在config/storage.yml文件中正确配置了S3存储桶的区域。确保区域与你在AWS S3中创建存储桶时选择的区域一致。
确保S3存储桶权限正确: 确保你在AWS S3中正确配置了存储桶的权限。可以尝试将存储桶的权限设置为公共可读写,以验证是否是权限问题。
这些解决方法可以帮助你解决ActiveStorage无法将文件移动到S3的"拒绝访问"错误。