Исключение службы маркеров безопасности при восстановлении моментального снимка из 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 2

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" сделал свою работу.