Как вы настраивали права доступа в GitHub для агента, чтобы он мог запускать или скачивать контейнер в ECS?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Для настройки прав доступа агента GitHub Actions к ECS для запуска или скачивания контейнеров необходимо выполнить следующие шаги:
-
Создание IAM-политики: Создать новую IAM-политику в AWS, предоставляющую необходимые разрешения. Минимальные разрешения для запуска задачи ECS включают
ecs:RunTask,ecs:PullImage(для реестра ECR),iam:PassRole(если в определении задачи используется IAM-роль для задачи).{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:RunTask", "ecs:DescribeTasks", "ecs:StopTask", "ecs:PullImage", "iam:PassRole" ], "Resource": "*" // Рекомендуется ограничить для конкретных ресурсов }, { "Effect": "Allow", "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ], "Resource": "arn:aws:ecr:<region>:<account-id>:repository/<repository-name>" // Укажите ARN вашего ECR репозитория } ] }Если требуется только скачивание, разрешения могут быть ограничены только действиями ECR.
-
Создание IAM-пользователя или IAM-роли:
- IAM-пользователь: Создать отдельного IAM-пользователя с программным доступом (Access Key ID и Secret Access Key). Подключить к этому пользователю созданную на шаге 1 IAM-политику. Этот метод менее безопасен из-за необходимости хранения ключей доступа.
- IAM-роль с доверительными отношениями OpenID Connect (OIDC) и GitHub Actions: Это предпочтительный и более безопасный метод. Создать IAM-роль, установив доверительные отношения с провайдером OIDC для GitHub Actions. Настроить условие OIDC для ограничения доступа только из вашего репозитория GitHub. Подключить к этой роли созданную на шаге 1 IAM-политику.
// Пример политики доверия для OIDC { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<account-id>:oidc-provider/token.actions.githubusercontent.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "token.actions.githubusercontent.com:aud": "sts.amazonaws.com" }, "StringLike": { "token.actions.githubusercontent.com:sub": "repo:<owner>/<repository>:*" } } } ] }Замените
<account-id>,<owner>,<repository>на свои значения. -
Настройка GitHub Actions:
- Для IAM-пользователя: Сохранить Access Key ID и Secret Access Key как секреты в репозитории GitHub (например,
AWS_ACCESS_KEY_IDиAWS_SECRET_ACCESS_KEY). Во workflow.github/workflows/*.ymlиспользовать эти секреты для аутентификации. - Для IAM-роли с OIDC: В файле workflow
.github/workflows/*.ymlуказать ARN созданной IAM-роли. GitHub Actions автоматически получит временные учетные данные, используя OIDC. Этот метод не требует хранения секретов AWS в GitHub.
# Пример использования OIDC в workflow name: Deploy to ECS on: push: branches: - main permissions: id-token: write # Разрешить получение токена OIDC contents: read jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: arn:aws:iam::<account-id>:role/<your-iam-role-name> # Укажите ARN вашей OIDC-совместимой IAM-роли aws-region: <your-region> - name: Run ECS task run: | aws ecs run-task \ --cluster <your-ecs-cluster> \ --task-definition <your-task-definition> \ --launch-type FARGATE \ --network-configuration "awsvpcConfiguration={subnets=[<subnet-id>],securityGroups=[<security-group-id>],assignPublicIp='ENABLED'}"Замените
<account-id>,<your-iam-role-name>,<your-region>,<your-ecs-cluster>,<your-task-definition>,<subnet-id>,<security-group-id>на свои значения. - Для IAM-пользователя: Сохранить Access Key ID и Secret Access Key как секреты в репозитории GitHub (например,
Использование IAM-роли с OIDC является рекомендуемым подходом для обеспечения безопасности и гибкости. Принцип наименьших привилегий должен быть применен к IAM-политике, ограничивая разрешённые действия и ресурсы до абсолютного минимума.