Logo Zephyrnet

Bảo mật các URL được chỉ định trước của Amazon SageMaker Studio Phần 2: API riêng với xác thực JWT

Ngày:

In phần 1 của loạt bài này, chúng tôi đã trình bày cách giải quyết Xưởng sản xuất Amazon SageMaker URL được chỉ định trước từ mạng công ty sử dụng điểm cuối VPC riêng của Amazon mà không cần truyền qua internet. Trong bài đăng này, chúng tôi sẽ tiếp tục xây dựng trên giải pháp trước đó để chứng minh cách xây dựng Cổng API riêng thông qua Cổng API Amazon như một giao diện proxy để tạo và truy cập Amazon SageMaker URL được chỉ định trước. Hơn nữa, chúng tôi thêm một lan can bổ sung để đảm bảo các URL được chỉ định trước chỉ được tạo và truy cập cho người dùng cuối đã xác thực trong mạng công ty.

Tổng quan về giải pháp

Sơ đồ sau minh họa kiến ​​trúc của giải pháp.

Quy trình bao gồm các bước sau:

  1. Trong tạp chí Nhận thức về Amazon nhóm người dùng, trước tiên hãy thiết lập người dùng có tên phù hợp với hồ sơ người dùng Studio của họ và đăng ký Studio làm ứng dụng khách trong nhóm người dùng.
  2. Người dùng liên kết từ nhà cung cấp danh tính công ty (IdP) của họ và xác thực với nhóm người dùng Amazon Cognito để truy cập Studio.
  3. Amazon Cognito trả lại mã thông báo cho người dùng cấp quyền truy cập vào ứng dụng Studio.
  4. Người dùng gọi createStudioPresignedUrl API trên API Gateway cùng với mã thông báo trong tiêu đề.
  5. API Gateway gọi một tùy chỉnh AWS Lambda người ủy quyền và xác nhận mã thông báo.
  6. Khi mã thông báo hợp lệ, Amazon Cognito trả lại chính sách cấp quyền truy cập với id hồ sơ người dùng studio cho API Gateway.
  7. API Gateway gọi createStudioPresignedUrl Chức năng Lambda để tạo url được chỉ định trước của studio.
  8. Sản phẩm createStudioPresignedUrl hàm tạo một URL được chỉ định trước bằng cách sử dụng điểm cuối SageMaker API VPC và trả về trình gọi.
  9. Người dùng truy cập vào URL được chỉ định trước từ mạng công ty của họ được phân giải qua điểm cuối Studio VPC.
  10. Chức năng Quản lý truy cập và nhận dạng AWS (IAM) chính sách đảm bảo rằng việc tạo và truy cập URL được chỉ định trước được thực hiện thông qua các điểm cuối VPC.

Các phần sau đây sẽ hướng dẫn bạn cách triển khai, cấu hình và xác thực giải pháp cho API riêng của API Gateway để tạo và giải quyết một URL được chỉ định trước của Studio từ mạng công ty bằng cách sử dụng điểm cuối VPC.

  1. Triển khai giải pháp
  2. Định cấu hình người dùng Amazon Cognito
  3. Xác thực API riêng tư cho URL được chỉ định trước bằng Mã thông báo web JSON
  4. Định cấu hình máy chủ DNS của công ty để truy cập API riêng tư
  5. Kiểm tra API riêng của API Gateway để tìm URL được chỉ định trước từ mạng công ty
  6. Chính sách xác thực của Lambda URL được ký trước
  7. Dọn dẹp

Triển khai giải pháp

Bạn có thể triển khai giải pháp thông qua Bảng điều khiển quản lý AWS hoặc là Mô hình ứng dụng không có máy chủ AWS (AWS SAM).

Để triển khai giải pháp thông qua bảng điều khiển, hãy khởi chạy phần sau Hình thành đám mây AWS mẫu trong tài khoản của bạn bằng cách chọn Khởi chạy Stack. Mất khoảng 10 phút để hoàn thành ngăn xếp CloudFormation.

Để triển khai giải pháp bằng AWS SAM, bạn có thể tìm thấy mã mới nhất trong kho lưu trữ aws-Sample GitHub, nơi bạn cũng có thể đóng góp vào mã mẫu. Các lệnh sau đây cho biết cách triển khai giải pháp bằng AWS SAM CLI. Nếu hiện chưa được cài đặt, cài đặt AWS SAM CLI.

  1. Sao chép kho lưu trữ tại https://github.com/aws-samples/secure-sagemaker-studio-presigned-url.
  2. Sau khi bạn sao chép repo, hãy điều hướng đến nguồn và chạy mã sau:
    sam deploy –guided

Định cấu hình người dùng Amazon Cognito

Để định cấu hình người dùng Amazon Cognito của bạn, hãy hoàn thành các bước sau:

  1. Tạo người dùng Amazon Cognito có cùng tên với hồ sơ người dùng SageMaker:
    aws cognito-idp admin-create-user --user-pool-id <user_pool_id> --username <sagemaker_username>

  2. Đặt mật khẩu người dùng:
    aws cognito-idp admin-set-user-password --user-pool-id <user_pool_id> --username <sagemaker_username> --password <password> --permanent

  3. Nhận mã thông báo truy cập:
    aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --client-id <cognito_app_client_id> --auth-parameters USERNAME=<sagemaker_username>,PASSWORD=<password>

