擔任IAM角色 - AWS SDK for PHP

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

擔任IAM角色

使用 Amazon EC2執行個體變數登入資料IAM的角色

如果您在 Amazon EC2執行個體上執行應用程式,提供憑證以呼叫 的首選方法是 AWS 使用 IAM角色來取得臨時安全憑證。

使用IAM角色時,您不需要擔心應用程式的憑證管理。它們允許執行個體從 Amazon EC2執行個體的中繼資料伺服器擷取臨時憑證,以「假設」角色。

臨時憑證通常稱為執行個體設定檔憑證 ,允許存取角色政策允許的動作和資源。Amazon 會EC2處理安全驗證執行個體至 IAM 服務以擔任角色的所有任務,並定期重新整理擷取的角色憑證。這讓您幾乎無需執行任何工作,即可確保應用程式安全。如需接受臨時安全憑證的服務清單,請參閱 IAM 使用者指南 中的AWS 使用 的服務IAM

注意

為避免每次都必須連接中繼資料服務,您可將 Aws\CacheInterface 執行個體做為 'credentials' 選項傳遞至用戶端建構函式。這可讓 改為SDK使用快取的執行個體設定檔憑證。如需詳細資訊,請參閱 第 3 版的 AWS SDK for PHP 組態

如需使用 開發 Amazon EC2 應用程式的詳細資訊SDKs,請參閱 AWS SDKs和 工具參考指南 中的使用 Amazon EC2執行個體IAM的角色

