Điểm:1

Lưu trữ an toàn Khóa người dùng AWS IAM (Quyền truy cập và Bí mật) do IaC tạo

lá cờ de

Tôi đã thiết lập như sau:

  1. Cơ sở hạ tầng được thiết lập bằng AWS CDK;
  2. Tôi có một Ngăn xếp/Môi trường (Sản xuất, Dàn dựng...);
  3. Mỗi Stack có một S3 Bucket khác nhau (được sử dụng để lưu trữ trang web);
  4. Tôi có một Ngăn xếp tạo Người dùng IAM (được sử dụng bởi CI/CD);
  5. CI/CD trong trường hợp này là GitHub Actions (triển khai mỗi khi hợp nhất thành chủ yếu xảy ra);
  6. Người dùng IAM chỉ có quyền đối với tất cả các Nhóm (triển khai có nghĩa là đưa nội dung vào Nhóm);

Cách tốt nhất để lưu trữ/xử lý các khóa cho người dùng đó là gì?

Tôi đã bắt đầu in nó trong Đầu ra nhưng nó không an toàn. Mọi người đều có thể nhìn thấy nó (ví dụ: nếu họ có quyền truy cập vào nhật ký của CI/CD).

Tôi đã được đề xuất lưu trữ chúng trong SSM: nó hoạt động nhưng bạn không thể tạo nó dưới dạng SecureString nên nó sẽ chỉ là một Chuỗi.

Tôi cũng đã xem qua Secrets Manager: nó cũng hoạt động và có vẻ an toàn hơn (mặc dù tôi không chắc liệu cảm giác của tôi ở đây có đúng không).

Bất kỳ ý tưởng/ý kiến ​​​​ở đây?

Cảm ơn!


Trong mã nó trông giống như:

// Ngăn xếp sản xuất
const bucket = new Bucket(this, "Bucket", {
  bucketName: "sản xuất",
});

// Dàn dựng ngăn xếp
const bucket = new Bucket(this, "Bucket", {
  bucketName: "dàn dựng",
});

// Ngăn xếp IAM
const user = new user(this, "User", {
  tên người dùng: "ci-cd-user",
});
const userAccessKey = new AccessKey(this, "UserAccessKey", { user });

// Đây chỉ là một ví dụ, tôi xem qua tất cả các Bucket có sẵn
bucketProduction.grantPut(người dùng);
xôStaging.grantPut(người dùng);
Tim avatar
lá cờ gp
Tim
Bạn sử dụng công cụ CI/CD nào? Nó có trong AWS không? Vui lòng cập nhật câu hỏi của bạn với nhiều chi tiết hơn, sau đó trả lời tại đây để tôi có thể thấy nó đã được cập nhật. Câu trả lời là khác nhau tùy thuộc vào thông tin này.
viniciuskneves avatar
lá cờ de
Xin chào @Tim, tôi vừa cập nhật thêm thông tin: CI/CD là GitHub Actions và triển khai có nghĩa là đưa nội dung vào Bộ chứa. Nó có giúp ích hay bạn cần thêm chi tiết?
Tim avatar
lá cờ gp
Tim
Cá nhân tôi sẽ tạo người dùng IAM hoặc ít nhất là khóa truy cập của họ theo cách thủ công, sau đó chuyển thông tin đăng nhập đến nơi họ cần trong Github, thay vì lưu trữ chúng bên trong AWS. Nếu bạn phải lưu trữ chúng bên trong AWS thì kho lưu trữ tham số hoặc trình quản lý bí mật sẽ là lựa chọn của tôi, miễn là chúng được mã hóa. Tôi có thể sẽ hạn chế những người có thể xem thông tin đăng nhập ở bất cứ nơi nào bạn quyết định lưu trữ chúng.
viniciuskneves avatar
lá cờ de
Hừm.. Hiểu rồi. Tôi đã cố gắng tự động hóa quy trình càng nhiều càng tốt nhưng thực sự việc xử lý các phím theo cách thủ công có ý nghĩa. Vai trò, thông qua liên kết, có phải là giải pháp tốt nhất không? Ý tôi là gì: https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configure-openid-connect-in-amazon-web-services
Tim avatar
lá cờ gp
Tim
Vai trò hầu như luôn là một lựa chọn tốt hơn thông tin xác thực IAM.Tôi không biết gì về các hành động của github, nhưng nếu nó có thể đảm nhận một vai trò nào đó thì hãy chọn tùy chọn đó. Chỉ cần đảm bảo vai trò được bảo mật đúng cách để chỉ các hành động github mới có thể đảm nhận vai trò đó.
viniciuskneves avatar
lá cờ de
Cảm ơn! Tôi sẽ thêm nó làm câu trả lời ở đây ngay khi tôi có thể thử đúng cách với Vai trò.
lá cờ cn
Có vẻ như để đảm nhận vai trò bạn chỉ cần chỉ định vai trò không có thông tin đăng nhập và nó sử dụng OIDC, vì vậy sẽ an toàn hơn rất nhiều. https://github.com/aws-actions/configure-aws-credentials
viniciuskneves avatar
lá cờ de
Vâng @ shearn89, tôi đã thử nó ngày hôm qua và nó hoạt động như một bùa mê. Tôi không nhận thức đầy đủ về nó hoặc cách thức hoạt động của nó... Tôi sẽ tóm tắt những phát hiện của mình trong câu trả lời. Cảm ơn bạn đã chỉ ra ââï¸
Điểm:0
lá cờ de

