Sobes.tech
Middle+

Wie haben Sie die Zugriffsrechte in GitHub für den Agenten eingerichtet, damit er einen Container in ECS starten oder herunterladen kann?

sobes.tech KI

Antwort von 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-политике, ограничивая разрешённые действия и ресурсы до абсолютного минимума.