Ngân hàng đề — AWS Certified Developer Associate

Tìm thấy 1356 câu.

Câu 11 AWS Security, Identity, & Compliance

A large quantity of sensitive data must be encrypted. A Developer will use a custom CMK to generate the encryption key. The key policy currently looks like this:

  1. {
  2. "Sid": "Allow Key Usage",
  3. "Effect": "Allow",
  4. "Principal": {"AWS": [
  5. "arn:aws:iam::111122223333:user/CMKUser"
  6. ]},
  7. "Action": [
  8. "kms:Encrypt",
  9. "kms:Decrypt",
  10. "kms:ReEncrypt*",
  11. "kms:DescribeKey"
  12. ],
  13. "Resource": "*"
  14. }

What API action must be added to the key policy?

  1. A

    kms:GetKeyPolicy

  2. B

    kms:EnableKey

  3. C

    kms:GenerateDataKey

  4. D

    kms:CreateKey

Xem giải thích

Đáp án

C — Phải thêm kms:GenerateDataKey vào key policy.

Vì sao đúng

Chi tiết quyết định nằm ở đề bài: "một lượng lớn dữ liệu nhạy cảm" và "dùng CMK để sinh khoá mã hoá".

KMS có một giới hạn cứng: kms:Encrypt chỉ mã hoá trực tiếp được tối đa 4 KB. Với dữ liệu lớn hơn, mô hình đúng là envelope encryption:

1. Gọi GenerateDataKey  →  KMS trả về CẶP khoá:
     • plaintext data key  (dùng để mã hoá dữ liệu tại chỗ)
     • encrypted data key  (lưu kèm dữ liệu)
2. Mã hoá dữ liệu bằng plaintext data key (AES-256, ngay trên máy bạn)
3. XOÁ plaintext data key khỏi bộ nhớ
4. Lưu: dữ liệu đã mã hoá + encrypted data key

Khi giải mã: gọi kms:Decrypt trên encrypted data key để lấy lại plaintext key

Lợi ích: dữ liệu lớn không bao giờ phải đi qua mạng tới KMS, chỉ có khoá 256-bit đi qua. Nhanh hơn, rẻ hơn, và không vướng giới hạn 4 KB.

Policy hiện tại đã có Encrypt, Decrypt, ReEncrypt*, DescribeKey — thiếu đúng GenerateDataKey, mắt xích khởi đầu của toàn bộ quy trình.

Vì sao các phương án khác sai

  • A. kms:GetKeyPolicy — chỉ để đọc chính key policy. Đây là thao tác quản trị, không liên quan gì tới việc mã hoá dữ liệu.
  • B. kms:EnableKey — bật lại một CMK đang bị vô hiệu hoá. Thao tác quản trị vòng đời khoá, không phải thao tác mã hoá.
  • D. kms:CreateKey — tạo một CMK mới. Đề nói rõ CMK đã tồn tại và người dùng cần dùng nó, không phải tạo thêm. Ngoài ra CreateKey không đặt được trong key policy của một khoá cụ thể một cách có ý nghĩa — nó là quyền cấp tài khoản.

Ghi nhớ

Hành động Dùng khi
kms:Encrypt dữ liệu ≤ 4 KB
kms:GenerateDataKey dữ liệu lớn — envelope encryption, trả về cả bản rõ và bản mã của data key
kms:GenerateDataKeyWithoutPlaintext tạo sẵn khoá để dùng sau, chưa cần bản rõ ngay
kms:Decrypt giải mã ciphertext hoặc encrypted data key
kms:ReEncrypt* đổi khoá bảo vệ mà không lộ bản rõ

Nhận dạng nhanh trong đề: thấy "large amount of data" kèm KMS ⇒ gần như luôn là GenerateDataKey và envelope encryption.

Câu 12 AWS Compute

A Developer has created a task definition that includes the following JSON code:

  1. "placementConstraints": [
  2. {
  3. "expression": "attribute:ecs.instance-type =~ t2.*",
  4. "type": "memberOf"
  5. }
  6. ]

What will be the effect for tasks using this task definition?

  1. A

    They will be added to distinct instances using the T2 instance type

  2. B

    They will be spread across all instances except for T2 instances

  3. C

    They will be placed only on container instances of T2 or T3 instance types

  4. D

    They will be placed only on container instances using the T2 instance type

Xem giải thích

