この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Amazon AppStream 2.0が
- Image Builder(イメージの作成に使用する仮想マシン)
- フリートリソース(ストリーミングインスタンス)
でIAMロールを使用出来るようになりました。
IAM ロールを使用すると、永続的な認証情報を配布せずに、一時的な認証情報でAWSリソースを操作出来ます。
この機能により、イメージ作成時にプライベートなS3バケットからアーカイブをダウンロードしたり、AWS CLI の実行環境を AppStream 2.0 で提供するといったことを、よりセキュアに行えるようになります。
IAM ロールの使用方法
IAM ロールの作成
appstream.amazonaws.com
が AssumeRole できる IAM ロールを作成します。
Trust relationships を次のように定義します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"appstream.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
Image Builderで使用
新規イメージローンチ時に、「Step 2: Configure Image Builder」の「IAM role(Advanced)」で作成した IAM ロールを設定します。
フリートで使用
フリート作成時に、「Step 3: Configure Fleet」の「IAM role(Advanced)」で作成した IAM ロールを設定します。
IAM ロールを使用した API の操作方法
IAM ロールを割り当てると、CLI/SDK の設定ファイルにプロフィール appstream_machine_role
が定義されます。
C:>type C:\Users\PhotonUser\.aws\config
[profile appstream_machine_role]
credential_process = "C:\Program Files\Amazon\Photon\PhotonRoleCredentialProvider\PhotonRoleCredentialProvider.exe" --role=Machine
credential_process を利用して、クレデンシャルを取得していますね。
API 実行時に、このプロフィールを指定すれば OK です。
AWS CLI から操作
C:\> aws s3 ls --profile appstream_machine_role
AWS Tools for PowerShell から操作
PS C:\> Get-EC2Instance -Region us-east-1 -ProfileName appstream_machine_role
Python SDK から操作
session = boto3.Session(profile_name='appstream_machine_role')
CloudTrail ログ
ストリーミングインスタンス内の AWS CLI から S3 の list-buckets API を実行したときの CloudTrail ログが以下です。
{
"eventVersion": "1.05",
"userIdentity": {
"type": "AssumedRole",
"principalId": "XXX:PhotonSession",
"arn": "arn:aws:sts::123456789012:assumed-role/AmazonAppStreamServiceAccess/PhotonSession",
"accountId": "123456789012",
"accessKeyId": "DUMMY",
"sessionContext": {
"attributes": {
"mfaAuthenticated": "false",
"creationDate": "2019-09-25T17:08:03Z"
},
"sessionIssuer": {
"type": "Role",
"principalId": "XXX",
"arn": "arn:aws:iam::123456789012:role/service-role/AmazonAppStreamServiceAccess",
"accountId": "123456789012",
"userName": "AmazonAppStreamServiceAccess"
}
},
"invokedBy": "AWS Internal"
},
"eventTime": "2019-09-25T17:08:03Z",
"eventSource": "s3.amazonaws.com",
"eventName": "ListBuckets",
"awsRegion": "eu-central-1",
"sourceIPAddress": "172.18.165.74",
"userAgent": "[aws-internal/3 aws-sdk-java/1.11.631 Linux/4.9.184-0.1.ac.235.83.329.metal1.x86_64 OpenJDK_64-Bit_Server_VM/25.222-b10 java/1.8.0_222 vendor/Oracle_Corporation]",
"requestParameters": {
"host": [
"s3-eu-central-1.amazonaws.com"
]
},
"responseElements": null,
"additionalEventData": {
"SignatureVersion": "SigV4",
"CipherSuite": "ECDHE-RSA-AES128-SHA",
"AuthenticationMethod": "AuthHeader",
"vpcEndpointId": "vpce-1234"
},
"requestID": "201681E4CE37A63C",
"eventID": "f67ab1d4-4fdf-40ca-9584-ad60e6568d17",
"eventType": "AwsApiCall",
"recipientAccountId": "123456789012",
"vpcEndpointId": "vpce-1234"
}
参考
- (2019/09/09発表)Amazon AppStream 2.0 において Image Builder とフリートに対する AWS Identity and Access Management ロールのサポートが有効に
- Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances - Amazon AppStream 2.0
- AWS Developer Forums: Associate Role with Appstream EC2?