awscli는 환경 변수를 볼 수 없지만 cron에서만 볼 수 있습니까?


0

cronjob이 awscli( 환경 변수를 통해 인증 됨)을 사용하여 백업을 수행 해야하는 도커 컨테이너를 설정하고 있습니다.

cron에 도커 변수가 표시되지 않으므로 aws명령을 실행하기 전에 파일에 인쇄하고 소싱합니다 .

나는 한 확인 변수가 아직 크론에서 설정되어 있는지 awscli를 볼 수 없습니다.

다음은이 문제를 보여주는 최소한의 프로젝트입니다.

도커 파일 :

FROM debian:jessie

# Install aws and cron
RUN apt-get -yqq update
RUN apt-get install -yqq awscli cron rsyslog

# Create cron job
ADD crontab /etc/cron.d/hello-cron
RUN chmod 0644 /etc/cron.d/hello-cron

# Output environment variables to file
# Then start cron and watch log
CMD printenv > /env && cron && service rsyslog start && tail -F /var/log/*

크론 탭 :

# Demonstrates that cron can see variables
*/2 * * * * root /usr/bin/env bash -c '. /env && echo $AWS_DEFAULT_REGION' >> /test1 2>&1

# Attempt to list s3 buckets knowing environment variables are set
*/2 * * * * root /usr/bin/env bash -c '. /env && aws s3 ls' >> /test2 2>&1

다시 돌아옵니다 Unable to locate credentials. You can configure credentials by running "aws configure". 그러나 도커 컨테이너 내에서 동일한 명령을 실행하면 버킷 목록이 다시 나타납니다.

이것은 .envdocker에 전달 하는 파일입니다.

.env :

## AWS SETTINGS
AWS_ACCESS_KEY_ID=(key removed)
AWS_SECRET_ACCESS_KEY=(secret removed)
AWS_DEFAULT_REGION=us-west-2

왜 awscli환경 변수를 볼 수 없지만 cron 내부에서만 볼 수 있는지에 대한 아이디어가 있습니까?

답변:


3

환경 변수는 crontab(5); 이렇게하면 추가 셸 실행 및 소스 단계의 비용과 복잡성을 피할 수 있습니다. 즉, hello-cron파일에는 다음과 같은 것이 포함됩니다

AWS_ACCESS_KEY_ID=(key removed)
AWS_SECRET_ACCESS_KEY=(secret removed)
AWS_DEFAULT_REGION=us-west-2

*/2 * * * * root echo $AWS_DEFAULT_REGION >> /test1 2>&1
*/2 * * * * root aws s3 ls >> /test2 2>&1

awscli가 aws 역할을 사용하는 인스턴스를 통해 권한을 가질 때 이것을 사용하는 방법을 알고 있습니까?
— holmberd,

@holmberd는 전혀 AWS를 사용하지 않았으므로 AWS의 역할이 무엇을 허용하는지 모릅니다
— thrig

역할을 사용하면 서버 인스턴스에 대한 사용자 지정 권한을 설정하여 실제 인스턴스에 AWS 자격 증명을 저장할 필요가 없으며 모든 역할이 역할에 의해 처리됩니다. 내 문제에 대한 나의 가정이 잘못되었다는 것이 밝혀졌습니다. awscli의 역할은 cronjob에서 완벽하게 실행됩니다.
— holmberd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.