在 springboot 应用程序中使用 IAM Roles Anywhere 的凭证流程

问题描述 投票:0回答:2

我有一个用例,我需要从 AWS 外部访问 SNS 主题。我们计划使用 https://aws.amazon.com/blogs/security/extend-aws-iam-roles-to-workloads-outside-of-aws-with-iam-roles-anywhere/,因为看起来是合适的人选

但是我无法让它正常工作。我按照上面提到的链接进行操作,其中 .aws/config 文件的内容是

credential_process = ./aws_signing_helper credential-process
    --certificate /path/to/certificate.pem
    --private-key /path/to/private-key.pem
    --trust-anchor-arn <TA_ARN>
    --profile-arn <PROFILE_ARN>
    --role-arn <ExampleS3WriteRole_ARN>

但是我的 Spring Boot 应用程序抛出一个错误,指出它无法获取连接到 AWS 的凭证。请帮忙

amazon-web-services spring-boot amazon-iam
2个回答
1
投票

我发现最简单的事情是为要定位的 credential_process 创建一个单独的脚本,这不是必需的,我只是发现它更容易。

因此创建一个脚本:

#! /bin/bash 
# raw_helper.sh
/path/to/aws_signing_helper credential-process \
  --certificate /path/to/cert.crt \
  --private-key /path/to/key.key \
  --trust-anchor-arn <TA_ARN> \
  --profile-arn <Roles_Anywhere_Profile_ARN> \
  --role-arn <IAM_Role_ARN>

我发现的关键是大多数地方(包括 AWS 文档)告诉您使用 ~/.aws/config 文件并在那里声明配置文件。这似乎不起作用,但是当我将配置文件添加到我的 ~/.aws/credentials 文件时,它确实起作用了。假设您已经创建了一个帮助程序脚本,它看起来像这样:

# ~/.aws/credentials
[raw_profile]
credential_process = /path/to/raw_helper.sh

0
投票

根据 AWS 建议和我之前在类似应用程序中的经验,您应该

  1. 使用参数在服务器环境或容器上创建 AWS 配置文件 - 证书、私钥、trust-anchor-arn、profile-arn、role-arn 和签名帮助程序文件位置 (此处应考虑安全选项,例如使用 K8S 密钥或其他选项)
  2. 使用 AWS SDK 从应用程序检索凭证。

如果您不使用容器,则使用配置文件创建 aws 配置文件将是一个直接的过程,然后您可以使用 sdk 来撤销凭证。 (aws 签名帮助程序文件也应上传到服务器中的路径)

Java SDK: https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/ProfileCredentialsProvider.html

Python SDK: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/core/session.html

© www.soinside.com 2019 - 2024. All rights reserved.