Доступ к нескольким учетным записям для AWS учетных записей с использованием Direct Connect - PullRequest
0 голосов
/ 31 января 2020

Я работаю с AWS уже несколько лет, но я не очень силен в некоторых передовых сетевых концепциях.

Итак, у нас есть несколько AWS учетных записей. Ни один из них не имеет доступа publi c inte rnet, но мы используем Direct Connect для подключения к Premie к AWS.

У меня есть корзина S3 в учетной записи A. Я создал пользователя IAM в Учетная запись A вместе с секретным ключом доступа и предоставила этому пользователю IAM разрешение s3: PutObject для корзины S3.

Я пишу простой сценарий Python, чтобы вывести список объектов в этой корзине из-за предварительной установки. работает, как и ожидалось.

Затем я выполняю тот же сценарий Python на экземпляре EC2, запущенном в учетной записи B, я получаю "botocore.exceptions.ClientError: Произошла ошибка (AccessDenied) при вызове Операция ListObjects: доступ запрещен ".

Нужно ли создавать конечную точку VP C для S3 в учетной записи B? Входит ли здесь роль кросс-аккаунта IAM?

1 Ответ

1 голос
/ 01 февраля 2020

Ваша ситуация:

  • У вас есть Amazon S3 Bucket-A в Account-A
  • У вас есть пользователь IAM (User-A) в Account-A
  • У вас есть экземпляр Amazon EC2, работающий в Account-B
  • Из этого экземпляра EC2 вы получите sh для доступа к Bucket-A
  • Также кажется, что у вас есть средство для экземпляра EC2 для доступа к конечным точкам Amazon S3 для выполнения вызовов API

Предполагается, что экземпляр может достичь Amazon S3 (что выглядит так, поскольку сообщение об ошибке относится к разрешениям, которые могли бы появиться из S3) существует два способа аутентификации для доступа к Bucket-A:

Вариант 1. Использование пользователя IAM из учетной записи-A

при выполнении вызова от экземпляра EC2 до Bucket-A используйте учетные данные IAM, созданные в Bucket-A. Неважно, что запрос исходит от экземпляра Amazon EC2 в Account-B. На самом деле, Amazon S3 даже не знает этого. Вызов API может поступить из в любом месте Inte rnet (включая ваш домашний компьютер или мобильный телефон). Что важно, так это набор учетных данных, предоставляемых при совершении вызова.

Если вы используете AWS интерфейс командной строки (CLI) для выполнения вызова, то вы можете сохранить User-A учетные данные в качестве профиля, используя aws configure --profile user_a (или любое имя), затем введите учетные данные от пользователя IAM в Account-A. Затем получите доступ к Amazon S3 с помощью aws s3 ls --profile user_a. Использование профиля, подобного этому, позволяет переключаться между учетными данными.

Вариант 2. Использование политики Bucket

Amazon S3 также имеет возможность указать политику Bucket для ведро, которое может предоставить доступ к ведру. Таким образом, если экземпляр EC2 использует учетные данные из Account-B, вы можете добавить политику корзины, которая предоставляет доступ из этих Account-B учетных данных.

Предположим, что экземпляр Amazon EC2 был запущен с ролью IAM под названием role-b, тогда вы можете использовать Bucket Policy, например:

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<Account-B>:role/role-b"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucket-a/*"
        }
    ]
}

Отказ от ответственности: Все вышеперечисленное предполагает, что у вас нет странных политик на вашем VP C Конечные точки / Точки доступа Amazon S3 или другие VPC соединяются с конечными точками Amazon S3.

...