S3策略允许Lambda
问题描述:
我对使用AWS策略生成器创建的S3存储桶具有以下策略,以允许使用特定角色运行的lambda访问存储桶中的文件。然而,当我执行LAMBDA,我得到403权限被拒绝:S3策略允许Lambda
"errorMessage": "Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: <requestId>)",
"errorType": "com.amazonaws.services.s3.model.AmazonS3Exception",
在S3斗政策:
{
"Version": "2012-10-17",
"Id": "Policy<number>",
"Statement": [
{
"Sid": "Stmt<number>",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<account>:role/<roleName>"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::<bucketName>/*"
}
]
}
什么是错的政策? Lamba正在使用策略中配置的角色运行。
答
分配给AWS Lambda函数的角色应为已创建AWS Lambda角色(在IAM控制台中创建角色时选择)。
角色没有本金,因为权限被分配给任何服务(在本例中为Lambda函数)正在使用该角色。
此外,你应该在桶本身(例如,列出内容),并在桶(如到GetObject的)的内容分配权限。
这将是这样的:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowS3Access",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
]
}
]
}
+0
感谢您的回复。我在桶上设置的策略是正确的。缺少的是卷本身需要通过IAM连接AmazonS3FullAccess策略。 – FiguringThisOut
答
循环,因为我虽然我可以使它工作后,其过程是:
- 创建S3桶。
- 创建IAM策略(桶名称需要)
- 创建IAM角色(IAM政策需要)
- 创建拉姆达功能(需要IAM角色)
- 创建S3存储策略(lambda函数名需要)
IAM策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt*******",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectTagging",
"s3:PutObjectVersionAcl",
"s3:PutObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::<bucket-name>"
]
}
]
}
,我使用的S3存储桶这一政策
{
"Id": "Policy************",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt********",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectTagging",
"s3:PutObjectVersionAcl",
"s3:PutObjectVersionTagging"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::<bucket-name>/*",
"Principal": {
"AWS": [
"arn:aws:iam::*********:role/<lambda-function-name>"
]
}
}
]
}
我将从首先修改此策略开始,为所有权限提供所有权限..基本上删除Principal和bucketname ..这将告诉您,如果问题出现在您的s3策略或lambda中。 – Deepak
为什么不将S3存储桶权限添加到分配给Lambda函数的IAM角色,而不是试图通过存储桶策略执行此操作? –
你在做什么来自Lambda的水桶?有些操作需要资源在最后排除'/ *',其他操作需要包含''Resource':[“arn:aws:s3 :::”,“arn:aws:s3 ::: /*“]' –