从我的 Jenkins 文件中,我尝试使用假设角色策略连接到我的 aws 帐户。这是代码:
ROLE_ARN="arn:aws:iam::202533537610:role/terraform-jenkinsrole"
SESSION_NAME="terraformsession"
# Assume the role
CREDENTIALS=$(aws sts assume-role --role-arn "$ROLE_ARN" --role-session-name "$SESSION_NAME")
# Extract and export the credentials
export AWS_ACCESS_KEY_ID=$(echo $CREDENTIALS | jq -r .Credentials.AccessKeyId)
export AWS_SECRET_ACCESS_KEY=$(echo $CREDENTIALS | jq -r .Credentials.SecretAccessKey)
export AWS_SESSION_TOKEN=$(echo $CREDENTIALS | jq -r .Credentials.SessionToken)
该角色的信任关系如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::202533537610:role/terraform-jenkinsrole"
},
"Action": "sts:AssumeRole"
}
]
}
此角色附加的 2 项策略是:
Policy 1: AdministratorAccess
Policy 2:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource":
"arn:aws:iam::202533537610:role/terraform-jenkinsrole"
}
]
}
当我运行詹金斯管道时,我收到此错误:
++ aws sts assume-role --role-arn arn:aws:iam::202533537610:role/terraform-jenkinsrole --role-session-name terraformsession
Unable to locate credentials. You can configure credentials by running "aws configure".
此 IAM 角色具有 ec2 服务的管理员访问权限。为什么无法使用 CLI 命令获取临时凭证?
aws sts assume-role --role-arn "$ROLE_ARN" --role-session-name "$SESSION_NAME"
要调用
aws sts assume-role
,您需要一组 AWS 凭证,以便 AWS 知道您是谁并可以验证您是否有权担任该角色。这样,您将被允许担任该角色,但我不会被允许,因为我没有任何允许担任该角色的凭据。
鉴于调用
Unable to locate credentials
时显示 aws sts assume-role
,AWS CLI 似乎无法找到要使用的凭证。
如果代码在 Amazon EC2 实例上运行,则通常通过向 EC2 实例分配 IAM 角色来提供权限。如果您在自己的计算机上运行代码,则需要通过配置文件提供 IAM 用户凭证。您可以使用
aws configure
命令创建配置文件。