Что такое [account:caller-указанное-name] в aws: идентификатор пользователя для пользователей федерации aws

Я хотел бы спросить о 'AWS get Token Federation'.

Я хочу, чтобы кто-то, авторизованный с помощью get Federation Token, имел доступ только к папке HIS/HER NAMED AWS S3, например [bob] или [alice] и т. Д.

Вот что я сделал.

Создайте временные учетные данные, используя get Federation Token для aws:userid

    AWS.config.update({
      accessKeyId: [Removed],
      secreteAccessKey: [Removed],
      region: [Removed]
    });

    var params = {
      Name : 'bob',
      Policy : "{\"Version\": \"2012-10-17\",\"Statement\": [{\"Effect\": \"Allow\", \"Action\": [\"s3:ListBucket\"],\"Resource\": [\"arn:aws:s3:::mybucket\"]}, {\"Effect\": \"Allow\", \"Action\": [\"s3:PutObject\", \"s3:GetObject\"],\"Resource\": [\"arn:aws:s3:::mybucket/${aws:userid}/*\"]}]}",
      DurationSeconds: "129600"
    }

    var sts = new AWS.STS({apiVersion: '2011-06-15'});

    sts.getFederationToken(params, function(err, data) {
      if(err) 
        console.log(err, err.stack);
      else
        console.log(data);
    });

Но я не знаю, что будет вызываться из ${aws:userid}. В Руководстве пользователя AWS говорится, что [account: имя-вызывающего абонента] будет вызываться, когда принципалом является федеративный пользователь... Однако я проверил, является ли он [ID учетной записи AWS (12-значный номер):bob]. Это не..

Если у вас есть что сказать мне, пожалуйста, дайте мне знать. Спасибо.

2 ответа

Я нашел решение, даже не идеальное.

[account: caller-указанное-name] работает правильно как [123456789012:bob] только с политикой s3, а не с параметром кода JS.

Я искал ответ на тот же вопрос. Путем проб и ошибок я нашел решение:

Вы можете использовать

      "arn:aws:s3:::mybucket/${aws:userid}/*\"

но тогда имя папки должно быть mybucket/[accountId]:bob

Однако, в зависимости от того, где выполняется этот код, вы можете НЕ использовать идентификатор своей учетной записи как часть URL-адреса или имени папки.

В любом случае вы передаете всю политику, вы можете просто изменить приведенный выше код, чтобы принять имя:

      const tempAccountName = 'bob'; // passed as parameter I presume?

AWS.config.update({
  accessKeyId: [Removed],
  secreteAccessKey: [Removed],
  region: [Removed]
});

var params = {
  Name : tempAccountName,
  Policy : `{\"Version\": \"2012-10-17\",\"Statement\": [{\"Effect\": \"Allow\", \"Action\": [\"s3:ListBucket\"],\"Resource\": [\"arn:aws:s3:::mybucket\"]}, {\"Effect\": \"Allow\", \"Action\": [\"s3:PutObject\", \"s3:GetObject\"],\"Resource\": [\"arn:aws:s3:::mybucket/${tempAccountName}/*\"]}]}`,
  DurationSeconds: "129600"
}

var sts = new AWS.STS({apiVersion: '2011-06-15'});

sts.getFederationToken(params, function(err, data) {
  if(err) 
    console.log(err, err.stack);
  else
    console.log(data);
});
Другие вопросы по тегам