스팟 플릿 권한
사용자가 스팟 플릿을 생성하거나 관리하는 경우 필요한 권한을 부여해야 합니다.
Amazon EC2 콘솔을 사용하여 스팟 플릿을 생성하는 경우 AWSServiceRoleForEC2SpotFleet
및 AWSServiceRoleForEC2Spot
이라는 서비스 연결 역할 2개와 스팟 플릿에 사용자 대신 리소스를 요청, 시작, 종료 및 태깅할 수 있는 권한을 부여하는 aws-ec2-spot-fleet-tagging-role
이라는 역할이 생성됩니다. AWS CLI 또는 API를 사용하는 경우 이러한 역할이 존재하는지 확인해야 합니다.
다음 지침에 따라 필요한 권한을 부여하고 역할을 생성합니다.
스팟 플릿의 사용자에게 권한 부여
스팟 플릿을 생성하거나 관리하는 사용자에게 필요한 권한을 부여해야 합니다.
스팟 플릿에 대한 정책 생성
https://console.aws.amazon.com/iam/
에서 IAM 콘솔을 엽니다. -
탐색 창에서 정책을 선택한 후 정책 생성을 선택합니다.
-
정책 생성 페이지에서 JSON을 선택하고 텍스트를 다음과 같이 바꿉니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances", "ec2:CreateTags", "ec2:RequestSpotFleet", "ec2:ModifySpotFleetRequest", "ec2:CancelSpotFleetRequests", "ec2:DescribeSpotFleetRequests", "ec2:DescribeSpotFleetInstances", "ec2:DescribeSpotFleetRequestHistory" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::*:role/aws-ec2-spot-fleet-tagging-role" }, { "Effect": "Allow", "Action": [ "iam:CreateServiceLinkedRole", "iam:ListRoles", "iam:ListInstanceProfiles" ], "Resource": "*" } ] }
위의 예제 정책은 사용자에게 대부분의 스팟 플릿 사용 사례에 필요한 권한을 부여합니다. 사용자를 특정 API 작업으로 제한하려면 대신 해당 작업만 지정하세요.
필수 EC2 및 IAM API
다음 API가 정책에 포함되어야 합니다.
-
ec2:RunInstances
- 스팟 플릿에서 인스턴스를 시작하는 데 필요합니다. -
ec2:CreateTags
- 스팟 플릿 요청, 인스턴스 또는 볼륨을 태깅하는 데 필요합니다. -
iam:PassRole
- 스팟 플릿 역할을 지정하는 데 필요합니다. -
iam:CreateServiceLinkedRole
- 서비스 연결 역할을 생성하는 데 필요합니다. -
iam:ListRoles
- 기존 IAM 역할을 열거하는 데 필요합니다. -
iam:ListInstanceProfiles
- 기존 인스턴스 프로파일을 열거하는 데 필요합니다.
중요
시작 사양 또는 시작 템플릿에서 IAM 인스턴스 프로파일에 대한 역할을 지정하는 경우, 사용자에게 역할을 서비스에 전달할 수 있는 권한을 부여해야 합니다. 이를 위해 IAM 정책에
"arn:aws:iam::*:role/
작업을 위한IamInstanceProfile-role
"iam:PassRole
리소스를 포함하세요. 자세한 내용은 IAM 사용 설명서에서 사용자에게 AWS 서비스 역할을 전달할 수 있는 권한 부여를 참조하세요.스팟 플릿 API
필요에 따라 다음 스팟 플릿 API 작업을 정책에 추가합니다.
-
ec2:RequestSpotFleet
-
ec2:ModifySpotFleetRequest
-
ec2:CancelSpotFleetRequests
-
ec2:DescribeSpotFleetRequests
-
ec2:DescribeSpotFleetInstances
-
ec2:DescribeSpotFleetRequestHistory
선택적 IAM API
(선택 사항) 사용자가 IAM 콘솔을 사용하여 역할 또는 인스턴스 프로파일을 생성할 수 있도록 하려면 정책에 다음 작업을 추가해야 합니다.
-
iam:AddRoleToInstanceProfile
-
iam:AttachRolePolicy
-
iam:CreateInstanceProfile
-
iam:CreateRole
-
iam:GetRole
-
iam:ListPolicies
-
-
정책 검토를 선택합니다.
-
정책 검토 페이지에 정책 이름과 설명을 입력한 다음 정책 생성을 선택합니다.
-
액세스 권한을 제공하려면 사용자, 그룹 또는 역할에 권한을 추가하세요:
-
AWS IAM Identity Center의 사용자 및 그룹:
권한 세트를 생성합니다. AWS IAM Identity Center 사용 설명서의 권한 세트 생성의 지침을 따릅니다.
-
보안 인증 공급자를 통해 IAM에서 관리되는 사용자:
ID 페더레이션을 위한 역할을 생성합니다. IAM 사용 설명서의 Create a role for a third-party identity provider (federation)의 지침을 따릅니다.
-
IAM 사용자:
-
사용자가 맡을 수 있는 역할을 생성합니다. IAM 사용 설명서에서 Create a role for an IAM user의 지침을 따릅니다.
-
(권장되지 않음)정책을 사용자에게 직접 연결하거나 사용자를 사용자 그룹에 추가합니다. IAM 사용 설명서에서 사용자(콘솔)에 권한 추가의 지침을 따르세요.
-
-
스팟 플릿의 서비스 연결 역할
Amazon EC2는 다른 AWS 서비스를 자동으로 호출하는 데 필요한 권한에 서비스 연결 역할을 사용합니다. 서비스 연결 역할은 AWS 서비스에 직접 연결된 고유한 유형의 IAM 역할입니다. 연결된 서비스만 서비스 연결 역할을 담당할 수 있으므로 서비스 연결 역할은 AWS 서비스로 권한을 위임하는 안전한 방법을 제공합니다. 자세한 내용은 IAM 사용 설명서의 서비스 연결 역할을 참조하세요.
Amazon EC2는 AWSServiceRoleForEC2Spot이라는 이름의 서비스 연결 역할을 사용하여 사용자 대신 인스턴스를 시작하고 관리합니다.
중요
스팟 플릿에서 암호화된 AMI 또는 암호화된 Amazon EBS 스냅샷을 지정하는 경우 Amazon EC2에서 자동으로 인스턴스를 시작하려면 CMK를 사용할 권한을 AWSServiceRoleForEC2SpotFleet 역할에 부여해야 합니다. 자세한 내용은 암호화된 AMI 및 EBS 스냅샷에 사용할 CMK에 대한 액세스 권한 부여 섹션을 참조하세요.
AWSServiceRoleForEC2SpotFleet에서 부여된 권한
AWSServiceRoleForEC2SpotFleet 역할은 스팟 플릿에 사용자 대신 인스턴스를 요청, 시작 및 종료하고 태그를 지정할 수 있는 권한을 부여합니다. Amazon EC2는 이 서비스 연결 역할을 사용하여 다음 작업을 완료합니다.
-
ec2:RequestSpotInstances
- 스팟 인스턴스 요청 -
ec2:RunInstances
- 인스턴스 시작 -
ec2:TerminateInstances
- 인스턴스 종료 -
ec2:DescribeImages
- 인스턴스에 대한 Amazon Machine Image(AMI) 설명 -
ec2:DescribeInstanceStatus
- 인스턴스 상태 설명 -
ec2:DescribeSubnets
- 인스턴스의 서브넷 설명 -
ec2:CreateTags
- 스팟 플릿 요청, 인스턴스 및 볼륨에 태그 추가 -
elasticloadbalancing:RegisterInstancesWithLoadBalancer
- 지정된 로드 밸런서에 지정된 인스턴스 추가 -
elasticloadbalancing:RegisterTargets
- 지정된 대상 그룹에 지정된 대상 등록
서비스 연결 역할 생성
대부분의 상황에서는 서비스 연결 역할을 수동으로 생성할 필요가 없습니다. 사용자가 콘솔을 사용하여 처음으로 스팟 플릿을 생성하면 Amazon EC2가 AWSServiceRoleForEC2SpotFleet 서비스 연결 역할을 생성합니다.
Amazon EC2가 이 서비스 연결 역할을 지원하기 시작한 2017년 10월 이전에 활성 스팟 플릿 요청을 보유한 경우 Amazon EC2에는 사용자의 AWS 계정에 AWSServiceRoleForEC2SpotFleet 역할이 이미 생성되어 있습니다. 자세한 내용은 IAM 사용 설명서에서 내 AWS 계정에 표시되는 새 역할을 참조하세요.
AWS CLI 또는 API를 사용하여 스팟 플릿을 생성하는 경우 먼저 이 역할이 있는지 확인해야 합니다.
콘솔을 사용하여 스팟 플릿에 대한 AWSServiceRoleForEC2SpotFleet 역할을 생성하려면 다음을 수행하세요.
https://console.aws.amazon.com/iam/
에서 IAM 콘솔을 엽니다. -
탐색 창에서 역할을 선택합니다.
-
역할 생성(Create role)을 선택합니다.
-
신뢰할 수 있는 엔터티 선택 페이지에서 다음을 수행합니다.
-
신뢰할 수 있는 엔터티 유형에서 AWS 서비스를 선택합니다.
-
사용 사례에서 서비스 또는 사용 사례로 EC2를 선택합니다.
-
사용 사례에서 EC2 - 스팟 플릿을 선택합니다.
참고
EC2 - 스팟 플릿 사용 사례는 필요한 IAM 권한으로 정책을 자동으로 생성하고 AWSEC2SpotFleetServiceRolePolicy를 역할 이름으로 제안합니다.
-
다음을 선택합니다.
-
-
권한 추가 페이지에서 다음을 선택합니다.
-
이름 지정, 검토 및 생성 페이지에서 역할 생성을 선택합니다.
AWS CLI를 사용하여 스팟 플릿에 대한 AWSServiceRoleForEC2SpotFleet 역할을 생성하려면 다음을 수행하세요.
다음과 같이 create-service-linked-role
aws iam create-service-linked-role --aws-service-name spotfleet.amazonaws.com
스팟 플릿이 더 이상 필요 없으면 AWSServiceRoleForEC2SpotFleet 역할을 삭제하는 것이 좋습니다. 계정에서 이 역할이 삭제된 후 콘솔을 사용하여 스팟 플릿을 요청하면 Amazon EC2가 다시 해당 역할을 생성합니다. 자세한 내용은 IAM 사용 설명서의 서비스 연결 역할 삭제를 참조하십시오.
암호화된 AMI 및 EBS 스냅샷에 사용할 CMK에 대한 액세스 권한 부여
스팟 플릿 요청에서 암호화된 AMI 또는 암호화된 Amazon EBS 스냅샷을 지정하고 암호화에 고객 관리형 키를 사용하는 경우 Amazon EC2에서 자동으로 인스턴스를 시작하려면 CMK를 사용할 권한을 AWSServiceRoleForEC2SpotFleet 역할에 부여해야 합니다. 이렇게 하려면 다음 절차에 표시된 바와 같이 CMK에 권한을 추가해야 합니다.
권한을 제공할 때 권한 부여는 키 정책을 대체합니다. 자세한 내용은 AWS Key Management Service 개발자 안내서에서 권한 부여 사용 및 AWS KMS의 키 정책 사용을 참조하세요.
CMK를 사용할 수 있도록 AWSServiceRoleForEC2SpotFleet 역할 권한을 부여하려면
-
create-grant
명령을 사용하여 CMK에 권한을 추가하고 허용된 작업을 수행할 수 있는 권한이 부여된 보안 주체(AWSServiceRoleForEC2SpotFleet 서비스 연결 역할)를 지정합니다. CMK는 CMK의 key-id
파라미터 및 ARN에 의해 지정됩니다. 보안 주체는 AWSServiceRoleForEC2SpotFleet 서비스 연결 역할의grantee-principal
파라미터 및 ARN에 의해 지정됩니다.aws kms create-grant \ --region
us-east-1
\ --key-id arn:aws:kms:us-east-1
:444455556666
:key/1234abcd-12ab-34cd-56ef-1234567890ab
\ --grantee-principal arn:aws:iam::111122223333
:role/aws-service-role/spotfleet.amazonaws.com/AWSServiceRoleForEC2SpotFleet \ --operations "Decrypt" "Encrypt" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "CreateGrant" "DescribeKey" "ReEncryptFrom" "ReEncryptTo"
스팟 인스턴스에 대한 서비스 연결 역할
Amazon EC2는 AWSServiceRoleForEC2Spot이라는 이름의 서비스 연결 역할을 사용하여 사용자 대신 스팟 인스턴스를 시작하고 관리합니다. 자세한 내용은 스팟 인스턴스 요청에 대한 서비스 연결 역할 섹션을 참조하세요.
스팟 플릿 태깅을 위한 IAM 역할
aws-ec2-spot-fleet-tagging-role
IAM 역할은 스팟 플릿 요청, 인스턴스 및 볼륨에 태깅할 수 있는 권한을 스팟 플릿에 부여합니다. 자세한 내용은 신규 또는 기존 스팟 플릿 요청과 이를 통해 시작되는 인스턴스 및 볼륨 태그 지정 섹션을 참조하세요.
중요
플릿의 인스턴스를 태깅하고 목표 용량을 유지하기로 선택하면(스팟 플릿 요청은 maintain
유형) 사용자 설정 권한 차이로 인해 IamFleetRole
은 플릿에서 인스턴스의 태그 지정 동작이 일치하지 않을 수 있습니다. IamFleetRole
에 CreateTags
권한이 없으면 플릿에서 시작한 일부 인스턴스에 태그가 지정되지 않을 수 있습니다. 이러한 불일치를 수정하는 동안 플릿에서 시작한 모든 인스턴스에 태그가 지정되도록 하려면 aws-ec2-spot-fleet-tagging-role
에 IamFleetRole
역할을 사용하는 것이 좋습니다. 또는 기존 역할을 사용하려면 AmazonEC2SpotFleetTaggingRole
AWS 관리형 정책을 기존 역할에 연결합니다. 그렇게 하지 않으면 기존 정책에 CreateTags
권한을 수동으로 추가해야 합니다.
스팟 플릿 태깅을 위한 IAM 역할을 생성하려면
https://console.aws.amazon.com/iam/
에서 IAM 콘솔을 엽니다. -
탐색 창에서 역할을 선택합니다.
-
역할 생성(Create role)을 선택합니다.
-
신뢰할 수 있는 엔터티 선택 페이지의 신뢰할 수 있는 엔터티 유형(Trusted entity type) 아래에서 서비스(AWS service)를 선택합니다.
-
사용 사례(Use case)의 기타 AWS 서비스 사용 사례(Use cases for other services)에서 EC2를 선택한 다음 EC2 - 스팟 플릿 태깅(EC2 - Spot Fleet Tagging)을 선택합니다.
-
다음을 선택합니다.
-
권한 추가 페이지에서 다음을 선택합니다.
-
이름, 검토 및 생성 페이지에서 역할 이름(Role name)에서 역할 이름을 입력합니다(예:
aws-ec2-spot-fleet-tagging-role
). -
페이지에서 정보를 검토한 다음 역할 생성(Create role)을 선택합니다.
교차 서비스 혼동된 대리인 방지
혼동된 대리자 문제는 작업을 수행할 권한이 없는 엔터티가 권한이 더 많은 엔터티에 작업을 수행하도록 강요할 수 있는 보안 문제입니다. 리소스에 다른 서비스를 제공하는 스팟 플릿 권한을 제한하려면 aws-ec2-spot-fleet-tagging-role
신뢰 정책에서 aws:SourceArn
및 aws:SourceAccount
글로벌 조건 컨텍스트 키를 사용하는 것이 좋습니다.
aws:SourceArn 및 aws:SourceAccount 조건 키 aws-ec2-spot-fleet-tagging-role
신뢰 정책 추가
-
https://console.aws.amazon.com/iam/
에서 IAM 콘솔을 엽니다. -
탐색 창에서 역할을 선택합니다.
-
이전에 생성한
aws-ec2-spot-fleet-tagging-role
을 찾아 링크(확인란 아님)를 선택합니다. -
요약(Summary)에서 신뢰 관계(Trust relationships) 탭을 선택한 후 신뢰 정책 편집(Edit trust policy)을 선택합니다.
-
JSON 문에 혼동된 대리자 문제(confused deputy problem)를 방지하는
aws:SourceAccount
및aws:SourceArn
전역 조건 컨텍스트 키 등의Condition
요소를 추가합니다."Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:ec2:us-east-1:
account_id
:spot-fleet-request/sfr-*" }, "StringEquals": { "aws:SourceAccount": "account_id
" }참고
aws:SourceArn
값에 계정 ID가 포함되고 두 전역 조건 컨텍스트 키를 사용하는 경우,aws:SourceAccount
값 및aws:SourceArn
값의 계정은 동일한 정책 문에서 사용될 경우 반드시 같은 계정 ID를 사용해야 합니다.최종 신뢰 정책은 다음과 같습니다.
{ "Version": "2012-10-17", "Statement": { "Sid": "ConfusedDeputyPreventionExamplePolicy", "Effect": "Allow", "Principal": { "Service": "spotfleet.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:ec2:
us-east-1
:account_id
:spot-fleet-request/sfr-*" }, "StringEquals": { "aws:SourceAccount": "account_id
" } } } } -
정책 업데이트(Update policy)를 선택합니다.
다음 표에는 다양한 정도의 특정성을 가진 aws-ec2-spot-fleet-tagging-role
범위를 제한하기 위해 aws:SourceArn
에 대한 잠재적 값을 제공합니다.
API 작업 | 호출된 서비스 | 범위 | aws:SourceArn |
---|---|---|---|
RequestSpotFleet | AWS STS (AssumeRole ) |
지정된 계정에서 스팟 플릿 요청에 대해 aws-ec2-spot-fleet-tagging-role 로 AssumeRole 기능을 제한합니다. |
arn:aws:ec2:*: |
RequestSpotFleet | AWS STS (AssumeRole ) |
지정된 계정 및 지정된 리전에서 스팟 플릿 요청에 대해 aws-ec2-spot-fleet-tagging-role 로 AssumeRole 기능을 제한합니다. 이 역할은 다른 리전에서는 사용할 수 없습니다. |
arn:aws:ec2: |
RequestSpotFleet | AWS STS (AssumeRole ) |
플릿 sfr-11111111-1111-1111-1111-111111111111에 영향을 미치는 작업에 대해서만 aws-ec2-spot-fleet-tagging-role 로 AssumeRole 기능을 제한합니다. 이 역할은 다른 스팟 플릿에서는 사용하지 못할 수 있습니다. 또한 이 역할은 요청 스팟 플릿을 통해 새로운 스팟 플릿을 시작하는 데 사용할 수 없습니다. |
arn:aws:ec2: |