建立IAM角色並將其指派給 Amazon EC2執行個體

  1. 建立 IAM 用戶端。

    匯入

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

    範例程式碼

    $client = new IamClient([ 'region' => 'us-west-2', 'version' => '2010-05-08' ]);
  2. 建立具有您將使用之動作和資源許可IAM的角色。

    範例程式碼

    $result = $client->createRole([ 'AssumeRolePolicyDocument' => 'IAM JSON Policy', // REQUIRED 'Description' => 'Description of Role', 'RoleName' => 'RoleName', // REQUIRED ]);
  3. 建立IAM執行個體設定檔,並從結果中存放 Amazon Resource Name (ARN)。

    注意

    如果您使用 IAM 主控台而非 AWS SDK for PHP,則主控台會自動建立執行個體設定檔,並為其提供與其對應之角色相同的名稱。

    範例程式碼

    $IPN = 'InstanceProfileName'; $result = $client->createInstanceProfile([ 'InstanceProfileName' => $IPN , ]); $ARN = $result['Arn']; $InstanceID = $result['InstanceProfileId'];
  4. 建立 Amazon EC2用戶端。

    匯入

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

    範例程式碼

    $ec2Client = new Ec2Client([ 'region' => 'us-west-2', 'version' => '2016-11-15', ]);
  5. 將執行個體設定檔新增至執行中或已停止的 Amazon EC2執行個體。使用IAM角色的執行個體設定檔名稱。

    範例程式碼

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

如需詳細資訊,請參閱 IAMAmazon 使用者指南 中的 Amazon 角色EC2 EC2

針對 Amazon ECS任務使用IAM角色

Amazon Elastic Container Service (Amazon ECS) 中的任務可以擔任撥打電話IAM AWS API的角色。這是管理應用程式憑證的策略,類似於 Amazon EC2執行個體設定檔如何提供憑證給 Amazon EC2執行個體。

您可以將使用臨時 AWS 憑證IAM的角色與ECS任務定義或RunTaskAPI操作建立關聯,而不是建立和分發長期憑證至容器或使用 Amazon EC2執行個體的角色。

如需使用容器任務可擔任IAM角色的詳細資訊,請參閱 Amazon ECS開發人員指南 中的任務IAM角色主題。如需在任務定義taskRoleArn中以 形式使用任務IAM角色的範例,請參閱 Amazon 開發人員指南 中的任務定義範例 ECS

在另一個 中假設IAM角色 AWS 帳戶

當您在 AWS 帳戶 (帳戶 A) 中工作,並想要在另一個帳戶 (帳戶 B) 中擔任角色時,您必須先在帳戶 B 中建立IAM角色。此角色允許帳戶 (帳戶 A) 中的實體在帳戶 B 中執行特定動作。如需跨帳戶存取的詳細資訊,請參閱教學課程: AWS 使用IAM角色委派帳戶間的存取

在帳戶 B 中建立角色後,請記錄角色 ARN。當您從帳戶 A 擔任角色ARN時,您將使用此角色。您使用帳戶 A 中與實體相關聯的 AWS 憑證擔任角色。

使用 的憑證建立 AWS STS 用戶端 AWS 帳戶。在下文中我們使用登入資料設定檔,但您可以使用任何方法。使用新建立 AWS STS 的用戶端,呼叫 assume-role 並提供自訂 sessionName。擷取結果中的新臨時登入資料。依預設,憑證會持續一小時。

範例程式碼

$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'] ] ]);

如需詳細資訊,請參閱 參考AssumeRole中的使用IAM角色 或 AWS SDK for PHP API。

使用具有 Web 身分IAM的角色

Web Identity Federation 可讓客戶在存取 AWS 資源時使用第三方身分提供者進行身分驗證。您必須先建立角色並設定 Web 身分提供者 (IdP ),才能擔任具有 Web 身分IAM的角色。如需詳細資訊,請參閱建立 Web 身分的角色或 OpenID Connect 聯合身分 (主控台)

建立身分提供者為您的 Web 身分 建立角色後,請使用 AWS STS 用戶端來驗證使用者。 ProviderId 為您的身分提供 webIdentityToken 和 ,以及具有使用者許可ARNIAM的角色角色。

範例程式碼

$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'] ] ]);

如需詳細資訊,請參閱AssumeRoleWithWebIdentity:透過 Web 型身分提供者或 參考中的聯邦AssumeRoleWithWebIdentity AWS SDK for PHP API

使用設定檔擔任角色

在 中定義設定檔 ~/.aws/credentials

您可以透過在 中定義設定檔, AWS SDK for PHP 將 設定為使用IAM角色~/.aws/credentials

使用您要擔任的角色role_arn的設定建立新的設定檔。也包含具有擔任IAM角色許可之憑證的另一個設定檔source_profile設定。如需這些組態設定的詳細資訊,請參閱 AWS SDKs和 工具參考指南 中的假設角色憑證

例如,在下列 中~/.aws/credentialsproject1設定檔會設定 ,role_arn並將default設定檔指定為憑證的來源,以確認與其相關聯的實體可以擔任 角色。

[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

如果您設定AWS_PROFILE環境變數,或您在實例化服務用戶端時使用 profile 參數,project1則會使用default設定檔作為來源憑證,擔任 中指定的角色。

下列程式碼片段顯示 profile 參數在S3Client建構器中的使用。S3Client 將具有與project1設定檔相關聯的角色相關聯的許可。

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

在 中定義設定檔 ~/.aws/config

~/.aws/config 檔案也可以包含您要擔任的設定檔。如果您設定環境變數 AWS_SDK_LOAD_NONDEFAULT_CONFIG, SDK for 從 config 檔案PHP載入設定檔。設定 AWS_SDK_LOAD_NONDEFAULT_CONFIG 時, 會從 ~/.aws/config和 SDK載入設定檔~/.aws/credentials。來自 的設定檔~/.aws/credentials是最後載入的,優先於~/.aws/config具有相同名稱的 設定檔。來自任一位置的設定檔都能做為 source_profile 或要擔任的設定檔。

下列範例使用config檔案中定義的project1設定檔和credentials檔案中的default設定檔。AWS_SDK_LOAD_NONDEFAULT_CONFIG 也會設定 。

# 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

S3Client建構器執行顯示下列程式碼片段時,project1設定檔中定義的角色將使用與default設定檔相關聯的憑證來擔任。

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