จะระบุบทบาท IAM สำหรับอินสแตนซ์ Amazon EC2 ที่เปิดตัวผ่าน AWS CLI ได้อย่างไร


20

ฉันใช้คำสั่ง "aws ec2 run-instance" (จากAWS Command Line Interface (CLI) ) เพื่อเปิดใช้งานอินสแตนซ์Amazon EC2 ฉันต้องการตั้งค่าบทบาท IAM สำหรับอินสแตนซ์ EC2 ที่ฉันเปิดตัว บทบาท IAM ได้รับการกำหนดค่าและฉันสามารถใช้งานได้สำเร็จเมื่อเปิดตัวอินสแตนซ์จาก AWS web UI แต่เมื่อฉันพยายามทำสิ่งนี้โดยใช้คำสั่งนั้นและตัวเลือก "--iam-instance-profile" มันล้มเหลว การทำ "aws ec2 run-instance help" แสดง Arn = และ Name = ฟิลด์ย่อยสำหรับค่า เมื่อฉันพยายามค้นหา Arn โดยใช้ "aws iam list-instance-profiles" มันให้ข้อความแสดงข้อผิดพลาดนี้:

เกิดข้อผิดพลาดของไคลเอ็นต์ (AccessDenied): ผู้ใช้: arn: aws: sts :: xxxxxxxxxxxx: สันนิษฐานว่ามีบทบาท / เชลล์ / i-15c2766d ไม่ได้รับอนุญาตให้ดำเนินการ: iam: ListInstanceProfiles บนทรัพยากร: arn: aws: iam :: xxxxxxxxxxxx: อินสแตนซ์ -ข้อมูลส่วนตัว/

(โดยที่ xxxxxxxxxxxx คือหมายเลขบัญชี AWS 12 หลักของฉัน)

ฉันค้นหาสตริง Arn ผ่าน UI ของเว็บและใช้มันผ่าน "--iam-instance-profile Arn = arn: aws: iam :: xxxxxxxxxxxx: instance-profile / shell" ในคำสั่ง run-instance และล้มเหลวด้วย :

มีข้อผิดพลาดของไคลเอ็นต์ (UnauthorizedOperation) เกิดขึ้น: คุณไม่ได้รับอนุญาตให้ดำเนินการนี้

หากฉันออกจากตัวเลือก "--iam-instance-profile" ทั้งหมดอินสแตนซ์จะเปิดขึ้น แต่จะไม่มีการตั้งค่าบทบาท IAM ที่ฉันต้องการ ดังนั้นการอนุญาตดูเหมือนจะมีบางอย่างเกี่ยวกับการใช้ "--iam-instance-profile" หรือการเข้าถึงข้อมูล IAM ฉันทำซ้ำหลายครั้งในกรณีที่ AWS บกพร่อง (เกิดขึ้นบางครั้ง) และไม่ประสบความสำเร็จ

ฉันสงสัยว่าอาจมีข้อ จำกัด ว่าอินสแตนซ์ที่มีบทบาท IAM ไม่ได้รับอนุญาตให้เปิดตัวอินสแตนซ์ที่มีบทบาท IAM ที่ทรงพลังกว่า แต่ในกรณีนี้อินสแตนซ์ที่ฉันทำคำสั่งมีบทบาท IAM เดียวกับที่ฉันพยายามใช้ ชื่อ "shell" (แม้ว่าฉันจะลองใช้อีกอันหนึ่งโดยไม่มีโชค)

  • การตั้งค่าบทบาท IAM ไม่ได้รับอนุญาตจากอินสแตนซ์ (ผ่านข้อมูลรับรองบทบาทของ IAM) หรือไม่

  • จำเป็นต้องมีการอนุญาตบทบาท IAM ที่สูงขึ้นเพื่อใช้บทบาท IAM มากกว่าที่จำเป็นสำหรับการเปิดตัวอินสแตนซ์ธรรมดาหรือไม่

  • "--iam-instance-profile" เป็นวิธีที่เหมาะสมในการระบุบทบาทของ IAM หรือไม่

  • ฉันจำเป็นต้องใช้ชุดย่อยของสตริง Arn หรือจัดรูปแบบด้วยวิธีอื่นหรือไม่?

  • เป็นไปได้ไหมที่จะตั้งค่าบทบาท IAM ที่สามารถเข้าถึงบทบาท IAM ใด ๆ (อาจเป็น "Super Root IAM" ... สร้างชื่อนี้)

FYI, ทุกอย่างเกี่ยวข้องกับ Linux ที่ทำงานบนอินสแตนซ์ นอกจากนี้ฉันกำลังเรียกใช้ทั้งหมดนี้จากอินสแตนซ์เนื่องจากฉันไม่สามารถติดตั้งเครื่องมือเหล่านี้บนเดสก์ท็อปของฉัน และผมไม่ต้องการที่จะนำข้อมูลประจำตัวของผู้ใช้ในการจัดเก็บ IAM AWS ใด ๆ ที่เป็นคำแนะนำจาก AWS ที่นี่

หลังจากตอบแล้ว:

