Asumsikan IAM peran - AWS SDK for PHP

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

Asumsikan IAM peran

Menggunakan IAM peran untuk kredenal variabel EC2 instans Amazon

Jika Anda menjalankan aplikasi di EC2 instans Amazon, cara yang lebih disukai untuk memberikan kredensi untuk melakukan panggilan AWS adalah dengan menggunakan IAMperan untuk mendapatkan kredenal keamanan sementara.

Ketika Anda menggunakan IAM peran, Anda tidak perlu khawatir tentang manajemen kredensi dari aplikasi Anda. Mereka mengizinkan instance untuk “mengambil” peran dengan mengambil kredensi sementara dari server metadata EC2 instans Amazon.

Kredensial sementara, sering disebut sebagai kredensial profil instance, memungkinkan akses ke tindakan dan sumber daya yang diizinkan oleh kebijakan peran. Amazon EC2 menangani semua kerja keras untuk mengautentikasi instans secara aman ke IAM layanan untuk mengambil peran, dan menyegarkan kredenal peran yang diambil secara berkala. Ini membuat aplikasi Anda aman dengan hampir tidak ada pekerjaan di pihak Anda. Untuk daftar layanan yang menerima kredensi keamanan sementara, lihat AWS layanan yang berfungsi IAM di IAMPanduan Pengguna.

catatan

Untuk menghindari menekan layanan metadata setiap saat, Anda dapat meneruskan instance Aws\CacheInterface in sebagai 'credentials' opsi ke konstruktor klien. Ini memungkinkan SDK penggunaan kredenal profil instance cache sebagai gantinya. Untuk detailnya, lihat Konfigurasi untuk AWS SDK for PHP Versi 3.

Untuk informasi selengkapnya tentang mengembangkan EC2 aplikasi Amazon menggunakanSDKs, lihat Menggunakan IAM peran untuk EC2 instans Amazon di Panduan Referensi Alat AWS SDKs dan Alat.