Đáp án

D — Task chỉ được đặt trên các container instance dùng instance type T2.

Vì sao đúng

Phân tích biểu thức:

"placementConstraints": [
  { "expression": "attribute:ecs.instance-type =~ t2.*", "type": "memberOf" }
]
Phần Ý nghĩa
type: memberOf chỉ đặt ở nơi thoả biểu thức
attribute:ecs.instance-type thuộc tính dựng sẵn của ECS: loại instance
=~ toán tử khớp biểu thức chính quy
t2.* bắt đầu bằng t2. — t2.micro, t2.small, t2.large…

Đọc trọn vẹn: chỉ đặt task này lên container instance có instance type khớp mẫu t2.*.

Toán tử =~ là chìa khoá của câu hỏi. Nó phân biệt "khớp mẫu" với "bằng chính xác" (==).

ECS cung cấp sẵn một số thuộc tính dựng sẵn rất hữu ích: ecs.instance-type, ecs.availability-zone, ecs.os-type, ecs.ami-id, ecs.cpu-architecture.

Vì sao các phương án khác sai

  • A. "Đặt trên các instance riêng biệt dùng T2" — thêm một ràng buộc không có trong biểu thức. Muốn mỗi instance chỉ một task thì phải khai riêng {"type": "distinctInstance"}. Biểu thức trong đề không hạn chế số task trên mỗi máy.
  • B. "Trải trên mọi instance trừ T2" — đảo ngược ý nghĩa của memberOf. Muốn loại trừ thì viết attribute:ecs.instance-type != t2.* hoặc dùng not_in.
  • C. "Chỉ đặt trên instance loại T2 hoặc T3" — mẫu t2.* không khớp t3.micro; ký tự 3 khác ký tự 2. Muốn cả hai thì viết attribute:ecs.instance-type =~ t[23].* hoặc dùng in [t2.micro, t3.micro].

Ghi nhớ

Các toán tử trong biểu thức placement constraint của ECS: | Toán tử | Nghĩa | |---|---| | ==, != | bằng / khác chính xác | | >, >=, <, <= | so sánh số | | in, not_in | thuộc / không thuộc danh sách | | =~, !~ | khớp / không khớp biểu thức chính quy | | and, or | kết hợp điều kiện |

Ví dụ kết hợp: attribute:ecs.instance-type =~ t2.* and attribute:ecs.availability-zone == ap-southeast-1a

Câu 13 Chọn nhiều đáp án
An application is processing clickstream data using Amazon Kinesis. The clickstream data feed into Kinesis experiences periodic spikes. The PutRecords API call occasionally fails and the logs show that the failed call returns the response shown below:

Which techniques will help mitigate this exception? (Choose two.)
  1. A Implement retries with exponential backoff.
  2. B Use a PutRecord API instead of PutRecords.
  3. C Reduce the frequency and/or size of the requests.
  4. D Use Amazon SNS instead of Kinesis.
  5. E Reduce the number of KCL consumers.
Xem giải thích

Đáp án

A và C — thử lại kèm giãn cách tăng dần, và giảm tần suất hoặc kích thước yêu cầu

Vì sao đúng

PutRecords trả về thành công một phần: cả lời gọi được HTTP 200 nhưng từng bản ghi bên trong có thể mang lỗi ProvisionedThroughputExceededException. Đó chính là điều đề mô tả, và nguyên nhân là lưu lượng vượt năng lực shard trong lúc cao điểm.

  • A. Thử lại có giãn cách tăng dần — chỉ gửi lại những bản ghi hỏng, và giãn dần ra để không dồn thêm vào lúc đang quá tải.
  • C. Giảm tần suất hoặc kích thước yêu cầu — kéo lưu lượng về dưới trần của shard, chữa đúng nguyên nhân.

Vì sao các phương án khác sai

  • B. Dùng PutRecord thay PutRecords — gửi từng bản ghi một sẽ nhiều lời gọi hơn, làm tình hình xấu đi.
  • D. Đổi sang SNS — thay hẳn kiến trúc và mất khả năng đọc lại của luồng.
  • E. Giảm số consumer KCL — vấn đề nằm ở phía ghi vào, giảm bên đọc không liên quan.
Câu 14
A developer is writing an AWS Lambda function. The developer wants to log key events that occur while the Lambda function runs. The developer wants to include a unique identifier to associate the events with a specific function invocation. The developer adds the following code to the Lambda function:

