0

我需要使用 Apache Camel 从/到位于不同 aws 帐户中的 s3 复制文件。

例如,我在账户 A 中运行 Camel,而账户 B 中存在 S3。我创建了一个跨账户角色以从账户 A 访问 S3。

最初,我使用 STS 创建了一个 s3Client 并将其设置在骆驼注册表中以从帐户 B 访问 S3。由于这些是临时凭据,它们可以在完成复制作业之前的任何时间过期。在这种情况下我该怎么办?有没有办法在运行路线时更新骆驼注册表中的 s3 客户端?

4

1 回答 1

0

Apache Camel 支持使用 s3client 连接 AWS S3。由于这里的问题是从跨账户访问 S3,首先我们必须在账户 B 中创建一个角色,账户 A 作为受信任的账户。确保通过策略为该角色提供所需的 S3 访问权限。

现在在账户 A 中创建一个策略,如下所示来承担角色。

     {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Sid": "VisualEditor0",
                  "Effect": "Allow",
                  "Action": [
                      "sts:AssumeRole",
                      "sts:GetSessionToken"
                  ],
                  "Resource": "arn:aws:iam::Account_B:role/Cross-account-s3-access"
              }
          ]
      }

在账户 A 中创建一个角色并将此策略附加到新创建的角色。将此策略分配给部署骆驼(适用于任何需要跨账户访问的应用程序)的 ec2 实例。

现在我们可以通过任何 STS API 生成临时凭证,并使用这些凭证从跨账户访问资源(在这种情况下,我们可以从账户 B 访问 S3)。

由于这些凭据可能会在特定时间后过期,因此我们需要寻找一种方法来刷新它们。AWS 提供了STSAssumeRoleSessionCredentialsProvider API,可以自动刷新凭证。下面是代码片段

   Builder builder = new STSAssumeRoleSessionCredentialsProvider.Builder(roleArn, roleSession).withRoleSessionDurationSeconds(900);
    return AmazonS3ClientBuilder.standard()
    .withCredentials(builder.build())
    .withRegion(region)
    .build();
于 2018-07-13T10:52:09.137 回答