EC2实例中的访问密钥不存在

时间:2016-12-21 17:12:25

标签: amazon-web-services amazon-s3 ami aws-marketplace

我创建了一个名为" AMIRole"的新IAM角色。并且我已经附上了#AmazonS3FullAccess"对它的政策。现在我启动具有此IAM角色的EC2实例。

当我在SSH中进入实例时,我可以像这样访问AWS Access密钥和密钥:

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上。

2 个答案:

答案 0 :(得分:0)

  1. 您不应该在线发布访问密钥和密钥。
  2. 您不应该获取访问密钥并以此方式使用它。只需使用Boto3(或任何其他AWS开发工具包或AWS CLI),而无需指定任何访问/密钥,它将自动使用分配给其运行的EC2实例的IAM角色。

答案 1 :(得分:0)

有关这方面的一些事情:

  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. 使用像boto3这样的SDK在实例上运行代码时,您根本不需要提供凭据。如果找不到任何其他形式的凭据,boto3将使用IAM role's credentials from the metadata service

      

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

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

    < / LI>