Исключение службы маркеров безопасности при восстановлении моментального снимка из S3 в AWS управляемый elasticsearch
У меня есть управляемый AWS сервис Elasticsearch (скажем, smallES
), который имеет правильно работающую корзину S3, прикрепленную к содержащим дневным индексам прокатки за последний 1 год. Я создал еще один управляемый AWS ES кластер (скажем, bigES
) по какой-то бизнес-причине. Я хочу восстановить данные за последний 1 год из bucket
в bigES
. Это гарантировано, что smallES
bigES
и bucket
все они находятся в одном регионе и одном VPC.
Итак, я создал политику:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:ListBucketMultipartUploads",
"s3:ListBucketVersions"
],
"Resource": [
"arn:aws:s3:::bucket"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:AbortMultipartUpload",
"s3:ListMultipartUploadParts"
],
"Resource": [
"arn:aws:s3:::bucket/*"
]
}
]
}
И прикрепил политику с ролью. Доверительные отношения этой роли
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Теперь, когда я создаю снимок по http-запросу в том же VPC, он может создать снимок-РЕПО для bigES
, и я могу запросить для этого тоже
curl -XGET 'http://bigESid.region.es.amazonaws.com:80/_snapshot'
Вывод
{
"snapshot-repo": {
"type": "s3",
"settings": {
"bucket": "bucket",
"region": "region",
"role_arn": "role_arn"
}
}
}
Но когда я пытаюсь увидеть снимки в этом РЕПО моментальных снимков, я получаю ошибку (описанную ниже)
curl -XGET 'http://bigESid.region.es.amazonaws.com:80/_cat/snapshots/snapshot-repo'
Я получаю следующую ошибку:
{
"error": {
"root_cause": [
{
"type": "a_w_s_security_token_service_exception",
"reason": "User: arn:aws:sts::acountid:assumed-role/cp-sts-grant-role/swift-region-prod-365021432299 is not authorized to perform: sts:AssumeRole on resource: role-arn (Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied; Request ID: some-id)"
}
],
"type": "a_w_s_security_token_service_exception",
"reason": "User: arn:aws:sts::acountid:assumed-role/cp-sts-grant-role/swift-region-prod-365021432299 is not authorized to perform: sts:AssumeRole on resource: role-arn (Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied; Request ID: some-id)"
},
"status": 500
}
Я предоставил весь доступ s3 к моей роли, но не повезло. Я разместил все http-запросы от ec2 машина внутри VPC.
Также следует отметить, что если я задаю запрос, подобный следующему, Я вижу ожидаемый результат
curl -XGET 'http://smallESid.region.es.amazonaws.com:80/_cat/snapshots/snapshot-repo'
IDK почему я пытался создать роль, которая имеет доверительные отношения, такие как следование. И все равно не повезло.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Заранее спасибо за любую помощь/предложения.
1 ответ:
Я решил эту проблему, используя следующую политику
{ "Statement": [ { "Action": [ "s3:ListBucket", "s3:GetBucketLocation", "s3:ListBucketMultipartUploads", "s3:ListBucketVersions" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::bucket-name" ] }, { "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:AbortMultipartUpload", "s3:ListMultipartUploadParts", "iam:PassRole" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::bucket-name/*" ] } ], "Version": "2012-10-17" }
Затем я прикрепил политику для этой роли. Я думаю, что
"iam:PassRole"
сделал свою работу.