Làm cách nào để chỉ định vai trò IAM cho phiên bản Amazon EC2 được khởi chạy thông qua AWS CLI?


20

Tôi đang sử dụng lệnh "aws ec2 run-instance" (từ Giao diện dòng lệnh AWS (CLI) ) để khởi chạy một phiên bản Amazon EC2 . Tôi muốn đặt vai trò IAM cho phiên bản EC2 mà tôi sẽ khởi chạy. Vai trò IAM được cấu hình và tôi có thể sử dụng thành công khi khởi chạy một thể hiện từ giao diện người dùng web AWS. Nhưng khi tôi cố gắng thực hiện điều này bằng cách sử dụng lệnh đó và tùy chọn "--iam-instance-profile", nó đã thất bại. Thực hiện "aws ec2 run-instance help" hiển thị Arn = và Name = trường con cho giá trị. Khi tôi cố gắng tra cứu Arn bằng cách sử dụng "aws iam list-instance-profile", nó sẽ đưa ra thông báo lỗi này:

Xảy ra lỗi máy khách (AccessDenied): Người dùng: arn: aws: sts :: xxxxxxxxxxxx: ass-vai / shell / i-15c2766d không được phép thực hiện: iam: ListInstanceProfiles trên resource: arn: aws: iam :: xxxxxxx -Hồ sơ/

(trong đó xxxxxxxxxxxx là số tài khoản 12 chữ số AWS của tôi)

Tôi đã tra cứu chuỗi Arn thông qua giao diện người dùng web và sử dụng thông qua "--iam-instance-profile Arn = arn: aws: iam :: xxxxxxxxxxxx: instance-profile / shell" trên lệnh run-instance, và đã thất bại với :

Xảy ra lỗi máy khách (Không được phép): Bạn không được phép thực hiện thao tác này.

Nếu tôi hoàn toàn bỏ tùy chọn "--iam-instance-profile", cá thể sẽ khởi chạy nhưng nó sẽ không có cài đặt vai trò IAM tôi cần. Vì vậy, sự cho phép dường như có liên quan đến việc sử dụng "--iam-instance-profile" hoặc truy cập dữ liệu IAM. Tôi đã lặp đi lặp lại nhiều lần trong trường hợp AWS bị trục trặc (đôi khi chúng xảy ra) và không thành công.

Tôi nghi ngờ rằng có lẽ có một hạn chế là một cá thể có vai trò IAM không được phép khởi chạy một thể hiện có vai trò IAM mạnh hơn. Nhưng trong trường hợp này, ví dụ tôi đang thực hiện lệnh trong đó có cùng vai trò IAM mà tôi đang cố gắng sử dụng. được đặt tên là "vỏ" (mặc dù tôi cũng đã thử sử dụng một cái khác, không có may mắn).

  • Việc thiết lập vai trò IAM thậm chí không được phép từ một thể hiện (thông qua thông tin xác thực vai trò IAM của nó)?

  • Có một số quyền IAM cao hơn cần thiết để sử dụng vai trò IAM, hơn mức cần thiết cho việc khởi chạy một thể hiện đơn giản?

  • "--Iam-instance-profile" có phải là cách thích hợp để chỉ định vai trò IAM không?

  • Tôi có cần sử dụng tập hợp con của chuỗi Arn hoặc định dạng nó theo một cách khác không?

  • Có thể thiết lập vai trò IAM có thể thực hiện bất kỳ vai trò IAM nào (có thể là "Super Root IAM" ... tạo nên tên này) không?

FYI, mọi thứ liên quan đến Linux chạy trên các trường hợp. Ngoài ra, tôi đang chạy tất cả những thứ này từ một ví dụ vì tôi không thể cài đặt các công cụ này trên máy tính để bàn của mình. Điều đó và tôi không muốn đặt thông tin đăng nhập người dùng IAM của mình vào bất kỳ bộ lưu trữ AWS nào như AWS khuyên ở đây .

sau khi trả lời:

Tôi không đề cập đến quyền khởi động của "PowerUserAccess" (so với "AdministratorAccess") vì tôi không nhận ra quyền truy cập bổ sung là cần thiết tại thời điểm câu hỏi được hỏi. Tôi cho rằng vai trò IAM là "thông tin" được đính kèm trong buổi ra mắt. Nhưng nó thực sự là nhiều hơn thế. Đó là một sự cho phép.

Câu trả lời:


23

Cập nhật

Mike Pope đã xuất bản một bài viết hay về Cấp phép cho ra mắt các trường hợp EC2 với các vai trò IAM (Giấy phép PassRole) trên Blog bảo mật AWS , giải thích vấn đề này theo quan điểm AWS.


Trả lời ban đầu

Câu trả lời của Skaperen đúng một phần (+1), nhưng hơi thiếu chính xác / sai lệch như sau (phần giải thích có vẻ hơi phức tạp đối với một nhận xét, do đó câu trả lời riêng biệt này):

Để khởi chạy một thể hiện EC2 với vai trò IAM cần có quyền truy cập quản trị vào cơ sở IAM.

Điều này đúng như vậy và hướng đến vấn đề tiềm ẩn, nhưng các quyền quản trị được yêu cầu khá hạn chế, vì vậy kết luận sau đây ...

