0

我创建了一个名为“AMIRole”的新 IAM 角色,并为其附加了“AmazonS3FullAccess”策略。现在我用这个 IAM 角色启动一个 EC2 实例。

当我通过 SSH 连接到实例时,我可以像这样访问 AWS 访问密钥和秘密密钥:

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/AMIRole
{
  "Code" : "Success",
  "LastUpdated" : "2016-12-21T16:05:26Z",
  "Type" : "AWS-HMAC",
  "AccessKeyId" : "ABCDEFJK",
  "SecretAccessKey" : "SECRET",
  "Token" : "TOKEN",
  "Expiration" : "2016-12-21T22:38:16Z"
}

但是,当我尝试使用此角色创建存储桶时,我收到此 AWS KEY 不存在的错误消息。

>>> import boto3
>>> s3 = boto3.resource("s3", aws_access_key_id="ABCDEFJK", aws_secret_access_key="SECRET")
>>> s3.create_bucket(Bucket="something-specific-uuid")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/boto3/resources/factory.py", line 520, in do_action
    response = action(self, *args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/boto3/resources/action.py", line 83, in __call__
    response = getattr(parent.meta.client, operation_name)(**params)
  File "/usr/lib/python2.7/dist-packages/botocore/client.py", line 159, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/usr/lib/python2.7/dist-packages/botocore/client.py", line 494, in _make_api_call
    raise ClientError(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (InvalidAccessKeyId) when calling the CreateBucket operation: The AWS Access Key Id you provided does not exist in our records.

我的目标是创建一个具有轮换访问/密钥的 AMI,以便我可以将 AMI 放在 AWS Marketplace 上。

4

2 回答 2

1

关于这一点的几件事:

  1. 它是附加到实例的角色,授予它特定的资源策略和对不同事物的访问权限。AMI 在这方面无关紧要。如果您将 AMI 放到 AWS Marketplace,用户将无法访问您当前使用的相同角色。

  2. 元数据服务返回AccessKeyIdSecretAccessKeyToken。如果您尝试使用这些凭据,则必须指定所有这三个,因此您必须为boto3

    import boto3
    
    client = boto3.client(
        's3',
        aws_access_key_id=ACCESS_KEY,
        aws_secret_access_key=SECRET_KEY,
        aws_session_token=SESSION_TOKEN,
    )
    
  3. 使用 SDK 在实例上运行代码时boto3,您根本不需要提供凭据。如果找不到任何其他形式的凭证,boto3将使用来自元数据服务的 IAM 角色的凭证

    请注意,如果您已启动配置了 IAM 角色的 EC2 实例,则无需在 boto3 中设置显式配置即可使用这些凭证。如果 Boto3 在上面列出的任何其他位置都找不到凭证,它将自动使用 IAM 角色凭证。

    因此,对您而言,如果您使用 直接在实例上运行代码boto3,您可以只创建 ,boto3.resource而无需指定访问密钥或机密。

于 2016-12-21T17:26:18.307 回答
0
  1. 您不应该在线发布访问密钥和密钥。
  2. 您不应该获取访问密钥并以这种方式使用它。只需使用 Boto3(或任何其他 AWS 开发工具包或 AWS CLI)而不指定任何访问/密钥,它就会自动使用分配给运行它的 EC2 实例的 IAM 角色。
于 2016-12-21T17:25:20.843 回答