IAM 역할 수임 - AWS SDK for PHP

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

IAM 역할 수임

Amazon EC2 인스턴스 변수 자격 증명에 IAM 역할 사용

Amazon EC2 인스턴스에서 애플리케이션을 실행하는 경우 에 전화를 걸 수 있는 보안 인증 정보를 제공하는 데 선호되는 방법은 IAM 역할을 사용하여 임시 보안 보안 인증을 받는 AWS 것입니다.

IAM 역할을 사용하는 경우 애플리케이션에서 자격 증명 관리에 대해 걱정할 필요가 없습니다. 이를 통해 Amazon 인스턴스의 메타데이터 서버에서 임시 보안 인증을 검색하여 EC2 인스턴스가 역할을 “수임”할 수 있습니다.

인스턴스 프로파일 보안 인증이라고도 하는 임시 보안 인증을 사용하면 역할 정책에서 허용하는 작업 및 리소스에 액세스할 수 있습니다. Amazon은 인스턴스를 IAM 서비스에 안전하게 인증하여 역할을 수임하고 검색된 역할 자격 증명을 주기적으로 새로 고치는 모든 레그워크를 EC2 처리합니다. 이러한 방식으로 사용자의 별도 작업 없이 애플리케이션을 안전하게 보호할 수 있습니다. 임시 보안 자격 증명을 수락하는 서비스 목록은 IAM 사용 설명서의 AWS 에서 작동하는 서비스를 IAM 참조하세요.

참고

매번 메타데이터 서비스를 실행하지 않으려면 Aws\CacheInterface의 인스턴스를 'credentials' 옵션으로 클라이언트 생성자에 전달할 수 있습니다. 이렇게 하면 가 대신 캐시된 인스턴스 프로필 자격 증명을 SDK 사용할 수 있습니다. 자세한 내용은 AWS SDK for PHP 버전 3 구성을 참조하세요.

를 사용하여 Amazon EC2 애플리케이션을 개발하는 방법에 대한 자세한 내용은 AWS SDKs 및 도구 참조 가이드Amazon EC2 인스턴스에 대한 IAM 역할 사용을 SDKs참조하세요.

