在 AWS 中使用 S3 listObjectVersions 需要什么权限?
What permission is needed to use S3 listObjectVersions in AWS?
我目前有一个 lambda,它使用节点 sdk 调用 listObjectVersions 来列出特定文件的所有版本。但是,我无法弄清楚我的策略中的哪些权限会授予 lambda 进行此调用的权限。我搜索了 AWS 文档,但找不到任何信息。
以下是我策略中的当前权限:
- PolicyName: S3Policy
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- s3:PutObject
- s3:PutObjectAcl
- s3:GetObject
- s3:GetObjectVersion
- s3:ListObjectVersions
- s3:DeleteObject
- s3:ListBucket
当我执行 lambda 时,我在调用时得到一个 Access Denied
。我已更改策略以允许操作 s3:*
并且 lambda 有效。但是,我不想授予对 s3 的完全访问权限。
我需要添加什么操作才能允许?
您需要在政策中更新您的 Resource
。
s3:ListBucketVersions
是您要查找的操作。
应该是这样的:
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:ListAllMyBuckets"
],
"Resource":"arn:aws:s3:::*"
},
{
"Effect":"Allow",
"Action":[
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:ListBucketVersions",
"s3:GetBucketVersioning"
],
"Resource":"arn:aws:s3:::examplebucket"
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject",
"s3:GetObjectVersionTagging",
"s3:GetObjectVersionTorrent",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersion"
],
"Resource":"arn:aws:s3:::examplebucket/*"
}
]
}
尝试相应地更改您的政策。
来自Actions, Resources, and Condition Keys for Amazon S3 - AWS Identity and Access Management:
ListBucketVersions: Use the versions subresource to list metadata about all of the versions of objects in a bucket.
我测试如下:
- 创建了一个 IAM 用户
- 分配了以下政策
- 运行 命令:
aws s3api list-object-versions --bucket my-bucket
成功了。
政策是:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListBucketVersions",
"Resource": "*"
}
]
}
所以,虽然命名看起来有点奇怪(List Object Versions vs List Bucket Versions),但它是正确的权限使用。
我目前有一个 lambda,它使用节点 sdk 调用 listObjectVersions 来列出特定文件的所有版本。但是,我无法弄清楚我的策略中的哪些权限会授予 lambda 进行此调用的权限。我搜索了 AWS 文档,但找不到任何信息。
以下是我策略中的当前权限:
- PolicyName: S3Policy
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- s3:PutObject
- s3:PutObjectAcl
- s3:GetObject
- s3:GetObjectVersion
- s3:ListObjectVersions
- s3:DeleteObject
- s3:ListBucket
当我执行 lambda 时,我在调用时得到一个 Access Denied
。我已更改策略以允许操作 s3:*
并且 lambda 有效。但是,我不想授予对 s3 的完全访问权限。
我需要添加什么操作才能允许?
您需要在政策中更新您的 Resource
。
s3:ListBucketVersions
是您要查找的操作。
应该是这样的:
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:ListAllMyBuckets"
],
"Resource":"arn:aws:s3:::*"
},
{
"Effect":"Allow",
"Action":[
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:ListBucketVersions",
"s3:GetBucketVersioning"
],
"Resource":"arn:aws:s3:::examplebucket"
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject",
"s3:GetObjectVersionTagging",
"s3:GetObjectVersionTorrent",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersion"
],
"Resource":"arn:aws:s3:::examplebucket/*"
}
]
}
尝试相应地更改您的政策。
来自Actions, Resources, and Condition Keys for Amazon S3 - AWS Identity and Access Management:
ListBucketVersions: Use the versions subresource to list metadata about all of the versions of objects in a bucket.
我测试如下:
- 创建了一个 IAM 用户
- 分配了以下政策
- 运行 命令:
aws s3api list-object-versions --bucket my-bucket
成功了。
政策是:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListBucketVersions",
"Resource": "*"
}
]
}
所以,虽然命名看起来有点奇怪(List Object Versions vs List Bucket Versions),但它是正确的权限使用。