要实现Amazon MQ跨账户访问,可以按照以下步骤进行设置:
在Amazon MQ的源账户中创建一个IAM角色,授予该角色足够的权限来访问Amazon MQ资源。
在目标账户中创建一个IAM角色,用于允许跨账户访问Amazon MQ资源。在该角色的信任关系中,将源账户的AWS账户ID添加为受信任的实体。
在目标账户中创建一个Amazon MQ代理,该代理将充当源账户和目标账户之间的中介。代理配置中的VPC和子网应与Amazon MQ实例所在的VPC和子网相匹配。
在代理的安全组中,添加源账户的Amazon MQ实例所在的安全组作为入站规则。
在源账户中,创建一个AWS Lambda函数,用于处理跨账户访问请求。函数代码示例如下:
import boto3
import json
def lambda_handler(event, context):
# 从事件中获取所需的参数
source_account_id = event['sourceAccount']
source_region = event['region']
target_account_id = event['targetAccount']
target_region = event['targetRegion']
# 创建Amazon MQ客户端
mq_client = boto3.client('mq', region_name=source_region)
# 获取Amazon MQ实例的ARN
response = mq_client.describe_broker(
BrokerId='your-broker-id'
)
broker_arn = response['BrokerArn']
# 创建Amazon MQ目标账户的临时凭证
sts_client = boto3.client('sts')
assumed_role = sts_client.assume_role(
RoleArn=f'arn:aws:iam::{target_account_id}:role/YourRoleName',
RoleSessionName='CrossAccountAccess'
)
target_credentials = assumed_role['Credentials']
# 使用目标账户的临时凭证连接到Amazon MQ
target_mq_client = boto3.client('mq',
region_name=target_region,
aws_access_key_id=target_credentials['AccessKeyId'],
aws_secret_access_key=target_credentials['SecretAccessKey'],
aws_session_token=target_credentials['SessionToken'])
# 在目标账户中创建代理
target_mq_client.create_broker(
AutoMinorVersionUpgrade=False,
BrokerName='YourBrokerName',
Configuration=broker_arn,
DeploymentMode='SINGLE_INSTANCE',
EngineType='ActiveMQ',
EngineVersion='5.15.13',
HostInstanceType='mq.t2.micro',
PubliclyAccessible=False,
SecurityGroups=['YourSecurityGroup'],
SubnetIds=['YourSubnetId'],
Tags=[
{
'Key': 'Name',
'Value': 'YourBrokerName'
},
],
Users=[]
)
return {
'statusCode': 200,
'body': json.dumps('Cross-account access enabled successfully!')
}
这个Lambda函数将使用源账户的凭证连接到Amazon MQ,并使用目标账户的临时凭证创建一个代理。
在源账户中,创建一个Amazon CloudWatch事件规则,以触发Lambda函数。事件规则的目标应设置为Lambda函数。
在源账户中,使用AWS CLI或AWS SDK触发Lambda函数。可以通过向Lambda函数传递源账户ID、源区域、目标账户ID和目标区域等参数来实现。
以上步骤将设置Amazon MQ跨账户访问,并创建一个代理来中介源账户和目标账户之间的通信。