Which solution will meet this requirement?
  1. A Obtain the request identifier from the AWS request ID field in the context object. Configure the application to write logs to standard output.
  2. B Obtain the request identifier from the AWS request ID field in the event object. Configure the application to write logs to a file.
  3. C Obtain the request identifier from the AWS request ID field in the event object. Configure the application to write logs to standard output.
  4. D Obtain the request identifier from the AWS request ID field in the context object. Configure the application to write logs to a file.
Xem giải thích

Đáp án

A — Lấy mã định danh yêu cầu từ trường AWS request ID của đối tượng context

Vì sao đúng

Lambda truyền hai tham số vào hàm xử lý: event chứa dữ liệu do nguồn kích hoạt gửi tới, còn context chứa thông tin về chính lần chạy đó — thời gian còn lại, tên hàm, và aws_request_id. Mã định danh này duy nhất cho mỗi lần gọi, nên ghi nó kèm mỗi dòng log thì gom được toàn bộ log của một lần chạy khi cần soát lỗi.

Vì sao các phương án khác sai

  • B và C. Lấy từ đối tượng event — sai chỗ; event là dữ liệu nghiệp vụ, không mang mã định danh lần gọi.
  • D. Lấy đúng từ context nhưng cách ghi log sai — đúng nguồn nhưng hỏng ở phần còn lại của phương án.

Nhớ nhanh

event = cái gì kích hoạt hàm. context = lần chạy này là lần nào.

Câu 15
A developer has written the following IAM policy to provide access to an Amazon S3 bucket:

Which access does the policy allow regarding the s3:GetObject and s3:PutObject actions?
  1. A Access on all buckets except the “DOC-EXAMPLE-BUCKET” bucket
  2. B Access on all buckets that start with “DOC-EXAMPLE-BUCKET” except the “DOC-EXAMPLE-BUCKET/secrets” bucket
  3. C Access on all objects in the “DOC-EXAMPLE-BUCKET” bucket along with access to all S3 actions for objects in the “DOC-EXAMPLE-BUCKET” bucket that start with “secrets”
  4. D Access on all objects in the “DOC-EXAMPLE-BUCKET” bucket except on objects that start with “secrets”
Xem giải thích

Đáp án

D — Được thao tác trên mọi đối tượng trong bucket, trừ những đối tượng có tiền tố secrets

Vì sao đúng

Đây là khuôn mẫu Allow rộng cộng Deny hẹp rất hay gặp:

  • Một câu Allow cho s3:GetObject và s3:PutObject trên arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.
  • Một câu Deny cho cùng hành động trên arn:aws:s3:::DOC-EXAMPLE-BUCKET/secrets*.

Quy tắc đánh giá của IAM: Deny tường minh luôn thắng mọi Allow. Vì vậy kết quả đúng là truy cập được cả bucket trừ phần khoá lại.

