标签: aws-sts

从cli工具获取AWS账号的快捷方式?

寻找一种快速获取帐号的方法,我最初想过要使用,aws iam get-account-authorization-details --max-items 1但这样做有几个问题.有没有办法做到这一点,可能不会跨帐户起源?

amazon-web-services amazon-iam aws-cli aws-sts

85
推荐指数
4
解决办法
3万
查看次数

AWS SSO 登录凭证作为环境变量

至此登录aws login sso成功。

\n
Successully logged into Start URL: *****\n
Run Code Online (Sandbox Code Playgroud)\n

从这里我想启动我的服务,该服务需要设置以下带有 AWS 凭证的环境变量:

\n
    \n
  • AWS_ACCESS_KEY_ID
  • \n
  • AWS_SECRET_ACCESS_KEY
  • \n
  • AWS_SESSION_TOKEN
  • \n
\n

如何将这些变量提取到当前 shell 中?

\n

我目前正在使用的解决方法:

\n

我找到了一个可能适合我的解决方法:我注意到在我登录并运行后,aws sts get-caller-identity它会在目录中创建文件~/.aws,可以使用如下脚本对其进行解析:

\n
#!/usr/bin/env bash\n\nset -e\n\nAWS_ACCESS_KEY_ID=$(cat ~/.aws/cli/cache/*.json | jq '.Credentials.AccessKeyId' --raw-output)\nAWS_SECRET_ACCESS_KEY=$(cat ~/.aws/cli/cache/*.json | jq '.Credentials.SecretAccessKey' --raw-output)\nAWS_SESSION_TOKEN=$(cat ~/.aws/cli/cache/*.json | jq '.Credentials.SessionToken' --raw-output)\n\n>&2 echo "\xe2\x9c\xa8 you need to eval output of this script in your current window:"\n>&2 echo '    eval $('$0')'\n>&2 echo ""\necho "export AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}"\necho "export …
Run Code Online (Sandbox Code Playgroud)

environment-variables command-line-interface amazon-web-services aws-sts aws-sso

19
推荐指数
1
解决办法
1万
查看次数

AWS sts 在一个命令中扮演角色

要在 CLI 中担任 AWS 角色,我执行以下命令:

aws sts assume-role --role-arn arn:aws:iam::123456789123:role/myAwesomeRole --role-session-name test --region eu-central-1
Run Code Online (Sandbox Code Playgroud)

这给了我一个遵循架构的输出:

