AWS AssumeRole - Пользователь не авторизован для выполнения: sts: AssumeRole на ресурсе

avatar
Dave
22 февраля 2014 в 16:09
33609
3
26

Я пытаюсь вызвать функцию AssumeRole, используя AWS sts в моей программе PHP, поскольку я хочу создать временные учетные данные, чтобы позволить пользователю создать объект для корзины AWS.

Ниже приводится функция, которую я вызываю в PHP:

  $sts = StsClient::factory(array(
                'key'    => 'XXXXXXXXXXXXXX',
                'secret' => 'XXXXXXXXXXXXXXXX',
                'token.ttd' => $timetodie
            ));             
  $bucket = "mybucket";             
            $result1 = $sts->assumeRole(array(          
                'RoleArn' => 'arn:aws:iam::123456789012:role/createPic',
                'RoleSessionName' => 'mytest',
                'Policy' => json_encode(array(
                        'Statement' => array(
                             array(
                                  'Sid' => 'Deny attributes',
                                  'Action' => array(
                                  's3:deleteObject', 
                                  's3:deleteBucket'
                                  ),
                                  'Effect' => 'Deny',
                                  'Resource' => array(
                                  "arn:aws:s3:::{$bucket}",
                                  "arn:aws:s3:::{$bucket}/AWSLogs/*"
                                  ),
                                  'Principal' => array(
                                  'AWS' =>   "*"
                                  )
                              ) 
                          )
                      )
                  ),
                'DurationSeconds' => 3600,
             //   'ExternalId' => 'string',
            ));
            
            $credentials  = $result1->get('Credentials');

Однако я продолжаю получать следующую ошибку:

User arn:aws:iam::123456789012:user/TVMUser is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::123456789012:role/createPic

Ниже приведена моя политика разрешений для пользователя TVMUser на моей консоли AWS:

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":"ec2:RunInstances",
         "Resource":"*"
      },
      {
         "Effect":"Allow",
         "Action":"iam:PassRole",
         "Resource":"arn:aws:iam::791758789361:user/TVMUser"
      },
      {
         "Effect":"Allow",
         "Action":"sts:AssumeRole",
         "Resource":"arn:aws:iam::791758789361:role/createPic"
      }
   ]
}

Ниже приведена моя ролевая политика для роли createPic:

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":"ec2:RunInstances",
         "Resource":"*"
      },
      {
         "Effect":"Allow",
         "Action":"iam:PassRole",
         "Resource":"arn:aws:iam::791758789361:user/TVMUser"
      },
      {
         "Effect":"Allow",
         "Action":"sts:AssumeRole",
         "Resource":"arn:aws:iam::791758789361:role/createPic"
      }
   ]
}

Есть ли у кого-нибудь то, чего мне не хватает в моих заявлениях о политике AWS и настройке на AWS, чтобы я не получаю следующую ошибку?

User arn:aws:iam::123456789012:user/TVMUser is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::123456789012:role/createPic

Я что-то упускаю?

Источник
bennie j
24 февраля 2014 в 12:08
3

Я предполагаю, что ресурс в разрешении acceptRole 791758789361 является опечаткой, и вы имеете в виду 123456789012.

Ответы (3)

avatar
Thierry G.
11 октября 2017 в 15:28
7

У меня была та же ошибка, и я часами пытался исправить ее с помощью разрешений и доверительных отношений ... но это не было моей проблемой.

Я следовал этому руководству и развернул кластер на западе США (Орегон), как указано.

Чтобы он заработал, мне нужно было активировать STS для этого региона здесь.

enter image description here

avatar
kaiser douglas
16 сентября 2016 в 01:19
2

Может быть, вам стоит назначить регион sts и конечную точку:

$sts = StsClient::factory(array(
    //...      
    'region'   => 'us-west-2',                                                                                                                                                                              
    'endpoint' => 'https://sts.us-west-2.amazonaws.com', 
));
avatar
jtblin
21 ноября 2015 в 23:53
72

Вам также необходимо отредактировать доверительное отношение для роли, чтобы позволить учетной записи (даже если она такая же) взять на себя роль.

  1. откройте роль, которую вы хотите принять, в консоли
  2. щелкните вкладку «Доверительные отношения»
  3. нажмите "Изменить RelationShip"
  4. добавьте заявление для учетной записи, которую вы хотите добавить (обычно у вас будет только служба ec2 в «Надежных объектах»), например,
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/some-role"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

В этом примере мне пришлось добавить принципала «AWS» с правильным номером учетной записи, служба ec2.amazonaws.com уже была там.

После того, как я это сделал, я смог без проблем взять на себя роль. У меня ушло буквально несколько часов, чтобы понять это, надеюсь, это кому-то поможет.

Matt Cole
20 декабря 2015 в 13:30
6

Спасибо большое, это было огромным подспорьем. Для всех, кто интересуется, это задокументировано здесь. Что не ясно, так это то, что это нужно делать даже для учетной записи, которой принадлежит роль.

gkrizek
30 сентября 2016 в 03:51
2

Чувак, ты спасатель. У меня ушло несколько часов, и я не мог понять, почему мне отказывают.

jtblin
30 сентября 2016 в 10:40
1

Рад, что это помогло. Кстати, я обновил пример, чтобы использовать более ограниченную роль, чем root, что лучше с точки зрения безопасности.

SASI
11 октября 2016 в 13:19
0

Большое спасибо. Это помогло мне решить мою проблему. Нам нужно предоставить каждому пользователю в доверенных лицах, который хочет взять на себя эту роль, для выполнения операций

Emmanuel Gabriel
23 ноября 2021 в 15:58
0

Это действительно помогло!