Vì vai trò của IAM cấp quyền, rõ ràng có một vấn đề bảo mật cần được giải quyết. Bạn sẽ không muốn vai trò IAM là một phương tiện để cho phép leo thang quyền.

... là một chút sai lệch, trong trường hợp vấn đề bảo mật tiềm ẩn có thể được giải quyết đúng đắn. Vấn đề được đề cập trong Cấp các ứng dụng chạy trên Amazon EC2 Truy cập vào tài nguyên AWS :

Bạn có thể sử dụng vai trò IAM để quản lý thông tin đăng nhập cho các ứng dụng chạy trên phiên bản Amazon EC2. Khi bạn sử dụng vai trò, bạn không phải phân phối thông tin xác thực AWS cho các phiên bản Amazon EC2. Thay vào đó, bạn có thể tạo vai trò với các quyền mà ứng dụng sẽ cần khi chúng chạy trên Amazon EC2 và thực hiện cuộc gọi đến các tài nguyên AWS khác. Khi các nhà phát triển khởi chạy một phiên bản Amazon EC2, họ có thể chỉ định vai trò bạn đã tạo để liên kết với phiên bản đó. Các ứng dụng chạy trên ví dụ sau đó có thể sử dụng thông tin xác thực vai trò để ký yêu cầu.

Bây giờ, trong trường hợp sử dụng, các nhà phát triển được đề cập [rằng] khởi chạy một phiên bản Amazon EC2 trên thực tế chính là các phiên bản EC2, dường như mang lại 22 vấn đề bảo mật mà Skaperen đã vạch ra. Đó thực sự không phải là trường hợp như được minh họa bởi chính sách mẫu trong phần Quyền được yêu cầu khi sử dụng Vai trò với Amazon EC2 :

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

Vì vậy, iam:PassRoletrên thực tế, chỉ có quyền IAM được yêu cầu và về mặt kỹ thuật có tính chất hành chính, điều này không đạt được - tất nhiên, chính sách mẫu ở trên vẫn sẽ cho phép leo thang quyền bằng cách liệt kê và lần lượt vượt qua mọi vai trò khả dụng, nhưng điều này có thể được ngăn chặn bằng cách chỉ định những vai trò mong muốn / an toàn cho trường hợp sử dụng trong tay - điều này được nêu trong phần Hạn chế vai trò nào có thể được chuyển đến Trường hợp EC2 của Amazon (Sử dụng PassRole) :

Bạn có thể sử dụng quyền PassRole để ngăn người dùng chuyển vai trò sang Amazon EC2 có nhiều quyền hơn người dùng đã được cấp và sau đó chạy các ứng dụng theo các đặc quyền nâng cao cho vai trò đó. Trong chính sách vai trò, cho phép hành động PassRole và chỉ định tài nguyên (chẳng hạn như arn: aws: iam :: 111122223333: vai trò / ec2Roles / *) để chỉ ra rằng chỉ một vai trò hoặc tập hợp vai trò cụ thể mới có thể được chuyển sang phiên bản Amazon EC2 .

Chính sách mẫu tương ứng minh họa chính xác khớp với trường hợp sử dụng, nghĩa là cấp quyền để khởi chạy một thể hiện với vai trò bằng cách sử dụng API Amazon EC2 :

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

Cảm ơn thông tin về iam: PassRole. Đó là chi tiết hơn tôi đã học trước đây, nó cho thấy nhiều hơn những gì có thể được thực hiện bằng cách cấu hình các quyền như thế này.
Skaperen

1

Để khởi chạy một thể hiện EC2 với vai trò IAM cần có quyền truy cập quản trị vào cơ sở IAM. Điều này áp dụng ngay cả khi thể hiện mới có vai trò chính xác giống như thể hiện thực hiện khởi chạy. Ví dụ tôi đã khởi chạy từ có quyền "PowerUserAccess", cho phép khởi chạy một thể hiện, nhưng không truy cập vai trò IAM. Khi tôi nâng cấp quyền trong phiên bản khởi chạy thành "AdministratorAccess" thì nó đã hoạt động.

Vì vai trò của IAM cấp quyền, rõ ràng có một vấn đề bảo mật cần được giải quyết. Bạn sẽ không muốn vai trò IAM là một phương tiện để cho phép leo thang quyền. Nhưng điều này cũng có nghĩa là để cấp bất kỳ vai trò IAM nào, phiên bản khởi chạy phải có "AdministratorAccess" hoặc sử dụng khóa truy cập / khóa bí mật của người dùng (với sự cho phép đó) từ trong trường hợp (không được khuyến nghị), cho phép cấp bất kỳ vai trò IAM nào.

Có thể khởi chạy một thể hiện với cùng một quyền (cùng vai trò IAM) như được tổ chức bởi việc thực hiện khởi chạy sẽ hữu ích, nhưng EC2 hoặc IAM không có mức độ chi tiết này hoặc không có phương tiện để xác minh an toàn điều này .


1
Phân tích / mô tả vấn đề cơ bản của bạn một cách chính xác (+1), nhưng kết luận của bạn hơi thiếu chính xác / sai lệch - Tôi đã thêm một câu trả lời riêng để giải thích chính xác cách giải quyết vấn đề bảo mật tiềm năng của IAM.
Steffen Opel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.