Что такое [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);
});