AWS CLI를 통해 시작되는 Amazon EC2 인스턴스에 대한 IAM 역할을 지정하는 방법은 무엇입니까?


20

Amazon EC2 인스턴스 를 시작하기 위해 "aws ec2 run-instances"명령 ( AWS Command Line Interface (CLI)에서 )을 사용하고 있습니다. 시작 하는 EC2 인스턴스에 대한 IAM 역할 을 설정하고 싶습니다 . IAM 역할이 구성되어 AWS 웹 UI에서 인스턴스를 시작할 때이 역할을 성공적으로 사용할 수 있습니다. 그러나이 명령과 "--iam-instance-profile"옵션을 사용하여이 작업을 수행하려고하면 실패했습니다. "aws ec2 run-instances help"를 수행하면 값에 대한 Arn = 및 Name = 서브 필드가 표시됩니다. "aws iam list-instance-profiles"를 사용하여 Arn을 찾으려고하면 다음 오류 메시지가 나타납니다.

클라이언트 오류 (AccessDenied)가 발생했습니다. 사용자 : arn : aws : sts :: xxxxxxxxxxxx : assumed-role / shell / i-15c2766d는 다음을 수행 할 권한이 없습니다 : 자원의 iam : ListInstanceProfiles : arn : aws : iam :: xxxxxxxxxxxx : instance -윤곽/

(xxxxxxxxxxxx는 AWS 12 자리 계정 번호입니다)

웹 UI를 통해 Arn 문자열을 찾아 run-instances 명령에서 "--iam-instance-profile Arn = arn : aws : iam :: xxxxxxxxxxxx : instance-profile / shell"을 통해 Arn 문자열을 찾아 보았습니다. :

클라이언트 오류 (UnauthorizedOperation)가 발생했습니다.이 작업을 수행 할 권한이 없습니다.

"--iam-instance-profile"옵션을 완전히 해제하면 인스턴스가 시작되지만 필요한 IAM 역할 설정이 없습니다. 따라서 권한은 "--iam-instance-profile"을 사용하거나 IAM 데이터에 액세스하는 것과 관련이있는 것 같습니다. AWS 글리치 (경우에 따라 발생)의 경우 여러 번 반복했지만 성공하지 못했습니다.

IAM 역할을 가진 인스턴스가 더 강력한 IAM 역할을 가진 인스턴스를 시작할 수 없다는 제한이있을 수 있습니다. 그러나이 경우 명령을 수행중인 인스턴스는 사용하려는 IAM 역할과 동일합니다. "쉘"이라는 이름을 붙였습니다 (물론 다른 것을 사용해 보았습니다).

  • IAM 역할 자격 증명을 통해 인스턴스에서 IAM 역할을 설정할 수 없습니까?

  • 일반 인스턴스를 시작하는 데 필요한 것보다 IAM 역할을 사용하는 데 필요한 높은 IAM 역할 권한이 있습니까?

  • "--iam-instance-profile"이 IAM 역할을 지정하는 적절한 방법입니까?

  • Arn 문자열의 하위 집합을 사용하거나 다른 방법으로 포맷해야합니까?

  • IAM 역할 액세스를 수행 할 수있는 IAM 역할을 설정할 수 있습니까 (이 이름을 구성하는 "Super Root IAM"일 수 있음)?

참고로 모든 것은 인스턴스에서 실행되는 Linux와 관련이 있습니다. 또한 데스크톱에 이러한 도구를 설치할 수 없기 때문에 인스턴스에서이 모든 것을 실행하고 있습니다. 그와 나는 AWS에 의해 권고로 모든 AWS 스토리지 내 IAM 사용자 자격 증명을 넣어 싶지 않아 여기 .

답변 후 :

"PowerUserAccess"( "AdministratorAccess")의 인스턴스 시작 권한에 대해서는 언급하지 않았으므로 질문이있을 때 추가 액세스가 필요하다는 것을 알지 못했습니다. IAM 역할이 시작에 "정보"라고 가정했습니다. 그러나 그것은 실제로 그 이상입니다. 권한 부여입니다.

답변:


23

최신 정보

Mike Pope는 AWS 보안 블로그 에서 IAM 역할을 사용하여 EC2 인스턴스를 시작할 수있는 권한 부여 (PassRole 권한) 에 대한 유용한 기사를 게시했습니다 .


초기 답변

Skaperen의 답변 은 부분적으로 정확하지만 (+1) 다음과 같이 약간 부정확하거나 오도합니다 (설명은 설명하기에 너무 복잡해 보이 므로 별도의 답변입니다).

IAM 역할로 EC2 인스턴스를 시작하려면 IAM 기능에 대한 관리 액세스 권한이 필요합니다.

이것은 정확하고 근본적인 문제를 지적하지만 필요한 관리 권한은 다소 제한적이므로 다음 결론은 ...

IAM 역할은 권한을 부여하므로 분명히 해결해야 할 보안 문제가 있습니다. IAM 역할이 권한 에스컬레이션을 허용하는 수단이되기를 원하지 않습니다.

... 잠재적 인 보안 문제를 올바르게 해결할 수있는 한 약간의 오해의 소지가 있습니다. 이 주제는 Amazon EC2 인스턴스에서 실행되는 애플리케이션에 AWS 리소스에 대한 액세스 권한 부여 에서 해결됩니다 .

