View a markdown version of this page

Menerapkan kontrol pencegahan untuk Lambda dengan AWS Config - AWS Lambda

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menerapkan kontrol pencegahan untuk Lambda dengan AWS Config

Sangat penting untuk memastikan kepatuhan dalam aplikasi tanpa server Anda sedini mungkin dalam proses pengembangan. Dalam topik ini, kami membahas cara menerapkan kontrol pencegahan menggunakan AWS Config. Dengan AWS Config, Anda dapat menerapkan pemeriksaan kepatuhan lebih awal dalam proses pengembangan dan menerapkan kontrol yang sama di CI/CD pipeline Anda. Ini juga menstandarisasi kontrol Anda dalam repositori aturan yang dikelola secara terpusat sehingga Anda dapat menerapkan kontrol secara konsisten di seluruh AWS akun Anda.

Misalnya, administrator kepatuhan Anda menetapkan persyaratan untuk memastikan bahwa semua fungsi Lambda menyertakan pel AWS X-Ray acakan. Dengan AWS Config mode proaktif, Anda dapat menjalankan pemeriksaan kepatuhan pada sumber daya fungsi Lambda sebelum penerapan, mengurangi risiko penerapan fungsi Lambda yang tidak dikonfigurasi dengan benar dan menghemat waktu pengembang dengan memberi mereka umpan balik yang lebih cepat tentang infrastruktur sebagai templat kode. Berikut ini adalah visualisasi aliran untuk kontrol pencegahan dengan: AWS Config

CloudFormation requests must pass AWS Config rules before provisioning.

Pertimbangkan persyaratan bahwa semua fungsi Lambda harus mengaktifkan pelacakan. Sebagai tanggapan, tim platform mengidentifikasi perlunya AWS Config aturan khusus untuk berjalan secara proaktif di semua akun. Aturan ini menandai fungsi Lambda apa pun yang tidak memiliki konfigurasi pelacakan yang X-Ray dikonfigurasi sebagai sumber daya yang tidak sesuai. Tim mengembangkan aturan, mengemasnya dalam paket kesesuaian, dan menerapkan paket kesesuaian di semua AWS akun untuk memastikan bahwa semua akun di organisasi menerapkan kontrol ini secara seragam. Anda dapat menulis aturan dalam sintaks AWS CloudFormation Guard 2.x.x, yang mengambil bentuk berikut:

rule name when condition { assertion }

Berikut ini adalah contoh aturan Guard yang memeriksa untuk memastikan fungsi Lambda telah mengaktifkan pelacakan:

rule lambda_tracing_check { when configuration.tracingConfig exists { configuration.tracingConfig.mode == "Active" } }

Tim platform mengambil tindakan lebih lanjut dengan mengamanatkan bahwa setiap AWS CloudFormation penerapan memanggil pre-hook. create/update https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/hooks-structure.html Mereka bertanggung jawab penuh untuk mengembangkan hook ini dan mengonfigurasi pipeline, memperkuat kontrol terpusat terhadap aturan kepatuhan dan mempertahankan aplikasi mereka yang konsisten di semua penerapan. Untuk mengembangkan, mengemas, dan mendaftarkan hook, lihat Mengem bangkan AWS CloudFormation Hooks di dokumentasi CloudFormation Command Line Interface (CFN-CLI). Anda dapat menggunakan CloudFormation CLI untuk membuat proyek hook:

cfn init

Perintah ini meminta Anda untuk beberapa informasi dasar tentang proyek hook Anda dan membuat proyek dengan file berikut di dalamnya:

README.md <hook-name>.json rpdk.log src/handler.py template.yml hook-role.yaml

Sebagai pengembang hook, Anda perlu menambahkan jenis sumber daya target yang diinginkan dalam file <hook-name>.json konfigurasi. Dalam konfigurasi di bawah ini, hook dikonfigurasi untuk dieksekusi sebelum fungsi Lambda dibuat menggunakan CloudFormation. Anda dapat menambahkan penangan serupa untuk preUpdate dan preDelete tindakan juga.

"handlers": { "preCreate": { "targetNames": [ "AWS::Lambda::Function" ], "permissions": [] } }

Anda juga perlu memastikan bahwa CloudFormation hook memiliki izin yang sesuai untuk memanggil AWS Config API. Anda dapat melakukannya dengan memperbarui file definisi peran bernamahook-role.yaml. File definisi peran memiliki kebijakan kepercayaan berikut secara default, yang memungkinkan CloudFormation untuk mengambil peran.

AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - hooks.cloudformation.amazonaws.com - resources.cloudformation.amazonaws.com

Untuk mengizinkan hook ini memanggil API konfigurasi, Anda harus menambahkan izin berikut ke pernyataan Kebijakan. Kemudian Anda mengirimkan proyek hook menggunakan cfn submit perintah, di mana CloudFormation membuat peran untuk Anda dengan izin yang diperlukan.

Policies: - PolicyName: HookTypePolicy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - "config:Describe*" - "config:Get*" - "config:List*" - "config:SelectResourceConfig" Resource: "*

Selanjutnya, Anda perlu menulis fungsi Lambda dalam src/handler.py file. Di dalam file ini, Anda menemukan metode bernama preCreatepreUpdate,, dan preDelete sudah dibuat ketika Anda memulai proyek. Anda bertujuan untuk menulis fungsi umum yang dapat digunakan kembali yang memanggil AWS Config StartResourceEvaluation API dalam mode proaktif menggunakan AWS SDK for Python (Boto3). Panggilan API ini mengambil properti sumber daya sebagai input dan mengevaluasi sumber daya terhadap definisi aturan.

