AWS S3 拒绝除 1 个用户之外的所有访问 - 存储桶策略
AWS S3 deny all access except for 1 user - bucket policy
我已经在 AWS S3 中设置了一个存储桶。我使用 ALLOW 策略(使用存储桶策略编辑器)为我的 IAM 用户授予了对存储桶的访问权限。我能够与用户一起将文件保存到存储桶中。我之前一直在使用存储桶来提供媒体服务,所以默认操作似乎是授予 public 查看文件(图像)的权限,这对大多数网站来说都很好。
在我的新项目中,我希望能够使用 IAM 用户访问 S3 存储桶,但希望拒绝所有其他访问。没有 public 读取权限,除了应该具有完全访问权限的 IAM 用户之外没有任何访问权限 save/delete 无论如何。
我似乎应该做什么,我正在阅读有关 here 的内容。它说要使用 NotPrincipal
属性创建一个 Deny
策略,这样它仍然会允许该用户,但拒绝其他所有人。为了更好地衡量,我还为我想要的用户添加了一个 Allow
策略:
{
"Version": "2012-10-17",
"Id": "Policy**********",
"Statement": [
{
"Sid": "Stmt**********",
"Effect": "Deny",
"NotPrincipal": {
"AWS": "arn:aws:iam::*********:user/my_user"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::my_bucket/*"
},
{
"Sid": "Stmt*************",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::**********:user/my_user"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::my_bucket/*"
}
]
}
但这甚至拒绝所有人访问 my_user
。我可以再次确认我在使用上述策略的 Allow
部分时具有访问权限,但是 public 也具有读取权限,我正试图将其关闭。
如何设置我的存储桶策略以仅向唯一的 IAM 用户授予完全访问权限并拒绝任何其他用户的所有访问权限?
谢谢。
很简单:
- 默认情况下,存储桶没有public访问权限
- 不要添加存储桶策略,因为您不想授予访问权限public访问权限
- 相反,向 IAM 用户添加策略 授予他们访问权限
要意识到的主要事情是 IAM 用户无法通过未经身份验证的 URL(例如 s3.amazonaws.com/bucket/file.jpg
)访问内容,因为 S3 不知道他们是谁。当 IAM 用户访问内容时,他们将需要使用 authenticated access 以便 S3 知道他们是谁,例如:
- 使用用户名 + 密码通过 AWS 管理控制台访问
- 使用访问密钥 + 秘密密钥通过 AWS Command-Line Interface (CLI) 访问
IAM 用户的策略类似于:
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my_bucket",
"arn:aws:s3:::my_bucket/*"
]
}
如果我理解正确,只允许 1 个 IAM 用户访问存储桶。我们可以使用存储桶策略。我在 netApp 文档中得到了这个。
{
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::95390887230002558202:federated-user/Bob"
},
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::examplebucket",
"arn:aws:s3:::examplebucket/*"
]
},
{
"Effect": "Deny",
"NotPrincipal": {
"AWS": "arn:aws:iam::95390887230002558202:federated-user/Bob"
},
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::examplebucket",
"arn:aws:s3:::examplebucket/*"
]
}
]
}
我已经在 AWS S3 中设置了一个存储桶。我使用 ALLOW 策略(使用存储桶策略编辑器)为我的 IAM 用户授予了对存储桶的访问权限。我能够与用户一起将文件保存到存储桶中。我之前一直在使用存储桶来提供媒体服务,所以默认操作似乎是授予 public 查看文件(图像)的权限,这对大多数网站来说都很好。
在我的新项目中,我希望能够使用 IAM 用户访问 S3 存储桶,但希望拒绝所有其他访问。没有 public 读取权限,除了应该具有完全访问权限的 IAM 用户之外没有任何访问权限 save/delete 无论如何。
我似乎应该做什么,我正在阅读有关 here 的内容。它说要使用 NotPrincipal
属性创建一个 Deny
策略,这样它仍然会允许该用户,但拒绝其他所有人。为了更好地衡量,我还为我想要的用户添加了一个 Allow
策略:
{
"Version": "2012-10-17",
"Id": "Policy**********",
"Statement": [
{
"Sid": "Stmt**********",
"Effect": "Deny",
"NotPrincipal": {
"AWS": "arn:aws:iam::*********:user/my_user"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::my_bucket/*"
},
{
"Sid": "Stmt*************",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::**********:user/my_user"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::my_bucket/*"
}
]
}
但这甚至拒绝所有人访问 my_user
。我可以再次确认我在使用上述策略的 Allow
部分时具有访问权限,但是 public 也具有读取权限,我正试图将其关闭。
如何设置我的存储桶策略以仅向唯一的 IAM 用户授予完全访问权限并拒绝任何其他用户的所有访问权限?
谢谢。
很简单:
- 默认情况下,存储桶没有public访问权限
- 不要添加存储桶策略,因为您不想授予访问权限public访问权限
- 相反,向 IAM 用户添加策略 授予他们访问权限
要意识到的主要事情是 IAM 用户无法通过未经身份验证的 URL(例如 s3.amazonaws.com/bucket/file.jpg
)访问内容,因为 S3 不知道他们是谁。当 IAM 用户访问内容时,他们将需要使用 authenticated access 以便 S3 知道他们是谁,例如:
- 使用用户名 + 密码通过 AWS 管理控制台访问
- 使用访问密钥 + 秘密密钥通过 AWS Command-Line Interface (CLI) 访问
IAM 用户的策略类似于:
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my_bucket",
"arn:aws:s3:::my_bucket/*"
]
}
如果我理解正确,只允许 1 个 IAM 用户访问存储桶。我们可以使用存储桶策略。我在 netApp 文档中得到了这个。
{
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::95390887230002558202:federated-user/Bob"
},
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::examplebucket",
"arn:aws:s3:::examplebucket/*"
]
},
{
"Effect": "Deny",
"NotPrincipal": {
"AWS": "arn:aws:iam::95390887230002558202:federated-user/Bob"
},
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::examplebucket",
"arn:aws:s3:::examplebucket/*"
]
}
]
}