Я пытаюсь вызвать функцию 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?
Я что-то упускаю?
Вам также нужно отредактировать отношения доверия для роли, чтобы позволить учетной записи (даже если это то же самое) взять на себя роль.
{ "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 для этого региона.