[Github Action] AWS IAM Role로 접근 + Github Enterprise

유정훈·2023년 4월 16일
0

AWS

목록 보기
2/4

[Github Action] AWS IAM Role로 접근

Github Action을 사용하면 빌드, 테스트, 배포 및 다른 작업을 실행할 수 있습니다. 하지만 AWS 리소스를 사용하려면 AWS 자격 증명 정보가 필요합니다. 일반적으로 이는 AWS Access Key ID와 AWS Secret Access Key로 구성됩니다. 그러나 Github Action에서는 보안상의 이유로 Access Key를 사용하는 방식은 권장되지 않습니다.

대신 IAM Role로 인증하여 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있습니다. IAM Role은 AWS 리소스에 대한 액세스 권한을 가지고 있는 역할(Role)입니다. IAM Role을 사용하면 Access Key ID와 Secret Access Key를 사용하여 AWS 리소스에 대한 액세스를 직접 제어할 필요가 없습니다.

따라서 Github Action에서 IAM Role로 인증하는 방법에 대해 알아보겠습니다.

Identity providers 생성


IAM Role 생성

  • 필요한 정책 추가

  • Role 생성

  • 생성된 Role의 신뢰관계 편집

{
	"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:OrgName/RepoName" 
				}
			}
		}
	]
}

Github Action flow 작성

Github-Action-flow.yaml

  1. permission 추가

    permissions:
      id-token: write
      contents: read
  2. aws-action 추가

    jobs:
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
    	with:
    	  role-to-assume: arn:aws:iam::<account-id>:role/test-cicd-github-action-role
          aws-region: ap-northeast-2
    
      - name: Login to Amazon ECR
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v1

Github Enterprise 환경

Identity providers 생성

  • Provider URL : <HOST_URL>/_services/token
    ex) github.myEnterprise.com/_services/token
  • Audience : sts.amazonaws.com

IAM Role

Trust relationships
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::<account-id>:oidc-provider/github.myEnterprise.com/_services/token"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "github.myEnterprise.com/_services/token:aud": "sts.amazonaws.com"
                },
                "StringLike": {
                    "github.myEnterprise.com/_services/token:sub": "repo:OrgName/RepoName:*"
                }
            }
        }
    ]
}
profile
안녕하세요!

0개의 댓글