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.
Izin dan AWS CDK
AWS Construct Library menggunakan beberapa idiom umum yang diimplementasikan secara luas untuk mengelola akses dan izin. IAMModul ini memberi Anda alat yang Anda butuhkan untuk menggunakan idiom ini.
AWS CDK digunakan AWS CloudFormation untuk menyebarkan perubahan. Setiap penyebaran melibatkan aktor (baik pengembang, atau sistem otomatis) yang memulai AWS CloudFormation penerapan. Dalam melakukan ini, aktor akan mengambil satu atau lebih IAM Identitas (pengguna atau peran) dan secara opsional memberikan peran ke. AWS CloudFormation
Jika Anda menggunakannya AWS IAM Identity Center untuk mengautentikasi sebagai pengguna, maka penyedia masuk tunggal menyediakan kredensil sesi berumur pendek yang mengizinkan Anda untuk bertindak sebagai peran yang telah ditentukan sebelumnya. IAM Untuk mempelajari cara AWS CDK memperoleh AWS kredensil dari autentikasi Pusat IAM Identitas, lihat Memahami otentikasi Pusat IAM Identitas di Panduan Referensi Alat dan Alat.AWS SDKs
Pengguna utama
IAMPrincipal adalah AWS entitas yang diautentikasi yang mewakili pengguna, layanan, atau aplikasi yang dapat memanggil AWS APIs. AWS Construct Library mendukung penetapan prinsipal dalam beberapa cara fleksibel untuk memberi mereka akses sumber daya Anda. AWS
Dalam konteks keamanan, istilah “prinsipal” mengacu secara khusus pada entitas yang diautentikasi seperti pengguna. Objek seperti grup dan peran tidak mewakili pengguna (dan entitas lain yang diautentikasi) melainkan mengidentifikasi mereka secara tidak langsung untuk tujuan pemberian izin.
Misalnya, jika Anda membuat IAM grup, Anda dapat memberikan grup (dan dengan demikian anggotanya) akses tulis ke RDS tabel Amazon. Namun, grup itu sendiri bukan prinsipal karena tidak mewakili satu entitas (juga, Anda tidak dapat masuk ke grup).
Di CDK IAM pustaka, kelas yang secara langsung atau tidak langsung mengidentifikasi prinsipal mengimplementasikan IPrincipal
antarmuka, memungkinkan objek ini digunakan secara bergantian dalam kebijakan akses. Namun, tidak semua dari mereka adalah kepala sekolah dalam arti keamanan. Benda-benda ini meliputi:
-
Prinsipal layanan ()
new iam.ServicePrincipal('service.amazonaws.com')
-
Kepala sekolah federasi ()
new iam.FederatedPrincipal('cognito-identity.amazonaws.com')
-
Prinsipal akun (
new iam.AccountPrincipal('0123456789012'))
-
Prinsipal pengguna kanonik ()
new iam.CanonicalUserPrincipal('79a59d[...]7ef2be')
-
AWS Organizations kepala sekolah ()
new iam.OrganizationPrincipal('org-id')
-
ARNPrinsipal sewenang-wenang ()
new iam.ArnPrincipal(res.arn)
-
An
iam.CompositePrincipal(principal1, principal2, ...)
untuk mempercayai banyak prinsip
Izin
Setiap konstruksi yang mewakili sumber daya yang dapat diakses, seperti bucket Amazon S3 atau tabel Amazon DynamoDB, memiliki metode yang memberikan akses ke entitas lain. Semua metode tersebut memiliki nama yang dimulai dengan hibah.
Misalnya, bucket Amazon S3 memiliki metode dan grantRead
(grantReadWrite
Python:grant_read
,grant_read_write
) untuk mengaktifkan akses baca dan baca/tulis, masing-masing, dari entitas ke bucket. Entitas tidak harus tahu persis IAM izin Amazon S3 mana yang diperlukan untuk melakukan operasi ini.
Argumen pertama dari metode hibah selalu bertipe IGrantable. Antarmuka ini mewakili entitas yang dapat diberikan izin. Artinya, itu mewakili sumber daya dengan peran, seperti IAM objekRole
,User
, danGroup
.
Entitas lain juga dapat diberikan izin. Misalnya, nanti dalam topik ini, kami menunjukkan cara memberikan akses CodeBuild proyek ke bucket Amazon S3. Umumnya, peran terkait diperoleh melalui role
properti pada entitas yang diberikan akses.
Sumber daya yang menggunakan peran eksekusi, sepertilambda.Function
, juga diterapkanIGrantable
, sehingga Anda dapat memberi mereka akses secara langsung alih-alih memberikan akses ke peran mereka. Misalnya, jika bucket
adalah bucket Amazon S3, dan function
merupakan fungsi Lambda, kode berikut memberikan akses baca fungsi ke bucket.
Terkadang izin harus diterapkan saat tumpukan Anda sedang digunakan. Salah satu kasus tersebut adalah ketika Anda memberikan akses sumber daya AWS CloudFormation khusus ke beberapa sumber daya lain. Sumber daya kustom akan dipanggil selama penerapan, sehingga harus memiliki izin yang ditentukan pada waktu penerapan.
Kasus lain adalah ketika layanan memverifikasi bahwa peran yang Anda berikan kepadanya memiliki kebijakan yang tepat diterapkan. (Sejumlah AWS layanan melakukan ini untuk memastikan bahwa Anda tidak lupa untuk menetapkan kebijakan.) Dalam kasus tersebut, penerapan mungkin gagal jika izin diterapkan terlambat.
Untuk memaksa izin hibah diterapkan sebelum sumber daya lain dibuat, Anda dapat menambahkan ketergantungan pada hibah itu sendiri, seperti yang ditunjukkan di sini. Meskipun nilai pengembalian metode hibah biasanya dibuang, setiap metode hibah sebenarnya mengembalikan objekiam.Grant
.
Peran
IAMPaket berisi Role
konstruksi yang mewakili IAM peran. Kode berikut menciptakan peran baru, mempercayai EC2 layanan Amazon.
Anda dapat menambahkan izin ke peran dengan memanggil addToPolicy
metode peran (Pythonadd_to_policy
:), meneruskan PolicyStatement
sebuah yang mendefinisikan aturan yang akan ditambahkan. Pernyataan ditambahkan ke kebijakan default peran; jika tidak ada, satu akan dibuat.
Contoh berikut menambahkan pernyataan Deny
kebijakan untuk peran untuk tindakan ec2:SomeAction
dan s3:AnotherAction
sumber daya bucket
dan otherRole
(Python:other_role
), dengan syarat bahwa layanan resmi adalah. AWS CodeBuild
Pada contoh sebelumnya, kita telah membuat PolicyStatement
inline baru dengan panggilan (addToPolicy
Python:). add_to_policy
Anda juga dapat meneruskan pernyataan kebijakan yang ada atau yang telah Anda modifikasi. PolicyStatementObjek memiliki banyak metode untuk menambahkan prinsip, sumber daya, kondisi, dan tindakan.
Jika Anda menggunakan konstruksi yang membutuhkan peran agar berfungsi dengan benar, Anda dapat melakukan salah satu hal berikut:
-
Lewati peran yang ada saat membuat instance objek konstruksi.
-
Biarkan konstruksi menciptakan peran baru untuk Anda, mempercayai prinsip layanan yang tepat. Contoh berikut menggunakan konstruksi seperti itu: CodeBuild proyek.
Setelah objek dibuat, peran (apakah peran diteruskan atau peran default yang dibuat oleh konstruksi) tersedia sebagai propertirole
. Namun, properti ini tidak tersedia pada sumber daya eksternal. Oleh karena itu, konstruksi ini memiliki metode addToRolePolicy
(Pythonadd_to_role_policy
:).
Metode ini tidak melakukan apa-apa jika konstruksinya adalah sumber daya eksternal, dan ia memanggil metode addToPolicy
(Pythonadd_to_policy
:) dari properti sebaliknyarole
. Ini menghemat kesulitan menangani kasus yang tidak ditentukan secara eksplisit.
Contoh berikut menunjukkan:
Kebijakan sumber daya
Beberapa sumber daya di AWS, seperti bucket dan IAM peran Amazon S3, juga memiliki kebijakan sumber daya. Konstruksi ini memiliki addToResourcePolicy
metode (Pythonadd_to_resource_policy
:), yang mengambil PolicyStatement
sebagai argumennya. Setiap pernyataan kebijakan yang ditambahkan ke kebijakan sumber daya harus menentukan setidaknya satu prinsipal.
Dalam contoh berikut, bucket Amazon S3 bucket
memberikan peran dengan s3:SomeAction
izin untuk dirinya sendiri.
Menggunakan IAM objek eksternal
Jika Anda telah menetapkan IAM pengguna, prinsipal, grup, atau peran di luar AWS CDK aplikasi, Anda dapat menggunakan IAM objek tersebut di AWS CDK aplikasi. Untuk melakukannya, buat referensi untuk itu menggunakan namanyaARN. (Gunakan nama untuk pengguna, grup, dan peran.) Referensi yang dikembalikan kemudian dapat digunakan untuk memberikan izin atau untuk membuat pernyataan kebijakan seperti yang dijelaskan sebelumnya.
-
Untuk pengguna, hubungi
User.fromUserArn()
atauUser.fromUserName()
.User.fromUserAttributes()
juga tersedia, tetapi saat ini menyediakan fungsionalitas yang sama sepertiUser.fromUserArn()
. -
Untuk prinsipal, buat instance objek.
ArnPrincipal
-
Untuk grup, hubungi
Group.fromGroupArn()
atauGroup.fromGroupName()
. -
Untuk peran, hubungi
Role.fromRoleArn()
atauRole.fromRoleName()
.
Kebijakan (termasuk kebijakan terkelola) dapat digunakan dengan cara yang sama menggunakan metode berikut. Anda dapat menggunakan referensi ke objek ini di mana pun IAM kebijakan diperlukan.
catatan
Seperti semua referensi ke AWS sumber daya eksternal, Anda tidak dapat memodifikasi IAM objek eksternal di CDK aplikasi Anda.