当前位置: 首页 > 知识库问答 >
问题:

使用AWS cdk和AWS lambda时日志传递权限不足

田玉韵
2023-03-14

我试图创建一个集中的日志存储桶,然后使用lambda和AWS-cdk记录所有其他s3存储桶。已创建了集中式日志存储桶,但在使用lambda对其进行写入时出错。这是我的代码:导入boto3

S3=boto3.resource('s3')

def handler(event, context):
    setBucketPolicy(target_bucket='s3baselinestack-targetloggingbucketbab31bd5-b6y2hkvqz0of')

def setBucketPolicy(target_bucket):
    for bucket in s3.buckets.all():
        bucket_logging = s3.BucketLogging(bucket.name)
        if not bucket_logging.logging_enabled:
            reponse = bucket_logging.put(
                BucketLoggingStatus={
                    'LoggingEnabled': {
                        'TargetBucket': target_bucket,
                        'TargetPrefix': f'{bucket.name}/'
                    }
                },
            )
    print(reponse)



Here is my error:
START RequestId: 320e83c0-ba5e-4d54-a78c-a462d6e0cb87 Version: $LATEST
An error occurred (InvalidTargetBucketForLogging) when calling the PutBucketLogging operation: You must give the log-delivery group WRITE and READ_ACP permissions to the target bucket: ClientError
Traceback (most recent call last):

注意:除了这个日志传递权限之外,一切都可以正常工作,因为当我通过aws控制台启用它时,它可以正常工作,但是,我需要以编程方式执行它!先谢谢你。

共有1个答案

薛博赡
2023-03-14

根据S3日志记录的留档,您必须在目标日志桶上授予Log DeliveryWRITEREAD_ACP权限,这是使用S3 ACL完成的。

https://docs.aws.amazon.com/AmazonS3/latest/dev/enable-logging-programming.html#grant-日志传递权限常规

使用CDK创建新存储桶时,使用访问控制属性进行设置。默认值为BucketAccessControl。PRIVATE.

new s3.Bucket(this, 'bucket', {
  accessControl: s3.BucketAccessControl.LOG_DELIVERY_WRITE
})

由于CloudFormation无法将ACL添加到现有bucket中,这意味着CDK也没有这样的方法。对于现有bucket,通过web控制台、API或CLI使用aws s3api put bucket acl添加日志传递

其他服务,如CloudFront,不再使用ACL,而是使用IAM策略,可以使用bucket添加这些策略。addToResourcePolicy()

https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-s3。伊布克特。html#将wbr添加到wbr资源wbr策略权限

 类似资料:
  • 使用Quickstart应用程序iOS我能够让Google Drive浏览文件和文件夹、显示图标和缩略图以及下载文件。但是,在上传时,我会遇到以下错误: 发生错误:错误域=com。谷歌。GTLRErrorObjectDomain代码=403“权限不足”用户信息={GTLRStructuredError=GTLRErrorObject 0x61800024ff90:{消息:“权限不足”错误:[1]代

  • 我有一个使用php artisan(root用户)运行的脚本,有时它会导致在apache www数据用户创建日志文件之前创建日志文件,这意味着当真实用户使用我的web应用程序时,我会收到文件夹权限错误: 无法打开流:权限被拒绝 我每次都会将权限更改回www数据,但我希望通过始终使用正确的权限创建日志文件来解决此问题。 我考虑过创建一个cron作业来创建文件或触摸它,以确保它每天都有正确的权限,但是

  • 我有一个flink作业,它使用logback作为日志框架,因为日志需要发送到logstash,logback有一个logstash appender(logstash logback appender)。appender工作正常,当flink作业从Eclipse这样的IDE运行时,我可以在logstash中看到应用程序日志。日志记录配置文件logback。xml放在src/main/resourc

  • 我正在尝试使用 PHP 制作日期日志文件。我正在Macbook上的xampp上运行它。它一直说许可被拒绝。我该如何解决这个问题? 我收到的错误是: 警告: fopen(星期五-01-四月-16.txt): 无法打开流: 权限被拒绝 /Applications/XAMPP/xamppfiles/htdocs/aowigman/index.php 在第 6 行无法打开文件! 代码: 先谢谢!

  • 我在一些论坛上读到这样的神话,即通过这样的操作就足以通过Veracode CWE 117(日志的不适当输出中和)问题。有人能证实是不是这样吗? 从这个主题如何修复Veracode CWE 117(日志的不正确输出中和)中,我了解到我需要做一些类似的事情

  • 问题内容: 是否可以使用java.util.Logging并登录到Java Webstart应用程序中的文件?我有以下记录代码: 并得到以下异常: 问题答案: 访问控制异常表明: “访问被拒绝(java.util.logging.LoggingPermission控件)” 权限类的javadoc这样说: “当前只有一个名为LoggingPermission的控件。这是“控件”,它具有控制日志记录配