Java용 AWS SDK
개발자 안내서

AWS 자격 증명 작업

Amazon Web Services에 요청하려면 AWS 자격 증명을 AWS SDK for Java에 제공해야 합니다. 이 작업은 다음과 같은 방법으로 수행할 수 있습니다.

  • 기본 자격 증명 공급자 체인(권장)을 사용합니다.

  • 특정 자격 증명 공급자 또는 공급자 체인을 사용합니다(또는 직접 생성).

  • 자체적으로 자격 증명을 제공합니다. 이러한 자격 증명은 루트 계정 자격 증명, IAM 자격 증명 또는 AWS STS에서 가져온 임시 자격 증명일 수 있습니다.

중요

보안상 가급적이면 AWS 액세스용으로 루트 계정 대신에 IAM 사용자를 사용하는 것이 좋습니다. 자세한 내용은 IAM User GuideIAM 모범 사례를 참조하십시오.

기본 자격 증명 공급자 체인 사용

인수를 지정하지 않고 새 서비스 클라이언트를 초기화하는 경우 AWS SDK for Java에서는 DefaultAWSCredentialsProviderChain 클래스에 의해 구현된 기본 자격 증명 공급자 체인을 사용하여 AWS 자격 증명을 찾으려고 합니다. 기본 자격 증명 공급자 체인은 다음 순서대로 자격 증명을 찾습니다.

  1. 환경 변수AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY. AWS SDK for Java에서는 EnvironmentVariableCredentialsProvider 클래스를 사용하여 이러한 자격 증명을 로드합니다.

  2. Java 시스템 속성aws.accessKeyIdaws.secretKey. AWS SDK for Java에서는 SystemPropertiesCredentialsProvider 클래스를 사용하여 이러한 자격 증명을 로드합니다.

  3. 기본 자격 증명 프로필 파일– 일반적으로 ~/.aws/credentials(플랫폼마다 다를 수 있음)에 위치하며 여러 AWS SDK 및 AWS CLI에서 공유합니다. AWS SDK for Java에서는 ProfileCredentialsProvider 클래스를 사용하여 이러한 자격 증명을 로드합니다.

    AWS CLI에서 제공하는 aws configure 명령을 사용하여 자격 증명 파일을 생성하거나 텍스트 편집기에서 이 파일을 편집하여 새로 생성할 수 있습니다. 자격 증명 파일 형식에 대한 자세한 내용은 AWS 자격 증명 파일 형식을 참조하십시오.

  4. Amazon ECS 컨테이너 자격 증명– 환경 변수 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI가 설정된 경우 Amazon ECS에서 로드됩니다. AWS SDK for Java에서는 ContainerCredentialsProvider 클래스를 사용하여 이러한 자격 증명을 로드합니다.

  5. 인스턴스 프로파일 자격 증명– EC2 인스턴스에서 사용되며, Amazon EC2 메타데이터 서비스를 통해 전달됩니다. AWS SDK for Java에서는 InstanceProfileCredentialsProvider 클래스를 사용하여 이러한 자격 증명을 로드합니다.

    참고

    인스턴스 프로파일 자격 증명은 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI가 설정되지 않은 경우에만 사용됩니다. 자세한 내용은 EC2ContainerCredentialsProviderWrapper를 참조하십시오.

자격 증명 설정

AWS 자격 증명을 사용하려면 앞에 나온 위치 중 하나 이상에서 AWS 자격 증명을 설정해야 합니다. 자격 증명 설정에 대한 자세한 내용은 다음 주제를 참조하십시오.

대체 자격 증명 프로필 설정

AWS SDK for Java에서는 기본적으로 기본 프로필을 사용하지만, 자격 증명 파일에서 가져오는 프로필을 사용자 지정하는 몇 가지 방법이 있습니다.

AWS Profile 환경 변수를 사용하여 SDK에서 로드되는 프로필을 변경할 수 있습니다.

예를 들면 Linux, macOS, or Unix에서는 다음 명령을 실행하여 프로필을 myProfile로 변경합니다.

export AWS_PROFILE="myProfile"

Windows에서는 다음을 사용합니다.

set AWS_PROFILE="myProfile"

AWS_PROFILE 환경 변수 설정은 공식적으로 지원되는 모든 AWS SDK 및 도구(AWS CLI 및 PowerShell용 AWS CLI 포함)에 대한 자격 증명 로딩에 영향을 줍니다. Java 애플리케이션용 프로필만 변경하려면 대신에 시스템 속성인 aws.profile을 사용할 수 있습니다.

참고

이 환경 변수는 이 시스템 속성보다 우선합니다.

대체 자격 증명 파일 위치 설정

AWS SDK for Java는 기본 자격 증명 파일 위치에서 AWS 자격 증명을 자동으로 로드합니다. 하지만 자격 증명 파일의 전체 경로를 사용하여 AWS_CREDENTIAL_PROFILES_FILE 환경 변수를 설정함으로써 이 위치를 지정할 수도 있습니다.

