Ini adalah Panduan Pengembang AWS CDK v2. CDKV1 yang lebih lama memasuki pemeliharaan pada 1 Juni 2022 dan mengakhiri dukungan pada 1 Juni 2023.
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Tentukan AWS Identity and Access Management (IAM) peran dan kebijakan untuk konstruksi L2 saat menggunakan. AWS Cloud Development Kit (AWS CDK)
Gunakan metode hibah untuk menentukan izin
Saat Anda menentukan infrastruktur menggunakan konstruksi L2 dari Perpustakaan AWS Konstruksi, Anda dapat menggunakan metode hibah yang disediakan untuk menentukan izin yang diperlukan sumber daya Anda. Secara otomatis AWS CDK akan membuat IAM peran yang dibutuhkan untuk semua AWS sumber daya yang membutuhkannya.
Berikut ini adalah contoh yang mendefinisikan izin antara AWS Lambda fungsi dan bucket Amazon Simple Storage Service (Amazon S3). Di sini, grantRead
metode konstruksi Bucket L2 digunakan untuk menentukan izin ini:
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as kms from 'aws-cdk-lib/aws-kms';
export class CdkDemoStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const key = new kms.Key(this, 'BucketKey');
const bucket = new s3.Bucket(this, 'Bucket', {
encryptionKey: key,
});
const handler = new lambda.Function(this, 'Handler', {
runtime: lambda.Runtime.NODEJS_20_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda'),
});
// Define permissions between function and S3 bucket using grantRead method
bucket.grantRead(handler);
}
}
Saat Anda menggunakan metode hibah konstruksi L2 untuk menentukan izin antar sumber daya, AWS CDK akan membuat peran dengan kebijakan hak istimewa paling sedikit berdasarkan metode yang Anda tentukan. Sebagai praktik keamanan terbaik, kami menyarankan Anda menggunakan metode yang hanya menerapkan izin yang Anda perlukan. Misalnya, jika Anda hanya perlu memberikan izin agar fungsi Lambda dapat dibaca dari bucket Amazon S3, gunakan grantRead
metode ini sebagai gantinya. grantReadWrite
Untuk setiap metode yang Anda gunakan, CDK menciptakan IAM peran unik untuk sumber daya yang ditentukan. Jika perlu, Anda juga dapat langsung memodifikasi kebijakan yang akan dilampirkan pada peran tersebut. Berikut adalah contohnya:
import { aws_iam as iam } from 'aws-cdk-lib';
handler.addToRolePolicy(new iam.PolicyStatement({
actions: ['s3:GetObject', 's3:List*'],
resources: [
bucket.bucketArn,
bucket.arnForObjects('*'),
]
}));
Namun, kami menyarankan Anda menggunakan grant
metode jika tersedia.
Buat dan gunakan IAM peran secara manual
Jika Anda memilih untuk tidak menggunakan CDK grant
metode untuk membuat dan mengelola izin, Anda harus membuat dan mengonfigurasinya secara manual. Anda dapat membuat IAM peran menggunakan AWS Management Console, AWS CLI, atau AWS SDKs. Kemudian, Anda dapat meneruskannya ke CDK aplikasi Anda secara manual atau menggunakan fitur penyesuaian peran.
Referensi dan kelola semua peran secara manual
Konstruksi yang memerlukan peran memiliki role
properti opsional yang dapat Anda gunakan untuk meneruskan objek peran.
Untuk mereferensikan peran secara manual
-
Gunakan
Role.fromRoleName()
untuk referensi peran Anda yang sudah ada sebelumnya. Berikut adalah contohnya:const existingRole = Role.fromRoleName(stack, 'Role', 'my-pre-existing-role', { mutable: false // Prevent CDK from attempting to add policies to this role }
-
Lulus peran yang sudah ada sebelumnya saat menentukan sumber daya Anda. Berikut adalah contohnya:
const handler = new lambda.Function(stack, 'Handler', { runtime: lambda.Runtime.NODEJS_20_XZ, handler: 'index.handler', code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')), // Pass in pre-existing role role: existingRole, });
Gunakan fitur kustomisasi peran
Fitur penyesuaian AWS CDK peran menghasilkan laporan peran dan kebijakan di CDK aplikasi Anda. Anda dapat menggunakan fitur ini untuk menghasilkan laporan. Kemudian Anda dapat mengganti peran yang telah dibuat sebelumnya untuk mereka.
Untuk menggunakan fitur kustomisasi peran
-
Tambahkan
Role.customizeRoles()
suatu tempat ke bagian atas CDK aplikasi Anda. Berikut adalah contohnya:const stack = new Stack(app, 'LambdaStack'); // Add this to use the role customization feature iam.Role.customizeRoles(stack); // Define your resources using L2 constructs const key = new kms.Key(stack, 'BucketKey'); const bucket = new s3.Bucket(stack, 'Bucket', { encryptionKey: key, }); const handler = new lambda.Function(stack, 'Handler', { runtime: lambda.Runtime.NODEJS_16_X, handler: 'index.handler', code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')), }); // The grantRead() is still important. Even though it actually doesn't mutate // any policies, it indicates the need for them. bucket.grantRead(handler);
-
Saat Anda mensintesis aplikasi Anda, CDK akan menimbulkan kesalahan, yang menunjukkan bahwa Anda perlu memberikan nama peran yang telah dibuat sebelumnya.
Role.customizeRoles()
Berikut ini adalah contoh laporan yang dihasilkan:<missing role> (LambdaStack/Handler/ServiceRole) AssumeRole Policy: [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" } } ] Managed Policy ARNs: [ "arn:(PARTITION):iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" ] Managed Policies Statements: NONE Identity Policy Statements: [ { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*" ], "Effect": "Allow", "Resource": [ "(LambdaStack/Bucket/Resource.Arn)", "(LambdaStack/Bucket/Resource.Arn)/*" ] } ]
-
Setelah peran dibuat, Anda dapat meneruskannya ke aplikasi Anda untuk sumber daya yang berlaku. Misalnya, jika nama peran yang dibuat
LambdaStack/Handler/ServiceRole
adalahlambda-service-role
, Anda akan memperbarui CDK aplikasi Anda sebagai berikut:const stack = new Stack(app, 'LambdaStack'); // Add this to pass in the role iam.Role.customizeRoles(stack, { usePrecreatedRoles: { 'LambdaStack/Handler/ServiceRole': 'lambda-service-role', }, });
Sekarang CDK akan menggunakan nama peran yang telah dibuat sebelumnya di mana saja peran tersebut direferensikan dalam aplikasi. CDK Ini juga akan terus menghasilkan laporan sehingga setiap perubahan kebijakan di masa depan dapat direferensikan.
Anda akan melihat bahwa referensi ke bucket Amazon S3 ARN dalam laporan dirender sebagai (
LambdaStack/Bucket/Resource.Arn
), bukan bucket yang sebenarnyaARN. Ini karena bucket ARN adalah nilai waktu penerapan yang tidak diketahui saat sintesis (bucket belum dibuat). Ini adalah contoh lain mengapa kami merekomendasikan mengizinkan CDK untuk mengelola IAM peran dan izin dengan menggunakangrant
metode yang disediakan. Untuk membuat peran dengan kebijakan awal, admin harus membuat kebijakan dengan izin yang lebih luas (misalnya,arn:aws:s3:::*
).