Amazon EC2 인스턴스에 IAM 역할 생성 및 할당

  1. IAM 클라이언트를 생성합니다.

    가져오기

    require 'vendor/autoload.php'; use Aws\Iam\IamClient;

    샘플 코드

    $client = new IamClient([ 'region' => 'us-west-2', 'version' => '2010-05-08' ]);
  2. 사용할 작업 및 리소스에 대한 권한이 있는 IAM 역할을 생성합니다.

    샘플 코드

    $result = $client->createRole([ 'AssumeRolePolicyDocument' => 'IAM JSON Policy', // REQUIRED 'Description' => 'Description of Role', 'RoleName' => 'RoleName', // REQUIRED ]);
  3. IAM 인스턴스 프로파일을 생성하고 결과에서 Amazon 리소스 이름(ARN)을 저장합니다.

    참고

    대신 IAM 콘솔을 사용하는 경우 AWS SDK for PHP콘솔은 인스턴스 프로파일을 자동으로 생성하고 해당하는 역할과 동일한 이름을 부여합니다.

    샘플 코드

    $IPN = 'InstanceProfileName'; $result = $client->createInstanceProfile([ 'InstanceProfileName' => $IPN , ]); $ARN = $result['Arn']; $InstanceID = $result['InstanceProfileId'];
  4. Amazon EC2 클라이언트를 생성합니다.

    가져오기

    require 'vendor/autoload.php'; use Aws\Ec2\Ec2Client;

    샘플 코드

    $ec2Client = new Ec2Client([ 'region' => 'us-west-2', 'version' => '2016-11-15', ]);
  5. 실행 중이거나 중지된 Amazon 인스턴스에 EC2 인스턴스 프로파일을 추가합니다. IAM 역할의 인스턴스 프로필 이름을 사용합니다.

    샘플 코드

    $result = $ec2Client->associateIamInstanceProfile([ 'IamInstanceProfile' => [ 'Arn' => $ARN, 'Name' => $IPN, ], 'InstanceId' => $InstanceID ]);

자세한 내용은 IAM Amazon 사용 설명서의 Amazon에 대한 역할을 EC2 참조하세요. EC2

Amazon ECS 작업에 IAM 역할 사용

Amazon Elastic Container Service(Amazon ECS)의 태스크는 호출할 IAM 역할을 맡을 수 있습니다 AWS API. 이는 Amazon EC2 인스턴스 프로파일이 Amazon EC2 인스턴스에 보안 인증을 제공하는 방식과 마찬가지로 애플리케이션에서 사용할 보안 인증을 관리하기 위한 전략입니다.

장기 AWS 보안 인증을 생성하여 컨테이너에 배포하거나 Amazon EC2 인스턴스의 역할을 사용하는 대신 임시 보안 인증을 사용하는 IAM 역할을 ECS 작업 정의 또는 RunTask API 작업과 연결할 수 있습니다.

컨테이너 태스크가 수임할 수 있는 IAM 역할 사용에 대한 자세한 내용은 Amazon ECS 개발자 안내서태스크 IAM 역할 주제를 참조하세요. 태스크 정의에서 의 형태로 태스크 IAM 역할을 사용하는 예제taskRoleArnAmazon ECS 개발자 안내서예제 태스크 정의를 참조하세요.

다른 에서 IAM 역할 수임 AWS 계정

AWS 계정 (계정 A)에서 작업하고 다른 계정(계정 B)에서 역할을 맡으려면 먼저 계정 B에서 IAM 역할을 생성해야 합니다. 이 역할은 계정(계정 A)의 엔터티가 계정 B에서 특정 작업을 수행하도록 허용합니다. 교차 계정 액세스에 대한 자세한 내용은 자습서: IAM 역할을 사용하여 AWS 계정 간 액세스 위임을 참조하세요.

계정 B에서 역할을 생성한 후 역할 을 기록합니다ARN. 계정 A에서 역할을 수임할 ARN 때 이 옵션을 사용합니다. 계정 A의 엔터티와 연결된 AWS 자격 증명을 사용하여 역할을 수임합니다.

에 대한 보안 인증 정보로 AWS STS 클라이언트를 생성합니다 AWS 계정. 다음에서는 보안 인증 프로파일을 사용했지만 어떤 방법이든 사용할 수 있습니다. 새로 생성된 AWS STS 클라이언트를 사용하여 assume-role을 호출하고 사용자 지정 를 제공합니다sessionName. 결과에서 새 임시 보안 인증을 검색합니다. 기본적으로 보안 인증은 1시간 지속됩니다.

샘플 코드

$stsClient = new Aws\Sts\StsClient([ 'profile' => 'default', 'region' => 'us-east-2', 'version' => '2011-06-15' ]); $ARN = "arn:aws:iam::123456789012:role/xaccounts3access"; $sessionName = "s3-access-example"; $result = $stsClient->AssumeRole([ 'RoleArn' => $ARN, 'RoleSessionName' => $sessionName, ]); $s3Client = new S3Client([ 'version' => '2006-03-01', 'region' => 'us-west-2', 'credentials' => [ 'key' => $result['Credentials']['AccessKeyId'], 'secret' => $result['Credentials']['SecretAccessKey'], 'token' => $result['Credentials']['SessionToken'] ] ]);

자세한 내용은 참조AssumeRole IAM 역할 사용 또는 섹션을 AWS SDK for PHP API 참조하세요.

웹 ID로 IAM 역할 사용

Web Identity Federation을 사용하면 고객이 AWS 리소스에 액세스할 때 인증에 타사 자격 증명 공급자를 사용할 수 있습니다. 웹 자격 증명이 있는 역할을 수임하려면 먼저 IAM 역할을 생성하고 웹 자격 증명 공급자(IdP)를 구성해야 합니다. 자세한 내용은 웹 ID 또는 OpenID Connect 페더레이션을 위한 역할 생성(콘솔)을 참조하세요.

자격 증명 공급자를 생성하고 웹 자격 증명 에 대한 역할을 생성한 후 AWS STS 클라이언트를 사용하여 사용자를 인증합니다. 자격 증명에 webIdentityToken ProviderId 및 를 제공하고 IAM 역할에 ARN 대한 역할에 사용자 권한을 부여합니다.

샘플 코드

$stsClient = new Aws\Sts\StsClient([ 'profile' => 'default', 'region' => 'us-east-2', 'version' => '2011-06-15' ]); $ARN = "arn:aws:iam::123456789012:role/xaccounts3access"; $sessionName = "s3-access-example"; $duration = 3600; $result = $stsClient->AssumeRoleWithWebIdentity([ 'WebIdentityToken' => "FACEBOOK_ACCESS_TOKEN", 'ProviderId' => "graph.facebook.com", 'RoleArn' => $ARN, 'RoleSessionName' => $sessionName, ]); $s3Client = new S3Client([ 'version' => '2006-03-01', 'region' => 'us-west-2', 'credentials' => [ 'key' => $result['Credentials']['AccessKeyId'], 'secret' => $result['Credentials']['SecretAccessKey'], 'token' => $result['Credentials']['SessionToken'] ] ]);

자세한 내용은 AssumeRoleWithWebIdentity- 웹 기반 자격 증명 공급자를 통한 페더레이션 또는 참조AssumeRoleWithWebIdentity를 AWS SDK for PHP API 참조하세요.

프로필을 사용하여 역할 수임

~/.aws/credentials에서 프로필을 정의하세요

에서 프로필을 정의하여 IAM 역할을 AWS SDK for PHP 사용하도록 를 구성할 수 있습니다~/.aws/credentials.

수임할 역할에 대해 role_arn 설정을 사용하여 새 프로필을 생성합니다. 또한 IAM 역할을 수임할 권한이 있는 자격 증명이 있는 다른 프로필에 대한 source_profile 설정도 포함합니다. 이러한 구성 설정에 대한 자세한 내용은 AWS SDKs 및 도구 참조 가이드역할 자격 증명 가정을 참조하세요.

예를 들어, 다음 ~/.aws/credentials에서 project1 프로필은 role_arn을 설정하고 default 프로필을 보안 인증의 원본으로 지정하여 연결된 엔티티가 역할을 수임할 수 있는지 확인합니다.

[project1] role_arn = arn:aws:iam::123456789012:role/testing source_profile = default role_session_name = OPTIONAL_SESSION_NAME [default] aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY aws_session_token= YOUR_AWS_SESSION_TOKEN

클라이언트를 시작할 때 AWS_PROFILE 환경 변수 또는 profile 파라미터를 설정하여 default 프로필을 소스 보안 인증으로 사용하면 project1에 지정된 역할이 수임됩니다.

다음 S3Client 스니펫은 생성자에서 profile 파라미터를 사용하는 방법을 보여줍니다. S3Client에는 project1 프로필과 관련된 역할과 관련된 권한이 있습니다.

$s3 = new Aws\S3\S3Client([ 'region' => 'us-east-1', 'version' => '2006-03-01', 'profile' => 'project1' ]);

~/.aws/config에서 프로필을 정의하세요

~/.aws/config 파일에는 가정하려는 프로필도 포함될 수 있습니다. 환경 변수 를 설정하면 SDK for AWS_SDK_LOAD_NONDEFAULT_CONFIGconfig 파일에서 프로파일을 PHP 로드합니다. AWS_SDK_LOAD_NONDEFAULT_CONFIG 이 설정되면 는 ~/.aws/config 및 에서 프로파일을 SDK 로드합니다~/.aws/credentials. ~/.aws/credentials의 프로필이 마지막으로 로드되고 ~/.aws/config에 있는 동일한 이름의 프로필보다 우선 적용됩니다. 어느 위치의 프로필이든 source_profile 또는 수임할 프로필로 사용할 수 있습니다.

다음 예제에서는 파일에 정의된 config 파일의 project1 프로필과 credentials파일의 default 프로필을 사용합니다. AWS_SDK_LOAD_NONDEFAULT_CONFIG도 설정됩니다.

# Profile in ~/.aws/config. [profile project1] role_arn = arn:aws:iam::123456789012:role/testing source_profile = default role_session_name = OPTIONAL_SESSION_NAME
# Profile in ~/.aws/credentials. [default] aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY aws_session_token= YOUR_AWS_SESSION_TOKEN

다음 스니펫과 같이 S3Client 생성자가 실행되면 프로필에 정의된 역할은 project1 프로필과 default 관련된 보안 인증을 사용하여 가정됩니다.

$s3 = new Aws\S3\S3Client([ 'region' => 'us-east-1', 'version' => '2006-03-01', 'profile' => 'project1' ]);