Skip to content

Commit 931b65b

Browse files
authored
Merge pull request #288 from gammarers/feature/add-log-bucket-type
feat: add log bucket type
2 parents 8593272 + 30041b7 commit 931b65b

File tree

9 files changed

+1178
-141
lines changed

9 files changed

+1178
-141
lines changed

.projen/deps.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.projenrc.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ const project = new awscdk.AwsCdkConstructLibrary({
55
authorAddress: '[email protected]',
66
authorOrganization: true,
77
cdkVersion: '2.189.1',
8-
typescriptVersion: '5.7.x',
9-
jsiiVersion: '5.7.x',
8+
typescriptVersion: '5.8.x',
9+
jsiiVersion: '5.8.x',
1010
defaultReleaseBranch: 'main',
1111
name: '@gammarers/aws-secure-log-bucket',
1212
description: 'secure multiple transition phases in a single lifecycle policy bucket.',
@@ -15,7 +15,7 @@ const project = new awscdk.AwsCdkConstructLibrary({
1515
repositoryUrl: 'https://github.com/gammarers/aws-secure-log-bucket.git',
1616
majorVersion: 2,
1717
deps: [
18-
'@gammarers/aws-secure-bucket@^2.3.6',
18+
'@gammarers/aws-secure-bucket@^2.4.1',
1919
],
2020
// peerDeps: [
2121
// '@gammarers/aws-secure-bucket@^2.3.6',

API.md

Lines changed: 783 additions & 85 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,18 @@ secure multiple transition phases in a single lifecycle policy bucket.
1515

1616
The storage class will be changed with the following lifecycle configuration.
1717

18-
| Storage Class | Defaul transition after days |
19-
| ------------------- |------------------------------|
20-
| INFREQUENT_ACCESS | 400 days |
21-
| GLACIER | 720 days |
22-
| DEEP_ARCHIVE | 980 days |
18+
| Storage Class | Default transition after days |
19+
| ------------------- |------------------------------ |
20+
| INFREQUENT_ACCESS | 400 days |
21+
| GLACIER | 720 days |
22+
| DEEP_ARCHIVE | 980 days |
23+
24+
## Additional Properties
25+
26+
| **Name** | **Type** | **Default** | **Description** |
27+
| --- | --- | --- | --- |
28+
| logBucketType | SecureLogBucketType | SecureLogBucketType.NORMAL | The type of the bucket. Available types: NORMAL, VPC_FLOW_LOG |
29+
| vpcFlowLog | VPCFlowLog | - | **⚠️ Deprecated**: This property is deprecated. Use the `logBucketType` property instead. Configuration for VPC Flow Log bucket settings. |
2330

2431
## Install
2532

@@ -30,21 +37,12 @@ The storage class will be changed with the following lifecycle configuration.
3037
```shell
3138
npm install @gammarers/aws-secure-log-bucket
3239
```
40+
3341
#### install by yarn
3442

3543
```shell
3644
yarn add @gammarers/aws-secure-log-bucket
3745
```
38-
#### install by pnpm
39-
40-
```shell
41-
pnpm add @gammarers/aws-secure-log-bucket
42-
```
43-
#### install by bun
44-
45-
```shell
46-
bun add @gammarers/aws-secure-log-bucket
47-
```
4846

4947
### Python
5048

@@ -74,13 +72,11 @@ new SecureLogBucket(stack, 'SecureLogBucket');
7472
import { SecureLogBucket } from '@gammarers/aws-secure-log-bucket';
7573

7674
new SecureLogBucket(stack, 'SecureFlowLogBucket', {
77-
vpcFlowLog: {
78-
enable: true,
79-
bucketObjectKeyPrefix: [
80-
'example-prefix-a',
81-
'example-prefix-b',
82-
],
83-
},
75+
logBucketType: SecureLogBucketType.VPC_FLOW_LOG,
76+
bucketObjectKeyPrefix: [
77+
'example-prefix-a',
78+
'example-prefix-b',
79+
],
8480
});
8581
```
8682

package.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/index.ts

Lines changed: 66 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,59 @@ export interface VPCFlowLog {
2020
readonly bucketObjectKeyPrefix?: string[];
2121
}
2222

23-
export interface SecureLogBucketProps extends SecureBucketProps {
23+
export enum SecureLogBucketType {
24+
NORMAL = 'normal',
25+
VPC_FLOW_LOG = 'vpc-flow-log',
26+
}
27+
28+
// -- delivery.logs.amazonaws.com
29+
// VPC Flow Logs
30+
// Network Load Balancer (NLB) Access Logs
31+
// Route 53 Resolver Query Logs
32+
// AWS Network Firewall Logs
33+
// Verified Access Logs
34+
// VPC Lattice Access Logs
35+
// Global Accelerator Flow Logs
36+
// Site-to-Site VPN Logs
37+
38+
// logging.s3.amazonaws.com
39+
// S3 Access Logs
40+
41+
// logs.<Region>.amazonaws.com
42+
// CloudWatch Logs Export (CreateExportTask)
43+
44+
interface SecureBaseLogBucketProps extends SecureBucketProps {
45+
2446
readonly lifecycleStorageClassTransition?: LifecycleStorageClassTransition;
47+
48+
/**
49+
* @deprecated This property is deprecated. Use the bucketType property instead.
50+
*/
2551
readonly vpcFlowLog?: VPCFlowLog;
2652
}
2753

54+
export interface SecureNormalLogBucketProps extends SecureBaseLogBucketProps {
55+
56+
/**
57+
* The type of the bucket.
58+
* @default SecureLogBucketType.NORMAL
59+
*/
60+
readonly logBucketType?: SecureLogBucketType.NORMAL | undefined;
61+
}
62+
63+
export interface SecureVpcFlowLogBucketProps extends SecureBaseLogBucketProps {
64+
/**
65+
* The type of the bucket.
66+
*/
67+
readonly logBucketType: SecureLogBucketType.VPC_FLOW_LOG;
68+
/**
69+
* The prefix of the bucket object key.
70+
*/
71+
readonly bucketObjectKeyPrefix?: string[];
72+
}
73+
74+
export type SecureLogBucketProps = SecureNormalLogBucketProps | SecureVpcFlowLogBucketProps;
75+
2876
const TRANSITION_INFREQUENT_ACCESS_DEFAULT_DAYS: number = 400;
2977
const TRANSITION_GLACIER_DEFAULT_DAYS: number = 720;
3078
const TRANSITION_DEEP_ARCHIVE_DEFAULT_DAYS: number = 980;
@@ -98,8 +146,14 @@ export class SecureLogBucket extends SecureBucket {
98146
// 👇 Get current account
99147
const account = cdk.Stack.of(this).account;
100148

101-
if (props?.vpcFlowLog) {
102-
const enable = props.vpcFlowLog.enable ?? false;
149+
if (props?.vpcFlowLog || props?.logBucketType === SecureLogBucketType.VPC_FLOW_LOG) {
150+
const enable = (() => {
151+
if (props?.logBucketType === SecureLogBucketType.VPC_FLOW_LOG) {
152+
return true;
153+
}
154+
return props?.vpcFlowLog?.enable ?? false;
155+
})();
156+
103157
if (enable) {
104158
// 👇バケットACLアクセス権
105159
this.addToResourcePolicy(new iam.PolicyStatement({
@@ -120,7 +174,15 @@ export class SecureLogBucket extends SecureBucket {
120174
],
121175
//resources: [`${this.bucketArn}/AWSLogs/${account}/*`],
122176
resources: (() => {
123-
const objectKeyPrefix = props.vpcFlowLog.bucketObjectKeyPrefix;
177+
const objectKeyPrefix = (() => {
178+
if (props?.vpcFlowLog) {
179+
return props.vpcFlowLog.bucketObjectKeyPrefix;
180+
}
181+
if (props?.logBucketType === SecureLogBucketType.VPC_FLOW_LOG) {
182+
return props.bucketObjectKeyPrefix;
183+
}
184+
return undefined;
185+
})();
124186
if (objectKeyPrefix) {
125187
const resources: Array<string> = [];
126188
for (const keyPrefix of objectKeyPrefix) {

0 commit comments

Comments
 (0)