ฉันใช้งานคอนเทนเนอร์นักเทียบท่าจากภายใน AWS CodeBuild ภายใน VPC ของฉัน บนโฮสต์ ฉันไม่มีปัญหาในการทำงาน aws sts รับตัวตนผู้โทร
ไม่มีข้อมูลประจำตัว เช่น.:
aws sts รับตัวตนผู้โทร
{
"รหัสผู้ใช้": "[แก้ไขแล้ว]",
"บัญชี": "[แก้ไข]",
"Arn": "arn:aws:sts::[redacted]:assumed-role/[redacted]"
}
อย่างไรก็ตาม ภายในคอนเทนเนอร์นักเทียบท่า ฉันได้รับข้อผิดพลาดขณะพยายามระบุตัวตนของฉัน:
% aws sts รับรหัสผู้โทร
ไม่สามารถเข้าถึงบริการข้อมูลเมตาของ EC2
ไม่พบข้อมูลรับรอง คุณสามารถกำหนดค่าข้อมูลรับรองโดยเรียกใช้ "aws configuration"
ฉันคิดว่าเป็นเพราะฉันไม่สามารถเข้าถึงบริการข้อมูลเมตาของ EC2 เพื่อรับคีย์บทบาทได้ แต่ฉันคิดว่ามันควรจะ "ใช้งานได้" เนื่องจากคอนเทนเนอร์ควรมีสิทธิ์เข้าถึงเครือข่ายเดียวกันกับโฮสต์
ดังนั้นฉันจึงถอยออกมาและดูโฮสต์อีกครั้ง - ดูเหมือนว่าฉันไม่สามารถเข้าถึงบริการข้อมูลเมตาได้ http://169.254.169.254:
# curl -kv http://169.254.169.254/latest/meta-data/public-hostname
* ลอง 169.254.169.254:80...
* ตั้งค่า TCP_NODELAY
* การเชื่อมต่อทันทีล้มเหลวสำหรับ 169.254.169.254: อาร์กิวเมนต์ไม่ถูกต้อง
* ปิดการเชื่อมต่อ 0
curl: (7) ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์
อย่างไร aws เซนต์
ทำงานกับโฮสต์? ฉันคิดว่า AWS CLI จำเป็นต้องเข้าถึงบริการข้อมูลเมตานั้น หากไม่ได้ระบุข้อมูลประจำตัว ฉันจะทำให้มันทำงานภายในคอนเทนเนอร์ได้อย่างไร (ฉันไม่ต้องการส่งโทเค็นที่มีอายุการใช้งานยาวนานในตัวแปรสภาพแวดล้อม)
(แก้ไขด้วยรายละเอียดเพิ่มเติมจากการสำรวจโดยตรงบน SessionManager ในอินสแตนซ์ CodeBuild)