Разрешение aws группы iam в доступе к другой учетной записи

У меня есть система с двумя учетными записями AWS, и я хочу, чтобы группа IAM в учетной записи 2 имела доступ к корзине в учетной записи 1.

Учетная запись 1 имеет большую базу данных автомобилей и корзину S3 с файлами для каждой машины.

Учетная запись 2 осуществляет связь (SNS/SQS) с множеством физических машин, каждая из которых имеет своего собственного пользователя IAM, но все они являются членами группы robots.

Я хочу, чтобы машины с пользователями IAM в учетной записи 2 имели доступ к файлам в корзине S3 в учетной записи 1.

Но, судя по всему, группу нельзя использовать в качестве принципала. Какие еще варианты у меня есть, если мне нужна простая настройка, при которой мне не нужно обновлять политику корзины в учетной записи 1 каждый раз, когда пользователь IAM добавляется в группу роботов в учетной записи 2?

Это политика, которую я пытаюсь применить к своему ведру:

      {
  "Id": "Policy1683211206707",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1683211201070",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::company-vehicle-configurations-test/*",
      "Principal": {
        "AWS": [
          "arn:aws:iam::1234567890:group/robots-group"
        ]
      }
    }
  ]
}

И результат:

          "errorType": "MalformedPolicy",
    "errorMessage": "Invalid principal in policy",

2 ответа

В политике корзины вы можете разрешить субъекту учетной записи Account2. Это позволяет любому пользователю, роли или группе в Account2 взаимодействовать с сегментом, только если их политики IAM разрешают такой доступ.

По сути, это делегирует дальнейшее управление доступом политикам IAM, прикрепленным к пользователям, группам и ролям Account2. По сути, это то, что вам нужно, поскольку вы не хотите, чтобы учетная запись Account1 владела разрешениями группы или чтобы вам не приходилось перечислять пользователей учетной записи 1, которым разрешен доступ к корзине.

Вы правы, группы не являются участниками, и вы не можете назначать им разрешения. Однако вы можете назначить разрешения тегам.

  1. Прикрепите политику ко всем участникам в Account2, которым необходим доступ к корзине S3, которая разрешает им доступ:

            {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": [
            "s3:GetObject",
            "s3:PutObject"
          ],
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::company-vehicle-configurations-test/*"     }
      ]
    }
    

    Одного этого недостаточно, поскольку Bucket находится в другой учетной записи, и администратор одной учетной записи не может произвольно предоставлять доступ к ресурсам в другой учетной записи.

  2. Отметьте всех участников в Account2, которым вы хотите предоставить доступ к сегменту S3. В своем примере я собираюсь использовать «s3access: true», но вы можете использовать все, что захотите.

  3. Поместите политику сегмента в свой сегмент S3, которая разрешает доступ всем участникам в Account2, имеющим тег «s3access: true»:

            {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": [
            "s3:GetObject",
            "s3:PutObject"
          ],
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::company-vehicle-configurations-test/*",
          "Principal": {
            "AWS": [
              "arn:aws:iam::1234567890:root"
            ]
          },
          "Condition": {
            "StringEquals": {
              "aws:PrincipalTag/s3access": "true"
            }
          }
        }
      ]
    }
    

Обратите внимание, что разрешения на использование тегов и тегов в этом ответе не обязательны для работы; без них этот ответ идентичен ответу erik258. Если вы не доверяете администраторам учетной записи2, то запрашивать тегирование бессмысленно: ненадежный администратор может передать требуемый тег любому принципалу, который пожелает. Однако если вы также являетесь администратором учетной записи 2 или доверяете этому администратору, то использование тегов, как описано здесь, может быть способом эмулировать предоставление разрешений группе, а не всем участникам в учетной записи 2.

Другие вопросы по тегам