Xác thực API riêng tư cho URL được chỉ định trước bằng Mã thông báo web JSON

Khi bạn triển khai một API riêng để tạo URL được chỉ định trước của SageMaker, bạn đã thêm một rào chắn để hạn chế quyền truy cập vào URL được chỉ định bởi bất kỳ ai bên ngoài mạng công ty và điểm cuối VPC. Tuy nhiên, nếu không triển khai kiểm soát khác đối với API riêng trong mạng công ty, bất kỳ người dùng nội bộ nào trong mạng công ty sẽ có thể chuyển các tham số chưa được xác thực cho hồ sơ người dùng SageMaker và truy cập vào bất kỳ ứng dụng SageMaker nào.

Để giảm thiểu vấn đề này, chúng tôi đề xuất chuyển Mã thông báo web JSON (JWT) cho người gọi đã xác thực tới Cổng API và xác thực mã thông báo đó bằng trình ủy quyền JWT. Có nhiều tùy chọn để triển khai ủy quyền cho Cổng API riêng, sử dụng tùy chỉnh Người ủy quyền Lambda or Nhận thức về Amazon.

Với trình ủy quyền Lambda tùy chỉnh, bạn có thể nhúng tên hồ sơ người dùng SageMaker vào chính sách trả về. Điều này ngăn không cho bất kỳ người dùng nào trong mạng công ty có thể gửi bất kỳ tên hồ sơ người dùng SageMaker nào để tạo URL được chỉ định trước mà họ không được phép tạo. Chúng tôi sử dụng Amazon Cognito để tạo mã thông báo của mình và trình ủy quyền Lambda tùy chỉnh để xác thực và trả lại chính sách thích hợp. Để biết thêm thông tin, hãy tham khảo Xây dựng ủy quyền chi tiết bằng Amazon Cognito, API Gateway và IAM. Người ủy quyền Lambda sử dụng tên người dùng Amazon Cognito làm tên hồ sơ người dùng.

Nếu không thể sử dụng Amazon Cognito, bạn có thể phát triển một ứng dụng tùy chỉnh để xác thực và chuyển mã thông báo của người dùng cuối cho người ủy quyền Lambda. Để biết thêm thông tin, hãy tham khảo Sử dụng trình ủy quyền API Gateway Lambda.

Định cấu hình máy chủ DNS của công ty để truy cập API riêng tư

Để định cấu hình máy chủ DNS công ty của bạn, hãy hoàn thành các bước sau:

  1. trên Đám mây điện toán đàn hồi Amazon (Amazon EC2), chọn phiên bản DNSA EC2 tại chỗ của bạn và kết nối qua Quản lý phiên quản lý hệ thống.
  2. Thêm bản ghi vùng trong /etc/named.conf tệp để phân giải thành tên DNS của API Gateway thông qua Amazon Route 53 trình phân giải gửi đến, như được hiển thị trong đoạn mã sau:
    zone "zxgua515ef.execute-api.<region>.amazonaws.com" {
      type forward;
      forward only;
      forwarders { 10.16.43.122; 10.16.102.163; };
    };

  3. Khởi động lại dịch vụ đã đặt tên bằng lệnh sau:
    sudo service named restart

Xác thực yêu cầu URL được chỉ định trước từ API riêng của API Gateway cho người dùng được ủy quyền

Trong trường hợp thực tế, bạn sẽ triển khai giao diện front-end sẽ chuyển các tiêu đề Ủy quyền thích hợp cho các tài nguyên được xác thực và ủy quyền bằng cách sử dụng giải pháp tùy chỉnh hoặc đòn bẩy Amplify AWS. Để ngắn gọn cho bài đăng trên blog này, các bước sau đây thúc đẩy Postman nhanh chóng xác thực giải pháp mà chúng tôi đã triển khai thực sự hạn chế việc yêu cầu URL được chỉ định trước cho người dùng nội bộ, trừ khi được phép làm như vậy.

Để xác thực giải pháp với Postman, hãy hoàn thành các bước sau:

  1. Cài đặt Postman trên phiên bản WINAPP EC2. Xem hướng dẫn Ở đây
  2. Mở Postman và thêm mã thông báo truy cập vào Authorization tiêu đề:
    Authorization: Bearer <access token>

  3. Sửa đổi URL cổng API để truy cập nó từ phiên bản EC2 nội bộ của bạn:
    1. Thêm điểm cuối VPC vào URL cổng API của bạn:
      https://<API-G-ID>-<VPCE-ID>.execute-api.<region>.amazonaws.com/dev/EMPLOYEE_ID

    2. Thêm Host tiêu đề có giá trị của URL cổng API của bạn:
      <API-G-ID>.execute-api.<region>.amazonaws.com

    3. Đầu tiên, hãy thay đổi EMPLOYEE_ID cho người dùng Amazon Cognito và tên hồ sơ người dùng SageMaker của bạn. Đảm bảo rằng bạn nhận được một URL được chỉ định trước được ủy quyền.
    4. Sau đó, thay đổi EMPLOYEE_ID cho người dùng không phải của bạn và đảm bảo rằng bạn nhận được lỗi truy cập.
  4. Trên bảng điều khiển Amazon EC2, chọn phiên bản WINAPP tại chỗ của bạn và kết nối qua ứng dụng khách RDP của bạn.
  5. Mở trình duyệt Chrome và điều hướng đến URL được chỉ định được ủy quyền của bạn để khởi chạy Studio.

