私は2つのAWSアカウントを持っています-AとBを言うことができます.
アカウントBには、アカウントAから別のロールへのアクセスを許可するロールが定義されています。これをRole-Bと呼びましょう
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::********:role/RoleA"
},
"Action": "sts:AssumeRole"
}]
}
アカウントAで、rootユーザーが役割を引き受けることを許可する役割を定義しました。 Role-Aと呼びましょう
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::********:root"
},
"Action": "sts:AssumeRole"
}]
}
ロールAには、次のポリシーが添付されています
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::****:role/RoleB",
"Effect": "Allow"
}]
}
アカウントAのユーザーとして、ロールAを引き受けました。この一時的な認証情報を使用して、ロールBを引き受け、アカウントBが所有するリソースにアクセスします。以下のコードがあります。
client = boto3.client('sts')
firewall_role_object = client.assume_role(
RoleArn=INTERMEDIARY_IAM_ROLE_ARN,
RoleSessionName=str("default"),
DurationSeconds=3600)
firewall_credentials = firewall_role_object['Credentials']
firewall_client = boto3.client(
'sts',
aws_access_key_id=firewall_credentials['AccessKeyId'],
aws_secret_access_key=firewall_credentials['SecretAccessKey'],
aws_session_token=firewall_credentials['SessionToken'], )
optimizely_role_object = firewall_client.assume_role(
RoleArn=CUSTOMER_IAM_ROLE_ARN,
RoleSessionName=str("default"),
DurationSeconds=3600)
print(optimizely_role_object['Credentials'])
このコードは、クライアントから取得した一連のロールでは機能しますが、アクセスできる2つのAWSアカウント間で定義したロールでは機能しません。
ようやくこれが機能しました。上記の構成は正しいです。ポリシーにスペルミスがありました。
この質問は、ロールを使用してダブルホップ認証を実現したい人に役立つ可能性があるため、ここで続けます。