【发布时间】: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