IAM 역할을 사용하여 Amazon EC2 인스턴스에서 실행되는 애플리케이션의 자격 증명을 관리 할 수 ​​있습니다. 역할을 사용할 때 AWS 자격 증명을 Amazon EC2 인스턴스에 배포 할 필요가 없습니다. 대신 애플리케이션이 Amazon EC2에서 실행될 때 필요한 권한으로 역할을 생성하고 다른 AWS 리소스를 호출 할 수 있습니다. 개발자가 Amazon EC2 인스턴스를 시작할 때 인스턴스와 연결하기 위해 생성 한 역할을 지정할 수 있습니다. 그런 다음 인스턴스에서 실행되는 애플리케이션은 역할 자격 증명을 사용하여 요청에 서명 할 수 있습니다.

현재 유스 케이스 내에서 언급 된 Amazon EC2 인스턴스를 시작한 개발자 는 실제로 EC2 인스턴스 자체이며, 이는 Skaperen이 설명한 캐치 22 보안 문제를 야기하는 것으로 보입니다. Amazon EC2에서 역할을 사용하는 데 필요한 권한 섹션의 샘플 정책에 나와있는 것처럼 실제로는 그렇지 않습니다 .

{
   "Version": "2012-10-17",
   "Statement": [{
      "Effect":"Allow",
      "Action":"iam:PassRole",
      "Resource":"*"
    },
    {
      "Effect":"Allow",
      "Action":"iam:ListInstanceProfiles",
      "Resource":"*"
    },
    {
      "Effect":"Allow",
      "Action":"ec2:*",
      "Resource":"*"
    }]
}

그래서 iam:PassRole기술적으로 관리 성격이가 아닌 사실 만 IAM 권한 필요하고, 동시에까지 도달하는 것을 - 물론, 위의 샘플 정책이 여전히 사용 가능한 역할을 통과 목록에 의해 차례로 권한을 확대 할 수 있도록 것입니다, 그러나 사용 사례에 전달할 안전하고 안전한 역할 만 지정하면이를 방지 할 수 있습니다. 이는 Amazon EC2 인스턴스에 전달할 수있는 역할 제한 (PassRole 사용) 섹션에 설명되어 있습니다 .

PassRole 권한을 사용하면 사용자가 이미 부여 된 것보다 많은 권한을 가진 Amazon EC2에 역할을 전달한 다음 해당 역할에 대한 높은 권한으로 애플리케이션을 실행하지 못하게 할 수 있습니다. 역할 정책에서 PassRole 작업을 허용하고 특정 역할 또는 역할 집합 만 Amazon EC2 인스턴스로 전달할 수 있음을 나타내는 리소스 (예 : arn : aws : iam :: 111122223333 : role / ec2Roles / *)를 지정하십시오. .

각 샘플 정책은 현재 사용 사례와 정확히 일치 함을 보여줍니다. 즉 , Amazon EC2 API를 사용하여 역할을 가진 인스턴스를 시작할 수있는 권한을 부여 합니다 .

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect":"Allow",
      "Action":"ec2:RunInstances",
      "Resource":"*"
    },
    {
      "Effect":"Allow",
      "Action":"iam:PassRole",
      "Resource":"arn:aws:iam::123456789012:role/Get-pics"
    }]
}

iam : PassRole에 대한 정보를 주셔서 감사합니다. 그것은 내가 전에 배운 것보다 더 자세하고, 이와 같은 권한을 구성함으로써 할 수있는 것보다 훨씬 더 많이 보여줍니다.
Skaperen

1

IAM 역할로 EC2 인스턴스를 시작하려면 IAM 기능에 대한 관리 액세스 권한이 필요합니다. 새 인스턴스가 시작을 수행하는 인스턴스와 정확히 동일한 역할을하는 경우에도 적용됩니다. 내가 시작한 인스턴스에는 "PowerUserAccess"권한이있어서 인스턴스를 시작할 수는 있었지만 IAM 역할 액세스는 할 수 없었습니다. 시작 인스턴스의 권한을 "AdministratorAccess"로 고급 설정하면 제대로 작동합니다.

IAM 역할은 권한을 부여하므로 분명히 해결해야 할 보안 문제가 있습니다. IAM 역할이 권한 에스컬레이션을 허용하는 수단이되기를 원하지 않습니다. 그러나 이는 또한 IAM 역할을 부여하려면 시작 인스턴스에 "AdministratorAccess"가 있거나 인스턴스 내에서 (권장되지 않은) 사용자 액세스 / 비밀 키를 사용하고 있어야하며 (권장되지 않음) IAM 역할을 부여 할 수 있습니다.

시작을 수행하는 인스턴스가 보유한 것과 동일한 권한 (동일한 IAM 역할)으로 인스턴스를 시작할 수 있으면 유용하지만 EC2 또는 IAM에는이 수준의 세분성이 없거나이를 확인할 수있는 수단이 없습니다. .


1
기본 문제를 올바르게 분석 / 설명했지만 (+1) 결론이 약간 부정확하거나 오도 됩니다. IAM이 잠재적 보안 문제를 해결하는 방법을 올바르게 설명하기 위해 별도의 답변 을 추가했습니다 .
Steffen Opel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.