首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >亚马逊网络服务承担的角色与boto3的工作不符合预期

亚马逊网络服务承担的角色与boto3的工作不符合预期
EN

Stack Overflow用户
提问于 2019-09-20 10:54:37
回答 1查看 4.3K关注 0票数 0

我想使用aws SSM来执行ssm:DescribeInstanceInformation on ec2 instances (i-0691847a77),方法是假设一个IAM角色(iam_ssm_role),该角色定义了以下策略。

这两个IAM角色都在相同的aws帐户上&在iam_ssm_role中已将iam_base_role arn添加为受信任策略。

代码语言:javascript
复制
     {
        "Sid": "VisualEditor1",
        "Effect": "Allow",
        "Action": [
            "ssm:*",
            "ec2:DescribeImages",
            "cloudwatch:PutMetricData",
            "ec2:DescribeInstances",
            "lambda:InvokeFunction",
            "ec2:DescribeTags",
            "ec2:DescribeVpcs",
            "cloudwatch:GetMetricStatistics",
            "ec2:DescribeSubnets",
            "ec2:DescribeKeyPairs",
            "cloudwatch:ListMetrics",
            "ec2:DescribeSecurityGroups"
        ],
        "Resource": "*"
    }

我在一个具有IAM角色(iam_base_role)的ec2实例上运行以下代码

代码语言:javascript
复制
import boto3
from boto3.session import Session


def assume_role(arn, session_name):
    client = boto3.client('sts')
    response = client.assume_role(RoleArn=arn, RoleSessionName=session_name)
    session = Session(aws_access_key_id=response['Credentials']['AccessKeyId'],
                  aws_secret_access_key=response['Credentials']['SecretAccessKey'],
                  aws_session_token=response['Credentials']['SessionToken'])
    client = session.client('sts')
    account_id = client.get_caller_identity()["Account"]
    print(response['AssumedRoleUser']['AssumedRoleId'])
assume_role('arn:aws:iam::000001:role/iam_ssm_role', 'ssm_session')


client = boto3.client('ssm', region_name = 'us-east-1')
ssm_response = client.describe_instance_information(
    InstanceInformationFilterList=[
        {
            'key': 'InstanceIds',
            'valueSet': [
                'i-0f0099877fgg'
            ]
        }
    ]
)

print(ssm_response)

我收到拒绝访问错误,假定的角色显示为" iam_ssm_role“,但看起来SSM正在使用iam_base_role而不是iam_ssm_role运行

代码语言:javascript
复制
AROAV6BDS6PTVQBU:iam_ssm_role

botocore.exceptions.ClientError: An error occurred (AccessDeniedException) when calling the DescribeInstanceInformation operation: User: arn:aws:sts::000001:assumed-role/iam_base_role/i-0691847a77 is not authorized to perform: ssm:DescribeInstanceInformation on resource: arn:aws:ssm:us-east-1:000001:*
EN

回答 1

Stack Overflow用户

发布于 2019-09-20 12:19:17

好了,我发现了前面代码的问题,我没有在boto3.client SSM部分中使用假定的iam角色的凭据。

我现在可以成功地运行代码了,我正在使用下面的代码。

代码语言:javascript
复制
import boto3

boto_sts=boto3.client('sts')
stsresponse = boto_sts.assume_role(
    RoleArn="arn:aws:iam::000001:role/iam_ssm_role",
    RoleSessionName='newsession'
)

newsession_id = stsresponse["Credentials"]["AccessKeyId"]
newsession_key = stsresponse["Credentials"]["SecretAccessKey"]
newsession_token = stsresponse["Credentials"]["SessionToken"]


client = boto3.client('ssm', 
                      region_name = 'us-east-1',
                      aws_access_key_id=newsession_id,
                      aws_secret_access_key=newsession_key,
                      aws_session_token=newsession_token)

ssm_response = client.describe_instance_information(
    InstanceInformationFilterList=[
        {
            'key': 'InstanceIds',
            'valueSet': [
                'i-0f0099877fgg'
            ]
        }
    ]
)

print(ssm_response)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58021178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档