Sobes.tech
Middle+

ECS-те контейнерді іске қосу немесе жүктеу үшін агенттің GitHub-тағы қол жеткізу құқықтарын қалай баптадыңыз?

sobes.tech AI

AI-дан жауап

GitHub Actions агентінің ECS-ке контейнерлерді іске қосу немесе жүктеу үшін рұқсаттарын баптау үшін келесі қадамдарды орындау қажет:

  1. IAM-саясатын жасау: AWS-те қажетті рұқсаттарды беретін жаңа IAM-саясатын жасаңыз. 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>" // өз ECR репозиторияңыздың ARN-ін көрсетіңіз
            }
        ]
    }
    

    Егер тек жүктеу қажет болса, рұқсаттар тек ECR әрекеттерімен шектелуі мүмкін.

  2. IAM-пайдаланушы немесе IAM-рөлін жасау:

    • IAM-пайдаланушы: Жеке IAM-пайдаланушыны жасаңыз және оған бағдарламалық қол жеткізуді (Access Key ID және Secret Access Key) беріңіз. Бұл пайдаланушыға 1-қадамда жасалған IAM-саясатты қосыңыз. Бұл әдіс қауіпсіз емес, себебі кілттерді сақтау қажет.
    • OpenID Connect (OIDC) және GitHub Actions-мен сенім білдіретін IAM-рөл: Бұл қауіпсіз әрі тиімді әдіс. IAM-рөлін жасап, оны OIDC провайдерімен сенім қатынастарын орнатыңыз. GitHub репозиторийіңізден ғана қол жеткізуді шектеу үшін OIDC шартын баптаңыз. Бұл рөлге 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). .github/workflows/*.yml файлында осы құпияларды аутентификация үшін пайдаланыңыз.
    • IAM-рөлмен OIDC үшін: .github/workflows/*.yml файлында жасалған IAM-рөлдің ARN-ін көрсетіңіз. GitHub Actions автоматты түрде уақытша деректер алады, OIDC пайдалану арқылы. Бұл әдіс AWS құпияларын GitHub-та сақтауды қажет етпейді.
    # OIDC пайдалану мысалы
    name: ECS-ке орналастыру
    
    on:
      push:
        branches:
          - main
    
    permissions:
      id-token: write # OIDC токенін алу рұқсаты
      contents: read
    
    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
          - name: Кодты тексеру
            uses: actions/checkout@v4
    
          - name: AWS құпияларын баптау
            uses: aws-actions/configure-aws-credentials@v4
            with:
              role-to-assume: arn:aws:iam::<account-id>:role/<your-iam-role-name> # OIDC-мен үйлесімді IAM-рөлінің ARN-ін көрсетіңіз
              aws-region: <your-region>
    
          - name: ECS тапсырмасын іске қосу
            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> мәндерін өзіңізге сәйкес өзгертіңіз.

OIDC-рөлін пайдалану қауіпсіздік пен икемділікті арттырады. Ең аз құқық қағидатын қолдану үшін IAM-саясатты шектеу керек, яғни рұқсат етілген әрекеттер мен ресурстарды ең аз деңгейге дейін шектеу керек.