我确实创建了一个lambda函数,当文件在S3存储桶中上传时,它应该将数据上传到DynamoDB。但是,当文件在存储桶中上传时,我在CloudWatch中得到一个“GetObject操作:权限拒绝”。lambda函数附加了一个IAM角色,并带有这些策略:Amazon onlambdaFullAccess、Amazon onS3FullAccess、Amazon onCloudWatchLogsFullAccess、Amazon onDynamoDBFullAccess。它lambda.amazonaws.com受信任的实体。存储桶没有附加任何策略。
import boto3
import json
import urllib
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('wireshark')
s3 = boto3.client('s3')
tests3 = boto3.resource(u's3')
def lambda_handler(event, context):
source_bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.parse.quote_plus(event['Records'][0]['s3']['object']['key'])
copy_source = {'Bucket':source_bucket , 'Key':key}
print(event)
print("Log stream name : ", context.log_stream_name)
print("Log group name : ", context.log_group_name)
print("Request Id:", context.aws_request_id)
print("Mem. limit(MB): ", context.memory_limit_in_mb)
#just print function
print("Log stream name : ", context.log_stream_name)
print("Log group name : ", context.log_group_name)
print("Request Id:", context.aws_request_id)
print("Mem. limit(MB): ", context.memory_limit_in_mb)
try:
print("Using waiter to waiting for object to persist thru s3 service")
waiter = s3.get_waiter('object_exists')
waiter.wait(Bucket=source_bucket, Key=key)
print("Accessing the receied file and reading the same")
bucket = tests3.Bucket(u'awslambdas3test2')
obj = bucket.Object(key=key)
response = obj.get()
print("response from file object")
print(response)
在Cloudwatch中:调用GetObject操作时发生错误(AccessDenied):拒绝访问。我已经通过了aws的“政策模拟器”。这个IAM角色应该能够从任何S3 bucket获取对象。谢谢你的帮助。
代码主要来自GitHub。
下面是一个AWS Lambda函数,它将打印文件的内容:
import boto3
import os
def lambda_handler(event, context):
s3_client = boto3.client('s3')
# For each record
for record in event['Records']:
# Get Bucket and Key
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
# Print the bucket & key to the logs
print(bucket, key)
# Download object
local_filename = '/tmp/' + key
s3_client.download_file(bucket, key, local_filename)
# Print contents to log (just to demonstrate concept)
for line in open(local_filename):
print(line)
# Delete file when done, to clear space for future execution
os.remove(local_filename)
在存储桶上创建一个Amazon S3事件来触发此Lambda函数,它将文件名和文件内容打印到CloudWatch日志。这应该是一个很好的测试,可以确定该程序是使用您的代码还是具有权限。
有没有人遇到过这样的情况:当我对一个用户使用管理策略时,它可以工作,但当我使用内联策略时,它说访问被拒绝。我为IAM用户授予了对bucket读取访问权限,即它只能访问bucket。 我也试过这个
可能是一个重复的问题,但似乎没有一个可用的解决方案有效。可能是 Github 自 2021 年 8 月 13 日起更改了对密码的支持。 我尝试了以下方法: 已检查用户名和密码。 创建了个人访问令牌。 重新检查了 .git/config 文件中的源网址。 错误消息:
我目前在云存储上设置了图像。因为我需要通过Google Cloud Node.js客户端库来访问这些代码,所以上面的代码是我当前的设置。不幸的是,在运行此代码时,我得到以下错误: 如何初始化管理SDK:
有趣的是,当我尝试它下载的sudo版本时,但是终端中不能识别。 我的节点是10.16。我的净现值是6.9。0 这是文件问题还是我的Mac?
我在Lambda函数上收到来自S3 AWS服务的acccess denied错误。 这是代码: 这是CloudWatch上的错误: 这是堆栈错误: 没有关于S3的任何其他描述或信息,桶权限允许每个人、放置、列表和删除。 我可以做什么来访问S3桶? PS:在Lambda事件属性上,主体是正确的,并且具有管理特权。