0

我在 fargate 集群中运行了 java 代码,我需要使用 aws sdk 从 java 代码中访问其他 aws 服务。现在我在 java 类中有硬编码的访问/秘密/令牌,它工作正常。

BasicSessionCredentials sessionCredentials = new BasicSessionCredentials(accessKey, secretAccessKey, token);

由于我在同一个 aws 帐户中运行 java 代码,所以有没有更好的方法让我不必硬编码凭据?

4

2 回答 2

1

是的,您始终可以为您的任务分配任务角色。然后,SDK 将自动找出凭据并在发出请求时使用它们。

信任策略看起来像这样:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

然后您需要指定策略文档。有了这个,SDK 将计算出重置。您可以在此处的 AWS 文档中找到更多信息:https ://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html

于 2020-11-11T19:50:57.417 回答
0

我在构建目标服务客户端时使用 DefaultAWSCredentialsProviderChain.java 让它工作。除此之外,我在附加到调用服务的角色中添加了目标服务的权限。例如 - 如果在 ECS 任务中运行的代码需要调用 SSM 服务,则将权限添加到附加到 ECS 任务的角色以对 SSM 执行操作,并使用代码而不是硬编码凭证使用下面提到的代码:

AWSSimpleSystemsManagement awsSimpleSystemsManagement = AWSSimpleSystemsManagementClient.builder()
                .withCredentials(new DefaultAWSCredentialsProviderChain());
于 2020-11-12T19:32:11.100 回答