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. メタデータ サービスは、、、AccessKeyIdおよびSecretAccessKeyを返しますToken。これらの資格情報を使用しようとしている場合は、これら 3 つすべてを指定する必要があるため、次のように指定する必要があります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、認証情報を提供する必要はまったくありません。他の形式の認証情報が見つからない場合は、メタデータ サービスからの IAM ロールの認証情報boto3を使用します。

    IAM ロールが設定された EC2 インスタンスを起動した場合、これらの認証情報を使用するために boto3 で設定する必要がある明示的な設定はありません。Boto3 は、上記の他の場所で認証情報が見つからない場合、自動的に IAM ロールの認証情報を使用します。

    したがって、 を使用してインスタンスでコードを直接実行している場合は、アクセス キーやシークレットを指定する必要なく、 をboto3作成するだけで済みます。boto3.resource

于 2016-12-21T17:26:18.307 に答える
0
  1. アクセス キーとシークレット キーをオンラインで投稿するべきではありません。
  2. アクセスキーを取得して、そのように使用するべきではありません。アクセス/シークレット キーを指定せずに Boto3 (または他の AWS SDK、または AWS CLI) を使用するだけで、実行中の EC2 インスタンスに割り当てられた IAM ロールが自動的に使用されます。
于 2016-12-21T17:25:20.843 に答える