как создать токен только для чтения и только для записи для определенного ресурса для файла в s3 с помощью AWS STS

Мне нужно сгенерировать токены только для чтения и записать только токены для файла в S3.

Что я пробовал до сих пор:

  1. создать роль IAM с доступом для чтения и записи в указанную корзину
  2. создать клиента STS
  3. предположим, что роль IAM была создана на шаге 1 клиентом STS.
  4. сгенерировать учетные данные с помощью клиента sts

Что это значит

  1. позволяет пользователю получить доступ к файлу в S3 с токеном
  2. но этот доступ не ограничивается только чтением или только записью
  3. также, если у роли IAM есть доступ к большему количеству сегментов, токен будет обращаться ко всем сегментам.

Создать клиента STS

AWSSecurityTokenServiceClient sts_client = (AWSSecurityTokenServiceClient) AWSSecurityTokenServiceClientBuilder.standard()
                .withRegion(Regions.DEFAULT_REGION).build();

Создать запрос на роль

AssumeRoleRequest assumeRoleRequest = new AssumeRoleRequest()
                .withRoleArn("arn:aws:iam::123456789123:role/iam-role-name")
                .withDurationSeconds(7200)
                .withRoleSessionName("session-role-"+System.currentTimeMillis());

Создать запрос токена

GetSessionTokenRequest session_token_request = new GetSessionTokenRequest();

Создать токены

GetSessionTokenResult session_token_result = sts_client.getSessionToken(session_token_request);

Создать учетные данные

Credentials session_creds = session_token_result.getCredentials();

Создайте базовые учетные данные

BasicSessionCredentials sessionCredentials = new BasicSessionCredentials(
            session_creds.getAccessKeyId(),
            session_creds.getSecretAccessKey(),
            session_creds.getSessionToken());

ожидание

  1. иметь возможность генерировать токены только для чтения и только для записи
  2. иметь возможность генерировать токены для конкретных путей
  3. токен должен быть ограничен только указанным ресурсом, а не всеми сегментами, прикрепленными к роли IAM

person letsStudyJava    schedule 22.07.2019    source источник
comment
Что вы имеете в виду под токенами только для чтения и только для записи? Не могли бы вы быть более конкретными, включая пример? Вы знакомы с предварительно подписанными URL-адресами? Если да, то почему они не соответствуют вашим потребностям?   -  person John Rotenstein    schedule 23.07.2019


Ответы (2)


be able to generate read only and write only tokens

Вам необходимо определить разные роли только для чтения и только для записи. ИМХО вы не можете создать свой вариант использования только с одной ролью.

be able to generate path specific tokens

Роль может включать ссылку на конкретный ключ S3 (имя файла), например:



{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:Get*", "s3:List*"],
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/mypath/myfile.txt"
      ]
    }
  ]
}

person Sébastien Stormacq    schedule 22.07.2019
comment
на самом деле вы можете, используя встроенные политики, прикрепленные к клиенту STS после принятия роли, который затем находит пересечение предполагаемой роли и примененной встроенной политики - person Hussain Akhtar Wahid 'Ghouri'; 28.07.2019

Я нашел решение этого.

  1. сделать клиента STS и взять на себя данную роль с разрешениями на все необходимые сегменты
  2. создайте линейную политику и подключитесь к клиенту STS перед получением токенов
  3. сделать вызов getSessionToken с помощью клиента STS

что делает:

  1. предоставить доступ к определенному ресурсу, ограниченному путем, указанным в линейной политике
  2. также он ограничивает доступ для чтения или записи, как указано в линейной политике
person letsStudyJava    schedule 28.07.2019