У меня есть файлы в корзине S3, и я хочу получить к ним доступ из моей Lambda. Прямо сейчас я включил разрешение на чтение для группы Everyone
отдельных файлов. Но я хочу ограничить этот доступ, чтобы только моя Lambda могла читать файлы. Я хочу использовать URL-адрес объекта и передать его Tika, например: tika.detect(objectUrl)
.
Я использую формирование облака и добавил эту политику в свою лямбда-роль:
{
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::BUCKET_NAME/*"
}
In мое ведро S3, я добавил эту политику:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowS3Access",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AWS_ACCOUNT_ID:role/LAMBDA_NAME-LambdaRole"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::BUCKET_NAME",
"arn:aws:s3:::BUCKET_NAME/*"
]
}
]
}
Тем не менее я получаю эту ошибку:
Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: https://BUCKET_NAME.s3-us-west-2.amazonaws.com/FILE_NAME
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1894)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
at sun.net.www.protocol.http.HttpURLConnection.getHeaderField(HttpURLConnection.java:3051)
at java.net.URLConnection.getContentType(URLConnection.java:512)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getContentType(HttpsURLConnectionImpl.java:415)
at org.apache.tika.io.TikaInputStream.get(TikaInputStream.java:416)