Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
如何使用 AWS CLI 进行 AssumeRole 调用和存储临时用户凭证?
我想使用 AWS 命令行界面 (AWS CLI) 从 AssumeRoleWithSAML、AssumeRole 和 AssumeRoleWithWebIdentity 获取凭证。
解决方法
**注意:**如果您在运行 AWS CLI 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
要从 AssumeRoleWithSAML、AssumeRole 和 AssumeRoleWithWebIdentity 获取凭证,请调用 API 并将输出保存到文本文件中。然后,使用输出通过 AWS CLI 调用 API 命令。
**注意:**AssumeRoleWithSAML、AssumeRole 和 AssumeRoleWithWebIdentity 命令需要参数 role-arn 和 role-session-name。
通过 SAML 身份验证获取凭证
**要求:**您必须拥有来自身份提供者 (IdP) 的有效 SAML 2.0 响应,以及信任该 IdP 的 AWS Identity and Access Management (IAM) 角色。
完成以下步骤:
-
找到日志,然后打开 SAML 日志文件。
-
复制完整的 SAML 响应。
-
将 SAML 响应粘贴到本地目录中名为 samlresponse.log 的文件中。
-
运行以下 assume-role-with-saml 命令,以调用 AWS Security Token Service (AWS STS) 令牌:
aws sts assume-role-with-saml --role-arn arn:aws:iam::444455556666:role/IAM_ROLE --principal-arn arn:aws:iam::444455556666:saml-provider/SAML_PROVIDER --saml-assertion file://samlresponse.log awk -F: ' BEGIN { RS = "[,{}]" ; print "[PROFILENAME]"} /:/{ gsub(/"/, "", $2) } /AccessKeyId/{ print "aws_access_key_id = " $2 } /SecretAccessKey/{ print "aws_secret_access_key = " $2 } /SessionToken/{ print "aws_session_token = " $2 } ' >> ~/.aws/credentials注意:请将主体 ARN 替换为您的 SAML 提供商的 Amazon 资源名称 (ARN)。此示例使用的是 awk,它与基于 Linux 的发行版兼容。运行 assume-role-with-saml 命令时,会将凭证保存在 ~/.aws/credentials 文件内的一个配置文件中。
-
(可选)运行以下命令以备份凭证:
cp -a ~/.aws/credentials ~/.aws/credentials.bak. -
运行以下 describe-instances 命令以调用用户凭证:
aws ec2 describe-instances --profile PROFILENAME**注意:**请将 PROFILENAME 替换为您的配置文件名称。
未保存到文件的输出示例:{ "SubjectType": "persistent", "AssumedRoleUser": { "AssumedRoleId": "111122223333:example@corp.example.com", "Arn": "arn:aws:sts::44445555666:assumed-role/ROLE_ID/example@corp.example.com" }, "Audience": "https://signin.aws.amazon.com/saml", "NameQualifier": "RANDOM_GENERATED_STRING", "Credentials": { "SecretAccessKey": "SECRET_ACCESS_KEY", "SessionToken": "TOKEN_KEY", "Expiration": "2015-05-11T20:00:49Z", "AccessKeyId": "ACCESS_KEY_ID" }, "Subject": "CORP\\\\EXAMPLE", "Issuer": "http://SERVER_NAME.corp.example.com/adfs/services/trust" }已保存到凭证文件的输出示例:
aws_access_key_id = ACCESS_KEY_ID aws_session_token = SESSION_TOKEN aws_secret_access_key = SECRET_ACCESS_KEY [PROFILENAME]
通过 AssumeRole 获取凭证
**重要事项:**您的 IAM 凭证必须信任您代入的 IAM 角色。
完成以下步骤:
-
运行以下 get-caller-identity 命令以验证响应:
aws sts get-caller-identity**注意:**如果您未收到响应,请检查 .aws/credentials 文件是否存储了有效的 IAM 访问密钥或密钥。
-
运行以下 assume-role 命令:
aws sts assume-role --role-arn arn:aws:iam::123456789012:role/ExampleRole --role-session-name ExampleSession示例响应:
{ "AssumedRoleUser": { "AssumedRoleId": "AROAZRG5BQ2L7OB87N3RE:ExampleSession", "Arn": "arn:aws:sts::123456789012:assumed-role/RoleA/ExampleSession" }, "Credentials": { "SecretAccessKey": "JCNFKY7XCUwHWTKcQhmmFokpjLetCmNLZ7pg9SJe", "SessionToken": "FwoGZXIvYXdzEL7//////////wEaDNoBLBJUNYWKaHXZXCKvARBGJ4CqOs+p2JR2a7Euni0d0XuSs31ZA/1QqpX6Spfuz2WAvHCyqwbE3+oxyvyqYlO8dTJwp56YCFCJ6K4Prt9pMeZU9R5NGBJHvRbXXKfxp+jktLc/ItrAfn4GMXWpoyJKZrY7hzv3MASomlIcwSD/RqWIBS1vAoo1UAxwjy29jai0OAPQ51LAnuFKeabgmllyP5Y2gu488P19D7ikfgQtmBtH5I/Q8+5IEn4qMwYo1bq/8wUyLe1b3+mQwhq+zEz4TSyHD8HBXd9W3KYcB53MIotwiJNS+m0P5ZlZnpcJm3JwtA==", "Expiration": "2020-03-16T21:11:01Z", "AccessKeyId": "ASIAZRG8BQ4K2EBXGR42" } } -
从响应中导出 AccessKeyId、SecretAccessKey 和 SessionToken,以创建环境变量:
export AWS_ACCESS_KEY_ID=ASIAZRG8BQ4K2EBXGR42 export AWS_SECRET_ACCESS_KEY=JCNFKY7XCUwHWTKcQhmmFokpjLetCmNLZ7pg9SJe export AWS_SESSION_TOKEN=FwoGZXIvYXdzEL7//////////wEaDNoBLBJUNYWKaHXZXCKvARBGJ4CqOs+p2JR2a7Euni0d0XuSs31ZA/1QqpX6Spfuz2WAvHCyqwbE3+oxyvyqYlO8dTJwp56YCFCJ6K4Prt9pMeZU9R5NGBJHvRbXXKfxp+jktLc/ItrAfn4GMXWpoyJKZrY7hzv3MASomlIcwSD/RqWIBS1vAoo1UAxwjy29jai0OAPQ51LAnuFKeabgmllyP5Y2gu488P19D7ikfgQtmBtH5I/Q8+5IEn4qMwYo1bq/8wUyLe1b3+mQwhq+zEz4TSyHD8HBXd9W3KYcB53MIotwiJNS+m0P5ZlZnpcJm3JwtA== -
运行以下 get-caller-identity 以验证身份:
aws sts get-caller-identity输出将显示 assume-role 调用返回的身份凭证。
通过 AssumeRoleWithWebIdentity 获取凭证
**要求:**您必须拥有有效的 OAuth 2.0 访问令牌、OpenID Connect 令牌和信任 IdP 的 IAM 角色。
-
运行以下 assume-role 命令:
aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789012:role/FederatedWebIdentityRole --role-session-name ExampleSession --web-identity-token Atza%7CIQEBLjAsAhRFiXuWpUXuRvQ9PZL3GMFcYevydwIUFAHZwXZXXXXXXXXJnrulxKDHwy87oGKPznh0D6bEQZTSCzyoCtL_8S07pLpr0zMbn6w1lfVZKNTBdDansFBmtGnIsIapjI6xKR02Yc_2bQ8LZbUXSGm6Ry6_BG7PrtLZtj_dfCTj92xNGed-CrKqjG7nPBjNIL016GGvuS5gSvPRUxWES3VYfm1wl7WTI7jn-Pcb6M-buCgHhFOzTQxod27L9CqnOLio7N3gZAGpsp6n1-AJBOCJckcyXe2c6uD0srOJeZlKUm2eTDVMf8IehDVI0r1QOnTV6KzzAI3OY87Vd_cVMQ示例响应:
{ "SubjectFromWebIdentityToken": "amzn1.account.AF6RHO7KZU5XRVQJGXK6HB56KR2A" "Audience": "client.5498841531868486423.1548@apps.example.com", "AssumedRoleUser": { "Arn": "arn:aws:sts::123456789012:assumed-role/FederatedWebIdentityRole/ExampleSession", "AssumedRoleId": "AROACLKWSDQRAOEXAMPLE:ExampleSession" } "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY", "SessionToken": "AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtpZ3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE", "Expiration": "2020-05-19T18:06:10+00:00" }, "Provider": "www.amazon.com" -
将 AccessKeyId、SecretAccessKey 和 SessionToken 保存在 .aws/credentials 文件中:
[ExampleRoleProfile] aws_access_key_id=AKIAIOSFODNN7EXAMPLE aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY aws_session_token=AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtpZ3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE -
运行 get-caller-identity 命令:
aws sts get-caller-identity --profile ExampleRoleProfileassume-role 调用返回的身份凭证的输出示例:
{ "UserId": "AROACLKWSDQRAOEXAMPLE:ExampleSession", "Account": "123456789012", "Arn": "arn:aws:sts::123456789012:assumed-role/FederatedWebIdentityRole/ExampleSession" }
相关信息
如何使用 AD FS 向我的 Active Directory 用户授予对 API 或 AWS CLI 的访问权限?
- 语言
- 中文 (简体)

