Elemen kebijakan IAM: Variabel dan tag - AWS Identity and Access Management

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

Elemen kebijakan IAM: Variabel dan tag

Gunakan variabel kebijakan AWS Identity and Access Management (IAM) sebagai placeholder ketika Anda tidak mengetahui nilai pasti dari sumber daya atau kunci kondisi saat Anda menulis kebijakan.

catatan

Jika AWS tidak dapat menyelesaikan variabel, ini dapat menyebabkan seluruh pernyataan menjadi tidak valid. Misalnya, jika Anda menggunakan variabel aws:TokenIssueTime, variabel tersebut hanya menghasilkan nilai saat pemohon diautentikasi menggunakan kredensial sementara (peran IAM). Untuk mencegah variabel menyebabkan pernyataan tidak valid, gunakan... IfExists operator kondisi.

Pengantar

Dalam kebijakan IAM, banyak tindakan memungkinkan Anda untuk memberikan nama untuk sumber daya spesifik yang Anda ingin kontrol aksesnya. Misalnya, kebijakan berikut memungkinkan pengguna untuk membuat daftar, membaca, dan menulis objek di bucket S3 DOC-EXAMPLE-BUCKET untuk marketing proyek.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"], "Condition": {"StringLike": {"s3:prefix": ["marketing/*"]}} }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/marketing/*"] } ] }

Dalam beberapa kasus, Anda mungkin tidak mengetahui nama pasti sumber daya saat Anda menyusun kebijakan. Anda mungkin ingin melakukan generalisasi kebijakan sehingga dapat digunakan oleh banyak pengguna tanpa harus membuat salinan unik dari kebijakan tersebut untuk setiap pengguna. Alih-alih membuat kebijakan terpisah untuk setiap pengguna, kami sarankan Anda membuat kebijakan grup tunggal yang berfungsi untuk setiap pengguna dalam grup tersebut.

Menggunakan variabel dalam kebijakan

Anda dapat menentukan nilai dinamis di dalam kebijakan dengan menggunakan variabel kebijakan yang menetapkan placeholder dalam kebijakan.

Variabel ditandai menggunakan $awalan diikuti oleh sepasang kurawal kurawal ({ }) yang menyertakan nama variabel nilai dari permintaan.

Ketika kebijakan dievaluasi, variabel kebijakan diganti dengan nilai yang berasal dari kunci konteks bersyarat yang diteruskan dalam permintaan. Variabel dapat digunakan dalam kebijakan berbasis identitas, kebijakan sumber daya, kebijakan kontrol layanan, kebijakan sesi, dan kebijakan titik akhir VPC. Kebijakan berbasis identitas yang digunakan sebagai batas izin juga mendukung variabel kebijakan.

Kunci konteks kondisi global dapat digunakan sebagai variabel dalam permintaan di seluruh AWS layanan. Kunci kondisi khusus layanan juga dapat digunakan sebagai variabel saat berinteraksi dengan AWS sumber daya, tetapi hanya tersedia ketika permintaan dibuat terhadap sumber daya yang mendukungnya. Untuk daftar kunci konteks yang tersedia untuk setiap AWS layanan dan sumber daya, lihat Referensi Otorisasi Layanan. Dalam keadaan tertentu, Anda tidak dapat mengisi kunci konteks kondisi global dengan nilai. Untuk mempelajari selengkapnya tentang setiap kunci, lihat kunci konteks kondisi AWS global.

penting
  • Nama utama peka dengan huruf besar dan kecil. Misalnya, aws:CurrentTime setara dengan AWS:currenttime.

  • Anda dapat menggunakan kunci kondisi bernilai tunggal apa pun sebagai variabel. Anda tidak dapat menggunakan kunci kondisi multivalued sebagai variabel.

Contoh berikut menunjukkan kebijakan untuk peran IAM atau pengguna yang menggantikan nama sumber daya tertentu dengan variabel kebijakan. Anda dapat menggunakan kembali kebijakan ini dengan memanfaatkan kunci aws:PrincipalTag kondisi. Jika kebijakan ini dievaluasi, hanya ${aws:PrincipalTag/team} mengizinkan tindakan jika nama bucket diakhiri dengan nama tim dari tag team utama.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"], "Condition": {"StringLike": {"s3:prefix": ["${aws:PrincipalTag/team}/*"]}} }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/${aws:PrincipalTag/team}/*"] } ] }

Variabel ditandai menggunakan prefiks $ yang diikuti dengan sepasang rangka yang melengkung ({ }). Di dalam ${ } karakter, Anda dapat menyertakan nama nilai dari permintaan yang ingin Anda gunakan dalam kebijakan. Nilai-nilai yang dapat Anda gunakan akan dibahas nanti di halaman ini.

Untuk detail tentang kunci kondisi global ini, lihat aws:PrincipalTag/tag-kunci di daftar kunci kondisi global.

catatan

Untuk menggunakan variabel kebijakan, Anda harus menyertakan elemen Version dalam pernyataan, dan versinya harus diatur ke versi yang mendukung variabel kebijakan. Variabel diperkenalkan dalam versi 2012-10-17. Versi sebelumnya dari bahasa kebijakan tidak mendukung variabel kebijakan. Jika Anda tidak menyertakan elemen Version dan mengaturnya ke tanggal versi yang sesuai, variabel seperti ${aws:username} diperlakukan sebagai string literal dalam kebijakan ini.

Elemen kebijakan Version berbeda dari versi kebijakan. Elemen kebijakan Version digunakan dalam kebijakan dan menentukan versi bahasa kebijakan. Sebaliknya, versi kebijakan dibuat saat Anda mengubah kebijakan yang dikelola pelanggan di IAM. Perubahan kebijakan tidak mengesampingkan kebijakan yang ada. Sebagai gantinya, IAM membuat versi baru dari kebijakan yang dikelola. Untuk mempelajari lebih lanjut tentang elemen kebijakan Version, lihat Elemen kebijakan IAM JSON: Version. Untuk mempelajari selengkapnya tentang versi kebijakan, lihat Peningkatan versi IAM.

Kebijakan yang memungkinkan prinsipal untuk mendapatkan objek dari jalur /David dari bucket S3 terlihat seperti ini:

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": ["arn:aws:s3::DOC-EXAMPLE-BUCKET/David/*"] }] }

Jika kebijakan ini dilampirkan ke penggunaDavid, pengguna tersebut mendapatkan objek dari bucket S3-nya sendiri, tetapi Anda harus membuat kebijakan terpisah untuk setiap pengguna yang menyertakan nama pengguna. Kemudian, Anda akan menerapkan setiap kebijakan kepada pengguna individu.

Dengan menggunakan variabel kebijakan, Anda dapat membuat kebijakan yang dapat digunakan kembali. Kebijakan berikut memungkinkan pengguna untuk mendapatkan objek dari bucket Amazon S3 jika nilai tag-key aws:PrincipalTag cocok dengan nilai tag-key yang diteruskan dalam permintaanowner.

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowUnlessOwnedBySomeoneElse", "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": ["*"], "Condition": { "StringEquals": { "s3:ExistingObjectTag/owner": "${aws:PrincipalTag/owner}" } } } ] }

Bila Anda menggunakan variabel kebijakan sebagai pengganti pengguna seperti ini, Anda tidak harus memiliki kebijakan terpisah untuk setiap pengguna individu. Dalam contoh berikut, kebijakan dilampirkan pada peran IAM yang diasumsikan oleh Manajer Produk menggunakan kredensil keamanan sementara. Saat pengguna membuat permintaan untuk menambahkan objek Amazon S3, IAM mengganti nilai dept tag dari permintaan ${aws:PrincipalTag} variabel saat ini dan mengevaluasi kebijakan.

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowOnlyDeptS3Prefix", "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/${aws:PrincipalTag/dept}/*"], } ] }

Tanda sebagai variabel kebijakan

Di beberapa AWS layanan, Anda dapat melampirkan atribut kustom Anda sendiri ke sumber daya yang dibuat oleh layanan tersebut. Misalnya, Anda dapat menerapkan tag ke bucket Amazon S3 atau ke pengguna IAM. Tanda ini adalah pasangan nilai kunci. Anda menentukan nama kunci tanda dan nilai yang terkait dengan nama kunci tersebut. Misalnya, Anda dapat membuat tanda dengan kunci department dan nilai Human Resources. Untuk informasi lebih lanjut tentang pemberian tag pada entitas IAM, lihat Menandai sumber daya IAM. Untuk informasi tentang penandaan sumber daya yang dibuat oleh layanan AWS lainnya, lihat dokumentasi untuk layanan tersebut. Untuk informasi tentang penggunaan Tag Editor, lihat Bekerja dengan Tag Editor dalam Panduan Pengguna AWS Management Console .

Anda dapat menandai sumber daya IAM untuk menyederhanakan menemukan, mengatur, dan melacak sumber daya IAM Anda. Anda juga dapat menandai identitas IAM untuk mengontrol akses ke sumber daya atau menandainya sendiri. Untuk mempelajari lebih lanjut tentang penggunaan tag untuk mengontrol akses, lihat Mengontrol akses ke dan untuk pengguna dan peran IAM menggunakan tag.

Tempat Anda dapat menggunakan variabel kebijakan

Anda dapat menggunakan variabel kebijakan di elemen Resource dan dalam perbandingan string dalam elemen Condition.

Elemen sumber daya

Anda dapat menggunakan variabel kebijakan di elemen Resource, tetapi hanya di bagian sumber daya ARN. Bagian ARN ini muncul setelah tanda titik dua (:) yang kelima. Anda tidak dapat menggunakan variabel untuk mengganti bagian ARN sebelum tanda titik dua yang kelima, seperti layanan atau akun. Untuk informasi selengkapnya tentang format ARN, lihat ARN IAM.

Untuk mengganti bagian dari ARN dengan nilai tag, kelilingi awalan dan nama kunci dengan. ${ } Misalnya, elemen Resource berikut hanya mengacu pada bucket yang diberi nama sama dengan nilai dalam tag departemen pengguna yang meminta.

"Resource": ["arn:aws::s3:::bucket/${aws:PrincipalTag/department}"]

Banyak AWS sumber daya menggunakan ARN yang berisi nama yang dibuat pengguna. Kebijakan IAM berikut memastikan bahwa hanya pengguna yang dituju dengan nilai tag access-project, access-application, dan access-environment yang cocok yang dapat memodifikasi sumber daya mereka. Selain itu, menggunakan kecocokan wildcard *, mereka dapat mengizinkan sufiks nama sumber daya khusus.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessBasedOnArnMatching", "Effect": "Allow", "Action": [ "sns:CreateTopic", "sns:DeleteTopic"], "Resource": ["arn:aws:sns:*:*:${aws:PrincipalTag/access-project}-${aws:PrincipalTag/access-application}-${aws:PrincipalTag/access-environment}-*" ] } ] }

Elemen kondisi

Anda dapat menggunakan variabel kebijakan untuk nilai Condition dalam setiap kondisi yang melibatkan operator string atau operator ARN. Operator string termasuk StringEquals, StringLike, dan StringNotLike. Operator ARN termasuk ArnEquals dan ArnLike. Anda tidak dapat menggunakan variabel kebijakan dengan operator lainnya, seperti operator Numeric, Date, Boolean, Binary, IP Address, atau Null. Untuk informasi selengkapnya tentang operator kondisi, lihat Elemen kebijakan IAM JSON: Operator kondisi.

Saat mereferensikan tanda di dalam ekspresi elemen Condition, gunakan prefiks dan nama kunci yang relevan sebagai kunci kondisi. Kemudian gunakan nilai yang ingin Anda uji di dalam nilai kondisi.

Misalnya, contoh kebijakan berikut memungkinkan akses penuh ke pengguna, tetapi hanya jika tag costCenter dilampirkan ke pengguna. Tanda harus memiliki nilai 12345 atau 67890. Jika tanda tidak memiliki nilai, atau memiliki nilai lain, permintaan akan gagal.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:*user*" ], "Resource": "*", "Condition": { "StringLike": { "iam:ResourceTag/costCenter": [ "12345", "67890" ] } } } ] }

Variabel kebijakan tanpa nilai

Ketika variabel kebijakan mereferensikan kunci konteks kondisi yang tidak memiliki nilai atau tidak ada dalam konteks otorisasi untuk permintaan, nilainya secara efektif nol. Tidak ada nilai yang sama atau serupa. Kunci konteks kondisi mungkin tidak ada dalam konteks otorisasi ketika:

  • Anda menggunakan kunci konteks kondisi khusus layanan dalam permintaan ke sumber daya yang tidak mendukung kunci kondisi tersebut.

  • Tag pada prinsipal, sesi, sumber daya, atau permintaan IAM tidak ada.

  • Keadaan lain seperti yang tercantum untuk setiap konteks kondisi global masukAWS kunci konteks kondisi global.

Bila Anda menggunakan variabel tanpa nilai dalam elemen kondisi kebijakan IAM, Elemen kebijakan IAM JSON: Operator kondisi suka StringEquals atau StringLike tidak cocok, dan pernyataan kebijakan tidak berlaku.

Operator kondisi terbalik StringNotLike menyukai StringNotEquals atau mencocokkan dengan nilai nol, karena nilai kunci kondisi yang mereka uji tidak sama dengan atau seperti nilai nol efektif.

Dalam contoh berikut, aws:principaltag/Team harus sama dengan s3:ExistingObjectTag/Team mengizinkan akses. Akses ditolak secara eksplisit ketika tidak aws:principaltag/Team disetel. Jika variabel yang tidak memiliki nilai dalam konteks otorisasi digunakan sebagai bagian dari Resource atau NotResource elemen kebijakan, sumber daya yang menyertakan variabel kebijakan tanpa nilai tidak akan cocok dengan sumber daya apa pun.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::/example-bucket/*", "Condition": { "StringNotEquals": { "s3:ExistingObjectTag/Team": "${aws:PrincipalTag/Team}" } } } ] }

Meminta informasi yang dapat Anda gunakan untuk variabel kebijakan

Anda dapat menggunakan elemen Condition dari kebijakan JSON untuk membandingkan kunci dalam konteks permintaan dengan nilai kunci yang Anda tentukan dalam kebijakan Anda. Bila Anda menggunakan variabel kebijakan, AWS ganti nilai dari kunci konteks permintaan sebagai pengganti variabel dalam kebijakan Anda.

Nilai-nilai kunci utama

Nilai untuk aws:username, aws:userid, dan aws:PrincipalType bergantung pada tipe prinsipal yang memulai permintaan. Misalnya, permintaan dapat dibuat menggunakan kredensil pengguna IAM, peran IAM, atau. Pengguna root akun AWSDaftar berikut menunjukkan nilai-nilai untuk kunci ini untuk berbagai tipe prinsipal.

Prinsipal aws:username aws:userid aws:PrincipalType
Pengguna root akun AWS (tidak ada) Akun AWS ID Account
Pengguna IAM Nama pengguna IAM ID unik User
Pengguna gabungan (tidak ada) akun:caller-specified-name FederatedUser
Pengguna federasi OIDC

Untuk informasi tentang kunci kebijakan yang tersedia saat Anda menggunakan federasi identitas web, lihat Kunci yang tersedia untuk AWS federasi OIDC.

(tidak ada)

role-id:caller-specified-role-name

di mana role-id adalah id unik dari peran dan caller-specified-role-name ditentukan oleh RoleSessionName parameter yang diteruskan ke AssumeRoleWithWebIdentity permintaan.

AssumedRole
Pengguna gabungan SAML

Untuk informasi tentang kunci kebijakan yang tersedia saat Anda menggunakan gabungan SAML, lihat Mengidentifikasi pengguna secara unik dalam federasi berbasis SAML.

(tidak ada)

role-id:caller-specified-role-name

di mana role-id adalah id unik dari peran dan caller-specified-role-name ditentukan oleh elemen Atribut dengan atribut Name disetel ke https://aws.amazon.com/SAML/attributes/ RoleSession Name.

AssumedRole
Asumsi peran (tidak ada)

role-id:caller-specified-role-name

di mana role-id adalah id unik dari peran dan caller-specified-role-name ditentukan oleh RoleSessionName parameter yang diteruskan ke AssumeRole permintaan.

AssumedRole
Peran ditetapkan ke instans Amazon EC2 (tidak ada)

role-id:ec2-instance-id

dengan role-id adalah id unik peran dan id instans ec2 adalah pengidentifikasi unik instans EC2.

AssumedRole
Penelepon anonim (khusus Amazon SQS, Amazon SNS, dan Amazon S3) (tidak ada) anonymous Anonymous

Untuk item dalam tabel, ini, ingat hal berikut:

  • tidak ada berarti bahwa nilai tersebut tidak tercantum dalam informasi permintaan saat ini, dan setiap upaya untuk mencocokannya gagal dan menyebabkan pernyataan tersebut menjadi tidak valid.

  • role-id adalah pengidentifikasi unik yang ditetapkan untuk setiap peran saat dibuat. Anda dapat menampilkan ID peran dengan AWS CLI perintah: aws iam get-role --role-name rolename

  • caller-specified-name dan caller-specified-role-name adalah nama yang diberikan oleh proses panggilan (seperti aplikasi atau layanan) ketika membuat panggilan untuk mendapatkan kredensial sementara.

  • ec2-instance-id adalah nilai yang ditetapkan ke instance saat diluncurkan dan muncul di halaman Instans konsol Amazon EC2. Anda juga dapat menampilkan ID instance dengan menjalankan AWS CLI perintah: aws ec2 describe-instances

Informasi yang tersedia dalam permintaan bagi pengguna gabungan

Pengguna gabungan adalah pengguna yang diautentikasi menggunakan sistem selain IAM. Misalnya, perusahaan mungkin memiliki aplikasi untuk digunakan di rumah yang melakukan panggilan ke AWS. Mungkin tidak praktis untuk memberikan identitas IAM kepada setiap pengguna perusahaan yang menggunakan aplikasi. Sebaliknya, perusahaan mungkin menggunakan aplikasi proksi (tingkat menengah) yang memiliki satu identitas IAM, atau perusahaan mungkin menggunakan penyedia identitas (IdP) SAML. Aplikasi proksi atau SAML IdP mengautentikasi pengguna individu yang menggunakan jaringan perusahaan. Aplikasi proksi kemudian dapat menggunakan identitas IAM-nya untuk mendapatkan kredensial keamanan sementara bagi pengguna individu. IDP SAMP pada dasarnya dapat bertukar informasi identitas AWS untuk kredensil keamanan sementara. Kredensi sementara kemudian dapat digunakan untuk mengakses AWS sumber daya.

Demikian pula, Anda dapat membuat aplikasi untuk perangkat seluler dengan aplikasi yang perlu mengakses sumber daya AWS . Dalam hal ini, Anda dapat menggunakan federasi OIDC, di mana aplikasi mengautentikasi pengguna menggunakan penyedia identitas terkenal seperti Login with Amazon, Amazon Cognito, Facebook, atau Google. Kemudian aplikasi dapat menggunakan informasi autentikasi pengguna dari penyedia ini untuk mendapatkan kredensial keamanan sementara guna mengakses sumber daya AWS .

Cara yang disarankan untuk menggunakan federasi OIDC adalah dengan memanfaatkan Amazon Cognito dan AWS SDK seluler. Untuk informasi selengkapnya, lihat berikut ini:

Karakter khusus

Ada beberapa variabel kebijakan khusus yang telah ditetapkan sebelumnya yang memiliki nilai tetap yang memungkinkan Anda mewakili karakter yang memiliki arti khusus. Jika karakter khusus ini adalah bagian dari string, Anda mencoba untuk mencocokkannya dan Anda memasukkannya secara literal sehingga mereka akan disalahartikan. Misalnya, menyisipkan tanda bintang * dalam string akan ditafsirkan sebagai wildcard yang cocok dengan karakter apa pun, bukan sebagai tanda bintang * yang sebenarnya. Dalam kasus ini, Anda dapat menggunakan variabel kebijakan yang telah ditentukan sebelumnya berikut ini:

  • ${*} - gunakan jika Anda memerlukan karakter * (tanda bintang).

  • ${?} - gunakan jika Anda memerlukan katakter ? (tanda tanya).

  • ${$} - gunakan jika Anda memerlukan karakter $ (simbol dolar).

Variabel kebijakan yang sudah ditentukan sebelumnya ini dapat digunakan dalam string apa pun tempat Anda dapat menggunakan variabel kebijakan reguler.

Menentukan nilai default

Untuk menambahkan nilai default ke variabel, sertai nilai default dengan tanda kutip tunggal (' '), dan pisahkan teks variabel serta nilai default dengan koma dan spasi (, ).

Misalnya, jika prinsipal diberi tagteam=yellow, mereka dapat mengakses bucket ExampleCorp's Amazon S3 bernama. DOC-EXAMPLE-BUCKET-yellow Kebijakan dengan sumber daya ini memungkinkan anggota tim untuk mengakses keranjang tim mereka, tetapi tidak dengan tim lain. Untuk pengguna tanpa tag tim, ini menetapkan nilai default company-wide untuk nama bucket. Pengguna ini hanya dapat mengakses DOC-EXAMPLE-BUCKET-company-wide bucket di mana mereka dapat melihat informasi yang luas, seperti instruksi untuk bergabung dengan tim.

"Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET-${aws:PrincipalTag/team, 'company-wide'}"

Untuk informasi selengkapnya

Untuk informasi selengkapnya tentang kebijakan, lihat hal berikut: