Доступ к корзине s3 из другого аккаунта aws - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь восстановить базу данных в рамках нашего тестирования. Резервные копии существуют на счете prod s3. Моя база данных работает как экземпляр ec2 в учетной записи dev.

Может кто-нибудь сказать мне, как я могу получить доступ к продукту S3 из учетной записи Dev.

Шаги: - Я создал роль на учетной записи Prod и с доверительными отношениями с учетной записью Dev - Я добавил политику к роли.

{

    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::prod"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::prod/*"
        }
    ]
}

на аккаунте разработчика я создал роль и с политикой предположения

> {   "Version": "2012-10-17",   "Statement": [
>     {
>       "Effect": "Allow",
>       "Action": "sts:AssumeRole",
>       "Resource": "arn:aws:iam::xxxxxxxxx:role/prod-role"
>     }   ] }

Но я не могу получить доступ к корзине s3, может кто-нибудь указать мне, где я не прав. Также я добавил вышеуказанную политику к существующей роли. значит ли это, что он не работает из-за моего профиля (непоследовательная ошибка)

Пожалуйста, помогите и поправьте меня, если я где-нибудь ошибаюсь. Я ищу решение с точки зрения роли, а не как пользователя. Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Итак, подведем итоги: вы хотите получить доступ к своему списку продуктов из учетной записи разработчика.
Есть два способа сделать это, метод 1 - ваш подход, однако я бы предложил метод 2:
Метод 1 : использование ролей.Это то, что вы описали выше, это здорово, однако вы не можете синхронизировать корзину с корзиной, если они находятся на разных учетных записях, поскольку каждый раз необходимо будет экспортировать разные ключи доступа.Скорее всего, вам придется синхронизировать файлы из корзины prod с локальной файловой системой, а затем с локальной файловой системы в корзину для разработчиков.
Как это сделать:
Используя роли, создайте роль в производственной учетной записи, которая имеет доступ к корзине.Отношения доверия этой роли должны доверять роли учетной записи dev, назначенной экземпляру ec2.Прикрепите политику, предоставляющую доступ к корзине продуктов, к этой роли.После того, как все настроено, роль экземпляра ec2 в dev должна быть обновлена, чтобы разрешить sts:AssumeRole той роли, которую вы определили в рабочей среде.На экземпляре ec2 в dev вам нужно будет запустить aws sts assume-role --role-arn <the role on prod> --role-session-name <a name to identify the session>.Это вернет вам 3 переменные, AWS_SECRET_ACCESS_KEY, AWS_ACCESS_KEY_ID и AWS_SESSION_TOKEN.На вашем экземпляре ec2 запустите set -a; AWS_SECRET_ACCESS_KEY=${secret_access_key}; AWS_ACCESS_KEY_ID=${access_key_id}; AWS_SESSION_TOKEN=${session_token}.После того, как эти переменные были экспортированы, вы можете запустить aws sts get-caller-identity, и это должно вернуться, показывая, что вы находитесь на роли, которую вы подготовили в производственном процессе.Теперь вы сможете синхронизировать файлы с локальной системой, и как только это будет сделано, удалите ключи aws, которые мы установили как переменные env, а затем скопируйте файлы из экземпляра ec2 в корзину в dev.Обратите внимание, что здесь есть два шага, чтобы скопировать их?это может раздражать - посмотрите метод 2, как этого избежать:
Метод 2: Обновите политику корзины prod, чтобы доверять учетной записи dev - это будет означать, что вы можете получить доступ к корзине prod из devи сделайте синхронизацию от сегмента к циклу / cp.
Я настоятельно рекомендую вам использовать этот подход, поскольку это будет означать, что вы можете копировать напрямую между сегментами без необходимости синхронизации с локальной файловой системой.
Для этого вам понадобитсяобновить политику сегмента в рабочем блоке, чтобы иметь блок принципалов, который доверяет идентификатору учетной записи AWS для dev.Примером этого может быть то, что вы обновляете свою политику bud prod, чтобы она выглядела примерно так:

ПРИМЕЧАНИЕ: предоставление s3: * неверно, и предоставление полного доступа к учетной записи не рекомендуется, так как любой пользователь с правамиПрава доступа s3 теперь могут получить доступ к этому сегменту, но для простоты я оставлю это здесь:

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "Example permissions",
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::DEV_ACC_ID:root"
         },
         "Action": [
            "s3:*"
         ],
         "Resource": [
            "arn:aws:s3:::PROD_BUCKET_NAME",
            "arn:aws:s3:::PROD_BUCKET_NAME/*"
         ]
      }
   ]
}

После того, как вы это сделаете, в учетной записи dev прикрепите политикув вашем основном посте к роли экземпляра dev ec2 (той, которая предоставляет доступ s3).Теперь, когда вы подключаетесь к экземпляру dev, вам не нужно экспортировать какие-либо переменные окружения, вы можете просто запустить aws s3 ls s3://prodbucket, и он должен отобразить список файлов.Вы можете синхронизировать файлы между двумя сегментами, используя aws s3 sync s3://prodbucket s3://devbucket --acl bucket-owner-full-control, и это должно скопировать все файлы из prod в dev, а также обновить ACL каждого файла так, чтобы dev владел ими (то есть у вас есть полный доступ кфайлы в dev).

1 голос
/ 28 марта 2019

Вам необходимо принять роль в производственном аккаунте из учетной записи dev. Позвоните sts:AssumeRole, а затем используйте возвращенные учетные данные для доступа к корзине.

Вы также можете добавить политику корзины, которая позволяет учетной записи dev читать из учетной записи prod. В этом случае вам не понадобится роль кросс-аккаунта в аккаунте prod.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...