외부 프로세스를 통해 자격 증명 소싱 - AWS Command Line Interface

외부 프로세스를 통해 자격 증명 소싱

주의

이 주제에서는 외부 프로세스에서 자격 증명을 소싱하는 방법을 알아봅니다. 자격 증명을 생성하는 명령이 승인되지 않은 프로세스나 사용자가 액세스할 수 있게 된 경우에는 이것이 보안 위험이 될 수 있습니다. 자격 증명의 손상 위험을 줄이려면 AWS CLI 및 AWS에서 제공되고 지원되는 보안 자격 증명을 대신 사용하는 것이 좋습니다. config 파일과 유출 방지를 도와주는 모든 파일 및 도구를 보호하고 있는지 확인합니다.

사용자 지정 자격 증명 도구가 StdErr에 어떤 암호 정보도 기록하지 않아야 합니다. SDK 및 AWS CLI가 그러한 정보를 캡처 및 기록할 수 있으므로 승인되지 않은 사용자에게 노출될 위험이 있기 때문입니다.

AWS CLI에서 직접 지원되지 않는 자격 증명을 생성 또는 조회할 수 있는 방법이 있는 경우에는 config 파일에서 AWS CLI 설정을 구성하여 이를 사용하도록 credential_process를 구성할 수 있습니다.

예를 들어 config 파일에 다음과 유사한 항목을 포함시킬 수 있습니다.

[profile developer] credential_process = /opt/bin/awscreds-custom --username helen

구문

기존 운영 체제와 호환되는 방식으로 이 문자열을 생성하려면 다음 규칙을 따르십시오.

  • 경로 또는 파일 이름에 공백이 있으면 전체 경로와 파일 이름을 큰 따옴표(" ")로 묶습니다. 경로 및 파일 이름은 다음 문자만 포함할 수 있습니다. A-Z a-z 0-9 - _ . 공백

  • 파라미터 이름이나 파라미터 값에 공백이 있으면 해당 요소를 큰 따옴표(" ")로 묶습니다. 전체 페어가 아니라 이름 또는 값만 묶으십시오.

  • 문자열 안에 환경 변수를 포함하지 마십시오. 예를 들어 $HOME 또는 %USERPROFILE%를 포함할 수 없습니다.

  • 홈 폴더를 ~로 지정하지 마십시오. 전체 경로를 지정해야 합니다.

Windows용 예

credential_process = "C:\Path\To\credentials.cmd" parameterWithoutSpaces "parameter with spaces"

Linux 또는 macOS용 예

credential_process = "/Users/Dave/path/to/credentials.sh" parameterWithoutSpaces "parameter with spaces"

자격 증명 프로그램에서 예상되는 출력

AWS CLI는 프로파일에 지정된 대로 명령을 실행한 다음, STDOUT에서 데이터를 읽습니다. 지정한 명령이 다음 구문과 일치하는 STDOUT에서 JSON 출력을 생성해야 합니다.

{ "Version": 1, "AccessKeyId": "an AWS access key", "SecretAccessKey": "your AWS secret access key", "SessionToken": "the AWS session token for temporary credentials", "Expiration": "ISO8601 timestamp when the credentials expire" }
참고

이 문서의 작성일 현재, Version 키는 1로 설정되어 있습니다. 구조가 발전하면서 시간에 따라 이 값이 증가할 수 있습니다.

Expiration 키는 ISO8601 형식의 타임스탬프입니다. Expiration 키가 도구의 출력에 존재하지 않으면 CLI는 자격 증명이 새로 고침이 되지 않는 장기 자격 증명이라고 가정합니다. 그렇지 않은 경우 자격 증명은 임시 자격 증명으로 간주되며, 기간이 만료되기 전에 credential_process 명령을 다시 실행하면 자동으로 새로 고침됩니다.

참고

AWS CLI는 역할 자격 증명을 수임하는 방법으로 외부 프로세스 자격 증명을 캐싱하지 않습니다. 캐싱이 필요한 경우에는 외부 프로세스에서 이를 실행해야 합니다.

외부 프로세스는 자격 증명을 검색하는 동안 오류가 발생했음을 나타내기 위해 0이 아닌 반환 코드를 반환할 수 있습니다.