이 기능을 사용하여 AWS SDK for Java에서 자격 증명 파일을 찾는 위치를 일시적으로 변경할 수 있습니다. 예를 들면 명령줄에서 이 변수를 설정합니다. 또는 사용자 또는 시스템 환경에서 환경 변수를 설정하여 사용자 또는 시스템 수준에서 변경할 수도 있습니다.

기본 자격 증명 파일 위치를 재정의하려면

  • AWS_CREDENTIAL_PROFILES_FILE 환경 변수를 AWS 자격 증명 파일의 위치로 설정합니다.

    • Linux, macOS, or Unix에서는 export를 사용합니다.

      export AWS_CREDENTIAL_PROFILES_FILE=path/to/credentials_file
    • Windows에서는 set을 사용합니다.

      set AWS_CREDENTIAL_PROFILES_FILE=path/to/credentials_file

AWS 자격 증명 파일 형식

aws configure 명령을 사용하여 AWS 자격 증명 파일을 생성하는 경우 이 명령은 다음 형식으로 파일을 생성합니다.

[default] aws_access_key_id={YOUR_ACCESS_KEY_ID} aws_secret_access_key={YOUR_SECRET_ACCESS_KEY} [profile2] aws_access_key_id={YOUR_ACCESS_KEY_ID} aws_secret_access_key={YOUR_SECRET_ACCESS_KEY}

프로필 이름은 대괄호에 지정되며(예: [default]), 그 뒤에는 해당 프로필의 구성 가능한 필드가 키-값 페어로 이어집니다. 자격 증명 파일에 여러 프로필을 지정할 수 있으며, aws configure --profile PROFILE_NAME 을 사용하여 이러한 프로필을 편집하거나 추가하여 구성할 프로필을 선택할 수 있습니다.

aws_session_token, metadata_service_timeoutmetadata_service_num_attempts와 같은 추가 필드를 지정할 수 있습니다. 이러한 필드는 CLI를 사용하여 구성할 수 없으므로, 사용하려는 경우에는 반드시 파일을 직접 편집해야 합니다. 구성 파일 및 사용 가능한 필드에 대한 자세한 내용은 AWS CLI User GuideAWS 명령줄 인터페이스 구성을 참조하십시오.

자격 증명 로딩

자격 증명을 설정한 후에는 기본 자격 증명 공급자 체인을 사용하여 로드할 수 있습니다.

이렇게 하려면 다음과 같이 자격 증명을 빌더에 명시적으로 제공하지 않고 AWS 서비스 클라이언트를 인스턴스화합니다.

AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion(Regions.US_WEST_2) .build();

자격 증명 공급자 또는 공급자 체인 지정

클라이언트 빌드를 사용하여 기본 자격 증명 공급자 체인과 다른 자격 증명 공급자를 지정할 수 있습니다.

AWSCredentialsProvider 인터페이스를 입력으로 사용하는 클라이언트 빌더에 자격 증명 공급자나 공급자 체인의 인스턴스를 제공합니다. 다음 예제는 특별히 환경 자격 증명을 사용하는 방법을 보여줍니다.

AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new EnvironmentVariableCredentialsProvider()) .build();

AWS SDK for Java에서 제공한 자격 증명 공급자 및 공급자 체인의 전체 목록을 보려면 AWSCredentialsProviderAll Known Implementing Classes 단원을 참조하십시오.

참고

이 기술을 활용하면 AWSCredentialsProvider 인터페이스를 구현하는 고유의 자격 증명 공급자를 사용하거나 AWSCredentialsProviderChain 클래스를 하위 클래스로 분류하여 자신이 생성하는 자격 증명 공급자 또는 공급자 체인을 제공할 수 있습니다.

명시적으로 자격 증명 지정

기본 자격 증명 체인이나 특정/사용자 지정 공급자 또는 공급자 체인이 코드에서 작동하지 않는 경우 명시적으로 제공하는 자격 증명을 설정할 수 있습니다. AWS STS를 사용하여 임시 자격 증명을 가져온 경우 다음과 같은 방법을 사용하여 AWS 액세스용 자격 증명을 지정합니다.

자격 증명을 AWS 클라이언트에 명시적으로 제공하려면

  1. BasicAWSCredentials와 같은 AWSCredentials 인터페이스를 제공하는 클래스를 인스턴스화하고, 연결용으로 사용할 AWS 액세스 키 및 비밀 키를 이 클래스에 제공합니다.

  2. AWSCredentials 객체를 사용하여 AWSStaticCredentialsProvider를 생성합니다.

  3. AWSStaticCredentialsProvider를 사용하여 클라이언트 빌더를 구성하고 클라이언트를 빌드합니다.

다음은 예제입니다.

BasicAWSCredentials awsCreds = new BasicAWSCredentials("access_key_id", "secret_key_id"); AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(awsCreds)) .build();

STS에서 가져온 임시 자격 증명을 사용하려는 경우 BasicSessionCredentials 객체를 생성하고 이 객체에 STS에서 제공된 자격 증명 및 세션 토큰을 전달합니다.

BasicSessionCredentials sessionCredentials = new BasicSessionCredentials( session_creds.getAccessKeyId(), session_creds.getSecretAccessKey(), session_creds.getSessionToken()); AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(sessionCredentials) .build();

추가 정보