Исключение службы маркеров безопасности при восстановлении моментального снимка с S3 на управляемый AWS эластичный поиск - PullRequest
0 голосов
/ 25 июня 2018

У меня есть служба Elasticsearch Service, управляемая AWS (скажем, smallES), в которой есть правильно работающая корзина S3, к которой добавляются индексы скользящей дневной скользящей статистики за последний год.По какой-то бизнес-причине я создал еще один управляемый AWS кластер ES (скажем, bigES).Я хочу восстановить данные за последний год из 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"
      }
    ]
}

Заранее благодарим за любую помощь / предложения.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

У меня была такая же проблема, потому что я не позволил службе Elasticsearch взять на себя эту роль.Мне пришлось обновить документ о политике доверия, чтобы включить es.amazonaws.com.

{
  "Version": "2012-10-17",
   "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "es.amazonaws.com",
          "ec2.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
0 голосов
/ 25 июля 2018

Я решил эту проблему, используя следующую политику

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

...