

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

# Asumsikan peran IAM menggunakan AWS SDK untuk PHP Versi 3
<a name="guide_credentials_assume_role"></a>

## Menggunakan peran IAM untuk kredenal variabel instans Amazon EC2
<a name="instance-profile-credentials"></a>

Jika Anda menjalankan aplikasi di instans Amazon EC2, cara yang lebih disukai untuk memberikan kredensi untuk melakukan panggilan AWS adalah dengan menggunakan [peran IAM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) untuk mendapatkan kredenal keamanan sementara.

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

Kredensial sementara, sering disebut sebagai **kredensial profil instance**, memungkinkan akses ke tindakan dan sumber daya yang diizinkan oleh kebijakan peran tersebut. Amazon EC2 menangani semua kerja keras untuk mengautentikasi instans secara aman ke layanan IAM 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 kredenal keamanan sementara, lihat [AWS layanan yang bekerja dengan IAM di Panduan Pengguna IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html).*

**catatan**  
Untuk menghindari menekan layanan metadata setiap saat, Anda dapat meneruskan instance `Aws\CacheInterface` in sebagai `'credentials'` opsi ke konstruktor klien. Ini memungkinkan SDK menggunakan kredenal profil instans cache sebagai gantinya. Untuk detailnya, lihat [Konfigurasi untuk AWS SDK untuk PHP Versi 3](guide_configuration.md).

*Untuk informasi selengkapnya tentang mengembangkan aplikasi Amazon EC2 menggunakan SDKs, lihat [Menggunakan peran IAM untuk instans Amazon EC2](https://docs.aws.amazon.com/sdkref/latest/guide/access-iam-roles-for-ec2.html) di Panduan Referensi Alat dan Alat.AWS SDKs *

### Membuat dan menetapkan peran IAM ke instans Amazon EC2
<a name="create-and-assign-an-iam-role-to-an-ec2-instance"></a>

1. Buat klien IAM.

    **Impor** 

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

    **Kode Sampel** 

   ```
   $client = new IamClient([
       'region' => 'us-west-2',
       'version' => '2010-05-08'
   ]);
   ```

1. Buat peran IAM 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
   ]);
   ```

1. Buat profil instans IAM dan simpan Amazon Resource Name (ARN) dari hasilnya.
**catatan**  
Jika Anda menggunakan konsol IAM alih-alih AWS SDK untuk 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'];
   ```

1. Buat klien Amazon EC2.

    **Impor** 

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

    **Kode Sampel** 

   ```
   $ec2Client = new Ec2Client([
       'region' => 'us-west-2',
       'version' => '2016-11-15',
   ]);
   ```

1. Tambahkan profil instans ke instans Amazon EC2 yang sedang berjalan atau dihentikan. Gunakan nama profil instance peran IAM Anda.

    **Kode Sampel** 

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

Untuk informasi lebih lanjut, lihat [Peran IAM untuk Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) dalam *Panduan Pengguna Amazon EC2*.

## Menggunakan peran IAM untuk tugas Amazon ECS
<a name="ecs-credentials"></a>

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

[Alih-alih membuat dan mendistribusikan AWS kredensi jangka panjang ke container atau menggunakan peran instans Amazon EC2, Anda dapat mengaitkan peran IAM yang menggunakan kredenal sementara dengan definisi tugas ECS atau operasi API. `RunTask`](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ecs-2014-11-13.html#runtask) 

Untuk informasi selengkapnya tentang penggunaan peran IAM yang dapat diasumsikan oleh tugas container, lihat topik [peran IAM Tugas](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) di Panduan Pengembang *Amazon ECS.* Untuk contoh penggunaan peran IAM tugas dalam bentuk definisi tugas `taskRoleArn` dalam, lihat [Contoh definisi tugas](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/firelens-example-taskdefs.html) juga di Panduan *Pengembang Amazon ECS*.

## Dengan asumsi peran IAM di yang lain Akun AWS
<a name="assuming-an-iam-role-in-another-aws-account"></a>

Ketika Anda bekerja di Akun AWS (Akun A) dan ingin mengambil peran di akun lain (Akun B), Anda harus terlebih dahulu membuat peran IAM 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) Peran IAM.

Setelah Anda membuat peran di Akun B, catat ARN Peran. Anda akan menggunakan ARN ini ketika Anda mengambil peran dari Akun A. Anda mengambil peran menggunakan AWS kredenal 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 SessionName kustom. 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 Peran IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html) atau [AssumeRole](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sts-2011-06-15.html#assumerole)di Referensi AWS SDK untuk PHP API.

## Menggunakan peran IAM dengan identitas web
<a name="using-an-iam-role-with-web-identity"></a>

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 peran IAM dan mengonfigurasi penyedia identitas web (iDP). Untuk informasi selengkapnya, lihat [Membuat Peran untuk Identitas Web atau Federasi OpenID Connect (Konsol)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html).

Setelah [membuat penyedia identitas](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html) dan [membuat peran untuk identitas web Anda](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html), gunakan AWS STS klien untuk mengautentikasi pengguna. Berikan webIdentityToken dan ProviderId untuk identitas Anda, dan ARN Peran untuk peran IAM 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity.html) atau [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sts-2011-06-15.html#assumerolewithwebidentity)di Referensi AWS SDK untuk PHP API.

## Asumsikan peran dengan profil
<a name="assume-role-with-profile"></a>

### Tentukan profil di `~/.aws/credentials`
<a name="assume-role-profile-credentials-file"></a>

Anda dapat mengonfigurasi AWS SDK untuk PHP untuk menggunakan peran IAM dengan mendefinisikan 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](https://docs.aws.amazon.com/sdkref/latest/guide/feature-assume-role-credentials.html) *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` `S3Client`Akan 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`
<a name="assume-role-profile-config-file"></a>

`~/.aws/config`File ini juga dapat berisi profil yang ingin Anda asumsikan. Jika Anda mengatur variabel lingkungan`AWS_SDK_LOAD_NONDEFAULT_CONFIG`, SDK for PHP memuat profil dari file`config`. Bila `AWS_SDK_LOAD_NONDEFAULT_CONFIG` disetel, 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_CONFIG`Ini 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'
]);
```