AWS AssumeRole授权无效

Dav*_*ave 19 php amazon-web-services

我试图在我的PHP程序中使用AWS sts调用AssumeRole函数,因为我想创建临时凭证以允许用户为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');
Run Code Online (Sandbox Code Playgroud)

但是,我不断收到以下错误:

用户arn:aws:iam :: 123456789012:用户/ TVMUser无权执行:资源上的sts:AssumeRole:arn:aws:iam :: 123456789012:role/createPic

以下是我的AWS控制台上用户TVMUser的权限政策:

      {
  "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"

 }
]
}
Run Code Online (Sandbox Code Playgroud)

以下是我对角色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"
}
]
}
Run Code Online (Sandbox Code Playgroud)

现在有人在我的AWS政策声明和AWS上设置我所遗漏的所以我没有收到错误:用户arn:aws:iam :: 123456789012:用户/ TVMUser无权执行:sts:AssumeRole on resource:阿尔恩:AWS:IAM :: 123456789012:角色/ createPic?

我错过了什么吗?

jtb*_*lin 46

您还需要编辑角色的信任关系,以允许该帐户(即使它是相同的)承担该角色.

  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"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我不得不添加具有正确帐号的"AWS"主体,ec2.amazonaws.com服务已经存在.

在我完成之后,我能够毫无问题地承担这个角色.几个小时就把我想出来了,希望能帮助别人.

  • 这是一个巨大的帮助,谢谢.对于任何感兴趣的人,这都记录在案[这里](http://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-sharing-logs-third-party.html).不清楚的是,即使对于拥有该角色的帐户,也必须这样做. (2认同)
  • 伙计,你是救命稻草。花了我几个小时,无法弄清楚为什么我被拒绝了。 (2认同)

小智 6

我遇到了同样的错误,花了几个小时试图通过权限和信任关系修复它……但这不是我的问题。

我正在学习本教程,并按照指定在美国西部(俄勒冈)部署了集群。

为了让它工作,我需要在这里激活这个区域的 STS 。

在此处输入图片说明