如何在 java 中禁用 AWS 临时安全凭证的权限?
Posted
技术标签:
【中文标题】如何在 java 中禁用 AWS 临时安全凭证的权限?【英文标题】:How to Disable permissions for AWS temporary security credentials in java? 【发布时间】:2021-02-02 14:51:44 【问题描述】:我正在尝试使用 STS 删除对临时生成的会话令牌的访问权限。
但收到以下错误:
线程“main”com.amazonaws.services.securitytoken.model.MalformedPolicyDocumentException 中的异常:策略文档不应指定主体。 (服务:AWSSecurityTokenService;状态代码:400;错误代码:MalformedPolicyDocument;请求 ID:c563c2c1-62a8-478e-98a3-f6153ee8df03;代理:null)
AssumeRoleRequest roleRequest =
new AssumeRoleRequest()
.withRoleArn(ROLE_ARN)
.withTags(tags)
.withRoleSessionName(ROLE_SESSION_NAME);
roleRequest.setDurationSeconds(60 * 15);
roleRequest.withPolicy(**INVALIDATE_POLICY**);
AssumeRoleResult roleResponse = stsClient.assumeRole(roleRequest);
根据文档生成的策略:
https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_disable-perms.html
"Version": "2012-10-17",
"Statement":
"Principal":
"AWS": "arn:aws:sts::ACCOUNT-ID-WITHOUT-HYPHENS:assumed-Role/Mary"
,
"Effect": "Deny",
"Action": "s3:*",
"Resource": "arn:aws:s3:::EXAMPLE-BUCKET"
link to the session policy reference
【问题讨论】:
【参考方案1】:该文档指的是基于资源的策略(例如 S3 中的存储桶策略),而您正试图将该策略附加到 IAM 角色。
将策略附加到 IAM 实体(用户、组、角色)时,无需指定 Principal
,因为该策略仅适用于该策略所附加到的实体。
【讨论】:
感谢您的指正。有什么方法可以禁用对特定假定角色会话的访问如果我有如下 ARN:arn:aws:sts::594457685993:assumed-role/s3_full_access/tarun 任何拥有仍在有效期内的假定凭据的人仍然可以使用该角色的权限。一种选择是从角色中删除权限,这也会从他们假定的凭据中删除权限。这也可以基于发布安全凭证的时间来完成。我认为您的示例来自匹配的文档页面:Revoking IAM role temporary security credentials 似乎符合上述要求,但此拒绝策略适用于指定角色的所有用户,而不仅仅是控制台会话持续时间较长的用户。当使用基于身份的策略时,AWS 似乎不支持使用引用的角色会话名称撤销特定的假定角色会话。 正确 - 这不能在角色本身内完成(他们拥有权限或没有)。但是,可以按照您从文档中复制的示例在特定的资源策略(例如 S3 存储桶策略)中完成。 感谢您提供的信息。如果某些功能可用于通过 AccessKeyId 撤销临时会话凭据,那将很有帮助。以上是关于如何在 java 中禁用 AWS 临时安全凭证的权限?的主要内容,如果未能解决你的问题,请参考以下文章
python AWS:从EC2实例元数据中获取临时凭证,并使用它来访问AWS资源
sh 如果您的AWS密钥对受MFA要求的限制,请按图所示运行此脚本以联系STS并将临时凭证放入环境中
更改 IAM 用户密钥时如何更新 Elastic Beanstalk 环境变量中的 AWS 凭证?
寻求使用 AWS C++ SDK 实现 get-credentials-for-identity 的示例,并且它需要 get-id 输入以用于临时 AWS 凭证