Studio được khởi chạy qua điểm cuối VPC với địa chỉ từ xa là IP điểm cuối của Studio VPC.

Nếu URL được chỉ định trước được truy cập bên ngoài mạng công ty, giải pháp không thành công vì điều kiện chính sách IAM cho URL được chỉ định trước thực thi việc tạo và truy cập từ điểm cuối VPC.

Chính sách xác thực của Lambda URL được ký trước

Giải pháp trên đã tạo Chính sách xác thực sau cho Lambda đã tạo URL được ký trước để truy cập SageMaker Studio.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Condition": {
                "IpAddress": {
                    "aws:VpcSourceIp": "10.16.0.0/16"
                }
            },
            "Action": "sagemaker:CreatePresignedDomainUrl",
            "Resource": "arn:aws:sagemaker:<region>:<account-id>:user-profile/*/*",
            "Effect": "Allow"
        },
        {
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "192.168.10.0/24"
                }
            },
            "Action": "sagemaker:CreatePresignedDomainUrl",
            "Resource": "arn:aws:sagemaker:<region>:<account-id>:user-profile/*/*",
            "Effect": "Allow"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpce": [
                        "vpce-sm-api-xx",
                        "vpce-sm-api-yy"
                    ]
                }
            },
            "Action": "sagemaker:CreatePresignedDomainUrl",
            "Resource": "arn:aws:sagemaker:<region>:<account-id>:user-profile/*/*",
            "Effect": "Allow"
        }
    ]
}

Chính sách trên thực thi URL đã ký trước của Studio vừa được tạo và vừa được truy cập thông qua một trong ba điểm nhập sau:

  1. aws: VpcSourceIp làm AWS VPC CIDR của bạn
  2. aws: SourceIp làm CIDR mạng công ty của bạn
  3. aws: sourceVpce làm điểm cuối VPC API SageMaker của bạn

Dọn dẹp

Để tránh phát sinh các khoản phí liên tục, xóa các ngăn xếp CloudFormation bạn đã tạo. Ngoài ra, nếu bạn đã triển khai giải pháp bằng SAM, bạn cần xác thực tài khoản AWS mà giải pháp đã được triển khai và chạy sam xóa.

Kết luận

Trong bài đăng này, chúng tôi đã trình bày cách truy cập Studio bằng Cổng API riêng từ mạng công ty bằng cách sử dụng điểm cuối VPC riêng của Amazon, ngăn truy cập vào các URL được chỉ định bên ngoài mạng công ty và bảo mật Cổng API bằng trình ủy quyền JWT sử dụng Amazon Cognito và Lambda tùy chỉnh người ủy quyền.

Hãy thử với giải pháp này và thử nghiệm tích hợp giải pháp này với cổng thông tin công ty của bạn và để lại phản hồi của bạn trong phần nhận xét!


Về các tác giả

Ram Vittal là kiến ​​trúc sư giải pháp máy học tại AWS. Ông có hơn 20 năm kinh nghiệm về kiến ​​trúc và xây dựng các ứng dụng phân tán, kết hợp và đám mây. Anh ấy đam mê xây dựng các giải pháp AI / ML và Dữ liệu lớn an toàn và có thể mở rộng để giúp khách hàng doanh nghiệp trong hành trình áp dụng và tối ưu hóa đám mây nhằm cải thiện kết quả kinh doanh của họ. Khi rảnh rỗi, anh ấy thích chơi quần vợt, chụp ảnh và đóng phim hành động.

Jonathan Nguyễn là Chuyên gia tư vấn bảo mật cấp cao của Nhóm Giao hàng Chia sẻ tại AWS. Nền tảng của anh ấy là về Bảo mật AWS với trọng tâm là Phát hiện mối đe dọa và Ứng phó sự cố. Ngày nay, anh ấy giúp khách hàng doanh nghiệp phát triển chiến lược AWS Security toàn diện, triển khai các giải pháp bảo mật trên quy mô lớn và đào tạo khách hàng về các phương pháp hay nhất của AWS Security.

Chris Childers là Kiến trúc sư Cơ sở hạ tầng Đám mây trong Dịch vụ Chuyên nghiệp tại AWS. Anh ấy làm việc với khách hàng AWS để thiết kế và tự động hóa cơ sở hạ tầng đám mây của họ cũng như cải thiện việc áp dụng quy trình và văn hóa DevOps của họ.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img

Trò chuyện trực tiếp với chúng tôi (chat)

Chào bạn! Làm thế nào để tôi giúp bạn?