def validate_lambda_tracing_config(resource_type, function_properties: MutableMapping[str, Any]) -> ProgressEvent: LOG.info("Fetching proactive data") config_client = boto3.client('config') resource_specs = { 'ResourceId': 'MyFunction', 'ResourceType': resource_type, 'ResourceConfiguration': json.dumps(function_properties), 'ResourceConfigurationSchemaType': 'CFN_RESOURCE_SCHEMA' } LOG.info("Resource Specifications:", resource_specs) eval_response = config_client.start_resource_evaluation(EvaluationMode='PROACTIVE', ResourceDetails=resource_specs, EvaluationTimeout=60) ResourceEvaluationId = eval_response.ResourceEvaluationId compliance_response = config_client.get_compliance_details_by_resource(ResourceEvaluationId=ResourceEvaluationId) LOG.info("Compliance Verification:", compliance_response.EvaluationResults[0].ComplianceType) if "NON_COMPLIANT" == compliance_response.EvaluationResults[0].ComplianceType: return ProgressEvent(status=OperationStatus.FAILED, message="Lambda function found with no tracing enabled : FAILED", errorCode=HandlerErrorCode.NonCompliant) else: return ProgressEvent(status=OperationStatus.SUCCESS, message="Lambda function found with tracing enabled : PASS.")

Sekarang Anda dapat memanggil fungsi umum dari handler untuk hook pra-buat. Berikut contoh handler:

@hook.handler(HookInvocationPoint.CREATE_PRE_PROVISION) def pre_create_handler( session: Optional[SessionProxy], request: HookHandlerRequest, callback_context: MutableMapping[str, Any], type_configuration: TypeConfigurationModel ) -> ProgressEvent: LOG.info("Starting execution of the hook") target_name = request.hookContext.targetName LOG.info("Target Name:", target_name) if "AWS::Lambda::Function" == target_name: return validate_lambda_tracing_config(target_name, request.hookContext.targetModel.get("resourceProperties") ) else: raise exceptions.InvalidRequest(f"Unknown target type: {target_name}")

Setelah langkah ini Anda dapat mendaftarkan hook dan mengkonfigurasinya untuk mendengarkan semua acara pembuatan AWS Lambda fungsi.

Pengembang menyiapkan infrastruktur sebagai template kode (IAC) untuk layanan mikro tanpa server menggunakan Lambda. Persiapan ini mencakup kepatuhan terhadap standar internal, diikuti dengan pengujian lokal dan memasukkan template ke repositori. Berikut contoh template IaC:

MyLambdaFunction: Type: 'AWS::Lambda::Function' Properties: Handler: index.handler Role: !GetAtt LambdaExecutionRole.Arn FunctionName: MyLambdaFunction Code: ZipFile: | import json def handler(event, context): return { 'statusCode': 200, 'body': json.dumps('Hello World!') } Runtime: python3.14 TracingConfig: Mode: PassThrough MemorySize: 256 Timeout: 10

Sebagai bagian dari CI/CD proses, saat CloudFormation template digunakan, CloudFormation layanan akan memanggil pre- create/update hook tepat sebelum menyediakan jenis sumber daya. AWS::Lambda::Function Pengait menggunakan AWS Config aturan yang berjalan dalam mode proaktif untuk memverifikasi bahwa konfigurasi fungsi Lambda menyertakan konfigurasi pelacakan yang diamanatkan. Respons dari hook menentukan langkah selanjutnya.

Jika sesuai, hook menandakan keberhasilan, dan CloudFormation melanjutkan untuk menyediakan sumber daya. Jika tidak, pener CloudFormation apan tumpukan gagal, pipeline segera terhenti, dan sistem mencatat detail untuk peninjauan selanjutnya. Pemberitahuan kepatuhan dikirim ke pemangku kepentingan terkait.

Anda dapat menemukan success/fail informasi kait di CloudFormation konsol:

Hook success/fail information in the CloudFormation console.

Jika Anda mengaktifkan log untuk CloudFormation hook Anda, Anda dapat menangkap hasil evaluasi kait. Berikut adalah contoh log untuk hook dengan status gagal, yang menunjukkan bahwa fungsi Lambda belum X-Ray diaktifkan:

Sample log for a hook with a failed status.

Jika pengembang memilih untuk mengubah IAc untuk memperbarui TracingConfig Mode nilai ke Active dan menerapkan kembali, hook berhasil dijalankan dan tumpukan berlanjut dengan membuat sumber daya Lambda.

CloudFormation console shows successful resource deployment.

Dengan cara ini, Anda dapat menerapkan kontrol preventif dengan AWS Config dalam mode proaktif saat mengembangkan dan menerapkan sumber daya tanpa server di akun Anda. AWS Dengan mengintegrasikan AWS Config aturan ke dalam CI/CD pipeline, Anda dapat mengidentifikasi dan secara opsional memblokir penerapan sumber daya yang tidak sesuai, seperti fungsi Lambda yang tidak memiliki konfigurasi pelacakan aktif. Ini memastikan bahwa hanya sumber daya yang mematuhi kebijakan tata kelola terbaru yang digunakan ke AWS lingkungan Anda.