针对 S3 资源的 AWS 用户权限策略不限制特定用户
AWS user permission policy against S3 resource not restricting to specific user
sRuby 1.8.7(是的,我知道它很古老)
aws-sdk-v1 1.60.2
AWS S3
我正在尝试限制对 S3 存储桶的访问,以便只有一个用户可以 read/write 访问它。
我创建了以下权限策略并将其附加到 IAM 用户,我们称他们为 UserX:
{
"Version": "2012-10-17",
"Statement": [
{ "Sid":"my_sid",
"Effect":"Allow",
"Action":"s3:*",
"Resource": "arn:aws:s3:::my_bucket_name/*"
}]
}
我的预期是,由于 UserX 附加了此策略,他们将是唯一可以使用此存储桶执行任何操作的用户。
但是,如果我在没有凭据的情况下连接到 AWS,我可以毫无问题地写入此存储桶。这不是我想要的。我不希望除 UserX 之外的任何人写入此存储桶(或为此从中读取)。
如果我从 UserX 中删除此策略,则默认行为适用 - 既不请求(已验证也未验证)写入作品,这正是我所期望的。
此策略似乎向所有用户开放访问权限,即使它附加到 UserX。
这是我用来执行此操作的(有效 - 实际代码在方法中)代码:
对于未经验证的请求(可以写入但不应该:
s3 = AWS::S3.new
bucket = s3.buckets[my_bucket_name]
o = bucket.objects[aws_filename]
o.write(:file => filename_on_local_system)
对于已验证请求:
AWS.config(:access_key_id => AWS_ACCESS_KEY_ID,
:secret_access_key => AWS_SECRET_ACCESS_KEY,
:region => 'us-west-2')
s3 = AWS::S3.new
bucket = s3.buckets[my_bucket_name]
o = bucket.objects[aws_filename]
o.write(:file => filename_on_local_system)
我也试过:
- 将此策略附加到一个组并将 UserX 分配到该组,结果相同
- 创建存储桶策略以允许该用户向其写入数据,这会导致相同的行为
- 在不同的 AWS 账户中创建相同的存储桶策略,并获得相同的行为
- 使用 s3cmd 实用程序,并获得相同的行为
- 改用 aws-s3 gem(但无法获得转到 AWS 的良好请求)。
AWS 策略模拟器似乎可以工作,但由于您无法指定哪个用户正在执行操作,因此它并不能真正帮助我进行调试。
这非常令人沮丧。我想我可能需要研究 ACL,即使它们不受欢迎。
感谢任何帮助。
韦斯
我使用的客户端软件仍在从配置文件 (aws.yml) 中获取凭据,即使我在配置它时明确没有传递凭据。
感谢您的帮助。
韦斯
sRuby 1.8.7(是的,我知道它很古老)
aws-sdk-v1 1.60.2
AWS S3
我正在尝试限制对 S3 存储桶的访问,以便只有一个用户可以 read/write 访问它。
我创建了以下权限策略并将其附加到 IAM 用户,我们称他们为 UserX:
{
"Version": "2012-10-17",
"Statement": [
{ "Sid":"my_sid",
"Effect":"Allow",
"Action":"s3:*",
"Resource": "arn:aws:s3:::my_bucket_name/*"
}]
}
我的预期是,由于 UserX 附加了此策略,他们将是唯一可以使用此存储桶执行任何操作的用户。
但是,如果我在没有凭据的情况下连接到 AWS,我可以毫无问题地写入此存储桶。这不是我想要的。我不希望除 UserX 之外的任何人写入此存储桶(或为此从中读取)。
如果我从 UserX 中删除此策略,则默认行为适用 - 既不请求(已验证也未验证)写入作品,这正是我所期望的。
此策略似乎向所有用户开放访问权限,即使它附加到 UserX。
这是我用来执行此操作的(有效 - 实际代码在方法中)代码:
对于未经验证的请求(可以写入但不应该:
s3 = AWS::S3.new
bucket = s3.buckets[my_bucket_name]
o = bucket.objects[aws_filename]
o.write(:file => filename_on_local_system)
对于已验证请求:
AWS.config(:access_key_id => AWS_ACCESS_KEY_ID,
:secret_access_key => AWS_SECRET_ACCESS_KEY,
:region => 'us-west-2')
s3 = AWS::S3.new
bucket = s3.buckets[my_bucket_name]
o = bucket.objects[aws_filename]
o.write(:file => filename_on_local_system)
我也试过:
- 将此策略附加到一个组并将 UserX 分配到该组,结果相同
- 创建存储桶策略以允许该用户向其写入数据,这会导致相同的行为
- 在不同的 AWS 账户中创建相同的存储桶策略,并获得相同的行为
- 使用 s3cmd 实用程序,并获得相同的行为
- 改用 aws-s3 gem(但无法获得转到 AWS 的良好请求)。
AWS 策略模拟器似乎可以工作,但由于您无法指定哪个用户正在执行操作,因此它并不能真正帮助我进行调试。
这非常令人沮丧。我想我可能需要研究 ACL,即使它们不受欢迎。
感谢任何帮助。
韦斯
我使用的客户端软件仍在从配置文件 (aws.yml) 中获取凭据,即使我在配置它时明确没有传递凭据。
感谢您的帮助。
韦斯