【问题标题】:access denied error when retrieving temporary credentials from aws with boto3使用 boto3 从 aws 检索临时凭证时访问被拒绝错误
【发布时间】:2021-01-16 12:07:03
【问题描述】:

我正在尝试使用 boto3 从 AWS 获取一组临时凭证,然后使用 this example

import boto3
from botocore.errorfactory import ClientError

# create an STS client object that represents a live connection to the
# STS service
sts_client = boto3.client('sts')

# Call the assume_role method of the STSConnection object and pass the role
# ARN and a role session name
assumed_role_object = sts_client.assume_role(
    RoleArn="aws:iam::123456789:role/Upload_Data_To_S3",
    RoleSessionName="iam-s3-upload"
)

# From the response that contains the assumed role, get the temporary
# credentials that can be used to make subsequent API calls
credentials = assumed_role_object['Credentials']

# Use the temporary credentials that AssumeRole returns to make a
# connection to Amazon S3
s3_resource = boto3.resource(
    's3',
    aws_access_key_id=credentials['AccessKeyId'],
    aws_secret_access_key=credentials['SecretAccessKey'],
    aws_session_token=credentials['SessionToken'],
)

我收到AccessDenied 错误,上下文如下:

Exception has occurred: ClientError
An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::123456789:user/Yury is not authorized to perform: sts:AssumeRole on resource: aws:iam::123456789:role/Upload_Data_To_S3
  File "/home/ystanev/git-projects/ap_renewables/HighSpeed/s3-data-upload/s3_upload.py", line 18, in <module>
    RoleSessionName="iam-s3-upload"

我的帐号和角色上的帐号匹配,因此我不确定为什么我不能在自己的帐户下担任角色。我已经检查了 AWS 控制台下的 IAM 权限,我的帐户已附加到 IAMFullAccess 组。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:*",
                "organizations:DescribeAccount",
                "organizations:DescribeOrganization",
                "organizations:DescribeOrganizationalUnit",
                "organizations:DescribePolicy",
                "organizations:ListChildren",
                "organizations:ListParents",
                "organizations:ListPoliciesForTarget",
                "organizations:ListRoots",
                "organizations:ListPolicies",
                "organizations:ListTargetsForPolicy"
            ],
            "Resource": "*"
        }
    ]
}

我检查了knowledge centre,但我不确定这是否适用于我的情况,因为 IAM 角色在我的帐户下。

我如何检查我是否有权担任该角色,如果我没有将其设置为允许。

谢谢,感谢您的帮助。

【问题讨论】:

  • IAM 角色是否具有允许您的 IAM 用户代入该角色的信任关系?
  • 另外,请了解为了能够担任 IAM 角色,您首先需要 IAM 凭证,以便您可以调用 sts:AssumeRole。通常,这些是权限较低的凭据(甚至可能仅允许担任指定角色)。

标签: amazon-web-services amazon-s3 boto3 amazon-iam


【解决方案1】:

您的用户需要sts:AssumeRole 权限。我在你的政策中没有看到这一点。然后正如评论所示,您需要确保您所承担的角色的信任关系允许您的用户的帐号承担它。信任政策最终看起来像:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<account number of the role>:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {}
    }
  ]
}

最佳实践是只允许您的用户的特定委托人 ARN 担任信任关系中的角色,然后在附加到您的用户的策略中,您将明确列出可以通过 sts:AssumeRole 担任的角色,而不是允许* 访问。

【讨论】:

  • 我如何才能真正检查信任策略?
  • 您可以在控制台中单击您的角色,然后单击“信任关系”选项卡,然后单击“编辑信任关系”按钮
  • 我已经修改了我的角色 trust policy 以作为您的示例,但我不确定“AWS”中的参数是否正确
  • 是的,看起来不错。为什么除此之外你还和 s3 有信任关系?
  • 我不知道,它已经在那里了,角色的权限设置为 AmazonS3FullAccess,因为我需要能够读取/写入存储桶。
猜你喜欢
  • 2016-02-19
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
相关资源
最近更新 更多