Как использовать Apache Camel для копирования файлов с S3, расположенных в кросс-аккаунте

У меня есть требование скопировать файлы из/в s3, расположенные в другой учетной записи aws, с помощью Apache Camel.

Например, я запускаю Camel в учетной записи A, а S3 присутствует в учетной записи B. Я создал роль перекрестной учетной записи для доступа к S3 из учетной записи A.

Первоначально я создал s3Client с помощью STS и установил его в реестре верблюдов для доступа к S3 из учетной записи B. Поскольку это временные учетные данные, срок их действия может истечь в любое время до завершения задания копирования. В таком случае что мне делать? Есть ли способ обновить s3-клиент в реестре верблюдов во время выполнения маршрута?


person Bharani    schedule 09.07.2018    source источник


Ответы (1)


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 и использовать эти учетные данные для доступа к ресурсам из перекрестной учетной записи (в этом случае мы можем получить доступ к S3 из учетной записи B).

Поскольку эти учетные данные могут истечь через определенное время, нам нужно найти способ их обновить. AWS предоставляет API STSAssumeRoleSessionCredentialsProvider, который автоматически обновляет учетные данные. ниже приведен фрагмент кода для этого

   Builder builder = new STSAssumeRoleSessionCredentialsProvider.Builder(roleArn, roleSession).withRoleSessionDurationSeconds(900);
    return AmazonS3ClientBuilder.standard()
    .withCredentials(builder.build())
    .withRegion(region)
    .build();
person Bharani    schedule 13.07.2018