Chú ý dấu /* ở cuối: nó trỏ tới các đối tượng bên trong bucket, khác hẳn ARN không có /* vốn trỏ tới chính bucket và dùng cho những hành động như s3:ListBucket.

Vì sao các phương án khác sai

  • A. Mọi bucket trừ bucket này — đảo ngược hoàn toàn.
  • B. Mọi bucket bắt đầu bằng tên đó — nhầm giữa tiền tố đối tượng và tiền tố tên bucket.
  • C. Được cả quyền trên đối tượng có tiền tố secrets — bỏ qua mất câu Deny.

Ghi chú về chất lượng câu hỏi

Bản đề trong ngân hàng này thiếu mất khối JSON của chính sách. Phần giải thích trên dựa vào khuôn mẫu mà bốn phương án ám chỉ; hãy đọc nó như bài học về thứ tự ưu tiên Allow–Deny trong IAM.

Câu 16
A developer is troubleshooting an application that uses Amazon DynamoDB in the us-west-2 Region. The application is deployed to an Amazon EC2 instance. The application requires read-only permissions to a table that is named Cars. The EC2 instance has an attached IAM role that contains the following IAM policy:



When the application tries to read from the Cars table, an Access Denied error occurs.

How can the developer resolve this error?
  1. A Modify the IAM policy resource to be “arn:aws:dynamodb:us-west-2:account-id:table/*”.
  2. B Modify the IAM policy to include the dynamodb:* action.
  3. C Create a trust policy that specifies the EC2 service principal. Associate the role with the policy.
  4. D Create a trust relationship between the role and dynamodb.amazonaws.com.
Xem giải thích

Đáp án

C — Tạo trust policy chỉ định service principal của EC2, rồi gắn vai đó cho instance

Vì sao đúng

Một vai IAM có hai chính sách hoàn toàn khác nhau, và đây là chỗ hay nhầm nhất:

  • Chính sách quyền nói vai được làm gì (ở đây là đọc bảng DynamoDB).
  • Trust policy nói ai được phép đóng vai đó.

Ứng dụng chạy trên EC2 nên trust policy phải cho service principal ec2.amazonaws.com thực hiện sts:AssumeRole. Thiếu vế này thì dù chính sách quyền có đúng tới đâu, instance vẫn không lấy được thông tin đăng nhập tạm thời. Sau đó vai được gắn vào instance qua instance profile.

Vì sao các phương án khác sai

  • A. Sửa ARN tài nguyên trong chính sách — chỉnh phạm vi tài nguyên, không giải quyết việc instance không đóng được vai.
  • B. Thêm hành động dynamodb:* — cấp toàn quyền, vừa trái yêu cầu chỉ đọc vừa không chạm tới nguyên nhân.
  • D. Tin cậy dynamodb.amazonaws.com — sai principal: bên đóng vai là EC2, không phải DynamoDB.

Nhớ nhanh

Quyền trả lời "được làm gì". Trust policy trả lời "ai được mượn vai này".

Câu 17
A developer accesses AWS CodeCommit over SSH. The SSH keys configured to access AWS CodeCommit are tied to a user with the following permissions:



The developer needs to create/delete branches.

Which specific IAM permissions need to be added, based on the principle of least privilege?
  1. A "codecommit:CreateBranch"
    "codecommit:DeleteBranch"
  2. B "codecommit:Put*"
  3. C "codecommit:Update*"
  4. D "codecommit:*"
Xem giải thích

Đáp án

A — Thêm đúng hai quyền codecommit:CreateBranch và codecommit:DeleteBranch

Vì sao đúng

Đề nói rõ theo nguyên tắc quyền tối thiểu, tức là chỉ cấp đúng những hành động cần và không hơn. Lập trình viên cần tạo và xoá nhánh, mà CodeCommit có sẵn đúng hai hành động mang tên đó. Cấp thêm bất cứ thứ gì đều vi phạm nguyên tắc.

Vì sao các phương án khác sai

  • B. codecommit:Put* — ký tự đại diện kéo theo hàng loạt hành động khác như PutFile, rộng hơn nhiều so với việc cần làm.
  • C. codecommit:Update* — vừa quá rộng, vừa không chứa CreateBranch hay DeleteBranch nên còn không giải quyết được yêu cầu.
  • D. codecommit:* — cấp toàn quyền trên dịch vụ, trái thẳng nguyên tắc quyền tối thiểu.

Nhớ nhanh

Gặp cụm "least privilege" trong đề thì gần như luôn chọn phương án liệt kê đích danh hành động, không chọn phương án có dấu sao.

Câu 18
Given the following AWS CloudFormation template:



What is the MOST efficient way to reference the new Amazon S3 bucket from another AWS CloudFormation template?
  1. A Add an Export declaration to the Outputs section of the original template and use ImportValue in other templates.
  2. B Add Exported: true to the Content.Bucket in the original template and use ImportResource in other templates.
  3. C Create a custom AWS CloudFormation resource that gets the bucket name from the ContentBucket resource of the first stack.
  4. D Use Fn::Include to include the existing template in other templates and use the ContentBucket resource directly.
Xem giải thích

Đáp án

A — Thêm khai báo Export vào mục Outputs của mẫu gốc, rồi dùng Fn::ImportValue ở mẫu kia

Vì sao đúng

Đây là cơ chế chính thức của CloudFormation để một stack dùng lại giá trị của stack khác. Stack tạo bucket khai tên bucket ở Outputs kèm Export và một tên xuất duy nhất trong khu vực; stack khác gọi Fn::ImportValue với tên đó. CloudFormation còn khoá lại: khi giá trị xuất đang được stack khác dùng, bạn không xoá hay đổi nó được — nên tránh làm gãy stack phụ thuộc.

Vì sao các phương án khác sai

  • B. Thêm Exported: true vào tài nguyên — cú pháp không tồn tại; xuất giá trị chỉ khai trong Outputs.
  • C. Viết custom resource để lấy tên bucket — làm được nhưng phải viết và nuôi một hàm Lambda cho việc đã có sẵn cơ chế; trái yêu cầu "hiệu quả nhất".
  • D. Dùng Fn::Include — chèn nội dung mẫu khác vào, tức là tạo lại tài nguyên chứ không tham chiếu tài nguyên đã có.
Câu 19
A developer is using AWS CloudFormation to deploy an AWS Lambda function. The developer needs to set the Lambda function's timeout value based on the environment parameter of the template. The template contains mappings of EnvironmentData for each environment's timeout value. The environment parameter and EnvironmentData mappings are as follows:

Environment parameter:



EnvironmentData mappings:



Which statement will meet these requirements?
  1. A Timeout: !GetAtt [EnvironmentData, !Ref Environment, Timeout]
  2. B Timeout: !FindInMap [EnvironmentData, !Ref Environment, Timeout]
  3. C Timeout: !Select [EnvironmentData, !Ref Environment, Timeout]
  4. D Timeout: !ForEach[EnvironmentData, !Ref Environment, Timeout]
Xem giải thích

Đáp án

B — Timeout: !FindInMap [EnvironmentData, !Ref Environment, Timeout]

Vì sao đúng

Cấu trúc "một bảng giá trị tra theo môi trường" trong CloudFormation là mục Mappings, và hàm để đọc nó là Fn::FindInMap với đúng ba đối số: tên map, khoá cấp một, khoá cấp hai. Ở đây khoá cấp một lấy động từ !Ref Environment nên cùng một mẫu triển khai được cho dev, staging hay production mà chỉ đổi tham số.

Vì sao các phương án khác sai

  • A. !GetAtt — lấy thuộc tính của một tài nguyên trong stack, không đọc được Mappings.
  • C. !Select — chọn phần tử theo chỉ số trong một danh sách, không tra theo khoá.
  • D. !ForEach — hàm dùng để lặp sinh ra nhiều tài nguyên, không phải để tra cứu giá trị.
Câu 20 Chọn nhiều đáp án
A developer compiles an AWS Lambda function and packages the result as a .zip file. The developer uses the Functions page on the Lambda console to attempt to upload the local packaged .zip file. When pushing the package ta Lambda, the console returns the following error:



Which solutions can the developer use to publish the code? (Choose two.)
  1. A Upload the package to Amazon 3. Use the Functions page on the Lambda console to upload the package from the S3 location.
  2. B Create an AWS Support ticket to increase the maximum package size.
  3. C Use the update-function-code AWS CLI command. Pass the --publish parameter.
  4. D Repackage the Lambda function as a Docker container image. Upload the image to Amazon Elastic Container Registry (Amazon ECR). Create a new Lambda function by using the Lambda console. Reference the image that is deployed to Amazon ECR.
  5. E Sign the .zip file digitally. Create a new Lambda function by using the Lambda console. Update the configuration of the new Lambda function to include the Amazon Resource Name (ARN) of the code signing configuration.
Xem giải thích

Đáp án

A và D — tải gói lên S3 rồi trỏ Lambda tới đó, hoặc đóng gói thành ảnh container

Vì sao đúng

Lambda có hai trần khác nhau cho gói .zip: 50 MB khi tải trực tiếp qua console hoặc API, và 250 MB cho phần đã giải nén. Lập trình viên đang chạm trần thứ nhất, và có đúng hai lối ra:

  • A. Qua S3 — tải tệp lên bucket rồi cho Lambda lấy từ đó, tránh hẳn giới hạn của đường tải trực tiếp.
  • D. Đóng gói thành ảnh container — đưa trần lên 10 GB, lối đi đúng khi thư viện phụ thuộc thật sự lớn, ví dụ có phần machine learning.

Vì sao các phương án khác sai

  • B. Mở ticket xin nâng trần — đây là giới hạn cứng của dịch vụ, không nâng được.
  • C. Dùng update-function-code qua CLI — vẫn là đường tải trực tiếp nên vướng đúng trần đó.
  • E. Ký số tệp .zip — code signing để đảm bảo toàn vẹn, không liên quan gì tới kích thước.