{
    "Credentials": {
        "AccessKeyId": "someAccessKeyId",
        "SecretAccessKey": "someSecretAccessKey",
        "SessionToken": "someSessionToken",
        "Expiration": "2020-08-04T06:52:13+00:00"
    },
    "AssumedRoleUser": {
        "AssumedRoleId": "idOfTheAssummedRole",
        "Arn": "theARNOfTheRoleIWantToAssume"
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我手动复制和粘贴 , 的值AccessKeyIdSecretAccessKeySessionToken在像这样的一堆导出中:

export AWS_ACCESS_KEY_ID="someAccessKeyId"                                                                                      
export AWS_SECRET_ACCESS_KEY="someSecretAccessKey"
export AWS_SESSION_TOKEN="someSessionToken"
Run Code Online (Sandbox Code Playgroud)

最终承担起这个角色。

我怎么能一次性做到这一点?我的意思是,无需手动干预将aws sts ...命令的输出复制和粘贴到exports.

amazon-web-services aws-cli aws-sts

15
推荐指数
4
解决办法
7304
查看次数

如何查明 AWS 会话多久到期?

先决条件

我有一个可与 AWS 配合使用的脚本,但不会显式处理凭证。它只是调用 AWS API,期望根据默认凭证提供者链提供凭证。事实上,调用此脚本的包装器会获取临时凭证并将其传递到环境变量(AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN)中。

问题

包装器通常会重用现有的凭据,并且仅在它们即将过期时明确要求重新进行身份验证。因此,它可能会传递剩余几分钟的凭据,这可能还不够,因为脚本执行通常需要很长时间。不幸的是,我无法控制包装器,因此我想让脚本检查在决定是否提前启动或中止之前还剩下多少时间,以防止在飞行途中失败。

AWS似乎没有提供标准方法来查询“当前会话到期之前我还有多少时间?” 如果我可以控制包装器,我也会让它在环境变量中传递到期日期。我希望这AWS_SESSION_TOKEN是一种 JWT 令牌,但不幸的是它不是,并且似乎不包含任何时间戳。

任何人都可以提出解决给定问题的其他方法吗?

amazon-web-services aws-sts aws-credentials

15
推荐指数
1
解决办法
1万
查看次数

aws sts get-session-token 因配置文件失败

我正在尝试获取会话令牌以设置环境变量,以便使用上传到 S3 但不直接支持 AWS 配置文件的工具。

aws sts get-session-token --profile myprofile
Enter MFA code for arn:aws:iam::1234567890:mfa/myid:

An error occurred (AccessDenied) when calling the GetSessionToken operation: 
Cannot call GetSessionToken with session credentials
Run Code Online (Sandbox Code Playgroud)

后续调用会跳过 MFA 检查,表明它通过了 ok。

get-session-token不带--profile参数运行可以正常工作:

$ aws sts get-session-token
{
    "Credentials": {
...
Run Code Online (Sandbox Code Playgroud)

可能出什么问题了?我什至以正确的方式解决这个问题吗?

我的相关部分~/.aws/config

[profile otherprofile]
mfa_serial=arn:aws:iam::xxx:mfa/myid
aws_access_key_id=xxx
aws_secret_access_key=xxx

[profile myprofile]
source_profile=otherprofile
region=ap-southeast-2
role_arn=arn:aws:iam::xxx:role/owner
mfa_serial=arn:aws:iam::xxx:mfa/myid
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-sts

11
推荐指数
1
解决办法
9087
查看次数

使用 IAM 角色 ID 获取 IAM 角色名称

所有 AWS IAM 角色都有关联的角色名称和角色 ID。通常看不到角色 ID,因为 AWS 控制台仅显示角色名称。在 S3 事件的 JSON 消息中,有一个 PrimaryID 值,其中包含用于执行 S3 操作的角色的角色 ID,例如"principalId":"AWS:AROAKJDKSDKF93HSA:123456789

\n\n

这份文件我们看到,

\n\n
\n

每个 IAM 实体(用户、组或角色)都有一个已定义的 aws:userid\n 变量。您将需要在存储桶策略中使用此变量\n,以将角色或用户指定为条件元素中的例外。\n 假定角色\xe2\x80\x99s aws:userId 值定义为\n UNIQUE- ROLE-ID:ROLE-SESSION-NAME(例如,\n AROAEXAMPLEID:userdefinesessionname)。

\n
\n\n

所以我们知道S3事件消息中的PrincipalId是IAM角色的角色ID。如何使用该角色 ID 来获取角色名称?我已经搜索了 IAM 和 STS 库,但没有看到任何允许我传递角色 ID 并获取角色名称的 API。STS GetCallerIdentity没有帮助,IAM GetRole仅接受角色名称作为输入。

\n\n

任何帮助将不胜感激。我只是使用S3 Events ,从S3 Event 的消息 json 中读取PrincipalID 值,从PrincipalID 中提取IAM 角色ID,并且我需要一种使用IAM 角色ID 获取IAM 角色名称的方法。

\n

amazon-s3 amazon-web-services amazon-iam aws-sts

11
推荐指数
2
解决办法
2万
查看次数

从STS API返回的AWS_SESSION_TOKEN有什么功能?

aws sts assume-role返回三个字段作为颁发的临时安全凭证。

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN

前两个字段与用户的Access Key格式相同,但第三个字段AWS_SESSION_TOKEN是临时凭证的特殊字段。

我有两个问题:

  • 如果AWS_SESSION_TOKEN要表示/编码临时有效性,为什么我们还需要前两个字段(因为过期后,我们无论如何都需要获取另一个AWS_SESSION_TOKEN)?
  • 如果我的客户端调用 STS API 两次,在从 返回的两个响应之间aws sts assume-role,AWS_ACCESS_KEY_ID 是否会相同?

amazon-web-services sts-securitytokenservice amazon-iam aws-sts

9
推荐指数
1
解决办法
1万
查看次数

AWS 临时安全凭证中的会话令牌的保密程度如何?

我想使用临时安全凭证生成预签名的 S3 URL(我的程序在 EC2 主机上运行,​​该主机具有附加了我想要的策略的 IAM 角色)。

我在文档中看到如何创建签名请求,我应该提供会话令牌作为预签名 URL 的一部分。向公众公开这是否安全?

关于如何使用临时凭证的文档说“AWS使用会话令牌来验证临时安全凭证”,但是有人可以使用临时安全凭证中的访问密钥和会话令牌(两者都在预签名的证书中可见) URL)做任何恶意的事情?

简而言之,我的问题是:AWS 临时安全凭证中的会话令牌的秘密程度如何?暴露自己有危险吗?如果我用关联的访问密钥透露它会怎么样?

提前致谢!我一直对此摸不着头脑,因为 STS 文档不太清楚这个会话令牌的秘密程度,而且我绝对希望在安全方面做正确的事情。

amazon-web-services amazon-iam aws-sts

8
推荐指数
1
解决办法
3215
查看次数

AWS:Amazon Cognito 与 STS 和 SAML

在关于 Cognito的官方 AWS文档中,在用例大纲中声明:

1.在第一步中,您的应用程序用户通过用户池登录并在成功验证后接收用户池令牌。

2.接下来,您的应用程序通过身份池将用户池令牌交换为 AWS 凭证。

3.最后,您的应用程序用户可以使用这些 AWS 凭证访问其他 AWS 服务,例如 Amazon S3 或 DynamoDB。

通过STS实现的令牌分配“AWS 凭证”的目标不是吗?

Cognito 和 STS 在授予非 AWS 用户访问 AWS 服务(例如 S3 或 EC2)的权限方面究竟有什么不同?

同一文档来源还指出 Cognito 也适用于 AWS 和第三方身份提供商(例如社交 - 例如 Facebook - 或 AD 公司)之间的身份联合。

这不是也通过 SAML 联合实现的(即首先让 AWS 和 IdP 建立基于 SAML 的信任关系?)

amazon-web-services amazon-cognito aws-sts

8
推荐指数
1
解决办法
1970
查看次数

尝试获取调用者身份时出现 InvalidClientTokenId 错误 aws

您好,我无法运行此命令 aws sts get-caller-identity

当我这样做时 sudo nano ~/.aws/credentials我只能找到这个

[default]
aws_access_key_id = my_id
aws_secret_access_key = my_secret_id
Run Code Online (Sandbox Code Playgroud)

aws configure当我执行成功的命令步骤后,aws sts get-caller-identity 我收到此错误

调用 GetCallerIdentity 操作时发生错误 (InvalidClientTokenId):请求中包含的安全令牌无效。

有什么原因可能导致这种情况吗?

amazon-web-services aws-cli aws-sts

8
推荐指数
1
解决办法
2万
查看次数