Membuat dan menetapkan IAM peran ke instans Amazon EC2

  1. Buat IAM klien.

    Impor

    require 'vendor/autoload.php'; use Aws\Iam\IamClient;

    Kode Sampel

    $client = new IamClient([ 'region' => 'us-west-2', 'version' => '2010-05-08' ]);
  2. Buat IAM peran dengan izin untuk tindakan dan sumber daya yang akan Anda gunakan.

    Kode Sampel

    $result = $client->createRole([ 'AssumeRolePolicyDocument' => 'IAM JSON Policy', // REQUIRED 'Description' => 'Description of Role', 'RoleName' => 'RoleName', // REQUIRED ]);
  3. Buat profil IAM instance dan simpan Amazon Resource Name (ARN) dari hasilnya.

    catatan

    Jika Anda menggunakan IAM konsol alih-alih AWS SDK for PHP, konsol akan membuat profil instance secara otomatis dan memberinya nama yang sama dengan peran yang sesuai dengannya.

    Kode Sampel

    $IPN = 'InstanceProfileName'; $result = $client->createInstanceProfile([ 'InstanceProfileName' => $IPN , ]); $ARN = $result['Arn']; $InstanceID = $result['InstanceProfileId'];
  4. Buat EC2 klien Amazon.

    Impor

    require 'vendor/autoload.php'; use Aws\Ec2\Ec2Client;

    Kode Sampel

    $ec2Client = new Ec2Client([ 'region' => 'us-west-2', 'version' => '2016-11-15', ]);
  5. Tambahkan profil instance ke instans Amazon EC2 yang sedang berjalan atau dihentikan. Gunakan nama profil instance IAM peran Anda.

    Kode Sampel

    $result = $ec2Client->associateIamInstanceProfile([ 'IamInstanceProfile' => [ 'Arn' => $ARN, 'Name' => $IPN, ], 'InstanceId' => $InstanceID ]);

Untuk informasi selengkapnya, lihat IAMPeran untuk Amazon EC2 di Panduan EC2 Pengguna Amazon.

Menggunakan IAM peran untuk ECS tugas Amazon

Tugas di Amazon Elastic Container Service (AmazonECS) dapat IAM berperan untuk melakukan AWS API panggilan. Ini adalah strategi untuk mengelola kredensional untuk aplikasi Anda untuk digunakan, mirip dengan cara profil EC2 instans Amazon memberikan kredensional ke instans Amazon. EC2

Alih-alih membuat dan mendistribusikan AWS kredensi jangka panjang ke container atau menggunakan peran EC2 instans Amazon, Anda dapat mengaitkan IAM peran yang menggunakan kredensial sementara dengan definisi atau operasi tugasECS. RunTask API

Untuk informasi selengkapnya tentang penggunaan IAM peran yang dapat diasumsikan oleh tugas container, lihat topik IAMperan Tugas di Panduan ECS Pengembang Amazon. Untuk contoh penggunaan IAM peran tugas dalam bentuk definisi tugas taskRoleArn dalam, lihat Contoh definisi tugas juga di Panduan ECS Pengembang Amazon.

Dengan asumsi IAM peran lain Akun AWS

Ketika Anda bekerja di Akun AWS (Akun A) dan ingin mengambil peran di akun lain (Akun B), Anda harus terlebih dahulu membuat IAM peran di Akun B. Peran ini memungkinkan entitas di akun Anda (Akun A) untuk melakukan tindakan tertentu di Akun B. Untuk informasi selengkapnya tentang akses lintas akun, lihat Tutorial: Mendelegasikan Akses di Seluruh AWS Akun Menggunakan IAM Peran.

Setelah Anda membuat peran di Akun B, catat Peran tersebutARN. Anda akan menggunakan ini ARN ketika Anda mengambil peran dari Akun A. Anda mengambil peran menggunakan AWS kredensi yang terkait dengan entitas Anda di Akun A.

Buat AWS STS klien dengan kredensi untuk Anda. Akun AWS Berikut ini, kami menggunakan profil kredensial, tetapi Anda dapat menggunakan metode apa pun. Dengan AWS STS klien yang baru dibuat, panggil assume-role dan berikan kustom. sessionName Ambil kredensi sementara baru dari hasilnya. Kredenal bertahan satu jam secara default.

Kode Sampel

$stsClient = new Aws\Sts\StsClient([ 'profile' => 'default', 'region' => 'us-east-2', 'version' => '2011-06-15' ]); $ARN = "arn:aws:iam::123456789012:role/xaccounts3access"; $sessionName = "s3-access-example"; $result = $stsClient->AssumeRole([ 'RoleArn' => $ARN, 'RoleSessionName' => $sessionName, ]); $s3Client = new S3Client([ 'version' => '2006-03-01', 'region' => 'us-west-2', 'credentials' => [ 'key' => $result['Credentials']['AccessKeyId'], 'secret' => $result['Credentials']['SecretAccessKey'], 'token' => $result['Credentials']['SessionToken'] ] ]);

Untuk informasi selengkapnya, lihat Menggunakan IAM Peran atau AssumeRoledi AWS SDK for PHP API Referensi.

Menggunakan IAM peran dengan identitas web

Federasi Identitas Web memungkinkan pelanggan untuk menggunakan penyedia identitas pihak ketiga untuk otentikasi saat mengakses sumber daya. AWS Sebelum Anda dapat mengambil peran dengan identitas web, Anda harus membuat IAM peran dan mengkonfigurasi penyedia identitas web (iDP). Untuk informasi selengkapnya, lihat Membuat Peran untuk Identitas Web atau Federasi OpenID Connect (Konsol).

Setelah membuat penyedia identitas dan membuat peran untuk identitas web Anda, gunakan AWS STS klien untuk mengautentikasi pengguna. Berikan webIdentityToken dan ProviderId untuk identitas Anda, dan Peran ARN untuk IAM peran dengan izin untuk pengguna.

Kode Sampel

$stsClient = new Aws\Sts\StsClient([ 'profile' => 'default', 'region' => 'us-east-2', 'version' => '2011-06-15' ]); $ARN = "arn:aws:iam::123456789012:role/xaccounts3access"; $sessionName = "s3-access-example"; $duration = 3600; $result = $stsClient->AssumeRoleWithWebIdentity([ 'WebIdentityToken' => "FACEBOOK_ACCESS_TOKEN", 'ProviderId' => "graph.facebook.com", 'RoleArn' => $ARN, 'RoleSessionName' => $sessionName, ]); $s3Client = new S3Client([ 'version' => '2006-03-01', 'region' => 'us-west-2', 'credentials' => [ 'key' => $result['Credentials']['AccessKeyId'], 'secret' => $result['Credentials']['SecretAccessKey'], 'token' => $result['Credentials']['SessionToken'] ] ]);

Untuk informasi selengkapnya, lihat AssumeRoleWithWebIdentity—Federasi Melalui Penyedia Identitas Berbasis Web atau AssumeRoleWithWebIdentitydi Referensi. AWS SDK for PHP API

Asumsikan peran dengan profil

Tentukan profil di ~/.aws/credentials

Anda dapat mengonfigurasi AWS SDK for PHP untuk menggunakan IAM peran dengan menentukan profil di~/.aws/credentials.

Buat profil baru dengan role_arn pengaturan untuk peran yang ingin Anda asumsikan. Sertakan juga source_profile pengaturan untuk profil lain dengan kredensional yang memiliki izin untuk mengambil peran. IAM Untuk detail selengkapnya tentang setelan konfigurasi ini, lihat Mengasumsikan kredensi peran di Panduan Referensi Alat AWS SDKs dan Alat.

Misalnya, dalam hal berikut~/.aws/credentials, project1 profil menetapkan role_arn dan menentukan default profil sebagai sumber kredensi untuk memverifikasi bahwa entitas yang terkait dengannya dapat mengambil peran tersebut.

[project1] role_arn = arn:aws:iam::123456789012:role/testing source_profile = default role_session_name = OPTIONAL_SESSION_NAME [default] aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY aws_session_token= YOUR_AWS_SESSION_TOKEN

Jika Anda menyetel variabel AWS_PROFILE lingkungan, atau Anda menggunakan profile parameter saat membuat instance klien layanan, peran yang ditentukan akan project1 diasumsikan, menggunakan default profil sebagai kredenal sumber.

Cuplikan berikut menunjukkan penggunaan profile parameter dalam konstruktor. S3Client S3ClientAkan memiliki izin yang terkait dengan peran yang terkait dengan project1 profil.

$s3 = new Aws\S3\S3Client([ 'region' => 'us-east-1', 'version' => '2006-03-01', 'profile' => 'project1' ]);

Tentukan profil di ~/.aws/config

~/.aws/configFile ini juga dapat berisi profil yang ingin Anda asumsikan. Jika Anda mengatur variabel lingkunganAWS_SDK_LOAD_NONDEFAULT_CONFIG, SDK untuk PHP memuat profil dari config file. Ketika AWS_SDK_LOAD_NONDEFAULT_CONFIG diatur, SDK memuat profil dari keduanya ~/.aws/config dan~/.aws/credentials. Profil dari ~/.aws/credentials dimuat terakhir dan diutamakan daripada profil dari ~/.aws/config dengan nama yang sama. Profil dari salah satu lokasi dapat berfungsi sebagai source_profile atau profil yang akan diasumsikan.

Contoh berikut menggunakan project1 profil yang ditentukan dalam config file dan default profil dalam credentials file. AWS_SDK_LOAD_NONDEFAULT_CONFIGIni juga diatur.

# Profile in ~/.aws/config. [profile project1] role_arn = arn:aws:iam::123456789012:role/testing source_profile = default role_session_name = OPTIONAL_SESSION_NAME
# Profile in ~/.aws/credentials. [default] aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY aws_session_token= YOUR_AWS_SESSION_TOKEN

Saat S3Client konstruktor berjalan yang ditampilkan cuplikan berikut, peran yang ditentukan dalam project1 profil akan diasumsikan menggunakan kredenal yang terkait dengan profil. default

$s3 = new Aws\S3\S3Client([ 'region' => 'us-east-1', 'version' => '2006-03-01', 'profile' => 'project1' ]);