Tôi đang chạy bộ chứa docker từ bên trong AWS CodeBuild bên trong VPC của mình. Trên máy chủ, tôi không gặp vấn đề gì khi chạy aws sts get-caller-identity
không có thông tin xác thực. Ví dụ.:
aws sts get-caller-identity
{
"UserId": "[đã biên tập lại]",
"Tài khoản": "[đã biên tập lại]",
"Arn": "arn:aws:sts::[đã xử lý lại]:vai trò được đảm nhận/[đã xử lý lại]"
}
Tuy nhiên, bên trong bộ chứa docker, tôi gặp lỗi khi cố lấy danh tính của mình:
% aws sts get-caller-identity
Không thể truy cập dịch vụ siêu dữ liệu EC2.
Không thể xác định vị trí thông tin xác thực. Bạn có thể định cấu hình thông tin đăng nhập bằng cách chạy "aws configure".
Tôi cho rằng điều này là do tôi không thể truy cập dịch vụ siêu dữ liệu EC2 để lấy các khóa vai trò, nhưng tôi nghĩ rằng nó sẽ "chỉ hoạt động" vì bộ chứa phải có quyền truy cập vào cùng một mạng với máy chủ.
Vì vậy, tôi đã thoát ra và xem lại máy chủ - có vẻ như tôi không thể truy cập dịch vụ siêu dữ liệu trên http://169.254.169.254:
# curl -kv http://169.254.169.254/latest/meta-data/public-hostname
* Đang thử 169.254.169.254:80...
* Bộ TCP_NODELAY
* Lỗi kết nối ngay lập tức cho 169.254.169.254: Đối số không hợp lệ
* Đóng kết nối 0
curl: (7) Không thể kết nối với máy chủ
Thế nào là chỉ số aws
làm việc trên máy chủ? Tôi nghĩ rằng AWS CLI cần quyền truy cập vào dịch vụ siêu dữ liệu đó nếu thông tin đăng nhập không được cung cấp. Làm cách nào tôi có thể làm cho nó hoạt động bên trong vùng chứa (tôi không muốn chuyển các mã thông báo tồn tại lâu dài trong các biến môi trường)?
(được chỉnh sửa với chi tiết bổ sung được tìm thấy từ việc khám phá trực tiếp trên SessionManager trong phiên bản CodeBuild)