Ini adalah Panduan Pengembang AWS CDK v2. CDK v1 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 peran dan kebijakan AWS Identity and Access Management (IAM) 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 peran IAM yang diperlukan 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 membuat peran IAM 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 peran IAM secara manual
Jika Anda memilih untuk tidak menggunakan grant
metode CDK untuk membuat dan mengelola izin, Anda harus membuat dan mengonfigurasinya secara manual. Anda dapat membuat peran IAM menggunakan AWS Management Console, AWS CLI, atau AWS SDKs. Kemudian, Anda dapat meneruskannya ke aplikasi CDK 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 referensi 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 penyesuaian peran
Fitur penyesuaian AWS CDK peran menghasilkan laporan peran dan kebijakan di aplikasi CDK Anda. Anda dapat menggunakan fitur ini untuk menghasilkan laporan. Kemudian Anda dapat mengganti peran yang telah dibuat sebelumnya untuk mereka.
Untuk menggunakan fitur penyesuaian peran
-
Tambahkan
Role.customizeRoles()
suatu tempat ke bagian atas aplikasi CDK 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 memunculkan 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 aplikasi CDK 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', }, });
CDK sekarang 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 ARN bucket Amazon S3 dalam laporan dirender sebagai (
LambdaStack/Bucket/Resource.Arn
) alih-alih ARN sebenarnya dari bucket. 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 peran dan izin IAM dengan menggunakan metode yang disediakan.grant
Untuk membuat peran dengan kebijakan awal, admin harus membuat kebijakan dengan izin yang lebih luas (misalnya,arn:aws:s3:::*
).