Назад к вопросам
Middle+
66
questionbank

Как вы настраивали права доступа в GitHub для агента, чтобы он мог запускать или скачивать контейнер в ECS?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Для настройки прав доступа агента GitHub Actions к ECS для запуска или скачивания контейнеров необходимо выполнить следующие шаги:

  1. Создание 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.

  2. Создание 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> на свои значения.

  3. Настройка 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-роли с OIDC является рекомендуемым подходом для обеспечения безопасности и гибкости. Принцип наименьших привилегий должен быть применен к IAM-политике, ограничивая разрешённые действия и ресурсы до абсолютного минимума.