我正在使用django-store
和storages.backends.s3boto。S3BotoStorage
遇到了一个奇怪的403
错误。
我最初的IAM策略非常保守,只包括对象的get、put和delete。
--
然后我授予了除删除和创建bucket之外的所有权限
--
我终于给了完全权限,我想避免,我不再得到403错误。
我已经尝试根据此答案提供对桶根/
和/*
的访问权限
我的目标是只授予必要的权限。
我假设这在最近几年发生了变化,但我只能使用以下权限收集静态数据:
{
"Statement": [
{
"Action": [
"s3:AbortMultipartUpload",
"s3:GetObject",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:DeleteObject",
"s3:ListMultipartUploadParts"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::<bucket_name>/*"
]
}
]
}
绊倒我的权限是PutObjectAcl。我也不确定是否需要多部分的东西,但我不想找出它对大文件或类似文件的必要性。
编辑:显然django-store在某些情况下会删除文件。我能够让它与:
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:ListBucketMultipartUploads"
],
"Resource": [
"arn:aws:s3:::<bucket_name>"
]
},
{
"Action": [
"s3:AbortMultipartUpload",
"s3:GetObject",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:DeleteObject",
"s3:DeleteObjectTagging",
"s3:ListMultipartUploadParts"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::<bucket_name>/*"
]
}
]
}
这里可能有几个额外的字段,但我无法重现删除操作以确认。
我也在尝试做同样的事情,我想我最终还是成功了(通过大量的谷歌搜索和其他StackOverflow答案)。这并不能保证是所需的最小权限集,但也不是全部。
这是用户Collect静态
正在使用的IAM策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1399990928000",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
这似乎很简单。
从这里开始,情况变得更加复杂。您需要更改的内容将标记在尖括号内。bucket策略应如下所示:
{
"Version": "2008-10-17",
"Id": "Permissions",
"Statement": [
{
"Sid": "AllowAnybodyToGetBucketLocation",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetBucketLocation",
"Resource": "arn:aws:s3:::<bucket_name>"
},
{
"Sid": "AllowCollectstaticUserToListBucket",
"Effect": "Allow",
"Principal": {
"AWS": "<collectstatic_user_arn_from_iam_user_summary>"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::<bucket_name>"
},
{
"Sid": "AllowCollectstaticUserAccessToAllObjects",
"Effect": "Allow",
"Principal": {
"AWS": "<collectstatic_user_arn_from_iam_user_summary>"
},
"Action": [
"s3:DeleteObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::<bucket_name>/*"
}
]
}
这至少为collectstatic的用户提供了所需的最低权限。
请注意,这假设您将所有对象直接转储到bucket的根目录中,而不是像static这样的目录中。我不完全确定如何做到这一点-我是否应该将资源指定为arn:aws:s3::
帮助我的来源:
s3:Delete*
、s3:放置*
和s3:获取*
分开。这里是上传到特定bucket的bucket策略,在本例中是静态的。
{
"Version": "2008-10-17",
"Id": "StaticAndMediaPermissions",
"Statement": [
{
"Sid": "AllowAnybodyToGetBucketLocation",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetBucketLocation",
"Resource": "arn:aws:s3:::<bucket_name>"
},
{
"Sid": "AllowCollectstaticUserToListStaticDirectory",
"Effect": "Allow",
"Principal": {
"AWS": "<collectstatic_user_arn_from_iam_user_summary>"
},
"Action": [
"s3:ListBucket",
"s3:ListBucketMultipartUploads"
],
"Resource": [
"arn:aws:s3:::<bucket_name>",
"arn:aws:s3:::<bucket_name>/static"
]
},
{
"Sid": "AllowCollectstaticUserAccessToAllObjectsInStaticDirectory",
"Effect": "Allow",
"Principal": {
"AWS": "<collectstatic_user_arn_from_iam_user_summary>"
},
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObjectAcl",
"s3:ListMultipartUploadParts",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::<bucket_name>/static/*"
}
]
}
您仍然需要从我的其他答案中添加IAM用户策略。
确保在设置中将AWS\U位置变量设置为静态。py 。如果你没有那套,这就行不通了。
来源:*http://blogs.aws.amazon.com/security/post/Tx1P2T3LFXXCNB5/Writing-IAM-policies-Grant-access-to-user-specific-folders-in-an-Amazon-S3-bucke-走过如何设置目录特定的权限*https://stackoverflow.com/a/9649233/1999151-提示我使用AWS_LOCATION
或者,如果要为静态文件和媒体文件创建单独的目录,则需要按照以下说明操作:
https://stackoverflow.com/a/10626241/1999151
并从settings.py
中删除AWS_LOCATION
。
您仍然需要从我的其他答案中添加IAM用户策略。
然后需要将AWS bucket策略调整为以下内容:
{
"Version": "2008-10-17",
"Id": "StaticAndMediaPermissions",
"Statement": [
{
"Sid": "AllowAnybodyToGetBucketLocation",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetBucketLocation",
"Resource": "arn:aws:s3:::<bucket_name>"
},
{
"Sid": "AllowCollectstaticUserToListStaticAndMediaDirectories",
"Effect": "Allow",
"Principal": {
"AWS": "<collectstatic_user_arn_from_iam_user_summary>"
},
"Action": [
"s3:ListBucket",
"s3:ListBucketMultipartUploads"
],
"Resource": [
"arn:aws:s3:::<bucket_name>",
"arn:aws:s3:::<bucket_name>/media"
"arn:aws:s3:::<bucket_name>/static"
]
},
{
"Sid": "AllowCollectstaticUserAccessToAllObjectsInStaticAndMediaDirectories",
"Effect": "Allow",
"Principal": {
"AWS": "<collectstatic_user_arn_from_iam_user_summary>"
},
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObjectAcl",
"s3:ListMultipartUploadParts",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::<bucket_name>/media/*",
"arn:aws:s3:::<bucket_name>/static/*"
]
}
]
}
如果你使用的是 SSH 方式连接远端,并且设置了一个没有口令的密钥,这样就可以在不输入用户名和密码的情况下安全地传输数据。 然而,这对 HTTP 协议来说是不可能的 —— 每一个连接都是需要用户名和密码的。 这在使用双重认证的情况下会更麻烦,因为你需要输入一个随机生成并且毫无规律的 token 作为密码。 幸运的是,Git 拥有一个凭证系统来处理这个事情。 下面有一些 Git 的选项: 默认所有都
在带有npm 7.12.0版的Ubuntu上安装最新的web3 1.3.5版失败,出现了几个严重错误。修复的典型时间范围是什么? 下划线1.3.2-1.12.0 严重性:高 任意代码执行-https://npmjs.com/advisories/1674\没有可用的修复程序 节点\模块/下划线 。web3 bzz
问题内容: 攻击 在凭证存储的情况下,一种可能的威胁模型是攻击者,它具有以下能力: 检查任何(用户)进程内存 读取本地(用户)文件 AFAIK,这种攻击的共识是无法阻止(因为必须将凭据存储在内存中,程序才能实际使用它们),但是有两种技术可以缓解这种攻击: 最小化敏感数据在内存中的存储时间 一旦不再需要数据,将覆盖内存 通过模糊措施来处理内存中的数据,继续移动数据以及其他安全性 特别是Python
如果你使用的是 SSH 方式连接远端,并且设置了一个没有口令的密钥,这样就可以在不输入用户名和密码的情况下安全地传输数据。 然而,这对 HTTP 协议来说是不可能的 —— 每一个连接都是需要用户名和密码的。 这在使用双重认证的情况下会更麻烦,因为你需要输入一个随机生成并且毫无规律的 token 作为密码。 幸运的是,Git 拥有一个凭证系统来处理这个事情。 下面有一些 Git 的选项: 默认所有都
我的用户名和密码存储在Git扩展内部的某个地方。过了一段时间,需要再给用户名和密码,我给错了很多次。 现在,如果我想拉一些东西等,我会收到。我不能给新的密码,它似乎是存储的,我不知道如何改变它。 是否可以删除旧凭据? 我有2.51.04版本。我已经卸载了它,重新安装,它没有帮助我。
我有一个使用Firebase身份验证的node.js客户端。现在我想访问谷歌云存储,但是node.js的Firebase SDK不包括GCS。使用@google-云/存储工作,但只有匿名访问。如何将Firebase凭据应用到@google-Cloud/存储,以便在登录用户的上下文中访问GCS?