Điểm:0

Truy cập dịch vụ siêu dữ liệu EC2 từ phiên bản CodeBuild

lá cờ vn

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)

Tim avatar
lá cờ gp
Tim
CodeBuild được xây dựng trong các vùng chứa, không phải trên EC2, mặc dù tôi đoán cuối cùng các vùng chứa nằm trên EC2. Tôi đoán không có cách nào để lấy siêu dữ liệu cá thể. Điều tương tự cũng xảy ra trên RDS/Oracle, bạn không thể truy cập vai trò cá thể. Một cách giải quyết khác là chuyển thông tin đăng nhập trong một tham số.
DrTeeth avatar
lá cờ vn
Vấn đề ở đây là tôi thực sự cần thông tin đăng nhập - bao gồm quản lý chúng, xoay vòng chúng, chuyển chúng dưới dạng env vars, v.v. Điểm mấu chốt của các vai trò ví dụ là tôi chỉ cần nói "Dự án CodeBuild này phải có các quyền này" và tôi đã hoàn thành . Và điều này hoạt động trên phiên bản CodeBuild, không phải bên trong bộ chứa docker được sinh ra trong phiên bản đó - và tôi không chắc nó như thế nào - dường như không tuân theo cách AWS CLI được ghi lại. Nếu đúng như vậy, làm cách nào tôi có thể lấy thông tin đăng nhập từ vai trò để chuyển chúng tới vùng chứa?
Điểm:2
lá cờ vn

Tốt nhất tôi đã tìm thấy cho điều này cho đến nay ...

Cảm ơn nhận xét từ @Tim, CodeBuild chạy trên ECS. Khi thực hiện điều đó, nó sẽ lấy thông tin đăng nhập từ thông tin xác thực vùng chứa. Chúng dường như được lấy từ một địa chỉ IP khác, có thể được truy cập thông qua

169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

Bạn có thể trích xuất thông tin xác thực vai trò từ cuộc gọi đó rồi chuyển chúng vào vùng chứa Docker.

Tim avatar
lá cờ gp
Tim
Hấp dẫn. Tôi tự hỏi nếu RDS là tương tự. Nếu nó đã làm điều đó có thể đã nói với chúng tôi RẤT NHIỀU thời gian.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.