Intereting Posts

Разрешение AWS AssumeRole не работает

Я пытаюсь вызвать функцию 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'); 

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

Пользователь arn: aws: iam :: 123456789012: пользователь / TVMUser не имеет права выполнять: sts: AssumeRole на ресурсе: 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": [ { "Action": [ "s3:Get*", "s3:List*", "s3:Put*", ], "Effect": "Allow", "Resource": "*" }, { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::123456789012:role/createPic" } ] } 

Кто-нибудь теперь то, чего я не вижу в своих инструкциях по политике AWS и настройке на AWS, поэтому я не получаю ошибку: User arn: aws: iam :: 123456789012: user / TVMUser не имеет права выполнять: sts: AssumeRole на ресурсе: ARN: AWS: РМКО :: 123456789012: роль / createPic?

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

Solutions Collecting From Web of "Разрешение AWS AssumeRole не работает"

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

  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 уже была там.

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

Возможно, вы должны назначить свой регион и конечную точку sts:

 $sts = StsClient::factory(array( //... 'region' => 'us-west-2', 'endpoint' => 'https://sts.us-west-2.amazonaws.com', )); 

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

Я следовал этому руководству, и я развернул кластер в US West (Oregon), как указано.

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

введите описание изображения здесь