Я хотел бы скопировать объекты из сегмента в account-1
в другие сегменты в account-2
, используя метод copyObject
AWSJavaScriptSDK в лямбде. Прямо сейчас он работает, позволяя лямбда-роли в account-1
записывать в корзину учетной записи account-2
с использованием политик корзины s3. Дело в том, что в account-2
у нас много сегментов, и мы не хотим добавлять разрешение для каждого из них каждый раз, когда мы создаем лямбда, которая записывает или читает в одном из них.
I ' м пытаюсь, чтобы лямбда в account-1
взяла на себя роль с разрешениями на запись и чтение в account-2
следующим образом.
В account-2
у меня есть роль, называемая s3-account-2-full-access
с политикой AmazonS3FullAccess
и следующими доверенными отношениями:
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::11111111111:role/lambda-account-1-role"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
В account-1
у меня есть lambda-account-1-role
со следующей политикой.
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::22222222222:role/s3-account-2-full-access"
}
]
}
В лямбде я принимаю на себя следующие роли:
const sts = new AWS.STS();
exports.handler = async (event) => {
const timestamp = (new Date()).getTime();
var sts_params = {
RoleArn: 'arn:aws:iam::22222222222:role/s3-account-2-full-access',
RoleSessionName: `id-${timestamp}`,
DurationSeconds: 3600,
};
const { Credentials } = await sts.assumeRole(sts_params).promise();
const { AccessKeyId, SecretAccessKey, SessionToken } = Credentials;
const accessparams2 = {
accessKeyId: AccessKeyId,
secretAccessKey: SecretAccessKey,
sessionToken: SessionToken,
};
var s3 = new AWS.S3(accessparams2);
var params = {
Bucket: "account-2-bucket",
CopySource: "/account-1-bucket/file.txt",
Key: "file.txt"
};
const result = await s3.copyObject(params).promise();
const response = {
statusCode: 200,
body: JSON.stringify(result),
};
return response;
};
Дело в том, что я получаю сообщение об ошибке AccessDenied
во время copyObject
. Возможно, я что-то неправильно понимаю, но я не могу понять, как я могу скопировать объекты из учетной записи-1 в учетную запись-2, не редактируя политику корзины в учетной записи-2.