ฉันไม่ได้กล่าวถึงการอนุญาตการเปิดตัวอินสแตนซ์ของ "PowerUserAccess" (vs. "AdministratorAccess") เพราะฉันไม่ได้ตระหนักถึงการเข้าถึงเพิ่มเติมที่จำเป็นในเวลาที่คำถามถูกถาม ฉันสันนิษฐานว่าบทบาท IAM คือ "ข้อมูล" ที่แนบมากับการเปิดตัว แต่มันเป็นมากกว่านั้นจริงๆ มันเป็นการอนุญาตที่ได้รับอนุญาต

คำตอบ:


23

ปรับปรุง

Mike Pope ได้ตีพิมพ์บทความที่ดีเกี่ยวกับการให้สิทธิ์ในการเปิดตัวอินสแตนซ์ EC2 กับ IAM Roles (PassRole Permission)ในบล็อกความปลอดภัย AWSซึ่งจะอธิบายหัวข้อในมุมมอง AWS


คำตอบเบื้องต้น

คำตอบของ Skaperenนั้นถูกต้องเพียงบางส่วน (+1) แต่เล็กน้อยไม่ชัดเจน / ทำให้เข้าใจผิดดังนี้ (คำอธิบายดูเหมือนซับซ้อนเกินไปสำหรับความคิดเห็นดังนั้นคำตอบนี้แยกต่างหาก):

ในการเรียกใช้อินสแตนซ์ EC2 ที่มีบทบาท IAM ต้องมีสิทธิ์การเข้าถึงระดับผู้ดูแลระบบเพื่ออำนวยความสะดวก IAM

สิ่งนี้ถูกต้องเช่นนี้และชี้ไปที่ปัญหาพื้นฐาน แต่สิทธิ์การดูแลระบบที่จำเป็นค่อนข้าง จำกัด ดังนั้นข้อสรุปดังต่อไปนี้ ...

เนื่องจากบทบาทของ IAM ให้การอนุญาตจึงมีปัญหาด้านความปลอดภัยที่จะต้องแก้ไข คุณไม่ต้องการให้บทบาทของ IAM เป็นเครื่องมือในการอนุญาตการเลื่อนระดับสิทธิ์

... เป็นความเข้าใจผิดเล็กน้อยตราบเท่าที่ปัญหาความปลอดภัยที่อาจเกิดขึ้นสามารถแก้ไขได้อย่างถูกต้อง หัวข้อได้รับการแก้ไขในการให้แอปพลิเคชันที่ทำงานบน Amazon EC2 อินสแตนซ์เข้าถึงทรัพยากร AWS :

คุณสามารถใช้บทบาท IAM เพื่อจัดการข้อมูลรับรองสำหรับแอปพลิเคชันที่ทำงานบนอินสแตนซ์ Amazon EC2 เมื่อคุณใช้บทบาทคุณไม่จำเป็นต้องแจกจ่ายข้อมูลรับรอง AWS ไปยังอินสแตนซ์ของ Amazon EC2 แต่คุณสามารถสร้างบทบาทด้วยสิทธิ์ที่แอปพลิเคชันจะต้องใช้เมื่อพวกเขาทำงานบน Amazon EC2 และโทรไปยังทรัพยากร AWS อื่น ๆ เมื่อนักพัฒนาเปิดตัวอินสแตนซ์ Amazon EC2 พวกเขาสามารถระบุบทบาทที่คุณสร้างเพื่อเชื่อมโยงกับอินสแตนซ์ แอปพลิเคชันที่ทำงานบนอินสแตนซ์สามารถใช้ข้อมูลรับรองบทบาทเพื่อลงนามคำขอ

ตอนนี้ภายในกรณีการใช้งานในมือผู้พัฒนาดังกล่าว[ที่] เปิดตัวอินสแตนซ์ Amazon EC2ในความเป็นจริงอินสแตนซ์ EC2 ตัวเองซึ่งดูเหมือนจะให้ผลผลิตจับประเด็นความปลอดภัย 22 Skaperen ระบุไว้ นี่ไม่ใช่กรณีจริง ๆ ตามที่แสดงโดยนโยบายตัวอย่างในส่วนสิทธิ์ที่จำเป็นสำหรับการใช้บทบาทกับ 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 และระบุทรัพยากร (เช่น arn: aws: iam :: 111122223333: role / ec2Roles / *) เพื่อระบุว่าเฉพาะบทบาทหรือชุดของบทบาทที่สามารถส่งผ่านไปยังอินสแตนซ์ Amazon EC2 .

นโยบายตัวอย่างนั้นแสดงให้เห็นถึงตรงกับกรณีการใช้งานที่อยู่ในมือคือมอบสิทธิ์ในการเปิดอินสแตนซ์ที่มีบทบาทโดยใช้ 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"
    }]
}

ขอบคุณสำหรับข้อมูลเกี่ยวกับ iam: PassRole นั่นคือรายละเอียดมากกว่าที่ฉันได้เรียนรู้มาก่อนมันแสดงให้เห็นมากมายเกินกว่าที่จะทำได้โดยการกำหนดค่าการอนุญาตเช่นนี้
Skaperen

1

ในการเรียกใช้อินสแตนซ์ EC2 ที่มีบทบาท IAM ต้องมีสิทธิ์การเข้าถึงระดับผู้ดูแลระบบเพื่ออำนวยความสะดวก 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.