![Разрешения на перемещение средств между счетами ECR](https://rvso.com/image/717731/%D0%A0%D0%B0%D0%B7%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BD%D0%B0%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%81%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B2%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20%D1%81%D1%87%D0%B5%D1%82%D0%B0%D0%BC%D0%B8%20ECR.png)
У нас есть два аккаунта AWS. Аккаунт A имеет репозитории ECR, а аккаунт B предназначен для извлечения данных из них.
Я попытался настроить разрешения репозитория в учетной записи A, чтобы разрешить извлечение данных из учетной записи B, но AWS утверждает, что моя политика недействительна.
Я пытался:
- Установка в качестве принципала номера счета B. Это приводит к ошибке
Your permission statements have one or more invalid parameters. Invalid parameter at 'PolicyText' failed to satisfy constraint: 'Invalid repository policy provided'
- Установка принципала на ARN пользователя root в учетной записи B (
arn:aws:iam::1234567891011:root
). Это приводит к ошибкеThe service name arn:aws:iam::1234567891011:root is invalid. A valid service name format is [service].amazonaws.com.
- Установка принципала на ARN пользователя IAM в учетной записи B. Та же ошибка, что и выше.
Вышеуказанное было сделано через консоль AWS, которая не позволяет редактировать JSON напрямую для разрешений ECR. Я попробовал команду CLI aws ecr set-repository-policy
с вышеуказанными изменениями, но в терминале были возвращены те же ошибки.
Добавление разрешений для пользователей IAM водинаковыйаккаунт работает отлично.
Действия, которые я попытался добавить в политику, следующие:
"Action": [
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer",
"ecr:GetRepositoryPolicy",
"ecr:ListImages",
"ecr:DescribeRepositories"
]
Есть идеи, что я делаю не так?
решение1
Вам также необходимо настроить разрешения в ECR для доступа к кросс-аккаунтам. Чтобы предоставить доступ pull к ECR аккаунта A аккаунту B, поместите следующую политику JSON на вкладку ECR Permissions.
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowCrossAccountPull",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::aws_account_b_number:root"
},
"Action": [
"ecr:GetDownloadUrlForLayer",
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage"
]
}
]
}
решение2
Вам необходимо настроить перекрестную роль для учетной записи b.
Создайте кросс-аккаунт-роль в аккаунте, имеющем Реестр, A, предоставьте доступ к реестру в роли. И предоставьте аккаунту B разрешения на принятие этой роли.
http://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html
http://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html