AWS Regions를 사용하면 특정 지역에 실제로 있는 AWS 서비스에 액세스할 수 있다.이는 중복성을 유지하고 사용자 및 사용자가 액세스할 수 있는 곳에서 데이터 및 응용 프로그램을 계속 실행하는 데 유용할 수 있습니다.RegionEndpoint 클래스를 사용하여 AWS 서비스 클라이언트를 만들 때 영역을 지정할 수 있다.
다음은 특정 지역에서 Amazon EC2 클라이언트를 인스턴스화하는 예제다.
AmazonEC2Client ec2Client = new AmazonEC2Client(RegionEndpoint.USEast1);
지역은 서로 격리되어 있습니다.예를 들어, EU(아일랜드)지역을 사용할 때는 미국 동부(버지니아)자원에 액세스할 수 없다.코드에 여러 AWS Regions에 대한 액세스가 필요한 경우 각 지역마다 별도의 클라이언트를 만드는 것이 좋다.
중국(베이징)지역에서 서비스를 사용하려면 중국(베이징)지역에만 해당되는 계정과 자격 증명이 있어야 한다.중국(베이징)지역에서는 다른 AWS 지역의 계정 및 자격 증명이 작동하지 않는다.마찬가지로 중국(베이징)지역의 계정 및 자격 증명은 다른 AWS 지역에서는 작동하지 않는다.중국(베이징)지역에서 사용할 수 있는 EndPoint 및 프로토콜에 대한 자세한 내용은 중국(베이징)지역을 참조하면 된다.
새 AWS 서비스는 초기에 몇 지역에서 시작한 다음 다른 지역에서 지원할 수 있다.이 경우 새 region에 액세스하기 위해 최신 SDK를 설치할 필요가 없다.새로 추가된 영역은 클라이언트별로 또는 전역으로 지정할 수 있다.
var newRegion = RegionEndpoint.GetBySystemName("us-west-new"); using (var ec2Client = new AmazonEC2Client(newRegion)) { // Make a request to EC2 using ec2Client }
서비스 클라이언트 구성 클래스의 ServiceURL 등록 정보를 사용하여 영역을 지정할 수도 있다.이 기술은 지역 EndPoint가 일반 지역 EndPoint 패턴을 따르지 않는 경우에도 작동한다.
var ec2ClientConfig = new AmazonEC2Config { // Specify the endpoint explicitly ServiceURL = "https://ec2.us-west-new.amazonaws.com" };
using (var ec2Client = new AmazonEC2Client(newRegion)) { // Make a request to EC2 using ec2Client }
전역으로 지역 선택하기(Globally)
세 가지 방법을 통해서 지역을 전역으로 설정할 수 있다.
AWSConfigs.AWSRegion 속성을 설정할 수 있다.
AWSConfigs.AWSRegion = "us-west-new"; using (var ec2Client = new AmazonEC2Client()) { // Make request to Amazon EC2 using ec2Client }
app.config 파일의 appSettings 섹션에서 AWSRegion 키를 설정할 수 있다.
AWS 루트 사용자 대신 IAM 사용자를 만들고 IAM 사용자 자격 증명을 사용해야 한다. IAM 사용자 자격 증명이 손상되면 쉽게 해지할 수 있다. 사용자를 특정 리소스 및 작업 집합으로 제한하는 정책을 각 IAM 사용자에게 적용할 수 있다.
응용 프로그램 개발 중에 자격 증명을 관리하는 기본 방법은 SDK 저장소에 각 IAM 사용자 자격 증명 집합에 대한 프로필을 저장하는 것이다. 일반 텍스트 자격 증명 파일을 사용하여 자격 증명이 포함 된 프로필을 저장할 수도 있다. 그런 다음 프로젝트 파일에 자격 증명을 저장하는 대신 프로그래밍 방식으로 특정 프로필을 참조할 수 있다. 의도하지 않게 자격 증명이 노출 될 위험을 줄이려면 SDK 저장소 또는 자격 증명 파일을 프로젝트 파일과 별도로 저장해야 한다.
Amazon EC2 컨테이너 서비스(Amazon ECS) 태스크에 대한 IAM 역할을 태스크에 사용한다.
Amazon EC2 인스턴스에서 실행중인 응용 프로그램에 IAM 역할을 사용한다.
조직 외부의 사용자가 사용할 수있는 응용 프로그램에 임시 자격 증명 또는 환경 변수를 사용한다.
다음 항목에서는 .NET용 AWS SDK 응용 프로그램의 자격 증명을 관리하는 방법에 대해 설명한다.AWS 자격 증명을 안전하게 관리하는 방법에 대한 설명은 AWS 액세스 키 관리 모범 사례를 참조하면 된다.
SDK 저장소 사용하기(Using SDK Store)
.NET 응용 프로그램용 AWS SDK 개발 중에 응용 프로그램에 사용할 각 자격 증명 집합에 대한 SDK 저장소에 프로파일을 추가해야 한다.이렇게하면 실수로 AWS 자격 증명이 노출되는 것을 방지할 수 있다.SDK 저장소는 RegisteredAccounts.json 파일의 C:\Users\<사용자 이름>\AppData\Local\AWSToolkit 폴더에 있다.SDK 저장소는 다음과 같은 이점을 제공한다.
SDK 저장소는 여러 계정의 여러 프로필을 포함할 수 있다.
SDK 저장소의 자격 증명은 암호화되고 SDK 저장소는 사용자의 홈 디렉터리에 있다.이로 인해 실수로 자격 증명이 노출될 위험이 제한된다.
응용 프로그램에서 프로파일을 이름으로 참조하고 연관된 신임은 런타임에 참조된다.원본 파일에 자격 증명이 절대 포함되지 않는다.
default라는 프로파일을 포함하면 .NET용 AWS SDK는 해당 프로파일을 사용한다.다른 프로파일 이름을 제공하지 않거나 지정된 이름을 찾을 수 없는 경우에도 마찬가지이다.
또한 SDK Store는 Windows PowerShell용 AWS Tools 및 Visual Studio용 AWS Toolkit에 대한 자격 증명을 제공한다.
참고
SDK 저장소 프로파일은 특정 호스트의 특정 사용자에게 한정된다.다른 호스트 또는 다른 사용자에게 복사 할 수 없다.이러한 이유로 프로덕션 응용 프로그램에서 SDK 저장소 프로필을 사용할 수 없다.자세한 내용은 자격 증명 및 프로필 확인[번역은 아래 내용에 포함되어 있음]을 참조하면 된다.
여러 가지 방법으로 SDK 저장소의 프로필을 관리할 수 있다.
Visual Studio용 AWS Toolkit의 GUI(그래픽 사용자 인터페이스)를 사용하여 프로파일을 관리할 수 있다.GUI를 사용하여 SDK 저장소에 자격 증명을 추가하는 방법에 대한 자세한 내용은 Visual Studio용 AWS Toolkit에서 자격 증명 지정을 참조하면 된다.
Windows PowerShell용 AWS Tools에서 Set-AWSCredentials cmdlet을 사용하여 명령 줄(command line)에서 프로필을 관리할 수 있다.자세한 내용은 AWS 자격 증명 사용을 참조하면 된다.
var options = new CredentialProfileOptions { AccessKey = "access_key", SecretKey = "secret_key" }; var profile = new Amazon.Runtime.CredentialManagement.CredentialProfile("basic_profile", options); profile.Region = RegionEndpoint.USWest1; var netSDKFile = new NetSDKCredentialsFile(); netSDKFile.RegisterProfile(profile);
RegisterProfile 메서드는 새 프로필을 등록하는 데 사용된다.일반적으로, 어플리케이션은 이 메소드를 각 프로파일에 대해서 1회만 호출한다.
var endpoint = new SAMLEndpoint("endpoint1", new Uri("https://some_saml_endpoint"), SAMLAuthenticationType.Kerberos); var endpointManager = new SAMLEndpointManager(); endpointManager.RegisterEndpoint(endpoint); options = new CredentialProfileOptions { EndpointName = "endpoint1", RoleArn = "arn:aws:iam::999999999999:role/some-role" }; profile = new CredentialProfile("federated_profile", options); netSDKFile = new NetSDKCredentialsFile(); netSDKFile.RegisterProfile(profile);
자격 증명 파일 사용하기
프로파일을 공유 신임 정보 파일에 저장할 수도 있다.이 파일은 다른 AWS SDK, AWS CLI 및 AWS Tools for Windows PowerShell에서 사용할 수 있다.실수로 자격 증명을 노출 할 위험을 줄이려면 일반적으로 사용자의 홈 폴더에 프로젝트 파일과 별도로 자격 증명 파일을 저장해야 한다.자격 증명 파일의 프로필은 일반 텍스트로 저장된다.
다음 두 가지 방법으로 공유 자격 증명 파일의 프로필을 관리할 수 있다.
텍스트 편집기를 사용할 수 있다.파일 이름이 자격 증명이며 기본 위치는 사용자의 홈 폴더 아래에 있다.예를 들어 사용자 이름이 awsuser인 경우 자격 증명 파일은 C:\users\awsuser\.aws\credentials이 된다. 다음은 신임 정보 파일에 있는 프로파일의 예시이다.
For more information, see `Best Practices for Managing AWS Access Keys <http://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html>`_.
참고
default라는 프로파일을 포함하면 지정된 프로파일을 찾을 수없는 경우 .NET용 AWS SDK는 기본적으로 해당 프로파일을 사용한다. 선택한 위치(예 : C:\aws_service_credentials\credentials)에 프로필이 들어있는 자격 증명 파일을 저장할 수 있다.그런 다음 프로젝트의 App.config 또는 Web.config 파일에서 AWSProfilesLocation 특성의 파일 경로를 명시적으로 지정한다.자세한 내용은 프로필 지정[번역 내용은 아래쪽을 참조]을 참조하면 된다.
// Create the source profile and save it to the shared credentials file
// 원본 프로필을 만들어 공유 자격 증명 파일에 저장한다. var sourceProfileOptions = new CredentialProfileOptions { AccessKey = "access_key", SecretKey = "secret_key" }; var sourceProfile = new CredentialProfile("source_profile", sourceProfileOptions); sharedFile = new SharedCredentialsFile(); sharedFile.RegisterProfile(sourceProfile);
// Create the assume role profile and save it to the shared credentials file
// 가정 역할 프로필을 만들어 공유 자격 증명 파일에 저장한다. var assumeRoleProfileOptions = new CredentialProfileOptions { SourceProfile = "source_profile", RoleArn = "arn:aws:iam::999999999999:role/some-role" }; var assumeRoleProfile = new CredentialProfile("assume_role_profile", assumeRoleProfileOptions); sharedFile.RegisterProfile(assumeRoleProfile);
TryGetAWSCredentials 또는 TryGetProfile 메서드를 사용하여 자격 증명 또는 프로필을 가져올 수 있다.ProfilesLocation 속성은 다음과 같이 CredentialsProfileChain의 동작을 결정한다.
ProfilesLocation이 null이 아니고 비어 있지 않으면 ProfilesLocation 등록 정보의 디스크 경로에서 공유 자격 증명 파일을 검색한다.
ProfilesLocation이 null이거나 비어 있고 플랫폼이 .NET 자격 증명 파일을 지원하는 경우 .NET 자격 증명 파일을 검색한다.프로필을 찾을 수 없는 경우 기본 위치에서 공유 자격 증명 파일을 검색한다.
ProfilesLocation이 null이거나 비어 있고 플랫폼이 .NET 자격 증명 파일을 지원하지 않는 경우 기본 위치의 공유 자격 증명 파일을 검색한다.
기본 위치의 SDK 자격 증명 파일 또는 공유 자격 증명 파일에서 자격 증명을 가져오기
CredentialProfileStoreChain 객체와 Amazon.Runtime.AWSCredentials 객체를 만든다.TryGetAWSCredentials 메서드를 호출한다.자격 증명을 반환할 프로필 이름과 AWSCredentials 개체를 제공한다.
var chain = new CredentialProfileStoreChain(); AWSCredentials awsCredentials; if (chain.TryGetAWSCredentials("basic_profile", out awsCredentials)) { // use awsCredentials }
var chain = new CredentialProfileStoreChain(); CredentialProfile basicProfile; if (chain.TryGetProfile("basic_profile", out basicProfile)) { // Use basicProfile }
파일 위치에서 공유 자격 증명 파일 형식의 파일에서 AWSCredentials 가져오기
CredentialProfileStoreChain 객체를 만들고 자격 증명 파일의 경로를 제공한다.AWSCredentials 객체를 만든다.TryGetAWSCredentials 메서드를 호출한다.자격 증명을 반환할 프로필 이름과 AWSCredentials 개체를 제공한다.
var chain = new CredentialProfileStoreChain("c:\\Users\\sdkuser\\customCredentialsFile.ini"); AWSCredentials awsCredentials; if (chain.TryGetAWSCredentials("basic_profile", out awsCredentials)) { // Use awsCredentials }
SharedCredentialsFile 클래스를 사용하여 AmazonS3Client를 만드는 방법
CredentialProfile basicProfile; AWSCredentials awsCredentials; var sharedFile = new SharedCredentialsFile(); if (sharedFile.TryGetProfile("basic_profile", out basicProfile) && AWSCredentialsFactory.TryGetAWSCredentials(basicProfile, sharedFile, out awsCredentials)) { using (var client = new AmazonS3Client(awsCredentials, basicProfile.Region)) { var response = client.ListBuckets(); } }
기본 프로파일을 사용하고 .NET용 AWS SDK에 자동으로 기본 자격 증명을 사용하여 클라이언트 객체를 만들려면 다음 코드를 사용하면 된다.
using (var client = new AmazonS3Client(RegionEndpoint.US-West2)) { var response = client.ListBuckets(); }
자격 증명 및 프로필 해결
.NET용 AWS SDK는 다음 순서로 자격 증명을 검색하고 현재 응용 프로그램에 대해 사용 가능한 첫 번째 set을 사용한다.
클라이언트 구성 또는 AWS 서비스 클라이언트에 명시 적으로 설정되는 항목.
사용 가능한 경우 AWSAccessKey 및 AWSSecretKey AppConfig 값에서 생성되는 BasicAWSCredentials.
AWSConfigs.AWSProfileName (명시 적 또는 AppConfig에 설정)의 값으로 지정된 이름을 가진 자격 증명 프로파일.
기본 자격 증명 프로필.
모두 비어있는 경우 AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY 및 AWS_SESSION_TOKEN 환경 변수에서 생성된 SessionAWSCredentials.
AWS_ACCESS_KEY_ID 및 AWS_SECRET_ACCESS_KEY 환경 변수에서 만들어지는 BasicAWSCredentials (둘 다 비어 있지 않은 경우)
Amazon EC2 컨테이너 서비스 (Amazon ECS) 태스크에 대한 IAM 역할.
EC2 인스턴스 메타 데이터.
SDK 저장소 프로파일은 특정 호스트의 특정 사용자에게 한정된다.다른 호스트 또는 다른 사용자에게 복사할 수 없다.이러한 이유로 다른 호스트 또는 개발자 컴퓨터에서 개발 컴퓨터에 있는 SDK 저장소 프로필을 다시 사용할 수 없다.응용 프로그램이 Amazon EC2 인스턴스에서 실행중인 경우 .NET용 AWS SDK와 함께 EC2 인스턴스에 IAM 역할 사용에 설명된대로 IAM 역할을 사용해야 한다.그렇지 않으면 웹 응용 프로그램이 서버에 액세스할 수있는 자격 증명 파일에 자격 증명을 저장한다.
프로필 해결(Profile Resolution)
두 가지 자격 증명 파일 유형을 사용하는 경우 .NET용 AWS SDK 및 Windows PowerShell용 AWS 도구를 사용하여 구성하는 방법을 이해하는 것이 중요하다.AWSConfigs.AWSProfilesLocation(명시적 또는 AppConfig에서 설정)은 .NET용 AWS SDK가 자격 증명 프로필을 찾는 방법을 제어한다.-ProfileLocation 명령 줄 인수(command line argument)는 Windows PowerShell용 AWS Tools에서 프로필을 찾는 방법을 제어한다.두 경우 모두 구성이 작동하는 방식은 다음과 같다.
프로필 위치 값
프로필 해결 동작
null (설정되지 않음) 또는 비어 있음
먼저 .NET 자격 증명 파일에서 지정된 이름의 프로필을 검색한다.프로필이 없으면 %HOME%\.aws\credentials을 검색한다.프로필이 없으면 %HOME%\.aws\config를 검색한다.
공유 자격 증명 파일 형식의 파일 경로
지정한 파일만 검색하여 지정된 이름의 프로필을 찾는다.
프로필 지정하기(Specifying a Profile)
프로필은 AWS SDK for .NET 응용 프로그램에서 자격 증명을 사용하는 기본 방법이다.프로필이 저장되는 위치를 지정할 필요가 없다.프로필은 이름으로 만 참조할 수 있다..NET용 AWS SDK는 이전 섹션에서 설명한대로 해당 자격 증명을 검색한다.
프로필을 지정하는 가장 좋은 방법은 응용 프로그램의 App.config 또는 Web.config 파일의 appSettings 섹션에서 AWSProfileName 값을 정의하는 것이다.연관된 자격 증명은 빌드 프로세스 중에 응용 프로그램에 통합된다.
이 예제에서는 프로필이 SDK 저장소 또는 기본 위치의 자격 증명 파일에 있다고 가정한다.
프로필이 다른 위치의 자격 증명 파일에 저장되어 있는 경우 <appSettings> 요소에 AWSProfilesLocation 속성 값을 추가하여 위치를 지정해야 한다.다음 예에서는 C:\aws_service_credentials\credentials을 자격 증명 파일로 지정한다.
.NET용 AWS SDK (AWSSDK.Core 버전 3.1.6.0 이상)를 사용하는 응용 프로그램은 AD FS(Active Directory Federation Service)를 통한 페더레이션 사용자 계정을 사용하여 SAML(Security Assertion Markup Language)을 사용하여 AWS 웹 서비스에 액세스할 수 있다.
페더레이션된 액세스 지원은 사용자가 Active Directory를 사용하여 인증할 수 있음을 의미한다.임시 자격 증명은 사용자에게 자동으로 부여된다.1시간 동안 유효한 이러한 임시 자격 증명은 응용 프로그램이 AWS 웹 서비스를 호출할 때 사용된다.SDK는 임시 자격 증명 관리를 처리한다.도메인에 가입된 사용자 계정의 경우 응용 프로그램에서 호출했지만 자격 증명이 만료된 경우 사용자가 자동으로 다시 인증되고 새 자격 증명이 부여된다.도메인 가입이 아닌 계정의 경우 재인증 전에 자격 증명을 입력하라는 메시지가 사용자에게 표시된다.
조직 외부 사용자가 소프트웨어 실행 파일을 사용할 수 있는 응용 프로그램 시나리오의 경우 임시 보안 자격 증명을 사용하도록 소프트웨어를 설계하는 것이 좋다.AWS 리소스에 제한적으로 액세스 할 수 있을뿐 아니라 이러한 자격 증명은 지정된 기간 후에 만료되는 이점이 있다.임시 보안 자격 증명에 대한 자세한 내용은 다음을 참조하면 된다.
두 번째 글의 제목은 모바일 응용 프로그램을 구체적으로 언급하지만 이 문서에는 조직 외부에 배포된 AWS 응용 프로그램에 대한 유용한 정보가 들어있다.
프록시 자격 증명 사용
소프트웨어가 프록시를 통해 AWS와 통신하는 경우 서비스의 AmazonS3Config 클래스에 있는 ProxyCredentials 등록 정보를 사용하여 프록시에 대한 자격 증명을 지정할 수 있다.예를 들어 Amazon S3의 경우 다음과 유사한 코드를 사용할 수 있다. {my-username} 및 {my-password}는 NetworkCredential 객체에 지정된 프록시 사용자 이름 및 비밀번호이다.
AmazonS3Config config = new AmazonS3Config(); config.ProxyCredentials = new NetworkCredential("my-username", "my-password");
이전 버전의 SDK에서는 ProxyUsername 및 ProxyPassword를 사용했지만 이러한 속성은 더 이상 사용되지 않는다.
[유니티 어필리에이트 프로그램]
아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.