Tôi đã mất một lúc nhưng cuối cùng tôi đã suy nghĩ về nó ở đây: https://dev.to/viniciuskneves/use-aws-through-github-actions-without-secret-keys-32eo

Ý tưởng là sử dụng Kết nối OpenID đến kết nối với GitHub và sau đó có một Vai trò mà Tác vụ GitHub có thể đảm nhận và thực hiện triển khai (các chính sách tương tự mà tôi sẽ cung cấp cho người dùng Tác vụ GitHub).

Sử dụng AWS CDK, giải pháp trông giống như sau:

nhà cung cấp const = OpenIdConnectProvider mới (cái này, "GitHubProvider", {
  url: "https://token.actions.githubusercontent.com",
  clientIds: ["sts.amazonaws.com"], // Được gọi là "Đối tượng" trong tài liệu
});
const role = new Role(this, "Vai trò", {
  giả địnhBy: OpenIdConnectPrincipal mới (nhà cung cấp, {
    StringEquals: {
      "token.actions.githubusercontent.com:aud": "sts.amazonaws.com", // "Đối tượng" từ phía trên
    },
    StringLike: {
      "token.actions.githubusercontent.com:sub":
      "repo:<ORGANIZATION>/<REPOSITORY>:*", // Tổ chức và kho lưu trữ được phép đảm nhận vai trò này
    },
  }),
});

xô.grantPut(vai trò); // Tạo chính sách

Sau đó, chúng tôi cần cập nhật Tác vụ GitHub để sử dụng cái này thay vì khóa người dùng của chúng tôi:

...
quyền:
  id-token: viết
  nội dung: đọc # Điều này là bắt buộc đối với các hành động/thanh toán (tài liệu GitHub đề cập đến điều đó)
...
- tên: Định cấu hình Thông tin xác thực AWS 
  sử dụng: aws-actions/[email protected] # Phiên bản tại thời điểm viết bài này
  với: # Chúng tôi đang tải các khóa được lưu trữ trong bí mật
    vai trò đảm nhận: arn:aws:iam::<ACCOUNT>:role/<ROLE-NAME> # Bạn có thể chỉ định tên vai trò khi tạo hoặc AWS sẽ tự động tạo một tên cho bạn
    aws-khu vực: eu-trung tâm-1
- chạy: npm run triển khai # Chỉ là một ví dụ

Đă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.