尝试使用 aws-cdk 向 s3 日志传送组授予完全权限
Trying to give Full Permissions to s3 Log Delivery Group using the aws-cdk
我目前正在使用 aws-cdk 创建一个中央日志记录桶,所有现有的 s3 桶都将记录到该桶中。当我手动提供 's3LogDeliveryGroup' 列表对象、写入对象、读取存储桶权限和写入存储桶权限时,一切正常。但是我正在使用 aws-cdk 并且需要以编程方式执行此操作,以便我可以将其部署到任何帐户。
这是我的代码:
const s3PublicAccessLambda = new lambda.Function(this, 's3PublicAccessLambda',{
runtime: lambda.Runtime.PYTHON_3_6,
handler: 's3PublicAccess.handler',
role:s3LoggingLambdaRole,
code: lambda.Code.fromAsset(path.join(__dirname, '../lambda')),
timeout: cdk.Duration.seconds(300)
});
const centralLoggingBucket = new s3.Bucket(this, 'centralLoggingBucket', {
accessControl:s3.BucketAccessControl.BUCKET_OWNER_FULL_CONTROL
});
centralLoggingBucket.grantReadWrite(s3LoggingLambdaRole);
}
}
当 运行 此代码时不会发生错误,但是除非我手动授予权限,否则存储桶不会记录。我知道我需要在我指定 'accessControl' 参数的地方附近的某个地方指定它,我只是不知道确切的位置。谢谢!!
如果您正在寻找一种方法来为 lambda 函数承担的角色 s3LoggingLambdaRole
提供 S3 存储桶访问策略,您可以尝试附加一个内联策略,如下所示:
s3LoggingLambdaRole.attachInlinePolicy(
new Policy(this, 'yourPolicy', {
policyName: 'yourPolicyName',
statements: [
new PolicyStatement({
actions: ['s3:ListObjects', 's3:WriteObjects'],
resources: [`arn:aws:s3:::`, `arn:aws:s3:::*`, 'arn:aws:s3:::*/*'],
}),
],
}),
);
此外,请记住,如果您提供了自己的自定义 IAM 角色,它不会自动获得执行 lambda 的权限,因此您可能还必须添加以下托管策略。
s3LoggingLambdaRole.addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName("service-role/AWSLambdaBasicExecutionRole"));
s3LoggingLambdaRole.addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName("service-role/AWSLambdaVPCAccessExecutionRole")); // only required if your function lives in a VPC
我目前正在使用 aws-cdk 创建一个中央日志记录桶,所有现有的 s3 桶都将记录到该桶中。当我手动提供 's3LogDeliveryGroup' 列表对象、写入对象、读取存储桶权限和写入存储桶权限时,一切正常。但是我正在使用 aws-cdk 并且需要以编程方式执行此操作,以便我可以将其部署到任何帐户。 这是我的代码:
const s3PublicAccessLambda = new lambda.Function(this, 's3PublicAccessLambda',{
runtime: lambda.Runtime.PYTHON_3_6,
handler: 's3PublicAccess.handler',
role:s3LoggingLambdaRole,
code: lambda.Code.fromAsset(path.join(__dirname, '../lambda')),
timeout: cdk.Duration.seconds(300)
});
const centralLoggingBucket = new s3.Bucket(this, 'centralLoggingBucket', {
accessControl:s3.BucketAccessControl.BUCKET_OWNER_FULL_CONTROL
});
centralLoggingBucket.grantReadWrite(s3LoggingLambdaRole);
}
}
当 运行 此代码时不会发生错误,但是除非我手动授予权限,否则存储桶不会记录。我知道我需要在我指定 'accessControl' 参数的地方附近的某个地方指定它,我只是不知道确切的位置。谢谢!!
如果您正在寻找一种方法来为 lambda 函数承担的角色 s3LoggingLambdaRole
提供 S3 存储桶访问策略,您可以尝试附加一个内联策略,如下所示:
s3LoggingLambdaRole.attachInlinePolicy(
new Policy(this, 'yourPolicy', {
policyName: 'yourPolicyName',
statements: [
new PolicyStatement({
actions: ['s3:ListObjects', 's3:WriteObjects'],
resources: [`arn:aws:s3:::`, `arn:aws:s3:::*`, 'arn:aws:s3:::*/*'],
}),
],
}),
);
此外,请记住,如果您提供了自己的自定义 IAM 角色,它不会自动获得执行 lambda 的权限,因此您可能还必须添加以下托管策略。
s3LoggingLambdaRole.addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName("service-role/AWSLambdaBasicExecutionRole"));
s3LoggingLambdaRole.addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName("service-role/AWSLambdaVPCAccessExecutionRole")); // only required if your function lives in a VPC