USECASE
У меня есть REPOM Codecommit в учетной записи A. У меня есть лямбда-код в учетной записи B. Мне нужен доступ к репо Codecommit из моей лямбды, которая находится в учетной записи B.
Что я сделал
- Я создал роль с именем
CrossAccountRole
в учетной записи A с управляемым
codedcommitReadOnlypolicy
и присвоил его с доверием
связь счета B, так что учетная запись B может взять на себя роль.
В учетной записи B я создал ASSUMEROLE
политику, подобную этой
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"sts:AssumeRole",
"sts:GetFederationToken"
],
"Resource": "arn:aws:iam::134952096518:role/CrossAccountRole"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "sts:GetCallerIdentity",
"Resource": "*"
}
]
}
и приложил его к моим разрешениям пользователя.
- А также я создал основную роль выполнения для лямбда-функции
и прикрепил к нему политику
ASSUMEROLE
.
Я уверен, что все работает нормально. Потому что, когда я попытался переключить роль с консоли в AccountB, я смог увидеть codecommit Repos
, которые находятся в AccountA.
Но я все еще не могу подключиться к репозиториям CodeCmit из AccountA из моей лямбда-функции в accountB.
Моя лямбда-функция выглядит так в учетной записиB
const AWS = require('aws-sdk');
AWS.config.region = 'ap-south-1';
var codecommit = new AWS.CodeCommit({apiVersion: '2015-04-13'});
var params = {
commitId: 'xxx',
repositoryName: 'new'
};
var sts = new AWS.STS();
var sts_params = {
RoleArn: "arn:aws:iam::AccountA:role/CrossAccountRole",
RoleSessionName: "ThisCanBeAnyName"
};
exports.handler = async (event) => {
// TODO implement
try {
const creds = await sts.assumeRole(sts_params).promise();
console.log(creds);
AWS.config.update({
accessKeyId: creds.Credentials.AccessKeyId,
secretAccessKey: creds.Credentials.SecretAccessKey,
sessionToken: creds.Credentials.SessionToken
});
const response = await codecommit.getCommit(params).promise();
const email = response.commit.committer.email;
console.log(response);
} catch (err) {
console.log(err.message);
throw err;
}
};
Я получаю сообщение об ошибке типа new Repository not exist
. Так как он ищет в учетной записи B, это из-за этой ошибки.
Любая помощь приветствуется
Спасибо