CodeBuild를 사용하여 AssumeRole에 대한 임시 자격 증명을 Docker 런타임으로 전달하려면 어떻게 해야 하나요?
AWS CodeBuild를 사용하여 AssumeRole의 임시 자격 증명을 Docker 런타임으로 전달하고 싶습니다.
간략한 설명
CodeBuild는 CodeBuild 서비스 역할을 빌드 컨테이너 및 Docker 런타임에서 기본 AWS 자격 증명으로 사용합니다.
AssumeRole 자격 증명을 환경 변수로 내보냅니다. 그런 다음 docker build용 --build-arg 파라미터를 사용하여 해당 변수를 Docker 런타임에 전달합니다. 자세한 내용은 Docker Docs 웹 사이트에서 docker build를 참조하세요.
해결 방법
1. Docker 런타임에 대한 새 역할을 만듭니다. 예: Secretassumerole
2. Secretassumerole의 신뢰 관계 정책을 업데이트하고 역할 수임에 대한 CodeBuild 서비스 역할 권한을 추가합니다. 예를 들면 다음과 같습니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::$account_id:role/service-role/codebuild-service-role" }, "Action": "sts:AssumeRole" } ] }
3. 새 역할을 사용하여 AWS Secrets Manager에서 AWSExampleSecret 값을 가져옵니다. 예를 들면 다음과 같습니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": [ "arn:aws:secretsmanager:ap-northeast-1:$account_id:secret:tutorials/AWSExampleSecret-EHWYme" ] } ] }
중요: $account_id를 계정 ID로 바꿉니다. Docker 런타임 중에 모든 작업 권한을 부여할 수 있습니다.
4. sts:assumeRole 권한을 CodeBuild 서비스 역할에 추가하여 AssumeRole 작업을 허용하십시오. 예를 들면 다음과 같습니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::$account_id:role:role/Secretassumerole" } ] }
5. 빌드 사양을 사용하여 AssumeRole 자격 증명을 환경 변수로 내보냅니다. 그런 다음, docker build 명령을 사용하여 자격 증명을 Docker 런타임으로 전달하십시오. 예:
version: 0.2 phases: install: runtime-versions: nodejs: 16 commands: - ASSUME_ROLE_ARN="arn:aws:iam::$account_id:role/Secretassumerole" - TEMP_ROLE=$(aws sts assume-role --role-arn $ASSUME_ROLE_ARN --role-session-name test) - export TEMP_ROLE - export AWS_ACCESS_KEY_ID=$(echo "${TEMP_ROLE}" | jq -r '.Credentials.AccessKeyId') - export AWS_SECRET_ACCESS_KEY=$(echo "${TEMP_ROLE}" | jq -r '.Credentials.SecretAccessKey') - export AWS_SESSION_TOKEN=$(echo "${TEMP_ROLE}" | jq -r '.Credentials.SessionToken') pre_build: commands: - echo Build started on 'date' - echo Building the Docker image... - docker build . --build-arg AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID --build-arg AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY --build-arg AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN
참고: —duration-seconds를 사용하여 수임 역할의 최대 세션 기간을 설정할 수 있습니다. --duration-seconds 옵션은 1시간에서 12시간까지의 값을 허용합니다. 12시간보다 큰 값을 설정하면 작업이 실패합니다.
6. 이미지를 빌드할 때 Dockerfile에서 AssumeRole 자격 증명을 가져옵니다. 예를 들면 다음과 같습니다.
FROM amazonlinux:latest RUN yum -y install aws-cli ARG AWS_DEFAULT_REGION ARG AWS_SECRET_ACCESS_KEY ARG AWS_SESSION_TOKEN RUN echo $AWS_ACCESS_KEY_ID RUN echo $AWS_SECRET_ACCESS_KEY RUN echo $AWS_SESSION_TOKEN RUN aws sts get-caller-identity RUN aws secretsmanager get-secret-value --secret-id tutorials/AWSExampleSecret --region ap-northeast-1
참고: DOCKERFILE에 RUN aws secretsmanager get-secret-value --secret-id tutorials/AWSExampleSecret을 추가해 빌드에서 보안 암호를 검색할 수 있습니다. 경고: 이렇게 하면 빌드 로그에 보안 암호가 노출될 수 있습니다.
출력:
Step 8/11 : RUN echo $AWS_ACCESS_KEY_ID ---> Running in 1a1b1c1d1e1f AKIAIOSFODNN7EXAMPLE Removing intermediate container 2a3b4c5d6e7f ---> 32a8170f9697 Step 9/11 : RUN echo $AWS_SECRET_ACCESS_KEY ---> Running in 3a3b3c3d3e3f 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 Removing intermediate container 3a3b3c3d3e3f ---> 4a4b4c4d4e4f Step 10/11 : RUN echo $AWS_SESSION_TOKEN ---> Running in 5a5b5c5d5e5f FQoGZXIvYXdzEJP//////////wEaDPTjooaOAaU8NDj5oyKkAjVwT4uQHTZJdCtfOZxa6wTZVOy0Zkw+laN1RRVZhvhdPOWhU8VgK2d7ZgTlqaXn4NSrdWlnub6g5JobP4o509t3VLdMUR5ZJJcpnSlJAY5YM7vlPndroGcV+Y689ztVzQ1uVxdtpjQK1qh87fw6m0dHt7Q8Y8TferRNVvCM4kOroxPzovTbO6IkLDcBp8PhOVgtVtxEpON6nZrN990zzUmhXjT0vrtpDtAi339hhs7fzDOrnllQHSAmSerT0NhMOYVqBH1HJOq3FYnG+TUbHENpSq3kwTiPL2uoTw7/Ufrrgz4i3ENHm3rIWlbD8VuleDl5yhooKifmKDPjQAHs5HbVjD9lnxQFrCIuyvZdmsqzgoIjPt6z5H8lzugLHAAmbgiOwDoo+Oba7QU= Removing intermediate container 5a5b5c5d5e5f ---> 0cc838f3c865 Step 11/11 : RUN aws sts get-caller-identity ---> Running in 6a6b6c6d6e6f { "Account": “xxxxxxxxx”, "UserId": "AIDACKCEVSQ6C2EXAMPLE:test", "Arn": "arn:aws:sts::$account_id:assumed-role/Secretassumerole/test" } Removing intermediate container 6d525393d667 ---> 2da2f38adc77 Step 12/12 : RUN aws secretsmanager get-secret-value --secret-id tutorials/AWSExampleSecret --region ap-northeast-1 ---> Running in 7a7b7c7d7e7f { "Name": "tutorials/AWSExampleSecret", "VersionId": "1a23bb45-679c-1d2e-fg34-567891234hi5", "SecretString": "{\"username\":\"myserviceusername\",\"password\":\"yourPassword\"}", "VersionStages": [ "AWSCURRENT" ], "CreatedDate": 1558616482.926, "ARN": "arn:aws:secretsmanager:ap-northeast-1:$account_id:secret:tutorials/M-EHWYme" } Removing intermediate container 8a8b8c8d8e8f ---> 9a9b9c9d9e9f Successfully built 9a9b9c9d9e9f
관련 콘텐츠
- 질문됨 4달 전lg...
- 질문됨 4달 전lg...
- 질문됨 2달 전lg...
- 질문됨 4년 전lg...
- 질문됨 24일 전lg...
- AWS 공식업데이트됨 2년 전