Skip to content

Commit 15fce4f

Browse files
authored
Destination-s3: updated test and documentation - set minimum required policies (#22058)
* [21331] Destination-s3: updated documentation - set minimum required policies
1 parent 65c0d4a commit 15fce4f

File tree

8 files changed

+68
-3
lines changed

8 files changed

+68
-3
lines changed

airbyte-integrations/connectors/destination-s3/src/test-integration/java/io/airbyte/integrations/destination/s3/S3AvroDestinationAcceptanceTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
package io.airbyte.integrations.destination.s3;
66

7+
import com.fasterxml.jackson.databind.JsonNode;
78
import io.airbyte.integrations.standardtest.destination.ProtocolVersion;
89
import io.airbyte.integrations.standardtest.destination.comparator.TestDataComparator;
910

@@ -19,4 +20,9 @@ protected TestDataComparator getTestDataComparator() {
1920
return new S3AvroParquetTestDataComparator();
2021
}
2122

23+
@Override
24+
protected JsonNode getBaseConfigJson() {
25+
return S3DestinationTestUtils.getBaseConfigJsonFilePath();
26+
}
27+
2228
}

airbyte-integrations/connectors/destination-s3/src/test-integration/java/io/airbyte/integrations/destination/s3/S3CsvDestinationAcceptanceTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
package io.airbyte.integrations.destination.s3;
66

7+
import com.fasterxml.jackson.databind.JsonNode;
78
import io.airbyte.integrations.standardtest.destination.ProtocolVersion;
89

910
public class S3CsvDestinationAcceptanceTest extends S3BaseCsvDestinationAcceptanceTest {
@@ -13,4 +14,9 @@ public ProtocolVersion getProtocolVersion() {
1314
return ProtocolVersion.V1;
1415
}
1516

17+
@Override
18+
protected JsonNode getBaseConfigJson() {
19+
return S3DestinationTestUtils.getBaseConfigJsonFilePath();
20+
}
21+
1622
}

airbyte-integrations/connectors/destination-s3/src/test-integration/java/io/airbyte/integrations/destination/s3/S3CsvGzipDestinationAcceptanceTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
package io.airbyte.integrations.destination.s3;
66

7+
import com.fasterxml.jackson.databind.JsonNode;
78
import io.airbyte.integrations.standardtest.destination.ProtocolVersion;
89

910
public class S3CsvGzipDestinationAcceptanceTest extends S3BaseCsvGzipDestinationAcceptanceTest {
@@ -13,4 +14,9 @@ public ProtocolVersion getProtocolVersion() {
1314
return ProtocolVersion.V1;
1415
}
1516

17+
@Override
18+
protected JsonNode getBaseConfigJson() {
19+
return S3DestinationTestUtils.getBaseConfigJsonFilePath();
20+
}
21+
1622
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Copyright (c) 2022 Airbyte, Inc., all rights reserved.
3+
*/
4+
5+
package io.airbyte.integrations.destination.s3;
6+
7+
import com.fasterxml.jackson.databind.JsonNode;
8+
import io.airbyte.commons.io.IOs;
9+
import io.airbyte.commons.json.Jsons;
10+
import java.nio.file.Path;
11+
12+
public class S3DestinationTestUtils {
13+
14+
private static final String SECRET_PATH = "secrets/s3_dest_min_required_permissions_creds.json";
15+
16+
public static JsonNode getBaseConfigJsonFilePath() {
17+
return Jsons.deserialize(IOs.readFile(Path.of(SECRET_PATH)));
18+
}
19+
20+
}

airbyte-integrations/connectors/destination-s3/src/test-integration/java/io/airbyte/integrations/destination/s3/S3JsonlDestinationAcceptanceTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
package io.airbyte.integrations.destination.s3;
66

7+
import com.fasterxml.jackson.databind.JsonNode;
78
import io.airbyte.integrations.standardtest.destination.ProtocolVersion;
89

910
public class S3JsonlDestinationAcceptanceTest extends S3BaseJsonlDestinationAcceptanceTest {
@@ -13,4 +14,9 @@ public ProtocolVersion getProtocolVersion() {
1314
return ProtocolVersion.V1;
1415
}
1516

17+
@Override
18+
protected JsonNode getBaseConfigJson() {
19+
return S3DestinationTestUtils.getBaseConfigJsonFilePath();
20+
}
21+
1622
}

airbyte-integrations/connectors/destination-s3/src/test-integration/java/io/airbyte/integrations/destination/s3/S3JsonlGzipDestinationAcceptanceTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
package io.airbyte.integrations.destination.s3;
66

7+
import com.fasterxml.jackson.databind.JsonNode;
78
import io.airbyte.integrations.standardtest.destination.ProtocolVersion;
89

910
public class S3JsonlGzipDestinationAcceptanceTest extends S3BaseJsonlGzipDestinationAcceptanceTest {
@@ -13,4 +14,9 @@ public ProtocolVersion getProtocolVersion() {
1314
return ProtocolVersion.V1;
1415
}
1516

17+
@Override
18+
protected JsonNode getBaseConfigJson() {
19+
return S3DestinationTestUtils.getBaseConfigJsonFilePath();
20+
}
21+
1622
}

airbyte-integrations/connectors/destination-s3/src/test-integration/java/io/airbyte/integrations/destination/s3/S3ParquetDestinationAcceptanceTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
package io.airbyte.integrations.destination.s3;
66

7+
import com.fasterxml.jackson.databind.JsonNode;
78
import io.airbyte.integrations.standardtest.destination.ProtocolVersion;
89
import io.airbyte.integrations.standardtest.destination.comparator.TestDataComparator;
910

@@ -19,4 +20,9 @@ protected TestDataComparator getTestDataComparator() {
1920
return new S3AvroParquetTestDataComparator();
2021
}
2122

23+
@Override
24+
protected JsonNode getBaseConfigJson() {
25+
return S3DestinationTestUtils.getBaseConfigJsonFilePath();
26+
}
27+
2228
}

docs/integrations/destinations/s3.md

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,19 +91,28 @@ NOTE: If the S3 cluster is not configured to use TLS, the connection to Amazon S
9191

9292
5. Click `Set up destination`.
9393

94-
In order for everything to work correctly, it is also necessary that the user whose "S3 Key Id" and "S3 Access Key" are used have access to both the bucket and its contents. Policies to use:
94+
In order for everything to work correctly, it is also necessary that the user whose "S3 Key Id" and "S3 Access Key" are used have access to both the bucket and its contents. Minimum required Policies to use:
9595
```json
9696
{
9797
"Version": "2012-10-17",
9898
"Statement": [
9999
{
100100
"Effect": "Allow",
101-
"Action": "s3:*",
101+
"Action": [
102+
"s3:PutObject",
103+
"s3:GetObject",
104+
"s3:DeleteObject",
105+
"s3:PutObjectAcl",
106+
"s3:ListBucket",
107+
"s3:ListBucketMultipartUploads",
108+
"s3:AbortMultipartUpload",
109+
"s3:GetBucketLocation"
110+
],
102111
"Resource": [
103112
"arn:aws:s3:::YOUR_BUCKET_NAME/*",
104113
"arn:aws:s3:::YOUR_BUCKET_NAME"
105114
]
106-
}
115+
}
107116
]
108117
}
109118
```

0 commit comments

Comments
 (0)